车间能级提升-智能设备管理系统
zhuguifei
2025-03-12 66e943c91e133eec5a0822ea22fd92cbc04bc9f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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.*;
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();
        LambdaQueryWrapper<EimsMaintPlan> planBoQueryWrapper = Wrappers.lambdaQuery();
        // 查询启用的保养计划
        planBoQueryWrapper.eq(EimsMaintPlan::getStatus, DictConstants.SYS_NORMAL_DISABLE_DETAIL.NORMAL);
        // 过滤没有下次运行时间
        planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintNextTime);
        // 过滤没有保养周期的数据
        planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintCycle);
        planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintCycleUnit);
        planBoQueryWrapper.isNotNull(EimsMaintPlan::getMaintRule);
 
        List<EimsMaintPlanVo> planVoList = planMapper.selectVoList(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 >= 1) {
                continue;
            }
 
            // 计算生成工单时间
            Long maintCycle = planVo.getMaintCycle();
            String maintRule = planVo.getMaintRule();
            Date firstTime = planVo.getMaintFirstTime();
            Date lastTime = planVo.getMaintLastTime();
            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.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("保养计划生成保养工单成功");
    }
}