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.conditions.query.QueryWrapper; 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) { QueryWrapper planBoQueryWrapper = Wrappers.query(); // 查询启用的点检计划 planBoQueryWrapper.eq("ip.status", DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL) .eq("equ.status", DictConstants.EIMS_EQU_STATUS_DETAIL.SHIYONG); // 增加过滤条件 上次生成日期小于当前日期 planBoQueryWrapper.and(wrapper -> wrapper.eq("ip.insp_next_time", DateUtils.getDate()).or().isNull("ip.insp_next_time")); // // 过滤没有下次运行时间 // planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspNextTime); // // 过滤没有点检周期的数据 // planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspCycle); // planBoQueryWrapper.isNotNull(EimsInspectPlan::getInspCycleUnit); List planVoList = planMapper.selectVoListJoinEqu(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; // } Date nowDate = DateUtils.getNowDate(); Date nextDate = DateUtils.addDays(nowDate, 1); 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(nowDate); 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(nowDate); plan.setInspNextTime(nextDate); if(plan.getInspFirstTime()==null)plan.setInspFirstTime(nowDate); boolean flag = recordMapper.insert(record) > 0; //TODO 生成失败,添加异常记录 if (!flag) continue; planMapper.updateById(plan); } return ExecuteResult.success("点检计划生成点检记录成功"); } }