From 52aa02cfdb3a70811140e775b947f2200ca8a3eb Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期五, 23 五月 2025 14:21:43 +0800
Subject: [PATCH] [钣金计划大表] 优化更新逻辑

---
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java     |    2 
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java           |   15 +------
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java                               |    2 +
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java |    9 +++-
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java       |   82 +++++++++++++++++++++--------------------
 aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java                   |    4 +-
 aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml                          |    4 +
 7 files changed, 59 insertions(+), 59 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java
index ab26b2a..931dbc8 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessShopStatController.java
@@ -52,8 +52,13 @@
     @PostMapping("/update")
     public AjaxResult update()
     {
-        apsPlateProcessShopStatService.saveShopStat();
-        return toAjax(true);
+        try {
+            apsPlateProcessShopStatService.saveShopStat();
+            return toAjax(true);
+        } catch (Exception e) {
+          return AjaxResult.error("鏇存柊澶辫触锛�"+e.getMessage());
+        }
+
     }
 
     /**
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java
index 2b8ae88..874a4bc 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateProcessStatController.java
@@ -89,7 +89,7 @@
     @PostMapping("/update")
     public AjaxResult updateStat()
     {
-        apsPlateProcessStatService.savePlateProcessStat();
+        apsPlateProcessStatService.computePlateProcessStat();
         return toAjax(true);
     }
     /**
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
index 5f3df07..d844106 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
@@ -73,4 +73,6 @@
      * 鎵归噺鎻掑叆鏁版嵁
      * */
     int batchInsertPlateStat(List<ApsPlateProcessStat> list);
+
+    int deleteAll();
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java
index e8b73bb..aa0add2 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/IApsPlateProcessStatService.java
@@ -60,6 +60,6 @@
      */
     public int deleteApsPlateProcessStatById(String id);
 
-    @Transactional
-    void savePlateProcessStat();
+
+    List<ApsPlateProcessStat> computePlateProcessStat();
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java
index 2436835..49350cd 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java
@@ -5,6 +5,8 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.nacos.common.utils.JacksonUtils;
@@ -136,38 +138,34 @@
     /**
      * 淇濆瓨閽i噾杞﹂棿缁熻
      */
-    @Transactional
+    @Transactional( rollbackFor =Exception.class)
     @Override
     public void saveShopStat() {
-        try {
-            apsPlateProcessStatService.savePlateProcessStat();
+        // 瀹氫箟璇ュ姛鑳戒娇鐢ㄦ暟鎹簮涓哄崡閫氱殑宸ュ巶
+        final String plant = "FORTUNA";
+        final String major="BJ";
+        // 鏌ヨ鐩稿叧鏁版嵁
+        ApsPlatePlan platePlan = new ApsPlatePlan();
+        platePlan.setPlant(plant);
+        List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan);
+
+        ApsShop apsShop = new ApsShop();
+        apsShop.setPlantCode(plant);
+        List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop);
+
+        ApsStandardProcess process = new ApsStandardProcess();
+        process.setPlant(plant);
+        process.setMajor(major);
+
+        List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process);
+
+        if (!planList.isEmpty() &&  !shopList.isEmpty() &&  !shopProcesses.isEmpty()) {
             // 寮�濮嬩箣鍓嶅厛鍒犻櫎鎵�鏈夊巻鍙叉暟鎹�
+            apsPlateProcessStatMapper.deleteAll();
             apsPlateProcessShopStatMapper.deleteAll();
-
-            // 瀹氫箟璇ュ姛鑳戒娇鐢ㄦ暟鎹簮涓哄崡閫氱殑宸ュ巶
-            final String plant = "FORTUNA";
-            final String major="閽i噾";
-            // 鏌ヨ鐩稿叧鏁版嵁
-            ApsPlatePlan platePlan = new ApsPlatePlan();
-            platePlan.setPlant(plant);
-            List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan);
-
-            List<ApsPlateProcessStat> statList = apsPlateProcessStatMapper.selectApsPlateProcessStatList(new ApsPlateProcessStat());
-
-            ApsShop apsShop = new ApsShop();
-            apsShop.setPlantCode(plant);
-            List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop);
-
-            ApsStandardProcess process = new ApsStandardProcess();
-            process.setPlant(plant);
-            process.setMajor(major);
-            List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process);
-            if (planList.isEmpty() || shopList.isEmpty() || shopProcesses.isEmpty()) {
-                log.warn("璁″垝鍒楄〃銆佽溅闂村垪琛ㄦ垨宸ュ簭鍒楄〃涓虹┖锛屾棤娉曠敓鎴愮粺璁′俊鎭�");
-                return;
-            }
-            // 鏋勫缓杞﹂棿鍚嶇О鍒板伐搴忓悕绉扮殑鏄犲皠
-            Map<String, List<String>> shopToProcessNames = shopProcesses.stream()
+            List<ApsPlateProcessStat> statList =apsPlateProcessStatService.computePlateProcessStat();
+                // 鏋勫缓杞﹂棿鍚嶇О鍒板伐搴忓悕绉扮殑鏄犲皠
+            Map<String, List<String>> shopToProcessNames = shopProcesses.stream().filter(x -> null!=x.getWorkShop())
                     .collect(Collectors.groupingBy(ApsStandardProcess::getWorkShop,
                             Collectors.mapping(ApsStandardProcess::getProcessName, Collectors.toList())
                     ));
@@ -179,18 +177,22 @@
                     statsToInsert.add(stat);
                 }
             }
-            // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘
-            if (!statsToInsert.isEmpty()) {
-                int batchSize = 1000;
-                for (int i = 0; i < statsToInsert.size(); i += batchSize) {
-                    int end = Math.min(i + batchSize, statsToInsert.size());
-                    List<ApsPlateProcessShopStat> batch = statsToInsert.subList(i, end);
-                    apsPlateProcessShopStatMapper.batchInsert(batch);
-                }
+            List<List<ApsPlateProcessStat>> processStatBatchList = ListUtil.split(statList, 1000);
+            processStatBatchList.forEach(batch -> apsPlateProcessStatMapper.batchInsertPlateStat(batch));
+
+
+            List<List<ApsPlateProcessShopStat>> shopStatBatchList = ListUtil.split(statsToInsert, 1000);
+            shopStatBatchList.forEach(batch -> apsPlateProcessShopStatMapper.batchInsert(batch));
+        }else {
+            if(shopProcesses.isEmpty()){
+                throw  new RuntimeException("鏈壘鍒版爣鍑嗗伐搴忔暟鎹紒");
             }
-        } catch (Exception e) {
-            log.error("淇濆瓨閽i噾杞﹂棿缁熻鏃跺彂鐢熷紓甯�", e);
-            throw new RuntimeException("淇濆瓨閽i噾杞﹂棿缁熻澶辫触", e);
+            if(shopList.isEmpty()){
+                throw  new RuntimeException("鏈壘鍒拌溅闂存暟鎹紒");
+            }
+            if(planList.isEmpty()){
+                throw  new RuntimeException("鏈壘鍒板伐鍗曟暟鎹紒");
+            }
         }
     }
 
@@ -210,7 +212,6 @@
         stat.setWorkCenter(plan.getWorkCenter());
         stat.setProcessNumber(plan.getProcessNumber());
         try {
-
 
             List<String> processNames = shopToProcessNames.getOrDefault(shopName, Collections.emptyList());
             if (!processNames.isEmpty()) {
@@ -253,6 +254,7 @@
             }
         } catch (Exception e) {
             log.error("computer error:"+ JSONObject.toJSONString(stat));
+            throw new RuntimeException("璁$畻杞﹂棿缁熻鏁版嵁寮傚父锛�");
         }
         return stat;
     }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java
index 410a1d6..55507be 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessStatServiceImpl.java
@@ -107,12 +107,10 @@
     /**
      * 淇濆瓨閽i噾缁熻鏁版嵁
      */
-    @Transactional
     @Override
-    public void savePlateProcessStat() {
+    public List<ApsPlateProcessStat> computePlateProcessStat() {
         String batchNum = IdUtils.fastSimpleUUID();
         List<ApsPlateProcessStat> tempList = apsPlateProcessStatMapper.queryTempStat();
-        ApsPlateProcessStat apsPlateProcessStat = tempList.stream().filter(x -> x.getWorkOrderNo().equals("MO-250409003498")).findFirst().get();
         Map<String, List<ApsPlateProcessStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo));
         Boolean hasBefore = false;
         LocalDateTime now = LocalDateTime.now();
@@ -186,16 +184,7 @@
             }
             hasBefore=false;
         }
-        apsPlateProcessStatMapper.removeOtherStat(batchNum);
-        if(!totalList.isEmpty()){
-            int batchSize = 1000;
-            totalList.forEach(x->x.setId(String.valueOf(IdUtil.getSnowflakeNextId())));
-            for (int i = 0; i < totalList.size(); i += batchSize) {
-                int end = Math.min(i + batchSize, totalList.size());
-                List<ApsPlateProcessStat> batch = totalList.subList(i, end);
-                apsPlateProcessStatMapper.batchInsertPlateStat(batch);
-            }
-        }
+        return totalList;
     }
 
 
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
index 2db812a..5eefeb2 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
@@ -160,7 +160,9 @@
     <update id="removeOtherStat" parameterType="String">
         delete from aps_plate_process_stat where batch_number != #{batchNumber}
     </update>
-
+    <update id="deleteAll" parameterType="String">
+        delete from aps_plate_process_stat
+    </update>
     <insert id="batchInsertPlateStat" parameterType="com.aps.core.domain.ApsPlate.ApsPlateProcessStat">
         insert into aps_plate_process_stat
         (

--
Gitblit v1.9.3