package org.jeecg.modules.eam.job;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import lombok.extern.slf4j.Slf4j;
|
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.EamInspectionOrder;
|
import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
|
import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
|
import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
|
import org.jeecg.modules.eam.request.EamInspectionOrderRequest;
|
import org.jeecg.modules.eam.service.IEamInspectionOrderService;
|
import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
|
import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
|
import org.jeecg.common.util.ThrowableUtil;
|
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.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Component
|
@Slf4j
|
public class InspectionOrderGenerateJob implements Job {
|
@Autowired
|
private IEamMaintenanceStandardService eamMaintenanceStandardService;
|
@Autowired
|
private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
|
@Autowired
|
private IEamInspectionOrderService eamInspectionOrderService;
|
@Autowired
|
private ISysBusinessCodeRuleService businessCodeRuleService;
|
@Autowired
|
private ISysQuartzLogService sysQuartzLogService;
|
@Autowired
|
private IQuartzJobService quartzJobService;
|
|
/**
|
* 工单生成
|
*
|
* @param jobExecutionContext
|
* @throws JobExecutionException
|
*/
|
@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.POINT_INSPECTION.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 (!generateDate.equals(now)) {
|
//加周期
|
do {
|
//初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
|
generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
|
} while (now.isAfter(generateDate));
|
if (!now.isEqual(generateDate)) {
|
//还未到生成日期,跳过执行
|
continue;
|
}
|
}
|
//校验生成日期是否已有工单
|
List<EamInspectionOrder> list = eamInspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>().eq(EamInspectionOrder::getEquipmentId, standard.getEquipmentId()).eq(EamInspectionOrder::getInspectionDate, DateUtils.localDateToDate(generateDate)));
|
if (!CollectionUtil.isEmpty(list)) {
|
continue;
|
}
|
//获取保养项明细
|
List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
|
if (CollectionUtil.isEmpty(standardDetailList)) {
|
log.error("点检标准没有保养明细,请先配置保养明细, standard:{}", standard);
|
continue;
|
}
|
//开始生成
|
EamInspectionOrderRequest request = new EamInspectionOrderRequest();
|
request.setEquipmentId(standard.getEquipmentId());
|
request.setStandardId(standard.getId());
|
request.setInspectionDate(DateUtils.localDateToDate(generateDate));
|
request.setExpirationTime(DateUtils.localDateToDate(generateDate.plusDays(standard.getMaintenancePeriod())));
|
request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
|
String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.INSPECTION_ORDER_CODE_RULE);
|
request.setOrderNum(codeSeq);
|
eamInspectionOrderService.addInspectionOrder(request);
|
}
|
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);
|
}
|
}
|