package org.jeecg.modules.eam.job; import cn.hutool.core.collection.CollectionUtil; import lombok.extern.slf4j.Slf4j; 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.IEamEquipmentPrecisionParametersService; 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.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.service.ISysBusinessCodeRuleService; 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.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @Component @Slf4j public class ThirdMaintenanceOrderGenerateJob implements Job { @Autowired private IEamEquipmentPrecisionParametersService eamEquipmentPrecisionParametersService; @Autowired private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService; @Autowired private IEamMaintenanceStandardService eamMaintenanceStandardService; @Autowired private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private ISysQuartzLogService sysQuartzLogService; @Autowired private IQuartzJobService quartzJobService; @Override @Transactional(rollbackFor = Exception.class) public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //任务日志 SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); /** * 获取 配置了 三保标准的 信息 */ List standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.THIRD_MAINTENANCE.name()); if (CollectionUtil.isEmpty(standardList)) { log.warn("没有配置任何三保标准,任务结束"); 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 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 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 collect = standardDetailList.stream().map(EamThirdMaintenanceOrderDetail::new).collect(Collectors.toList()); request.setTableDetailList(tableDetailList); //通过设备 获取设备精度参数 List precisionParametersList = eamEquipmentPrecisionParametersService .lambdaQuery().eq(EamEquipmentPrecisionParameters::getEquipmentId, standard.getEquipmentId()).list(); if(precisionParametersList.size()>0){ List precisionDetailList = new ArrayList<>(); for (EamEquipmentPrecisionParameters epp : precisionParametersList) { EamPrecisionCheckDetail pcd = new EamPrecisionCheckDetail(); pcd.setParameterId(epp.getParameterId()); pcd.setEquipmentId(standard.getEquipmentId()); pcd.setParameterValue(epp.getParameterValue()); precisionDetailList.add(pcd); } request.setPrecisionDetailList(precisionDetailList); } eamThirdMaintenanceOrderService.addMaintenance(request); // standard.setLastGenerateTime(new Date()); eamMaintenanceStandardService.updateById(standard); } 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))); sysQuartzLogService.save(quartzLog); } }