hyingbo
13 小时以前 7e0152c5c1d1c0cd38b59ffaea3222dcde13012e
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package org.jeecg.modules.eam.job;
 
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.constant.BusinessCodeConst;
import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
import org.jeecg.modules.eam.request.EamThirdMaintenanceRequest;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.mdc.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
import org.jeecg.modules.quartz.service.ISysQuartzLogService;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
@Component
@Slf4j
public class ThirdMaintenanceOrderGenerateJob implements Job {
 
    @Autowired
    private IEamEquipmentPrecisionParametersService eamEquipmentPrecisionParametersService;
    @Autowired
    private IEamThirdMaintenanceOrderService eamThirdMaintenanceOrderService;
    @Autowired
    private IEamMaintenanceStandardService eamMaintenanceStandardService;
    @Autowired
    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
    @Autowired
    private ISysBusinessCodeRuleService businessCodeRuleService;
    @Autowired
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
 
        //任务日志
        SysQuartzLog quartzLog = new SysQuartzLog();
        quartzLog.setCreateTime(new Date());
        List<QuartzJob> byJobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
        if (byJobClassName != null && !byJobClassName.isEmpty()) {
            quartzLog.setJobId(byJobClassName.get(0).getId());
        }
        long startTime = System.currentTimeMillis();
        /**
         * 获取 配置了 三保标准的 信息
         */
        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.THIRD_MAINTENANCE.name());
        if (CollectionUtil.isEmpty(standardList)) {
            log.warn("没有配置任何三保标准,任务结束");
            return;
        }
        //当前日期
        LocalDate now = LocalDate.now();
        try {
            for (EamMaintenanceStandard standard : standardList) {
                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                    log.error("三保标准周期设置错误,请先配置标准周期, standard:{}", standard);
                    continue;
                }
                if (standard.getInitialDate() == null) {
                    //设置初始日期为前一天
                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
                }
                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
                if (standard.getLastGenerateTime() != null) {
                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
                }
                //加周期
                do {
                    //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
                } while (now.isAfter(generateDate));
                if(!now.isEqual(generateDate)) {
                    //还未到生成日期,跳过执行
                    continue;
                }
                //获取保养项明细
                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
                if(CollectionUtil.isEmpty(standardDetailList)) {
                    log.error("三保标准没有保养明细,请先配置保养明细, standard:{}", standard);
                    continue;
                }
 
                //开始生成
                EamThirdMaintenanceRequest request = new EamThirdMaintenanceRequest();
                request.setEquipmentId(standard.getEquipmentId());
                request.setStandardId(standard.getId());
                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.THIRD_MAINTENANCE_CODE_RULE);
                request.setOrderNum(codeSeq);
                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
 
                List<EamThirdMaintenanceOrderDetail> tableDetailList = new ArrayList<>();
                for (EamMaintenanceStandardDetail msd : standardDetailList) {
                    EamThirdMaintenanceOrderDetail tod = new EamThirdMaintenanceOrderDetail();
                    tod.setItemCode(msd.getItemCode());
                    tod.setItemName(msd.getItemName());
                    tod.setItemDemand(msd.getItemDemand());
                    tod.setItemPart(msd.getItemPart());
                    tableDetailList.add(tod);
                }
//                List<EamThirdMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamThirdMaintenanceOrderDetail::new).collect(Collectors.toList());
                request.setTableDetailList(tableDetailList);
 
                //通过设备 获取设备精度参数
                List<EamEquipmentPrecisionParameters> precisionParametersList = eamEquipmentPrecisionParametersService
                        .lambdaQuery().eq(EamEquipmentPrecisionParameters::getEquipmentId, standard.getEquipmentId()).list();
                if(precisionParametersList.size()>0){
                    List<EamPrecisionCheckDetail> precisionDetailList = new ArrayList<>();
                    for (EamEquipmentPrecisionParameters epp : precisionParametersList) {
                        EamPrecisionCheckDetail pcd = new EamPrecisionCheckDetail();
                        pcd.setParameterId(epp.getParameterId());
                        pcd.setEquipmentId(standard.getEquipmentId());
                        pcd.setParameterValue(epp.getParameterValue());
                        precisionDetailList.add(pcd);
                    }
                    request.setPrecisionDetailList(precisionDetailList);
                }
                eamThirdMaintenanceOrderService.addMaintenance(request);
 
                standard.setLastGenerateTime(new Date());
                eamMaintenanceStandardService.updateById(standard);
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            log.error("三保生成执行定时任务失败,{}", e.getMessage(), e);
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
        }
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
 
    }
}