From f71cea3609c4c7bf0b70c77b2c9d8c571586df33 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期二, 02 九月 2025 14:24:26 +0800
Subject: [PATCH] 二保定时任务修改

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java |   26 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java         |    3 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java |   40 +++-
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java               |   14 -
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java       |   12 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java    |    3 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml               |   17 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java         |    9 +
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java                  |    5 
 /dev/null                                                                                                  |  153 -----------------
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java               |    5 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/SecondMaintenanceOrderGenerateJob.java             |  185 ++++++++++++++++++++
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java     |   10 +
 13 files changed, 301 insertions(+), 181 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java
index 67cbf37..6c68dca 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java
@@ -69,4 +69,14 @@
 	/** 寮傚父鎻忚堪 */
 	@ApiModelProperty(name = "寮傚父鎻忚堪",notes = "")
 	private String exceptionDescription;
+
+	public EamSecondMaintenanceOrderDetail() {
+	}
+
+	public EamSecondMaintenanceOrderDetail(EamMaintenanceStandardDetail detail) {
+		this.itemCode = detail.getItemCode();
+		this.itemCategory = detail.getItemCategory();
+		this.itemName = detail.getItemName();
+	}
+
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
index 984e76b..b34b079 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamEquipmentMapper.java
@@ -62,6 +62,11 @@
     List<EamEquipment> selectThreeMaintenanceEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper);
 
     /**
+     * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃
+     */
+    List<EamEquipment> selectSecondMaintenanceEquipmentList(@Param(Constants.WRAPPER) Wrapper<EamEquipment> queryWrapper);
+
+    /**
      * 璁惧绠$悊棣栭〉
      * @param ids
      * @return
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
index b407bb0..1cc5d47 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamEquipmentMapper.xml
@@ -77,6 +77,23 @@
         on e.id = ext.id
         ${ew.customSqlSegment}
     </select>
+
+    <select id="selectSecondMaintenanceEquipmentList" resultType="org.jeecg.modules.eam.entity.EamEquipment">
+        select e.*,
+               ext.latest_second_maintenance,
+               ext.next_second_maintenance,
+               ext.technology_status,
+               ext.third_maintenance_period,
+               ext.technology_check_period,
+               ext.latest_technology_check,
+               ext.next_technology_check,
+               ext.technology_generate_flag
+        from eam_equipment e
+                 left join eam_equipment_extend ext
+                           on e.id = ext.id
+            ${ew.customSqlSegment}
+    </select>
+
     <select id="echartsList" resultType="org.jeecg.modules.eam.dto.EchartsDto">
         WITH TotalCount AS (
         SELECT COUNT(a.id) AS total_count
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
index ab9ce90..083a2c3 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentExtendService.java
@@ -47,4 +47,13 @@
      * @return
      */
     boolean updateThirdMaintenanceParam(String equipmentId, String status, Date evaluationDate, String thirdMaintenanceGenerateFlag);
+
+    /**
+     * 鏇存柊璁惧浜屼繚鍙婁繚鍏绘棩鏈�
+     * @param equipmentId 璁惧ID
+     * @param status 淇濆吇鐘舵��
+     * @param secondMaintenanceGenerateFlag 浜屼繚宸ュ崟鐢熸垚鏍囪瘑
+     * @return
+     */
+    boolean updateSecondMaintenanceParam(String equipmentId, String status, String secondMaintenanceGenerateFlag);
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
index 09a764f..e427d58 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
@@ -88,6 +88,11 @@
     List<EamEquipment> selectThreeMaintenanceEquipmentList();
 
     /**
+     * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃
+     */
+    List<EamEquipment> selectSecondMaintenanceEquipmentList();
+
+    /**
      * 璁惧绠$悊棣栭〉-鎶�鏈姸鎬�
      * @return
      */
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
index a876b22..6adaf88 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentExtendServiceImpl.java
@@ -13,6 +13,8 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
 
 /**
@@ -98,4 +100,28 @@
         }
         return this.getBaseMapper().updateById(entity) > 0;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateSecondMaintenanceParam(String equipmentId, String status,String secondMaintenanceGenerateFlag){
+        if (StringUtils.isBlank(status) && StringUtils.isBlank(secondMaintenanceGenerateFlag)) {
+            return false;
+        }
+        EamEquipmentExtend entity = this.getBaseMapper().selectById(equipmentId);
+        UpdateWrapper<EamEquipmentExtend> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("id", equipmentId);
+        if (StringUtils.isNotBlank(status)) {
+            entity.setMaintenanceStatus(status);
+        }
+        //浜屼繚榛樿鐢熸垚鍏釜鏈堝悗
+        // 杞崲涓篖ocalDate澶勭悊鏃ユ湡
+        LocalDate localDate = DateUtils.dateToLocalDate(entity.getLatestSecondMaintenance());
+        // 璁$畻鍏釜鏈堝悗鐨勬棩鏈�
+        LocalDate sixMonthsLater = localDate.plusMonths(6);
+        // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶�
+        LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth());
+        entity.setNextSecondMaintenance(DateUtils.localDateToDate(lastDayOfMonth));
+
+        return this.getBaseMapper().updateById(entity) > 0;
+    }
 }
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
index 0160666..805fa02 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -449,6 +449,18 @@
     }
 
     /**
+     * 鑾峰彇鍙敓鎴愪簩淇濆伐鍗曠殑璁惧鍒楄〃
+     */
+    @Override
+    public List<EamEquipment> selectSecondMaintenanceEquipmentList(){
+        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0);
+        queryWrapper.ne("ext.maintenance_status", MaintenanceStatusEnum.PROHIBITED.name());
+        queryWrapper.isNotNull("ext.next_second_maintenance");
+        return this.getBaseMapper().selectSecondMaintenanceEquipmentList(queryWrapper);
+    }
+
+    /**
      * 璁惧绠$悊棣栭〉-鎶�鏈姸鎬�
      * @return
      */
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
index 2b6b560..43932ee 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
@@ -28,6 +28,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -514,7 +515,7 @@
      */
     @ApiOperation(value = "浜屼繚宸ュ崟-鎵ц鎿嶄綔", notes = "浜屼繚宸ュ崟-鎵ц鎿嶄綔")
     @PutMapping(value = "/approval")
-    public Result<?> approval(@RequestBody EamSecondMaintenanceRequest request) {
+    public Result<?> approval(@RequestBody EamSecondMaintenanceRequest request) throws ParseException {
         if (request == null) {
             return Result.error("瀹℃壒鐨勫璞′笉鑳戒负绌猴紒");
         }
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);
+    }
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java
index 3831e50..26ed73e 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamSecondMaintenanceRequest.java
@@ -55,20 +55,6 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date maintenanceDate;
     /**
-     * 閿佸畾宸ュ崟鏃ユ湡
-     */
-    @ApiModelProperty(value = "閿佸畾宸ュ崟鏃ユ湡;鎻愬墠55澶╅攣瀹氬伐鍗�")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date freezeOrderDate;
-    /**
-     * 宸ュ崟杩囨湡鏃ユ湡
-     */
-    @ApiModelProperty(value = "宸ュ崟杩囨湡鏃ユ湡;鍒版湡鏈仛鐩存帴杩囨湡")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date orderExpirationDate;
-    /**
      * 瀹為檯寮�濮嬫椂闂�
      */
     @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
index 6606bba..f175d51 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamSecondMaintenanceOrderService.java
@@ -9,6 +9,7 @@
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
 import org.jeecg.modules.eam.vo.EamEquipmentTree;
 
+import java.text.ParseException;
 import java.util.List;
 
 /**
@@ -57,7 +58,7 @@
      * @param request
      * @return
      */
-    EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request);
+    EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) throws ParseException;
 
 
     /**
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java
deleted file mode 100644
index 5c1dadc..0000000
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderAsyncService.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package org.jeecg.modules.eam.service.impl;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.exception.JeecgBootException;
-import org.jeecg.common.util.DateUtils;
-import org.jeecg.modules.eam.constant.BusinessCodeConst;
-import org.jeecg.modules.eam.constant.HfTemplateCategoryEnum;
-import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum;
-import org.jeecg.modules.eam.entity.EamBaseHFCode;
-import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
-import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrder;
-import org.jeecg.modules.eam.entity.EamSecondMaintenanceOrderDetail;
-import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper;
-import org.jeecg.modules.eam.service.IEamBaseHFCodeService;
-import org.jeecg.modules.eam.service.IEamFactorySecondMaintPlanService;
-import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
-import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderDetailService;
-import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.temporal.TemporalAdjusters;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-@Slf4j
-public class EamSecondMaintenanceOrderAsyncService {
-    @Resource
-    private EamSecondMaintenanceOrderMapper eamSecondMaintenanceOrderMapper;
-
-    @Autowired
-    private IEamSecondMaintenanceOrderDetailService secondMaintenanceOrderDetailService;
-
-    @Autowired
-    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
-
-    @Autowired
-    private IEamBaseHFCodeService hfCodeService;
-
-    @Autowired
-    private ISysBusinessCodeRuleService businessCodeRuleService;
-
-    @Autowired
-    private IEamFactorySecondMaintPlanService factorySecondMaintPlanService;
-
-    @Async
-    public void asyncGenerateNextMaintenanceOrder(String orderId) {
-        try {
-            log.info("寮�濮嬪紓姝ョ敓鎴愪笅娆″伐鍗曪紝鍘熷伐鍗旾D: {}", orderId);
-            generateNextOrder(orderId);
-            log.info("寮傛鐢熸垚涓嬫宸ュ崟瀹屾垚锛屽師宸ュ崟ID: {}", orderId);
-        } catch (Exception e) {
-            log.error("寮傛鐢熸垚涓嬫宸ュ崟澶辫触锛屽伐鍗旾D: {}", orderId, e);
-            // 鍙戦�佸憡璀﹂�氱煡鎴栬繘琛岄噸璇�
-        }
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    public void generateNextOrder(String orderId) {
-        EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderMapper.selectById(orderId);
-        if (entity == null) {
-            log.warn("鍘熷伐鍗曚笉瀛樺湪锛孖D: {}", orderId);
-            return;
-        }
-        if (!entity.getMaintenanceStatus().equals(SecondMaintenanceStatusEnum.COMPLETE.name())) {
-            log.warn("鍘熷伐鍗曠姸鎬佹湭瀹屾垚锛屼笉鐢熸垚涓嬫宸ュ崟锛孖D: {}", orderId);
-            return;
-        }
-
-        // 鐢熸垚鏂扮殑宸ュ崟缂栧彿
-        String newOrderNum = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE);
-        if (StrUtil.isEmpty(newOrderNum)) {
-            throw new JeecgBootException("鐢熸垚宸ュ崟缂栧彿澶辫触");
-        }
-
-        EamSecondMaintenanceOrder nextOrder = new EamSecondMaintenanceOrder();
-        nextOrder.setOrderNum(newOrderNum);
-        nextOrder.setEquipmentId(entity.getEquipmentId());
-        nextOrder.setStandardId(entity.getStandardId());
-        nextOrder.setCreationMethod("AUTO");
-        // 璁剧疆淇濆吇鏃ユ湡涓哄師宸ュ崟淇濆吇鏃ユ湡鍔�6涓湀
-        nextOrder.setMaintenanceDate(calculateNextMaintenanceDate(entity.getMaintenanceDate()));
-        // 璁剧疆鎶�鏈姸鎬侀壌瀹氳〃HF缂栫爜
-        EamBaseHFCode eamBaseHFCode = hfCodeService.selectByCategory(HfTemplateCategoryEnum.SECOND_MAINTENANCE.name());
-        if (eamBaseHFCode == null) {
-            throw new JeecgBootException("鏈厤缃妧鏈姸鎬侀壌瀹氳〃鐨凥F缂栫爜锛屾坊鍔犲け璐ワ紒");
-        }
-        nextOrder.setHfCode(eamBaseHFCode.getHfCode());
-        nextOrder.setRemark(entity.getRemark());
-        nextOrder.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
-        nextOrder.setCreationMethod(entity.getCreationMethod());
-        nextOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
-
-        // 鎻掑叆鏂板伐鍗�
-        eamSecondMaintenanceOrderMapper.insert(nextOrder);
-
-        // 澶嶅埗宸ュ崟鏄庣粏
-        List<EamMaintenanceStandardDetail> standardDetails = eamMaintenanceStandardDetailService.selectByStandardId(entity.getStandardId());
-        if (CollectionUtil.isEmpty(standardDetails)) {
-            log.warn("鍘熷伐鍗曠殑淇濆吇瑙勮寖鏄庣粏涓虹┖锛屽伐鍗旾D: {}", orderId);
-            return;
-        }
-
-        List<EamSecondMaintenanceOrderDetail> orderDetails = standardDetails.stream()
-                .map(item -> {
-                    EamSecondMaintenanceOrderDetail detail = new EamSecondMaintenanceOrderDetail();
-                    BeanUtils.copyProperties(item, detail);
-                    detail.setId(null);
-                    detail.setOrderId(nextOrder.getId());
-                    return detail;
-                })
-                .collect(Collectors.toList());
-
-        secondMaintenanceOrderDetailService.saveBatch(orderDetails);
-
-        // 鎻掑叆棣栭〉浜屼繚鍏昏鍒�
-        // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�");
-        String formattedDate = sdf.format(nextOrder.getMaintenanceDate());
-        factorySecondMaintPlanService.add(nextOrder.getEquipmentId(), formattedDate);
-    }
-
-
-    /**
-     * 璁$畻鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶�
-     * @param currentDate 褰撳墠宸ュ崟鏃ユ湡
-     * @return 鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶�
-     */
-    private Date calculateNextMaintenanceDate(Date currentDate) {
-        // 杞崲涓篖ocalDate澶勭悊鏃ユ湡
-        LocalDate localDate = DateUtils.dateToLocalDate(currentDate);
-        // 璁$畻鍏釜鏈堝悗鐨勬棩鏈�
-        LocalDate sixMonthsLater = localDate.plusMonths(6);
-
-        // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶�
-        LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth());
-
-        // 杞崲鍥濪ate绫诲瀷
-        return DateUtils.localDateToDate(lastDayOfMonth);
-    }
-
-}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
index 423acba..10cb913 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -52,7 +52,10 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -100,8 +103,6 @@
     private BaseFactoryMapper baseFactoryMapper;
     @Autowired
     private IEamSecondMaintenanceOrderDetailService eamSecondMaintenanceOrderDetailService;
-    @Autowired
-    private EamSecondMaintenanceOrderAsyncService eamSecondMaintenanceOrderAsyncService;
     @Autowired
     private IEamFactorySecondMaintPlanService factorySecondMaintPlanService;
 
@@ -349,9 +350,9 @@
         }
         // 鎻掑叆棣栭〉浜屼繚鍏昏鍒�
         // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮�
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�");
-        String formattedDate = sdf.format(order.getMaintenanceDate());
-        factorySecondMaintPlanService.add(order.getEquipmentId(), formattedDate);
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�");
+//        String formattedDate = sdf.format(order.getMaintenanceDate());
+//        factorySecondMaintPlanService.add(order.getEquipmentId(), formattedDate);
         return true;
     }
 
@@ -486,7 +487,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.SECOND_MAINTENANCE, businessTable = "eam_second_maintenance_order")
-    public EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) {
+    public EamSecondMaintenanceOrder approval(EamSecondMaintenanceRequest request) throws ParseException {
         EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderMapper.selectById(request.getId());
         if (entity == null) {
             throw new JeecgBootException("瀹℃壒鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
@@ -683,17 +684,32 @@
         eamSecondMaintenanceOrderMapper.updateById(entity);
         //寮傛鐢熸垚涓嬫浜屼繚宸ュ崟
         if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) {
-            try {
-                eamSecondMaintenanceOrderAsyncService.asyncGenerateNextMaintenanceOrder(entity.getId());
-            } catch (Exception e) {
-                log.error("瑙﹀彂寮傛鐢熸垚涓嬫宸ュ崟澶辫触锛屽伐鍗旾D: {}", entity.getId(), e);
-            }
+            //濉厖璁$畻涓嬫浜屼繚鏃ユ湡
+            EamEquipmentExtend eamEquipmentExtend=eamEquipmentExtendService.getById(entity.getEquipmentId());
+            eamEquipmentExtend.setLatestSecondMaintenance(entity.getMaintenanceDate());
+            eamEquipmentExtend.setNextSecondMaintenance(calculateNextMaintenanceDate(entity.getMaintenanceDate()));
+            eamEquipmentExtendService.updateById(eamEquipmentExtend);
         }
-
         return entity;
     }
 
     /**
+     * 璁$畻鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶�
+     * @param currentDate 褰撳墠宸ュ崟鏃ユ湡
+     * @return 鍏釜鏈堝悗鐨勫綋鏈堟渶鍚庝竴澶�
+     */
+    private Date calculateNextMaintenanceDate(Date currentDate) {
+        // 杞崲涓篖ocalDate澶勭悊鏃ユ湡
+        LocalDate localDate = DateUtils.dateToLocalDate(currentDate);
+        // 璁$畻鍏釜鏈堝悗鐨勬棩鏈�
+        LocalDate sixMonthsLater = localDate.plusMonths(6);
+        // 璋冩暣鍒板綋鏈堢殑鏈�鍚庝竴澶�
+        LocalDate lastDayOfMonth = sixMonthsLater.with(TemporalAdjusters.lastDayOfMonth());
+        // 杞崲鍥濪ate绫诲瀷
+        return DateUtils.localDateToDate(lastDayOfMonth);
+    }
+
+    /**
      * 鎵归噺鎵撳嵃浜屼繚宸ュ崟
      * @param ids
      * @return

--
Gitblit v1.9.3