From 3d63e7c025d5d8164df640d7c947e601c149e951 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 21 七月 2025 14:12:52 +0800
Subject: [PATCH] art: 技术状态鉴定工单-定时任务生成

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamTechnicalStatusEvaluationOrderRequest.java          |   10 +++
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java               |    2 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java    |    2 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java |    4 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java                  |  119 +++++++++++++++++++++++++++++++++++++--
 lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java                                             |    6 --
 6 files changed, 129 insertions(+), 14 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
index 1810ee0..cb79bf1 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
@@ -203,9 +203,6 @@
     public static String date2Str(SimpleDateFormat dateSdf) {
         synchronized (dateSdf) {
             Date date = getDate();
-            if (null == date) {
-                return null;
-            }
             return dateSdf.format(date);
         }
     }
@@ -783,7 +780,4 @@
     public static Date localDateToDate(LocalDate localDate) {
         return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
     }
-
-
-
 }
\ No newline at end of file
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 5d7a2c8..c994336 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
@@ -410,7 +410,7 @@
         queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0);
         queryWrapper.ne("ext.technology_status", TechnologyStatusEnum.PROHIBITED.name());
         queryWrapper.isNotNull("ext.technology_check_period");
-        queryWrapper.isNotNull("e.next_technology_check");
+        queryWrapper.isNotNull("ext.next_technology_check");
         return this.getBaseMapper().selectTechnicalEquipmentList(queryWrapper);
     }
 
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java
index da1b55f..4911f1a 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java
@@ -15,6 +15,7 @@
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
 import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationOrder;
 import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderQuery;
 import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderRequest;
@@ -74,6 +75,7 @@
         if (CollectionUtil.isEmpty(request.getTableDetailList())) {
             return Result.error("妫�鏌ラ」涓嶈兘涓虹┖锛�");
         }
+        request.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
         boolean b = eamTechnicalStatusEvaluationOrderService.addTechnicalStatusEvaluationOrder(request);
         if (!b) {
             return Result.error("娣诲姞澶辫触锛�");
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java
index 8a7c050..a06c8a4 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/TechnicalStatusEvaluationGenerateJob.java
@@ -1,10 +1,20 @@
 package org.jeecg.modules.eam.job;
 
+import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationStandard;
+import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderRequest;
 import org.jeecg.modules.eam.service.IEamEquipmentService;
-import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardDetailService;
+import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationOrderService;
 import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardService;
+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.entity.SysParams;
 import org.jeecg.modules.system.service.ISysParamsService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
@@ -13,25 +23,122 @@
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
 @Component
 @Slf4j
 public class TechnicalStatusEvaluationGenerateJob implements Job {
     @Autowired
     private IEamEquipmentService equipmentService;
-    @Autowired
-    private IEamEquipmentExtendService equipmentExtendService;
 
     @Autowired
     private IEamTechnicalStatusEvaluationStandardService evaluationStandardService;
     @Autowired
-    private IEamTechnicalStatusEvaluationStandardDetailService evaluationStandardDetailService;
-    @Autowired
     private ISysParamsService paramsService;
+    @Autowired
+    private IEamTechnicalStatusEvaluationOrderService evaluationOrderService;
+    @Autowired
+    private ISysQuartzLogService sysQuartzLogService;
+    @Autowired
+    private IQuartzJobService quartzJobService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        //鑾峰彇鎶�鏈姸鎬侀壌瀹氱郴缁熼厤缃弬鏁�
+        SysParams threeYearOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("three_year_order_pre_generation_days");
+        if (threeYearOrderPreGenerationDaysParam == null) {
+            log.error("鏈厤缃�3~4骞存湡鎻愬墠鐢熸垚宸ュ崟鐨勭郴缁熷弬鏁帮紝鏃ユ湡锛歿}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            return;
+        }
+        int threeYearOrderPreGenerationDays = Integer.parseInt(threeYearOrderPreGenerationDaysParam.getSettingValue());
+        SysParams oneYearOrderPreGenerationDaysParam = paramsService.getSysPramBySettingKey("one_year_order_pre_generation_days");
+        if (oneYearOrderPreGenerationDaysParam == null) {
+            log.error("鏈厤缃�1骞存湡鎻愬墠鐢熸垚宸ュ崟鐨勭郴缁熷弬鏁帮紝鏃ユ湡锛歿}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            return;
+        }
+        int oneYearOrderPreGenerationDays = Integer.parseInt(oneYearOrderPreGenerationDaysParam.getSettingValue());
+        SysParams threeYearOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("three_year_order_pre_lock_days");
+        if (threeYearOrderPreLockDaysParam == null) {
+            log.error("鏈厤缃�3~4骞存湡鎻愬墠閿佸畾宸ュ崟鐨勭郴缁熷弬鏁帮紝鏃ユ湡锛歿}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            return;
+        }
+        int threeYearOrderPreLockDays = Integer.parseInt(threeYearOrderPreLockDaysParam.getSettingValue());
+        SysParams oneYearOrderPreLockDaysParam = paramsService.getSysPramBySettingKey("one_year_order_pre_lock_days");
+        if (oneYearOrderPreLockDaysParam == null) {
+            log.error("鏈厤缃�1骞存湡鎻愬墠閿佸畾宸ュ崟鐨勭郴缁熷弬鏁帮紝鏃ユ湡锛歿}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            return;
+        }
+        int oneYearOrderPreLockDays = Integer.parseInt(oneYearOrderPreLockDaysParam.getSettingValue());
         //鑾峰彇璁惧鍒楄〃
+        List<EamEquipment> equipmentList = equipmentService.selectTechnicalEquipmentList();
+        if (CollectionUtil.isEmpty(equipmentList)) {
+            log.warn("娌℃湁闇�瑕佺敓鎴愭妧鏈姸鎬侀壌瀹氬伐鍗曞緱璁惧锛佹棩鏈燂細{}", DateUtils.date2Str(DateUtils.date_sdf.get()));
+            return;
+        }
+        //浠诲姟鏃ュ織
+        SysQuartzLog quartzLog = new SysQuartzLog();
+        quartzLog.setCreateTime(new Date());
+        List<QuartzJob> jobClassName = quartzJobService.findByJobClassName(this.getClass().getName());
+        if (jobClassName != null && !jobClassName.isEmpty()) {
+            quartzLog.setJobId(jobClassName.get(0).getId());
+        }
+        long startTime = System.currentTimeMillis();
+        AtomicInteger successCount = new AtomicInteger(0);
+        AtomicInteger failCount = new AtomicInteger(0);
+        StringBuilder sb = new StringBuilder();
+        for (EamEquipment equipment : equipmentList) {
+            //鍒ゆ柇鏄惁涓�1骞寸殑鎶�鏈姸鎬侀壌瀹氬懆鏈�
+            if (equipment.getTechnologyCheckPeriod() == 1) {
+                //1骞存湡
+                generateTechnicalStatusEvaluationOrder(oneYearOrderPreGenerationDays, oneYearOrderPreLockDays, equipment, successCount, failCount, sb);
+            } else if (equipment.getTechnologyCheckPeriod() == 3 || equipment.getTechnologyCheckPeriod() == 4) {
+                //3~4骞存湡
+                generateTechnicalStatusEvaluationOrder(threeYearOrderPreGenerationDays, threeYearOrderPreLockDays, equipment, successCount, failCount, sb);
+            }
+        }
+        quartzLog.setIsSuccess(0);
+        if(failCount.get() > 0) {
+            quartzLog.setIsSuccess(-1);
+        }
+        sb.append("鎶�鏈姸鎬侀壌瀹氬伐鍗曠敓鎴愶細銆愭垚鍔燂細").append(successCount.get()).append("锛屽け璐ワ細").append(failCount.get()).append("銆�");
+        quartzLog.setExceptionDetail(sb.toString());
+        long endTime = System.currentTimeMillis();
+        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
+        sysQuartzLogService.save(quartzLog);
+    }
 
+    private void generateTechnicalStatusEvaluationOrder(int orderPreGenerationDays, int orderPreLockDays, EamEquipment equipment, AtomicInteger successCount, AtomicInteger failCount, StringBuilder sb) {
+        LocalDate nextTechnologyCheckDate = DateUtils.dateToLocalDate(equipment.getNextTechnologyCheck());
+        LocalDate generateDate = nextTechnologyCheckDate.minusDays(orderPreGenerationDays);
+        LocalDate lockDate = nextTechnologyCheckDate.minusDays(orderPreLockDays);
+        if (LocalDate.now().equals(generateDate)) {
+            //璁$畻褰撳ぉ闇�瑕佺敓鎴�
+            EamTechnicalStatusEvaluationStandard standard = evaluationStandardService.queryEnableStandard(equipment.getId());
+            if(standard == null) {
+                log.warn("璁惧锛歿}锛屾湭閰嶇疆鎶�鏈姸鎬侀壌瀹氳鑼冿紝鏃犳硶鐢熸垚鎶�鏈壌瀹氬伐鍗曪紒鏃ユ湡锛歿}", equipment.getEquipmentCode(), DateUtils.date2Str(DateUtils.date_sdf.get()));
+                failCount.incrementAndGet();
+                sb.append("璁惧锛�").append(equipment.getEquipmentCode()).append("锛屾湭閰嶇疆鎶�鏈姸鎬侀壌瀹氳鑼冿紝鏃犳硶鐢熸垚鎶�鏈壌瀹氬伐鍗曪紒");
+                return;
+            }
+            EamTechnicalStatusEvaluationOrderRequest request = new EamTechnicalStatusEvaluationOrderRequest();
+            request.setEquipmentId(equipment.getId());
+            request.setStandardId(standard.getId());
+            request.setEvaluationDate(DateUtils.localDateToDate(generateDate));
+            request.setFreezeOrderDate(DateUtils.localDateToDate(lockDate));
+            request.setOrderExpirationDate(equipment.getNextTechnologyCheck());
+            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
+            try {
+                evaluationOrderService.addTechnicalStatusEvaluationOrder(request);
+                successCount.incrementAndGet();
+            } catch (Exception e) {
+                log.error("鐢熸垚鎶�鏈姸鎬侀壌瀹氬伐鍗曞け璐ワ紝鍘熷洜锛歿}", e.getMessage(), e);
+                failCount.incrementAndGet();
+                sb.append("鐢熸垚鎶�鏈姸鎬侀壌瀹氬伐鍗曞け璐ワ紝鍘熷洜锛�").append(e.getMessage()).append("锛�");
+            }
+        }
     }
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamTechnicalStatusEvaluationOrderRequest.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamTechnicalStatusEvaluationOrderRequest.java
index f5b319d..69afb5b 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamTechnicalStatusEvaluationOrderRequest.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamTechnicalStatusEvaluationOrderRequest.java
@@ -37,6 +37,16 @@
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date evaluationDate;
+    /**閿佸畾宸ュ崟鏃ユ湡;鎻愬墠55澶╅攣瀹氬伐鍗�*/
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "閿佸畾宸ュ崟鏃ユ湡;鎻愬墠55澶╅攣瀹氬伐鍗�")
+    private Date freezeOrderDate;
+    /**宸ュ崟杩囨湡鏃ユ湡;鍒版湡鏈仛鐩存帴杩囨湡锛屽苟淇敼璁惧鎶�鏈姸鎬佷负绂佺敤*/
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "宸ュ崟杩囨湡鏃ユ湡;鍒版湡鏈仛鐩存帴杩囨湡锛屽苟淇敼璁惧鎶�鏈姸鎬佷负绂佺敤")
+    private Date orderExpirationDate;
     /**閴村畾浜�*/
     @ApiModelProperty(value = "閴村畾浜�")
     private String evaluator;
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java
index 9648448..1ebf51d 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java
@@ -169,10 +169,12 @@
         order.setEquipmentId(request.getEquipmentId());
         order.setStandardId(request.getStandardId());
         order.setEvaluationDate(request.getEvaluationDate());
+        order.setFreezeOrderDate(request.getFreezeOrderDate());
+        order.setOrderExpirationDate(request.getOrderExpirationDate());
         order.setRemark(request.getRemark());
         String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.TECHNICAL_STATUS_EVALUATION_ORDER_CODE_RULE);
         order.setOrderNum(codeSeq);
-        order.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
+        order.setCreationMethod(request.getCreationMethod());
         //鐘舵�佸垵濮嬪寲
         order.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name());
         //鍒犻櫎鏍囪

--
Gitblit v1.9.3