gongchunyi
4 天以前 b7080587bc00e5451aa8435f093f0d8cc6f80320
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -1,10 +1,19 @@
package com.ruoyi.inspectiontask.service.impl;
import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import com.ruoyi.inspectiontask.pojo.TimingTask;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.utils.StringUtils;
import org.quartz.*;
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 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;
@@ -22,10 +31,14 @@
@Component
@DisallowConcurrentExecution // 禁止并发执行同一个Job
public class TimingTaskJob implements Job, Serializable {
    private static final long serialVersionUID = 1L; // 必须定义序列化ID
    private static final long serialVersionUID = 1L;
    @Autowired
    private InspectionTaskMapper inspectionTaskMapper;
    @Autowired
    private TimingTaskItemMapper timingTaskItemMapper;
    @Autowired
    private InspectionTaskItemMapper inspectionTaskItemMapper;
    @Autowired
    private JdbcTemplate jdbcTemplate;
@@ -38,7 +51,7 @@
        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),
@@ -59,6 +72,7 @@
            // 2. 创建并保存巡检任务记录 - 这就是您提供的代码应该放的位置
            InspectionTask inspectionTask = createInspectionTask(timingTask);
            inspectionTaskMapper.insert(inspectionTask);
            copyTaskItemsToRecord(timingTask.getId(), inspectionTask.getId());
            // 3. 更新定时任务的执行时间
            if (!tasks.isEmpty()) {
@@ -75,9 +89,9 @@
                );
                // 执行更新操作
                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,
@@ -103,7 +117,6 @@
        // 复制基本属性
        inspectionTask.setTaskName(timingTask.getTaskName());
        inspectionTask.setInspectionProject(timingTask.getInspectionProject());
        inspectionTask.setTaskId(timingTask.getTaskId());
        inspectionTask.setInspectorId(timingTask.getInspectorIds());
        inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
@@ -118,6 +131,25 @@
        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);
        }
    }
@@ -243,13 +275,27 @@
        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);
            }
        }