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<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
|
if (byJobClassName != null && !byJobClassName.isEmpty()) {
|
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("没有配置任何三保标准,任务结束");
|
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);
|
quartzLog.setIsSuccess(-1);
|
quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
|
}
|
long endTime = System.currentTimeMillis();
|
quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
|
sysQuartzLogService.save(quartzLog);
|
|
}
|
}
|