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 |  185 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 185 insertions(+), 0 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
new file mode 100644
index 0000000..568feb6
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java
@@ -0,0 +1,185 @@
+package org.jeecg.modules.eam.job;
+
+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.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.service.*;
+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.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
+    private IEamMaintenanceStandardService eamMaintenanceStandardService;
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+    @Autowired
+    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());
+        if (byJobClassName != null && !byJobClassName.isEmpty()) {
+            quartzLog.setJobId(byJobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        // 鑾峰彇闇�瑕佷簩淇濈殑璁惧鍒楄〃
+        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;
+        }
+
+        AtomicInteger successCount = new AtomicInteger(0);
+        AtomicInteger failCount = new AtomicInteger(0);
+        StringBuilder sb = new StringBuilder();
+
+        // 閬嶅巻璁惧鐢熸垚宸ュ崟
+        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