zhangherong
2 天以前 3d63e7c025d5d8164df640d7c947e601c149e951
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java
@@ -1,10 +1,20 @@
package org.jeecg.modules.eam.job;
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
import org.jeecg.modules.eam.entity.EamEquipment;
import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationStandard;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderRequest;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardDetailService;
import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationOrderService;
import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardService;
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.ISysParamsService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
@@ -13,25 +23,122 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@Component
@Slf4j
public class TechnicalStatusEvaluationGenerateJob implements Job {
    @Autowired
    private IEamEquipmentService equipmentService;
    @Autowired
    private IEamEquipmentExtendService equipmentExtendService;
    @Autowired
    private IEamTechnicalStatusEvaluationStandardService evaluationStandardService;
    @Autowired
    private IEamTechnicalStatusEvaluationStandardDetailService evaluationStandardDetailService;
    @Autowired
    private ISysParamsService paramsService;
    @Autowired
    private IEamTechnicalStatusEvaluationOrderService evaluationOrderService;
    @Autowired
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //获取技术状态鉴定系统配置参数
        SysParams threeYearOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("three_year_order_pre_generation_days");
        if (threeYearOrderPreGenerationDaysParam == null) {
            log.error("未配置3~4年期提前生成工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            return;
        }
        int threeYearOrderPreGenerationDays = Integer.parseInt(threeYearOrderPreGenerationDaysParam.getSettingValue());
        SysParams oneYearOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("one_year_order_pre_generation_days");
        if (oneYearOrderPreGenerationDaysParam == null) {
            log.error("未配置1年期提前生成工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            return;
        }
        int oneYearOrderPreGenerationDays = Integer.parseInt(oneYearOrderPreGenerationDaysParam.getSettingValue());
        SysParams threeYearOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("three_year_order_pre_lock_days");
        if (threeYearOrderPreLockDaysParam == null) {
            log.error("未配置3~4年期提前锁定工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            return;
        }
        int threeYearOrderPreLockDays = Integer.parseInt(threeYearOrderPreLockDaysParam.getSettingValue());
        SysParams oneYearOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("one_year_order_pre_lock_days");
        if (oneYearOrderPreLockDaysParam == null) {
            log.error("未配置1年期提前锁定工单的系统参数,日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            return;
        }
        int oneYearOrderPreLockDays = Integer.parseInt(oneYearOrderPreLockDaysParam.getSettingValue());
        //获取设备列表
        List<EamEquipment> equipmentList = equipmentService.selectTechnicalEquipmentList();
        if (CollectionUtil.isEmpty(equipmentList)) {
            log.warn("没有需要生成技术状态鉴定工单得设备!日期:{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
            return;
        }
        //任务日志
        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();
        AtomicInteger successCount = new AtomicInteger(0);
        AtomicInteger failCount = new AtomicInteger(0);
        StringBuilder sb = new StringBuilder();
        for (EamEquipment equipment : equipmentList) {
            //判断是否为1年的技术状态鉴定周期
            if (equipment.getTechnologyCheckPeriod() == 1) {
                //1年期
                generateTechnicalStatusEvaluationOrder(oneYearOrderPreGenerationDays, oneYearOrderPreLockDays, equipment, successCount, failCount, sb);
            } else if (equipment.getTechnologyCheckPeriod() == 3 || equipment.getTechnologyCheckPeriod() == 4) {
                //3~4年期
                generateTechnicalStatusEvaluationOrder(threeYearOrderPreGenerationDays, threeYearOrderPreLockDays, equipment, 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 generateTechnicalStatusEvaluationOrder(int orderPreGenerationDays, int orderPreLockDays, EamEquipment equipment, AtomicInteger successCount, AtomicInteger failCount, StringBuilder sb) {
        LocalDate nextTechnologyCheckDate = DateUtils.dateToLocalDate(equipment.getNextTechnologyCheck());
        LocalDate generateDate = nextTechnologyCheckDate.minusDays(orderPreGenerationDays);
        LocalDate lockDate = nextTechnologyCheckDate.minusDays(orderPreLockDays);
        if (LocalDate.now().equals(generateDate)) {
            //计算当天需要生成
            EamTechnicalStatusEvaluationStandard standard = evaluationStandardService.queryEnableStandard(equipment.getId());
            if(standard == null) {
                log.warn("设备:{},未配置技术状态鉴定规范,无法生成技术鉴定工单!日期:{}", equipment.getEquipmentCode(), DateUtils.date2Str(DateUtils.date_sdf.get()));
                failCount.incrementAndGet();
                sb.append("设备:").append(equipment.getEquipmentCode()).append(",未配置技术状态鉴定规范,无法生成技术鉴定工单!");
                return;
            }
            EamTechnicalStatusEvaluationOrderRequest request = new EamTechnicalStatusEvaluationOrderRequest();
            request.setEquipmentId(equipment.getId());
            request.setStandardId(standard.getId());
            request.setEvaluationDate(DateUtils.localDateToDate(generateDate));
            request.setFreezeOrderDate(DateUtils.localDateToDate(lockDate));
            request.setOrderExpirationDate(equipment.getNextTechnologyCheck());
            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
            try {
                evaluationOrderService.addTechnicalStatusEvaluationOrder(request);
                successCount.incrementAndGet();
            } catch (Exception e) {
                log.error("生成技术状态鉴定工单失败,原因:{}", e.getMessage(), e);
                failCount.incrementAndGet();
                sb.append("生成技术状态鉴定工单失败,原因:").append(e.getMessage()).append("!");
            }
        }
    }
}