Lius
5 天以前 d59198dda60c6009b801930acd67faad89d128d9
三保工单定时任务
已添加2个文件
已修改16个文件
539 ■■■■ 文件已修改
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/ThirdMaintenanceStatusEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderLockedJob.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamThirdMaintenanceRequest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamThirdMaintenanceOrderService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceOrderServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/MaintenanceStatusEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package org.jeecg.modules.eam.constant;
public enum MaintenanceStatusEnum {
    QUALIFIED, //合格
    RESTRICTED, //限用
    PROHIBITED, //禁用
    ;
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/ThirdMaintenanceStatusEnum.java
@@ -18,6 +18,7 @@
    CHANGE, // å˜æ›´ä¸­
    CANCEL,// å·²å–消
    ABOLISH, //已作废
    EXPIRED, //已过期
    ;
    public static ThirdMaintenanceStatusEnum getInstance(String code) {
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java
@@ -1,7 +1,5 @@
package org.jeecg.modules.eam.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@@ -111,4 +109,15 @@
    @Excel(name = "第二次检验异常", width = 15)
    @ApiModelProperty(value = "第二次检验异常")
    private String secondInspectException;
    public EamThirdMaintenanceOrderDetail() {
    }
    public EamThirdMaintenanceOrderDetail(EamMaintenanceStandardDetail detail) {
        this.itemCode = detail.getItemCode();
        this.itemPart = detail.getItemPart();
        this.itemName = detail.getItemName();
        this.itemDemand = detail.getItemDemand();
    }
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
@@ -1,6 +1,7 @@
package org.jeecg.modules.eam.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
@@ -53,4 +54,10 @@
     */
    List<EamEquipment> selectTechnicalEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper);
    /**
     * èŽ·å–å¯ç”Ÿæˆä¸‰ä¿å·¥å•çš„è®¾å¤‡åˆ—è¡¨
     * @return
     */
    List<EamEquipment> selectThreeMaintenanceEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper);
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
@@ -53,8 +53,25 @@
               ext.technology_check_period,
               ext.latest_technology_check,
               ext.next_technology_check,
               ext.technology_genarate_flag,
               ext.third_maintenance_genarate_flag
               ext.technology_generate_flag,
               ext.third_maintenance_generate_flag
        from eam_equipment e
        left join eam_equipment_extend ext
        on e.id = ext.id
        ${ew.customSqlSegment}
    </select>
    <select id="selectThreeMaintenanceEquipmentList" resultType="org.jeecg.modules.eam.entity.EamEquipment">
        select e.*,
               ext.latest_third_maintenance,
               ext.next_third_maintenance,
               ext.technology_status,
               ext.third_maintenance_period,
               ext.technology_check_period,
               ext.latest_technology_check,
               ext.next_technology_check,
               ext.technology_generate_flag,
               ext.third_maintenance_generate_flag
        from eam_equipment e
        left join eam_equipment_extend ext
        on e.id = ext.id
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
@@ -37,4 +37,14 @@
     * @return
     */
    boolean updateTechnologyParam(String equipmentId, String status, Date evaluationDate, String technologyGenerateFlag);
    /**
     * æ›´æ–°è®¾å¤‡ä¸‰ä¿åŠä¿å…»æ—¥æœŸ
     * @param equipmentId è®¾å¤‡ID
     * @param status ä¿å…»çŠ¶æ€
     * @param evaluationDate ä¸‰ä¿æ—¥æœŸ
     * @param thirdMaintenanceGenerateFlag ä¸‰ä¿å·¥å•生成标识
     * @return
     */
    boolean updateThirdMaintenanceParam(String equipmentId, String status, Date evaluationDate, String thirdMaintenanceGenerateFlag);
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
@@ -77,4 +77,9 @@
     * èŽ·å–å¯ç”ŸæˆæŠ€æœ¯é‰´å®šå·¥å•çš„è®¾å¤‡åˆ—è¡¨
     */
    List<EamEquipment> selectTechnicalEquipmentList();
    /**
     * èŽ·å–å¯ç”Ÿæˆä¸‰ä¿å·¥å•çš„è®¾å¤‡åˆ—è¡¨
     */
    List<EamEquipment> selectThreeMaintenanceEquipmentList();
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
@@ -74,4 +74,28 @@
        }
        return this.getBaseMapper().updateById(entity) > 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateThirdMaintenanceParam(String equipmentId, String status, Date evaluationDate, String thirdMaintenanceGenerateFlag) {
        if (StringUtils.isBlank(status) && StringUtils.isBlank(thirdMaintenanceGenerateFlag) && evaluationDate == null) {
            return false;
        }
        EamEquipmentExtend entity = this.getBaseMapper().selectById(equipmentId);
        UpdateWrapper<EamEquipmentExtend> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", equipmentId);
        if (StringUtils.isNotBlank(status)) {
            entity.setMaintenanceStatus(status);
        }
        if (StringUtils.isNotBlank(thirdMaintenanceGenerateFlag)) {
            entity.setThirdMaintenanceGenerateFlag(thirdMaintenanceGenerateFlag);
        }
        if (evaluationDate != null) {
            entity.setLatestThirdMaintenance(evaluationDate);
            if (entity.getThirdMaintenancePeriod() != null) {
                entity.setNextThirdMaintenance(DateUtils.addYear(entity.getLatestThirdMaintenance(), entity.getThirdMaintenancePeriod()));
            }
        }
        return this.getBaseMapper().updateById(entity) > 0;
    }
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -417,6 +417,16 @@
        return this.getBaseMapper().selectTechnicalEquipmentList(queryWrapper);
    }
    @Override
    public List<EamEquipment> selectThreeMaintenanceEquipmentList() {
        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0);
        queryWrapper.ne("ext.maintenance_status", MaintenanceStatusEnum.PROHIBITED.name());
        queryWrapper.isNotNull("ext.third_maintenance_period");
        queryWrapper.isNotNull("ext.next_third_maintenance");
        return this.getBaseMapper().selectThreeMaintenanceEquipmentList(queryWrapper);
    }
    /**
     * èŽ·å–æ‰€æœ‰çš„äº§çº¿id(包含所有上级)
     */
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java
@@ -106,11 +106,11 @@
        //获取设备列表
        List<EamEquipment> equipmentList = equipmentService.selectTechnicalEquipmentList();
        if (CollectionUtil.isEmpty(equipmentList)) {
            log.warn("没有需要生成技术状态鉴定工单得设备!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            log.warn("没有需要生成技术状态鉴定工单的设备!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("没有需要生成技术状态鉴定工单得设备,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setExceptionDetail("没有需要生成技术状态鉴定工单的设备,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderExpiredJob.java
@@ -2,17 +2,12 @@
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.constant.ThirdMaintenanceStatusEnum;
import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum;
import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder;
import org.jeecg.modules.eam.entity.EamEquipmentExtend;
import org.jeecg.modules.eam.entity.EamThirdMaintenanceOrder;
import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
import org.jeecg.modules.eam.service.IEamThirdMaintenanceOrderService;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.common.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
@@ -24,25 +19,26 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
 * @Author: Lius
 * @CreateTime: 2025-07-29
 * @Description: ä¸‰ä¿å·¥å•过期
 */
@Component
@Slf4j
public class ThirdMaintenanceOrderExpiredJob implements Job {
    @Autowired
    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
    @Autowired
    private IFlowMyBusinessService flowMyBusinessService;
    @Autowired
    private IFlowTaskService flowTaskService;
    @Autowired
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
    @Autowired
    private IEamEquipmentExtendService equipmentExtendService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -55,41 +51,32 @@
            quartzLog.setJobId(byJobClassName.get(0).getId());
        }
        long startTime = System.currentTimeMillis();
        LocalDate now = LocalDate.now();
        try {
            List<EamThirdMaintenanceOrder> unCompleteOrderList = eamThirdMaintenanceOrderService.lambdaQuery()
                    .lt(EamThirdMaintenanceOrder::getMaintenanceDate, now.toString())
                    .in(EamThirdMaintenanceOrder::getMaintenanceStatus, ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE, ThirdMaintenanceStatusEnum.UNDER_MAINTENANCE)
                    .orderByDesc(EamThirdMaintenanceOrder::getMaintenanceDate)
                    .list();
            if (CollectionUtil.isEmpty(unCompleteOrderList)) {
                //没有需要处理的数据
                return;
            }
            for (EamThirdMaintenanceOrder order : unCompleteOrderList) {
                if (ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
                    order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.ABOLISH.name());
                } else if (ThirdMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(order.getMaintenanceStatus())) {
                    //已经被接单 ä½†æœªæ‰§è¡Œå®Œæˆ
                    order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.ABOLISH.name());
                    //强制结束流程 åˆ é™¤ç”¨æˆ·çš„æ­¤å¾…办任务
                    FlowMyBusiness flowMyBusiness = flowMyBusinessService.selectByDataId(order.getId());
                    if (flowMyBusiness != null) {
                        flowTaskService.end(flowMyBusiness.getProcessInstanceId(), "过期删除");
                    }
                }
            }
            eamThirdMaintenanceOrderService.updateBatchById(unCompleteOrderList);
        List<EamThirdMaintenanceOrder> list = eamThirdMaintenanceOrderService.selectUnCompletedThirdMaintenanceOrderList();
        if (CollectionUtil.isEmpty(list)) {
            log.info("没有需要过期的工单!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            log.error("三保过期执行定时任务失败,{}", e.getMessage(), e);
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("没有需要过期的工单,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        int expiredCount = 0;
        for (EamThirdMaintenanceOrder order : list) {
            EamEquipmentExtend extend = equipmentExtendService.getById(order.getEquipmentId());
            if (extend == null) {
                log.error("设备信息不存在,请检查! è®¾å¤‡ID:{}, æ—¥æœŸï¼š{}", order.getEquipmentId(), DateUtils.date2Str(DateUtils.date_sdf.get()));
                continue;
            }
            if (ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(order.getMaintenanceStatus()) || ThirdMaintenanceStatusEnum.FREEZE.name().equals(order.getMaintenanceStatus())) {
                order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.EXPIRED.name());
                eamThirdMaintenanceOrderService.updateById(order);
            }
        }
        quartzLog.setIsSuccess(0);
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        quartzLog.setExceptionDetail("过期了{" + expiredCount + "}个工单,还有{" + (list.size() - expiredCount) + "}个工单正在执行中,禁用了{" + list.size() + "}台设备, æ—¥æœŸï¼š" + DateUtils.date2Str(DateUtils.date_sdf.get()));
        sysQuartzLogService.save(quartzLog);
    }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderGenerateJob.java
@@ -2,21 +2,21 @@
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.ThrowableUtil;
import org.jeecg.modules.eam.constant.BusinessCodeConst;
import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.request.EamThirdMaintenanceRequest;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
import org.jeecg.modules.eam.service.IEamThirdMaintenanceOrderService;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
import org.jeecg.modules.quartz.service.ISysQuartzLogService;
import org.jeecg.modules.system.entity.SysParams;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.jeecg.modules.system.service.ISysParamsService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -25,14 +25,24 @@
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * @Author: Lius
 * @CreateTime: 2025-07-29
 * @Description: ä¸‰ä¿å·¥å•锁定
 */
@Component
@Slf4j
public class ThirdMaintenanceOrderGenerateJob implements Job {
    @Autowired
    private IEamEquipmentService equipmentService;
    @Autowired
    private ISysParamsService paramsService;
    @Autowired
    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
    @Autowired
@@ -45,6 +55,8 @@
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
    @Autowired
    private IEamEquipmentExtendService equipmentExtendService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -58,81 +70,130 @@
            quartzLog.setJobId(byJobClassName.get(0).getId());
        }
        long startTime = System.currentTimeMillis();
        /**
         * èŽ·å– é…ç½®äº† ä¸‰ä¿æ ‡å‡†çš„ ä¿¡æ¯
         */
        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.THIRD_MAINTENANCE.name());
        if (CollectionUtil.isEmpty(standardList)) {
            log.warn("没有配置任何三保标准,任务结束");
        //获取三保系统配置参数
        SysParams threeYearMaintOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("three_year_maint_order_pre_generation_days");
        if (threeYearMaintOrderPreGenerationDaysParam == null) {
            log.error("未配置3~4年期提前生成工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("未配置3~4年期提前生成工单的系统参数,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        //当前日期
        LocalDate now = LocalDate.now();
        try {
            for (EamMaintenanceStandard standard : standardList) {
                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                    log.error("三保标准周期设置错误,请先配置标准周期, standard:{}", standard);
                    continue;
                }
                if (standard.getInitialDate() == null) {
                    //设置初始日期为前一天
                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
                }
//                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
//                if (standard.getLastGenerateTime() != null) {
//                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
//                }
                //加周期
//                do {
//                    //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
//                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
//                } while (now.isAfter(generateDate));
//                if(!now.isEqual(generateDate)) {
//                    //还未到生成日期,跳过执行
//                    continue;
//                }
                //获取保养项明细
                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
                if(CollectionUtil.isEmpty(standardDetailList)) {
                    log.error("三保标准没有保养明细,请先配置保养明细, standard:{}", standard);
                    continue;
                }
                //开始生成
                EamThirdMaintenanceRequest request = new EamThirdMaintenanceRequest();
                request.setEquipmentId(standard.getEquipmentId());
                request.setStandardId(standard.getId());
//                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.THIRD_MAINTENANCE_CODE_RULE);
                request.setOrderNum(codeSeq);
                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
                List<EamThirdMaintenanceOrderDetail> tableDetailList = new ArrayList<>();
                for (EamMaintenanceStandardDetail msd : standardDetailList) {
                    EamThirdMaintenanceOrderDetail tod = new EamThirdMaintenanceOrderDetail();
                    tod.setItemCode(msd.getItemCode());
                    tod.setItemName(msd.getItemName());
                    tod.setItemDemand(msd.getItemDemand());
                    tod.setItemPart(msd.getItemPart());
                    tableDetailList.add(tod);
                }
//                List<EamThirdMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamThirdMaintenanceOrderDetail::new).collect(Collectors.toList());
                request.setTableDetailList(tableDetailList);
                eamThirdMaintenanceOrderService.addMaintenance(request);
//                standard.setLastGenerateTime(new Date());
                eamMaintenanceStandardService.updateById(standard);
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            log.error("三保生成执行定时任务失败,{}", e.getMessage(), e);
        int threeYearMaintOrderPreGenerationDays = Integer.parseInt(threeYearMaintOrderPreGenerationDaysParam.getSettingValue());
        SysParams oneYearMaintOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("one_year_maint_order_pre_generation_days");
        if (oneYearMaintOrderPreGenerationDaysParam == null) {
            log.error("未配置3~4年期提前生成工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("未配置3~4年期提前生成工单的系统参数,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        int oneYearMaintOrderPreGenerationDays = Integer.parseInt(oneYearMaintOrderPreGenerationDaysParam.getSettingValue());
        SysParams threeYearMaintOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("three_year_maint_order_pre_lock_days");
        if (threeYearMaintOrderPreLockDaysParam == null) {
            log.error("未配置3~4年期提前锁定工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("未配置3~4年期提前锁定工单的系统参数,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        int threeYearMaintOrderPreLockDays = Integer.parseInt(threeYearMaintOrderPreLockDaysParam.getSettingValue());
        SysParams oneYearMaintOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("one_year_maint_order_pre_lock_days");
        if (oneYearMaintOrderPreLockDaysParam == null) {
            log.error("未配置1年期提前锁定工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("未配置1年期提前锁定工单的系统参数,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        int oneYearMaintOrderPreLockDays = Integer.parseInt(oneYearMaintOrderPreLockDaysParam.getSettingValue());
        //获取设备列表
        List<EamEquipment> equipmentList = equipmentService.selectThreeMaintenanceEquipmentList();
        if (CollectionUtil.isEmpty(equipmentList)) {
            log.warn("没有需要生成三保工单的设备!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(-1);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("没有需要生成三保工单的设备,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        AtomicInteger successCount = new AtomicInteger(0);
        AtomicInteger failCount = new AtomicInteger(0);
        StringBuilder sb = new StringBuilder();
        for (EamEquipment eamEquipment : equipmentList) {
            //判断是否为1年的三保周期
            if (eamEquipment.getThirdMaintenancePeriod() == 1) {
                //1年期
                generateThirdMaintenanceOrder(oneYearMaintOrderPreGenerationDays, oneYearMaintOrderPreLockDays, eamEquipment, successCount, failCount, sb);
            } else if (eamEquipment.getThirdMaintenancePeriod() == 3 || eamEquipment.getThirdMaintenancePeriod() == 4) {
                //3~4年期
                generateThirdMaintenanceOrder(threeYearMaintOrderPreGenerationDays, threeYearMaintOrderPreLockDays, eamEquipment, successCount, failCount, sb);
            }
        }
        quartzLog.setIsSuccess(0);
        if (failCount.get() > 0) {
            quartzLog.setIsSuccess(-1);
        }
        sb.append("三保工单生成:【成功:").append(successCount.get()).append(",失败:").append(failCount.get()).append("】");
        quartzLog.setExceptionDetail(sb.toString());
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
    }
    private void generateThirdMaintenanceOrder(int orderPreGenerationDays, int orderPreLockDays, EamEquipment equipment, AtomicInteger successCount, AtomicInteger failCount, StringBuilder sb) {
        LocalDate nextThirdMaintenanceDate = DateUtils.dateToLocalDate(equipment.getNextThirdMaintenance());
        LocalDate generateDate = nextThirdMaintenanceDate.minusDays(orderPreGenerationDays);
        LocalDate lockDate = nextThirdMaintenanceDate.minusDays(orderPreLockDays);
        if (!LocalDate.now().isBefore(generateDate) && !CommonConstant.STATUS_1.equals(equipment.getThirdMaintenanceGenerateFlag())) {
            //计算当天需要生成
            EamMaintenanceStandard standard = eamMaintenanceStandardService.queryByEquipmentIdAndCategory(equipment.getId(), MaintenanceCategoryEnum.THIRD_MAINTENANCE.name());
            if (standard == null) {
                log.warn("设备:{},未配置三级保养规范,无法生成三保工单!日期:{}", equipment.getEquipmentCode(), DateUtils.date2Str(DateUtils.date_sdf.get()));
                failCount.incrementAndGet();
                sb.append("设备:").append(equipment.getEquipmentCode()).append(",未配置三级保养规范,无法生成三保工单!");
                return;
            }
            List<EamMaintenanceStandardDetail> eamMaintenanceStandardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
            if (CollectionUtil.isEmpty(eamMaintenanceStandardDetailList)) {
                log.warn("设备:{},未配置三级保养规范明细,无法生成三保工单!日期:{}", equipment.getEquipmentCode(), DateUtils.date2Str(DateUtils.date_sdf.get()));
                failCount.incrementAndGet();
                sb.append("设备:").append(equipment.getEquipmentCode()).append(",未配置三级保养规范明细,无法生成三保工单!");
                return;
            }
            EamThirdMaintenanceRequest request = new EamThirdMaintenanceRequest();
            String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.THIRD_MAINTENANCE_CODE_RULE);
            request.setOrderNum(codeSeq);
            request.setEquipmentId(equipment.getId());
            request.setStandardId(standard.getId());
            request.setMaintenanceDate(generateDate.toString());
            request.setFreezeOrderDate(DateUtils.localDateToDate(lockDate));
            request.setOrderExpirationDate(equipment.getNextThirdMaintenance());
            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
            List<EamThirdMaintenanceOrderDetail> tableDetailList = eamMaintenanceStandardDetailList.stream().map(EamThirdMaintenanceOrderDetail::new).collect(Collectors.toList());
            request.setTableDetailList(tableDetailList);
            try {
                eamThirdMaintenanceOrderService.addMaintenance(request);
                successCount.incrementAndGet();
                //更新扩展表中的生成标识
                equipmentExtendService.updateThirdMaintenanceParam(equipment.getId(), null, null, CommonConstant.STATUS_1);
            } catch (Exception e) {
                log.error("设备:{},生成三保工单失败,原因:{}", equipment.getEquipmentCode(), e.getMessage(), e);
                failCount.incrementAndGet();
                sb.append("设备:").append(equipment.getEquipmentCode()).append(",生成三保工单失败,原因:").append(e.getMessage()).append("!");
            }
        }
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/ThirdMaintenanceOrderLockedJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package org.jeecg.modules.eam.job;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.constant.ThirdMaintenanceStatusEnum;
import org.jeecg.modules.eam.entity.EamThirdMaintenanceOrder;
import org.jeecg.modules.eam.service.IEamThirdMaintenanceOrderService;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
import org.jeecg.modules.quartz.service.ISysQuartzLogService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
 * @Author: Lius
 * @CreateTime: 2025-07-29
 * @Description: ä¸‰ä¿å·¥å•锁定
 */
@Component
@Slf4j
public class ThirdMaintenanceOrderLockedJob implements Job {
    @Autowired
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
    @Autowired
    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext context) throws JobExecutionException {
        //任务日志
        SysQuartzLog quartzLog = new SysQuartzLog();
        quartzLog.setCreateTime(new Date());
        List<QuartzJob> jobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
        if (jobClassName != null && !jobClassName.isEmpty()) {
            quartzLog.setJobId(jobClassName.get(0).getId());
        }
        long startTime = System.currentTimeMillis();
        List<EamThirdMaintenanceOrder> list = eamThirdMaintenanceOrderService.selectWaitMaintenanceOrderList();
        if (CollectionUtils.isEmpty(list)) {
            log.info("没有需要锁定的工单!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            quartzLog.setIsSuccess(0);
            long endTime = System.currentTimeMillis();
            quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
            quartzLog.setExceptionDetail("没有需要锁定的工单,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
            sysQuartzLogService.save(quartzLog);
            return;
        }
        for (EamThirdMaintenanceOrder order : list) {
            order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.FREEZE.name());
            eamThirdMaintenanceOrderService.updateById(order);
        }
        quartzLog.setIsSuccess(0);
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        quartzLog.setExceptionDetail("锁定了{" + list.size() + "}条工单,日期:" + DateUtils.date2Str(DateUtils.date_sdf.get()));
        sysQuartzLogService.save(quartzLog);
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamThirdMaintenanceRequest.java
@@ -53,6 +53,20 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private String maintenanceDate;
    /**
     * é”å®šå·¥å•日期
     */
    @ApiModelProperty(value = "锁定工单日期;提前55天锁定工单")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date freezeOrderDate;
    /**
     * å·¥å•过期日期
     */
    @ApiModelProperty(value = "工单过期日期;到期未做直接过期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date orderExpirationDate;
    /**
     * ç»´ä¿®äºº
     */
    @ApiModelProperty(value = "维修人")
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -91,4 +91,12 @@
    Result<?> importMaintenanceStandard(MultipartFile file, String type);
    /**
     * æŸ¥è¯¢ä¿å…»ç±»åž‹ä¸‹æ­£å¸¸çš„保养标准
     * @param equipmentId è®¾å¤‡ç¼–号
     * @param maintenanceCategory ä¿å…»ç±»åž‹
     * @return
     */
    EamMaintenanceStandard queryByEquipmentIdAndCategory(String equipmentId, String maintenanceCategory);
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamThirdMaintenanceOrderService.java
@@ -8,6 +8,8 @@
import org.jeecg.modules.eam.request.EamThirdMaintenanceQuery;
import org.jeecg.modules.eam.request.EamThirdMaintenanceRequest;
import java.util.List;
/**
 * @Description: è®¾å¤‡ä¸‰çº§ä¿å…»
 * @Author: jeecg-boot
@@ -66,4 +68,17 @@
     * @return
     */
    boolean updateMaintenanceStatus(String orderId, String maintenanceStatus);
    /**
     * èŽ·å–å¾…ä¿å…»çš„å·¥å•ï¼Œé”å®šå¤„ç†ä½¿ç”¨
     * @return
     */
    List<EamThirdMaintenanceOrder> selectWaitMaintenanceOrderList();
    /**
     * èŽ·å–æœªå®Œæˆçš„å·¥å•ä¿¡æ¯ï¼Œè¿‡æœŸå¤„ç†ä½¿ç”¨
     * @return
     */
    List<EamThirdMaintenanceOrder> selectUnCompletedThirdMaintenanceOrderList();
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -323,6 +323,16 @@
        return eamMaintenanceStandardMapper.selectList(queryWrapper);
    }
    @Override
    public EamMaintenanceStandard queryByEquipmentIdAndCategory(String equipmentId, String maintenanceCategory) {
        LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.START.name());
        queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId);
        return eamMaintenanceStandardMapper.selectOne(queryWrapper);
    }
    /*流程业务代码--------------------------开始*/
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceOrderServiceImpl.java
@@ -46,6 +46,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@@ -341,6 +342,7 @@
    /**
     * æŸ¥è¯¢ä¸‰ä¿å·¥å•基本信息
     *
     * @param id
     * @return
     */
@@ -371,6 +373,39 @@
        return update > 0;
    }
    @Override
    public List<EamThirdMaintenanceOrder> selectWaitMaintenanceOrderList() {
        LambdaQueryWrapper<EamThirdMaintenanceOrder> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EamThirdMaintenanceOrder::getMaintenanceStatus, ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
        queryWrapper.isNotNull(EamThirdMaintenanceOrder::getFreezeOrderDate);
        queryWrapper.eq(EamThirdMaintenanceOrder::getDelFlag, CommonConstant.DEL_FLAG_0);
        LocalDate localDate = LocalDate.now();
        queryWrapper.lt(EamThirdMaintenanceOrder::getFreezeOrderDate, localDate.toString());
        return this.getBaseMapper().selectList(queryWrapper);
    }
    @Override
    public List<EamThirdMaintenanceOrder> selectUnCompletedThirdMaintenanceOrderList() {
        LambdaQueryWrapper<EamThirdMaintenanceOrder> queryWrapper = new LambdaQueryWrapper<>();
        List<String> statusList = Arrays.asList(ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name(),
                ThirdMaintenanceStatusEnum.UNDER_MAINTENANCE.name(),
                ThirdMaintenanceStatusEnum.WAIT_CHECK.name(),
                ThirdMaintenanceStatusEnum.UNDER_FIRST_ACCEPTANCE.name(),
                ThirdMaintenanceStatusEnum.UNDER_SECOND_ACCEPTANCE.name(),
                ThirdMaintenanceStatusEnum.OPERATOR_SIGNATURE.name(),
                ThirdMaintenanceStatusEnum.REPAIRMAN_SIGNATURE.name(),
                ThirdMaintenanceStatusEnum.REPAIR_MANAGER_SIGNATURE.name(),
                ThirdMaintenanceStatusEnum.INSPECTOR_SIGNATURE.name(),
                ThirdMaintenanceStatusEnum.FREEZE.name()
        );
        queryWrapper.in(EamThirdMaintenanceOrder::getMaintenanceStatus, statusList);
        queryWrapper.isNotNull(EamThirdMaintenanceOrder::getOrderExpirationDate);
        queryWrapper.eq(EamThirdMaintenanceOrder::getDelFlag, CommonConstant.DEL_FLAG_0);
        LocalDate localDate = LocalDate.now();
        queryWrapper.lt(EamThirdMaintenanceOrder::getOrderExpirationDate, localDate.toString());
        return this.getBaseMapper().selectList(queryWrapper);
    }
    /**
     * è®¾ç½®æµç¨‹å˜é‡
     */