package org.dromara.eims.job; import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.client.model.ExecuteResult; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.dromara.common.core.constant.DictConstants; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.eims.domain.EimsInspectPlan; import org.dromara.eims.domain.EimsInspectRecord; import org.dromara.eims.domain.EimsMaintOrder; import org.dromara.eims.domain.EimsMaintPlan; import org.dromara.eims.domain.vo.EimsInspectPlanVo; import org.dromara.eims.domain.vo.EimsMaintPlanVo; import org.dromara.eims.mapper.EimsInspectPlanMapper; import org.dromara.eims.mapper.EimsInspectRecordMapper; import org.dromara.eims.mapper.EimsMaintOrderMapper; import org.dromara.eims.mapper.EimsMaintPlanMapper; import org.dromara.eims.service.IGenerateCodeService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @Component @RequiredArgsConstructor @JobExecutor(name = "inspectPlanToRecordJob") public class InspectPlanToRecordJob { private final EimsInspectRecordMapper recordMapper; private final EimsInspectPlanMapper planMapper; private final IGenerateCodeService codeService; @SneakyThrows @Transactional(rollbackFor = Exception.class) public ExecuteResult jobExecute(JobArgs jobArgs) { // 获取今天日期 Date today = new Date(); LambdaQueryWrapper planBoQueryWrapper = Wrappers.lambdaQuery(); // 查询启用的点检计划 planBoQueryWrapper.eq(EimsInspectPlan::getStatus, DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL); // 过滤没有下次运行时间 planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspNextTime); // 过滤没有点检周期的数据 planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspCycle); planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspCycleUnit); List planVoList = planMapper.selectVoList(planBoQueryWrapper); for (int i = 0; i < planVoList.size(); i++) { EimsInspectPlanVo planVo = planVoList.get(i); // 点检计划add的时候会自动生成下次运行时间 Date oldNext = planVo.getInspNextTime(); int day = DateUtils.differentDays(today, oldNext); // 如果计划生成点检日期大于今天则不生成点检记录 if (day >= 1) { continue; } // 计算生成点检记录时间 Long inspCycle = planVo.getInspCycle(); Date newNext = null; String inspCycleUnit = planVo.getInspCycleUnit(); switch (inspCycleUnit) { case DictConstants.MAINT_CYCLE_UNIT_DETAIL.DAY: newNext = DateUtils.addDays(oldNext, inspCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.WEEK: newNext = DateUtils.addWeeks(oldNext, inspCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.MONTH: newNext = DateUtils.addMonths(oldNext, inspCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.SEASON: newNext = DateUtils.addMonths(oldNext, inspCycle.intValue() * 3); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.YEAR: newNext = DateUtils.addYears(oldNext, inspCycle.intValue()); break; } EimsInspectRecord record = new EimsInspectRecord(); record.setEquId(planVo.getEquId()); record.setInspDesc(planVo.getInspDesc()); record.setInspType(planVo.getInspType()); record.setInspUser(planVo.getInspUser()); record.setInspDept(planVo.getInspDept()); record.setStatus(DictConstants.EIMS_INSPECT_STATUS_DETAIL.N); record.setPlanTime(oldNext); record.setPlanId(planVo.getId()); //点检项名称 record.setInspName(planVo.getInspName()); record.setInspCode(codeService.generateCode("DJZD")); EimsInspectPlan plan = MapstructUtils.convert(planVo, EimsInspectPlan.class); assert plan != null; plan.setInspLastTime(oldNext); plan.setInspNextTime(newNext); if(plan.getInspFirstTime()==null)plan.setInspFirstTime(oldNext); boolean flag = recordMapper.insert(record) > 0; //TODO 生成失败,添加异常记录 if (!flag) continue; planMapper.updateById(plan); } return ExecuteResult.success("点检计划生成点检记录成功"); } }