| | |
| | | |
| | | 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.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.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; |
| | |
| | | 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 IEamEquipmentPrecisionParametersService eamEquipmentPrecisionParametersService; |
| | | private IEamEquipmentService equipmentService; |
| | | @Autowired |
| | | private ISysParamsService paramsService; |
| | | @Autowired |
| | | private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService; |
| | | @Autowired |
| | |
| | | private ISysQuartzLogService sysQuartzLogService; |
| | | @Autowired |
| | | private IQuartzJobService quartzJobService; |
| | | @Autowired |
| | | private IEamEquipmentExtendService equipmentExtendService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | 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); |
| | | |
| | | //通过设备 获取设备精度参数 |
| | | List<EamEquipmentPrecisionParameters> precisionParametersList = eamEquipmentPrecisionParametersService |
| | | .lambdaQuery().eq(EamEquipmentPrecisionParameters::getEquipmentId, standard.getEquipmentId()).list(); |
| | | if(precisionParametersList.size()>0){ |
| | | List<EamPrecisionCheckDetail> 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); |
| | | 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("!"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |