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<EimsMaintPlan> 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<EimsMaintPlanVo> 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 (today.before(oldNext)) {
|
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("保养计划生成保养工单成功");
|
}
|
}
|