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.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.*;
|
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.beans.factory.annotation.Autowired;
|
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;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Author: Lius
|
* @CreateTime: 2025-07-29
|
* @Description: 三保工单锁定
|
*/
|
@Component
|
@Slf4j
|
public class ThirdMaintenanceOrderGenerateJob implements Job {
|
|
@Autowired
|
private IEamEquipmentService equipmentService;
|
@Autowired
|
private ISysParamsService paramsService;
|
@Autowired
|
private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
|
@Autowired
|
private IEamMaintenanceStandardService eamMaintenanceStandardService;
|
@Autowired
|
private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
|
@Autowired
|
private ISysBusinessCodeRuleService businessCodeRuleService;
|
@Autowired
|
private ISysQuartzLogService sysQuartzLogService;
|
@Autowired
|
private IQuartzJobService quartzJobService;
|
@Autowired
|
private IEamEquipmentExtendService equipmentExtendService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
|
//任务日志
|
SysQuartzLog quartzLog = new SysQuartzLog();
|
quartzLog.setCreateTime(new Date());
|
List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
|
if (byJobClassName != null && !byJobClassName.isEmpty()) {
|
quartzLog.setJobId(byJobClassName.get(0).getId());
|
}
|
long startTime = System.currentTimeMillis();
|
//获取三保系统配置参数
|
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;
|
}
|
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);
|
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("!");
|
}
|
|
}
|
}
|
}
|