| | |
| | | package com.ruoyi.inspectiontask.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.inspectiontask.mapper.InspectionTaskItemMapper; |
| | | import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper; |
| | | import com.ruoyi.inspectiontask.mapper.TimingTaskItemMapper; |
| | | import com.ruoyi.inspectiontask.pojo.InspectionTask; |
| | | import com.ruoyi.inspectiontask.pojo.InspectionTaskItem; |
| | | import com.ruoyi.inspectiontask.pojo.TimingTask; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.quartz.*; |
| | | import com.ruoyi.inspectiontask.pojo.TimingTaskItem; |
| | | import org.quartz.DisallowConcurrentExecution; |
| | | import org.quartz.Job; |
| | | import org.quartz.JobDataMap; |
| | | import org.quartz.JobExecutionContext; |
| | | import org.quartz.JobExecutionException; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.jdbc.core.BeanPropertyRowMapper; |
| | | import org.springframework.jdbc.core.JdbcTemplate; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | |
| | | @Component |
| | | @DisallowConcurrentExecution // 禁止并发执行同一个Job |
| | | @RequiredArgsConstructor |
| | | public class TimingTaskJob implements Job, Serializable { |
| | | private static final long serialVersionUID = 1L; // 必须定义序列化ID |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private final InspectionTaskMapper inspectionTaskMapper; |
| | | private final JdbcTemplate jdbcTemplate; |
| | | @Autowired |
| | | private InspectionTaskMapper inspectionTaskMapper; |
| | | @Autowired |
| | | private TimingTaskItemMapper timingTaskItemMapper; |
| | | @Autowired |
| | | private InspectionTaskItemMapper inspectionTaskItemMapper; |
| | | @Autowired |
| | | private JdbcTemplate jdbcTemplate; |
| | | |
| | | @Override |
| | | public void execute(JobExecutionContext context) throws JobExecutionException { |
| | |
| | | try { |
| | | // 3. 尝试查询你的业务数据 |
| | | // 通过JDBC模板查询定时任务信息,使用参数化查询防止SQL注入 |
| | | String yourSql = "SELECT * FROM timing_task where id = ?"; |
| | | String yourSql = "SELECT * FROM timing_task WHERE id = ?"; |
| | | List<TimingTask> tasks = jdbcTemplate.query( |
| | | yourSql, |
| | | new BeanPropertyRowMapper<>(TimingTask.class), |
| | |
| | | if (timingTask == null) { |
| | | throw new JobExecutionException("找不到定时任务: " + taskId); |
| | | } |
| | | |
| | | if (timingTask.getIsEnabled() != null && timingTask.getIsEnabled() == 0) { |
| | | return; |
| | | } |
| | | |
| | | // if (!timingTask.isActive()) { |
| | | // throw new JobExecutionException("定时任务已禁用: " + taskId); |
| | | // } |
| | |
| | | // 2. 创建并保存巡检任务记录 - 这就是您提供的代码应该放的位置 |
| | | InspectionTask inspectionTask = createInspectionTask(timingTask); |
| | | inspectionTaskMapper.insert(inspectionTask); |
| | | copyTaskItemsToRecord(timingTask.getId(), inspectionTask.getId()); |
| | | |
| | | // 3. 更新定时任务的执行时间 |
| | | if (!tasks.isEmpty()) { |
| | |
| | | ); |
| | | |
| | | // 执行更新操作 |
| | | String updateSql = "UPDATE timing_task " + |
| | | "SET last_execution_time = ?, next_execution_time = ? " + |
| | | "WHERE id = ?"; |
| | | String updateSql = "UPDATE timing_task " |
| | | + "SET last_execution_time = ?, next_execution_time = ? " |
| | | + "WHERE id = ?"; |
| | | |
| | | jdbcTemplate.update( |
| | | updateSql, |
| | |
| | | inspectionTask.setTaskId(timingTask.getTaskId()); |
| | | inspectionTask.setInspectorId(timingTask.getInspectorIds()); |
| | | inspectionTask.setInspectionLocation(timingTask.getInspectionLocation()); |
| | | inspectionTask.setRemarks("自动生成自定时任务ID: " + timingTask.getId()); |
| | | String remarks = "自动生成自定时任务ID: " + timingTask.getId(); |
| | | if (StringUtils.isNotBlank(timingTask.getRemarks())) { |
| | | remarks = remarks + ";" + timingTask.getRemarks(); |
| | | } |
| | | inspectionTask.setRemarks(remarks); |
| | | inspectionTask.setRegistrantId(timingTask.getRegistrantId()); |
| | | inspectionTask.setFrequencyType(timingTask.getFrequencyType()); |
| | | inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail()); |
| | | inspectionTask.setTenantId(timingTask.getTenantId()); |
| | | |
| | | return inspectionTask; |
| | | } |
| | | |
| | | private void copyTaskItemsToRecord(Long timingTaskId, Long inspectionTaskId) { |
| | | List<TimingTaskItem> taskItems = timingTaskItemMapper.selectList( |
| | | new LambdaQueryWrapper<TimingTaskItem>() |
| | | .eq(TimingTaskItem::getTimingTaskId, timingTaskId) |
| | | .orderByAsc(TimingTaskItem::getSortNum)); |
| | | for (TimingTaskItem source : taskItems) { |
| | | InspectionTaskItem recordItem = new InspectionTaskItem(); |
| | | recordItem.setInspectionTaskId(inspectionTaskId); |
| | | recordItem.setInspectionItemId(source.getInspectionItemId()); |
| | | recordItem.setItemProject(source.getItemProject()); |
| | | recordItem.setItemContent(source.getItemContent()); |
| | | recordItem.setItemStatus(0); |
| | | recordItem.setSortNum(source.getSortNum()); |
| | | recordItem.setTenantId(source.getTenantId()); |
| | | recordItem.setDeptId(source.getDeptId()); |
| | | inspectionTaskItemMapper.insert(recordItem); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | for (String dayStr : dayStrs) { |
| | | switch (dayStr) { |
| | | case "MON": days.add(DayOfWeek.MONDAY); break; |
| | | case "TUE": days.add(DayOfWeek.TUESDAY); break; |
| | | case "WED": days.add(DayOfWeek.WEDNESDAY); break; |
| | | case "THU": days.add(DayOfWeek.THURSDAY); break; |
| | | case "FRI": days.add(DayOfWeek.FRIDAY); break; |
| | | case "SAT": days.add(DayOfWeek.SATURDAY); break; |
| | | case "SUN": days.add(DayOfWeek.SUNDAY); break; |
| | | case "MON": |
| | | days.add(DayOfWeek.MONDAY); |
| | | break; |
| | | case "TUE": |
| | | days.add(DayOfWeek.TUESDAY); |
| | | break; |
| | | case "WED": |
| | | days.add(DayOfWeek.WEDNESDAY); |
| | | break; |
| | | case "THU": |
| | | days.add(DayOfWeek.THURSDAY); |
| | | break; |
| | | case "FRI": |
| | | days.add(DayOfWeek.FRIDAY); |
| | | break; |
| | | case "SAT": |
| | | days.add(DayOfWeek.SATURDAY); |
| | | break; |
| | | case "SUN": |
| | | days.add(DayOfWeek.SUNDAY); |
| | | break; |
| | | default: throw new IllegalArgumentException("无效的星期几: " + dayStr); |
| | | } |
| | | } |