From dd890a133f35b4b21ed00ec557ca83f733ff04dc Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 03 九月 2025 18:03:24 +0800
Subject: [PATCH] 实现二保三保规范一个Word文档中包含多个保养内容(即多个设备)导入

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java |  200 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 123 insertions(+), 77 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
index 111a0ea..568feb6 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
@@ -2,18 +2,17 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.constant.CommonConstant;
 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.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
+import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
+import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrderDetail;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
-import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest;
-import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
-import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
-import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
-import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService;
-import org.jeecg.common.util.ThrowableUtil;
+import org.jeecg.modules.eam.service.*;
 import org.jeecg.modules.quartz.entity.QuartzJob;
 import org.jeecg.modules.quartz.entity.SysQuartzLog;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
@@ -26,16 +25,23 @@
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDate;
-import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+/**
+ * @Author: Lyh
+ * @CreateTime: 2025-09-01
+ * @Description: 浜屼繚宸ュ崟鐢熸垚
+ */
 @Component
 @Slf4j
 public class SecondMaintenanceOrderGenerateJob implements Job {
 
+    @Autowired
+    private IEamEquipmentService equipmentService;
     @Autowired
     private IEamSecondMaintenanceOrderService eamSecondMaintenanceOrderService;
     @Autowired
@@ -48,12 +54,13 @@
     private ISysQuartzLogService sysQuartzLogService;
     @Autowired
     private IQuartzJobService quartzJobService;
+    @Autowired
+    private IEamEquipmentExtendService equipmentExtendService;
 
     @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());
@@ -61,79 +68,118 @@
             quartzLog.setJobId(byJobClassName.get(0).getId());
         }
         long startTime = System.currentTimeMillis();
-        /**
-         * 鑾峰彇 閰嶇疆浜� 浜屼繚鏍囧噯鐨� 淇℃伅
-         */
-        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.SECOND_MAINTENANCE.name());
-        if (CollectionUtil.isEmpty(standardList)) {
-            log.warn("娌℃湁閰嶇疆浠讳綍浜屼繚鏍囧噯锛屼换鍔$粨鏉�");
+        // 鑾峰彇闇�瑕佷簩淇濈殑璁惧鍒楄〃
+        List<EamEquipment> equipmentList = equipmentService.selectSecondMaintenanceEquipmentList();
+        if (CollectionUtil.isEmpty(equipmentList)) {
+            log.warn("娌℃湁闇�瑕佺敓鎴愪簩淇濆伐鍗曠殑璁惧锛佹棩鏈燂細{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            quartzLog.setIsSuccess(-1);
+            quartzLog.setExceptionDetail("娌℃湁闇�瑕佺敓鎴愪簩淇濆伐鍗曠殑璁惧");
+            saveQuartzLog(quartzLog, startTime);
             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;
-                }
-                //寮�濮嬬敓鎴�
-                EamSecondMaintenanceRequest request = new EamSecondMaintenanceRequest();
-                request.setEquipmentId(standard.getEquipmentId());
-                request.setStandardId(standard.getId());
-                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
-                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE);
-                request.setOrderNum(codeSeq);
-                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
 
-                List<EamSecondMaintenanceOrderDetail> tableDetailList = new ArrayList<>();
-                for (EamMaintenanceStandardDetail msd : standardDetailList) {
-                    EamSecondMaintenanceOrderDetail sod = new EamSecondMaintenanceOrderDetail();
-                    sod.setItemCode(msd.getItemCode());
-                    sod.setItemCategory(msd.getItemPart());
-                    sod.setItemName(msd.getItemName());
-                    sod.setMaintenanceResult(msd.getItemDemand());
-                    tableDetailList.add(sod);
-                }
-//                List<EamSecondMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamSecondMaintenanceOrderDetail::new).collect(Collectors.toList());
-                request.setTableDetailList(tableDetailList);
-                eamSecondMaintenanceOrderService.addMaintenance(request);
+        AtomicInteger successCount = new AtomicInteger(0);
+        AtomicInteger failCount = new AtomicInteger(0);
+        StringBuilder sb = new StringBuilder();
 
-//                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));
+        // 閬嶅巻璁惧鐢熸垚宸ュ崟
+        for (EamEquipment equipment : equipmentList) {
+            generateSecondMaintenanceOrder(
+                    equipment,
+                    successCount,
+                    failCount,
+                    sb
+            );
         }
+
+        // 淇濆瓨浠诲姟鏃ュ織
+        quartzLog.setIsSuccess(failCount.get() > 0 ? -1 : 0);
+        sb.insert(0, "浜屼繚宸ュ崟鐢熸垚缁撴灉锛�");
+        sb.append("\n鎴愬姛锛�").append(successCount.get()).append("锛屽け璐ワ細").append(failCount.get());
+        quartzLog.setExceptionDetail(sb.toString());
+        saveQuartzLog(quartzLog, startTime);
+    }
+
+    private void saveQuartzLog(SysQuartzLog quartzLog, long startTime) {
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
         sysQuartzLogService.save(quartzLog);
-
     }
+
+    private void generateSecondMaintenanceOrder(EamEquipment equipment, AtomicInteger successCount, AtomicInteger failCount, StringBuilder sb) {
+        Date nextMaintenanceDate=equipment.getNextSecondMaintenance();
+        //妫�鏌ユ槸鍚︽弧瓒崇敓鎴愭潯浠讹紝鎻愬墠涓�澶╃敓鎴�
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(nextMaintenanceDate);
+        cal.add(Calendar.DAY_OF_MONTH, -1);
+        Date targetDate = cal.getTime();
+
+        // 鑾峰彇褰撳墠鏃ユ湡锛堜笉鍚椂闂撮儴鍒嗭級
+        Calendar today = Calendar.getInstance();
+        today.set(Calendar.HOUR_OF_DAY, 0);
+        today.set(Calendar.MINUTE, 0);
+        today.set(Calendar.SECOND, 0);
+        today.set(Calendar.MILLISECOND, 0);
+        // 姣旇緝鏃ユ湡鏄惁鍖归厤
+        if (targetDate.equals(today.getTime())) {
+            // 鐢熸垚浜屼繚宸ュ崟
+            EamMaintenanceStandard standard = eamMaintenanceStandardService.queryByEquipmentIdAndCategory(
+                    equipment.getId(),
+                    MaintenanceCategoryEnum.SECOND_MAINTENANCE.name()
+            );
+
+            if (standard == null) {
+                handleFailure(equipment, "鏈厤缃簩绾т繚鍏昏鑼�", failCount, sb);
+                return;
+            }
+
+            // 鑾峰彇瑙勮寖鏄庣粏
+            List<EamMaintenanceStandardDetail> details = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
+            if (CollectionUtil.isEmpty(details)) {
+                handleFailure(equipment, "鏈厤缃簩绾т繚鍏昏鑼冩槑缁�", failCount, sb);
+                return;
+            }
+
+            // 鏋勫缓宸ュ崟璇锋眰
+            EamSecondMaintenanceRequest request = new EamSecondMaintenanceRequest();
+            request.setOrderNum(businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE));
+            request.setEquipmentId(equipment.getId());
+            request.setStandardId(standard.getId());
+            request.setMaintenanceDate(nextMaintenanceDate);
+            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
+
+            // 杞崲瑙勮寖鏄庣粏
+            List<EamSecondMaintenanceOrderDetail> orderDetails = details.stream()
+                    .map(EamSecondMaintenanceOrderDetail::new)
+                    .collect(Collectors.toList());
+            request.setTableDetailList(orderDetails);
+
+            try {
+                // 鍒涘缓宸ュ崟
+                eamSecondMaintenanceOrderService.addMaintenance(request);
+                // 鏇存柊璁惧鐘舵��
+                equipmentExtendService.updateSecondMaintenanceParam(
+                        equipment.getId(),
+                        null,
+                        CommonConstant.STATUS_1
+                );
+                successCount.incrementAndGet();
+                log.info("璁惧 {} 浜屼繚宸ュ崟鐢熸垚鎴愬姛", equipment.getEquipmentCode());
+            } catch (Exception e) {
+                handleFailure(equipment, "鐢熸垚澶辫触: " + e.getMessage(), failCount, sb);
+                log.error("璁惧 {} 浜屼繚宸ュ崟鐢熸垚寮傚父", equipment.getEquipmentCode(), e);
+            }
+        }
+    }
+
+    private void handleFailure(EamEquipment equipment, String reason, AtomicInteger failCount, StringBuilder sb) {
+        failCount.incrementAndGet();
+        sb.append("\n璁惧 ")
+                .append(equipment.getEquipmentCode())
+                .append("锛�")
+                .append(reason);
+        log.warn("璁惧 {} 浜屼繚宸ュ崟鐢熸垚澶辫触锛歿}", equipment.getEquipmentCode(), reason);
+    }
+
+
 }

--
Gitblit v1.9.3