2 天以前 4f55d3cb4bc644e4534106336f2047af1a4db5df
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -1,26 +1,26 @@
package com.ruoyi.inspectiontask.service.impl;
import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
import com.ruoyi.inspectiontask.mapper.TimingTaskMapper;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import com.ruoyi.inspectiontask.pojo.TimingTask;
import com.ruoyi.inspectiontask.service.TimingTaskService;
import com.ruoyi.common.utils.StringUtils;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.io.Serializable;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Component
@DisallowConcurrentExecution // 禁止并发执行同一个Job
@@ -28,14 +28,7 @@
    private static final long serialVersionUID = 1L; // 必须定义序列化ID
    @Autowired
    private TimingTaskMapper timingTaskMapper;
    @Autowired
    private TimingTaskService timingTaskService;
    @Autowired
    private InspectionTaskMapper inspectionTaskMapper;
    @Autowired
    private JdbcTemplate jdbcTemplate;
@@ -58,14 +51,20 @@
            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);
            // 2. 解析设备ID列表,为每个设备创建巡检任务记录
            List<Integer> deviceIds = resolveDeviceIds(timingTask);
            for (Integer deviceId : deviceIds) {
                InspectionTask inspectionTask = createInspectionTask(timingTask, deviceId);
                inspectionTaskMapper.insert(inspectionTask);
            }
            // 3. 更新定时任务的执行时间
            if (!tasks.isEmpty()) {
@@ -104,20 +103,42 @@
        }
    }
    // 这就是您提供的代码封装成的方法
    private InspectionTask createInspectionTask(TimingTask timingTask) {
    private List<Integer> resolveDeviceIds(TimingTask timingTask) throws JobExecutionException {
        if (StringUtils.isNotBlank(timingTask.getTaskIdsStr())) {
            return Arrays.stream(timingTask.getTaskIdsStr().split(","))
                    .map(String::trim)
                    .filter(StringUtils::isNotBlank)
                    .map(Integer::parseInt)
                    .collect(Collectors.toList());
        }
        if (timingTask.getTaskId() != null) {
            List<Integer> list = new ArrayList<>();
            list.add(timingTask.getTaskId());
            return list;
        }
        throw new JobExecutionException("定时任务 " + timingTask.getId() + " 未配置设备ID");
    }
    private InspectionTask createInspectionTask(TimingTask timingTask, Integer deviceId) {
        InspectionTask inspectionTask = new InspectionTask();
        // 复制基本属性
        inspectionTask.setTaskName(timingTask.getTaskName());
        inspectionTask.setTaskId(timingTask.getTaskId());
        inspectionTask.setInspectionProject(timingTask.getInspectionProject());
        inspectionTask.setTaskId(deviceId);
        inspectionTask.setInspectorId(timingTask.getInspectorIds());
        inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
        inspectionTask.setRemarks("自动生成自定时任务ID: " + timingTask.getId());
        inspectionTask.setAreaId(timingTask.getAreaId());
        inspectionTask.setTimingId(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());
        inspectionTask.setInspectionStatus(1);
        return inspectionTask;
    }