package org.jeecg.modules.eam.job; 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.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.IEamEquipmentExtendService; import org.jeecg.modules.eam.service.IEamEquipmentService; 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; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; 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 IEamTechnicalStatusEvaluationStandardService evaluationStandardService; @Autowired private ISysParamsService paramsService; @Autowired private IEamTechnicalStatusEvaluationOrderService evaluationOrderService; @Autowired private ISysQuartzLogService sysQuartzLogService; @Autowired private IQuartzJobService quartzJobService; @Autowired private IEamEquipmentExtendService equipmentExtendService; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //任务日志 SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List jobClassName = quartzJobService.findByJobClassName(this.getClass().getName()); if (jobClassName != null && !jobClassName.isEmpty()) { quartzLog.setJobId(jobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); //获取技术状态鉴定系统配置参数 SysParams threeYearOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("three_year_order_pre_generation_days"); if (threeYearOrderPreGenerationDaysParam == 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 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())); 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 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())); 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 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())); 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 oneYearOrderPreLockDays = Integer.parseInt(oneYearOrderPreLockDaysParam.getSettingValue()); //获取设备列表 List equipmentList = equipmentService.selectTechnicalEquipmentList(); 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 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().isBefore(generateDate) && !CommonConstant.STATUS_1.equals(equipment.getTechnologyGenerateFlag())) { //计算当天需要生成 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(); //更新扩展表中的生成标识 equipmentExtendService.updateTechnologyParam(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("!"); } } } }