| | |
| | | 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; |
| | |
| | | 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("!"); |
| | | } |
| | | } |
| | | } |
| | | } |