From 2a64b537e8e3bce9ce030585a3da17d48379c0ad Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期一, 26 五月 2025 15:04:45 +0800
Subject: [PATCH] 修改json类型转换错误

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java |  108 +++++++++++++++++++++++++++++++----------------------
 1 files changed, 63 insertions(+), 45 deletions(-)

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 2315067..b492865 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;
@@ -18,6 +20,7 @@
 import com.aps.core.domain.ApsPlate.ApsPlateProcessShopStat;
 import com.aps.core.domain.ApsPlate.ApsPlateProcessStat;
 import com.aps.core.mapper.*;
+import com.aps.core.service.ApsPlate.IApsPlateProcessStatService;
 import com.aps.system.api.domain.SysDictData;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -59,6 +62,9 @@
 
     @Resource
     private ApsPlatePlanMapper apsPlatePlanMapper;
+    @Autowired
+    private IApsPlateProcessStatService apsPlateProcessStatService;
+
 
 
     /**
@@ -132,61 +138,73 @@
     /**
      * 淇濆瓨閽i噾杞﹂棿缁熻
      */
-    @Transactional
+    @Transactional( rollbackFor =Exception.class)
     @Override
     public void saveShopStat() {
-        try {
-            // 寮�濮嬩箣鍓嶅厛鍒犻櫎鎵�鏈夊巻鍙叉暟鎹�
+        // 瀹氫箟璇ュ姛鑳戒娇鐢ㄦ暟鎹簮涓哄崡閫氱殑宸ュ巶
+        final String plant = "FORTUNA";
+        final String major="BJ";
+        // 鏌ヨ鐩稿叧鏁版嵁
+        ApsPlatePlan platePlan = new ApsPlatePlan();
+        platePlan.setPlant(plant);
+        log.info("寮�濮嬫墽琛岄挘閲戣鍒掑ぇ琛�");
+        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()) {
+
+            log.info("閽i噾璁″垝澶ц〃锛氬垹闄ゆ墍鏈夊巻鍙叉暟鎹�");
+            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()
+            log.info("閽i噾璁″垝澶ц〃锛氭帹绠楀�掓帓閽i噾宸ュ簭璁″垝瀹屽伐鏃ユ湡鍜岃鍒掑紑宸ユ椂闂�");
+            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())
                     ));
             // 鎵归噺鎻掑叆缁熻鏁版嵁
+            log.info("閽i噾璁″垝澶ц〃锛氳绠楁瘡涓伐鍗曚腑姣忎釜杞﹂棿鐨勫紑濮嬨�佺粨鏉熸椂闂�");
             List<ApsPlateProcessShopStat> statsToInsert = new ArrayList<>();
-            for (ApsPlatePlan plan : planList) {
-                for (ApsShop shop : shopList) {
+            log.info("閽i噾璁″垝澶ц〃V1锛氬紑濮嬭绠楁瘡涓伐鍗曡溅闂村伐鏃�");
+            planList.stream().parallel().forEach(plan -> {
+                shopList.stream().parallel().forEach(shop -> {
                     ApsPlateProcessShopStat stat = createShopStat(plan, shop, shopToProcessNames, statList);
                     statsToInsert.add(stat);
-                }
+                });
+            });
+            log.info("閽i噾璁″垝澶ц〃锛氭壒閲忎繚瀛樺伐搴忓紑宸ュ拰瀹屽伐鏃堕棿");
+            List<List<ApsPlateProcessStat>> processStatBatchList = ListUtil.split(statList, 1000);
+            processStatBatchList.stream().parallel().forEach(batch -> apsPlateProcessStatMapper.batchInsertPlateStat(batch));
+
+
+            log.info("閽i噾璁″垝澶ц〃锛氭壒閲忎繚瀛樺伐鍗�-杞﹂棿鏃堕棿淇℃伅");
+            List<List<ApsPlateProcessShopStat>> shopStatBatchList = ListUtil.split(statsToInsert, 1000);
+            shopStatBatchList.stream().parallel().forEach(batch -> apsPlateProcessShopStatMapper.batchInsert(batch));
+        }else {
+            if(shopProcesses.isEmpty()){
+                log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌鏍囧噯宸ュ簭鏁版嵁锛�");
+                throw  new RuntimeException("鏈壘鍒版爣鍑嗗伐搴忔暟鎹紒");
             }
-            // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘
-            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);
-                }
+            if(shopList.isEmpty()){
+                log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌杞﹂棿鏁版嵁锛�");
+                throw  new RuntimeException("鏈壘鍒拌溅闂存暟鎹紒");
             }
-        } catch (Exception e) {
-            log.error("淇濆瓨閽i噾杞﹂棿缁熻鏃跺彂鐢熷紓甯�", e);
-            throw new RuntimeException("淇濆瓨閽i噾杞﹂棿缁熻澶辫触", e);
+            if(planList.isEmpty()){
+                log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌宸ュ崟鏁版嵁锛�");
+                throw  new RuntimeException("鏈壘鍒板伐鍗曟暟鎹紒");
+            }
         }
+        log.info("閽i噾璁″垝澶ц〃锛氬畬鎴�");
     }
 
     /**
@@ -205,7 +223,6 @@
         stat.setWorkCenter(plan.getWorkCenter());
         stat.setProcessNumber(plan.getProcessNumber());
         try {
-
 
             List<String> processNames = shopToProcessNames.getOrDefault(shopName, Collections.emptyList());
             if (!processNames.isEmpty()) {
@@ -247,7 +264,8 @@
                 }
             }
         } catch (Exception e) {
-            log.error("computer error:"+ JSONObject.toJSONString(stat));
+            log.error("閽i噾璁″垝澶ц〃 error:"+ JSONObject.toJSONString(stat));
+            throw new RuntimeException("璁$畻杞﹂棿缁熻鏁版嵁寮傚父锛�");
         }
         return stat;
     }
@@ -286,7 +304,7 @@
         List<SysDictData> documentStatusDic = DictUtils.getDictCache("aps_document_status");
 
         // 鏋勫缓缁撴灉鍒楄〃
-        planList.forEach(
+        planList.stream().parallel().forEach(
                  plan -> {
                     // 鏍规嵁 docNo 鑾峰彇瀵瑰簲鐨� shopStatList
                     List<ApsPlateProcessShopStat> shopStatList = shopStatesByDocNo.getOrDefault(plan.getDocumentNumber(), Collections.emptyList());

--
Gitblit v1.9.3