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.*; import org.dromara.eims.domain.vo.EimsMaintPlanVo; 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 = "maintPlanToOrderJob") public class MaintPlanToOrderJob { private final EimsMaintOrderMapper orderMapper; private final EimsMaintPlanMapper planMapper; private final IGenerateCodeService codeService; @SneakyThrows @Transactional(rollbackFor = Exception.class) public ExecuteResult jobExecute(JobArgs jobArgs) { // 获取今天日期 Date today = new Date(); QueryWrapper planBoQueryWrapper = Wrappers.query(); // 查询启用的保养计划 planBoQueryWrapper.eq("mp.status", DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL); planBoQueryWrapper .eq("equ.status", DictConstants.EIMS_EQU_STATUS_DETAIL.SHIYONG); // 过滤下次运行时间等于当天时间的 planBoQueryWrapper.eq("mp.maint_next_time", DateUtils.getDate()); // 过滤没有保养周期的数据 planBoQueryWrapper.isNotNull("mp.maint_cycle"); planBoQueryWrapper.isNotNull("mp.maint_cycle_unit"); planBoQueryWrapper.isNotNull("mp.maint_rule"); List planVoList = planMapper.selectVoListJoinEqu(planBoQueryWrapper); for (int i = 0; i < planVoList.size(); i++) { EimsMaintPlanVo planVo = planVoList.get(i); // 保养计划add的时候会自动生成下次运行时间 Date oldNext = planVo.getMaintNextTime(); int day = DateUtils.differentDays(today, oldNext); // 如果计划生成工单日期大于今天则不生成工单 if (day >= 10) { continue; } // 计算生成工单时间 Long maintCycle = planVo.getMaintCycle(); Date newNext = null; String maintCycleUnit = planVo.getMaintCycleUnit(); switch (maintCycleUnit) { case DictConstants.MAINT_CYCLE_UNIT_DETAIL.DAY: newNext = DateUtils.addDays(oldNext, maintCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.WEEK: newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.MONTH: newNext = DateUtils.addMonths(oldNext, maintCycle.intValue()); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.SEASON: newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3); break; case DictConstants.MAINT_CYCLE_UNIT_DETAIL.YEAR: newNext = DateUtils.addYears(oldNext, maintCycle.intValue()); break; } EimsMaintOrder order = new EimsMaintOrder(); BeanUtils.copyProperties(planVo, order); order.setId(null); order.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIBAOYANG); order.setPlanTime(oldNext); order.setPlanId(planVo.getId()); order.setMaintName(planVo.getMaintName()); order.setMaintCode(codeService.generateCode("BYZD")); EimsMaintPlan plan = MapstructUtils.convert(planVo, EimsMaintPlan.class); assert plan != null; plan.setLastOrderDate(new Date()); plan.setMaintLastTime(oldNext); plan.setMaintNextTime(newNext); if(plan.getMaintFirstTime()==null)plan.setMaintFirstTime(oldNext); boolean flag = orderMapper.insert(order) > 0; //TODO 生成失败,添加异常记录 if (!flag) continue; planMapper.updateById(plan); } return ExecuteResult.success("保养计划生成保养工单成功"); } }