From bc0fdd1f0c20ca4737e8f073050f37b27a658694 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期四, 22 五月 2025 16:31:12 +0800
Subject: [PATCH] 管路&气柜产能负载优化,实现动态row聚合统计

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java |   65 +++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 18 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
index 0fa2422..99c75aa 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
@@ -1316,10 +1316,18 @@
         String timeGranularity = params.containsKey("timeGranularity") ? 
                 (String) params.get("timeGranularity") : "day"; // 榛樿涓�"鏃�"绮掑害
         
+        // 鑾峰彇row缁村害鐨勮仛鍚堝瓧娈� - 榛樿涓哄伐搴忓悕绉�(processName)
+        String rowGroupBy = params.containsKey("rowGroupBy") ? 
+                (String) params.get("rowGroupBy") : "processName";
+        
         // 纭畾鍒嗙粍缁村害 - 宸ュ巶銆佷笓涓氥�佽溅闂�
         boolean groupByPlant = params.containsKey("groupByPlant") && Boolean.TRUE.equals(params.get("groupByPlant"));
         boolean groupByMajor = params.containsKey("groupByMajor") && Boolean.TRUE.equals(params.get("groupByMajor"));
         boolean groupByWorkshop = params.containsKey("groupByWorkshop") && Boolean.TRUE.equals(params.get("groupByWorkshop"));
+        // 濡傛灉rowGroupBy宸茬粡鏄煇涓淮搴︼紝鍒欒缁村害涓嶉渶瑕佸啀娆″垎缁�
+        if ("plant".equals(rowGroupBy)) groupByPlant = false;
+        if ("major".equals(rowGroupBy)) groupByMajor = false;
+        if ("workshop".equals(rowGroupBy)) groupByWorkshop = false;
         
         // 鏋勫缓鏌ヨ鏉′欢
         Map<String, Object> queryParams = new HashMap<>();
@@ -1444,31 +1452,45 @@
         }
         
         // 鍦⊿ervice灞傚畬鎴愯仛鍚�
-        // 浣跨敤缁勫悎key鏉ュ疄鐜板缁村害鍒嗙粍锛堝伐搴忓悕 + 鍙�夌殑宸ュ巶/涓撲笟/杞﹂棿锛�
+        // 浣跨敤缁勫悎key鏉ュ疄鐜板缁村害鍒嗙粍锛堝姩鎬乺owGroupBy瀛楁 + 鍙�夌殑宸ュ巶/涓撲笟/杞﹂棿锛�
         Map<String, Map<String, Object>> groupInfoMap = new HashMap<>();
         Map<String, Map<String, BigDecimal>> groupTimeDataMap = new HashMap<>();
         
         // 閬嶅巻鍘熷鏁版嵁锛屾寜澶氱淮搴﹀垎缁勮繘琛岃仛鍚�
         for (Map<String, Object> data : rawData) {
+            // 杩囨护宸ュ簭鍚嶇О涓虹┖鐨勬暟鎹�
             String processName = getStringValue(data, "processName");
-            if (processName == null) {
-                log.warn("璺宠繃澶勭悊锛氬伐搴忓悕绉颁负null");
+            if (processName == null || processName.trim().isEmpty()) {
+                log.warn("璺宠繃澶勭悊锛氬伐搴忓悕绉颁负绌�");
+                continue;
+            }
+            
+            // 杩囨护杞﹂棿涓虹┖鐨勬暟鎹�
+            String workshop = getStringValue(data, "workshop");
+            if (workshop == null || workshop.trim().isEmpty()) {
+                log.warn("璺宠繃澶勭悊锛氳溅闂翠负绌猴紝宸ュ簭鍚嶇О={}", processName);
+                continue;
+            }
+            
+            // 鑾峰彇琛屽垎缁勫瓧娈靛��
+            String rowGroupValue = getStringValue(data, rowGroupBy);
+            if (rowGroupValue == null) {
+                log.warn("璺宠繃澶勭悊锛歿} 瀛楁鍊间负null", rowGroupBy);
                 continue;
             }
             
             // 澶勭悊寮�宸ユ棩鏈�
             Date processPlanStartDay = (Date) data.get("processPlanStartDay");
             if (processPlanStartDay == null) {
-                log.warn("璺宠繃澶勭悊锛氳鍒掑紑宸ユ棩涓簄ull, processName={}", processName);
+                log.warn("璺宠繃澶勭悊锛氳鍒掑紑宸ユ棩涓簄ull, {}={}", rowGroupBy, rowGroupValue);
                 continue;
             }
             
-            // 鏋勫缓鍒嗙粍閿� - 鍩轰簬宸ュ簭鍚嶅拰鍙�夌殑鍏朵粬缁村害
+            // 鏋勫缓鍒嗙粍閿� - 鍩轰簬row鍒嗙粍瀛楁鍜屽彲閫夌殑鍏朵粬缁村害
             String plant = getStringValue(data, "plant");
             String major = getStringValue(data, "major");
-            String workshop = getStringValue(data, "workshop");
             
-            StringBuilder groupKeyBuilder = new StringBuilder(processName);
+            StringBuilder groupKeyBuilder = new StringBuilder(rowGroupValue);
             
             // 鏍规嵁鐢ㄦ埛閫夋嫨鐨勫垎缁勭淮搴︽坊鍔犲埌鍒嗙粍閿�
             if (groupByPlant && plant != null) {
@@ -1486,10 +1508,11 @@
             // 璁板綍鍒嗙粍鐨勫熀鏈俊鎭紙鍙褰曚竴娆★級
             if (!groupInfoMap.containsKey(groupKey)) {
                 Map<String, Object> groupInfo = new HashMap<>();
-                groupInfo.put("processName", processName);
+                groupInfo.put(rowGroupBy, rowGroupValue);
                 groupInfo.put("plant", plant);
                 groupInfo.put("major", major);
                 groupInfo.put("workshop", workshop);
+                groupInfo.put("processName", processName);
                 groupInfoMap.put(groupKey, groupInfo);
             }
             
@@ -1521,22 +1544,27 @@
         
         // 鏋勫缓鏈�缁堣繑鍥炵殑鏁版嵁缁撴瀯
         for (String groupKey : groupInfoMap.keySet()) {
-            Map<String, Object> processEntry = new HashMap<>();
-            Map<String, Object> processDetail = new HashMap<>();
+            Map<String, Object> rowEntry = new HashMap<>();
+            Map<String, Object> rowDetail = new HashMap<>();
             
             // 鑾峰彇璇ュ垎缁勭殑鍩烘湰淇℃伅
             Map<String, Object> groupInfo = groupInfoMap.get(groupKey);
-            String processName = (String) groupInfo.get("processName");
+            String rowGroupValue = (String) groupInfo.get(rowGroupBy);
             
-            // 娣诲姞宸ュ簭鍩烘湰淇℃伅
+            // 娣诲姞鍒嗙粍鍩烘湰淇℃伅
             if (groupByPlant) {
-                processDetail.put("plant", groupInfo.get("plant"));
+                rowDetail.put("plant", groupInfo.get("plant"));
             }
             if (groupByMajor) {
-                processDetail.put("major", groupInfo.get("major"));
+                rowDetail.put("major", groupInfo.get("major"));
             }
             if (groupByWorkshop) {
-                processDetail.put("workshop", groupInfo.get("workshop"));
+                rowDetail.put("workshop", groupInfo.get("workshop"));
+            }
+            
+            // 淇濈暀宸ュ簭鍚嶇О淇℃伅锛屼互渚垮墠绔睍绀�
+            if (!"processName".equals(rowGroupBy)) {
+                rowDetail.put("processName", groupInfo.get("processName"));
             }
             
             // 娣诲姞鏃堕棿鏁版嵁
@@ -1558,13 +1586,14 @@
                 timeDataList.add(pointData);
             }
             
-            processDetail.put("timeData", timeDataList);
-            processEntry.put(processName, processDetail);
-            plantTable.add(processEntry);
+            rowDetail.put("timeData", timeDataList);
+            rowEntry.put(rowGroupValue, rowDetail);
+            plantTable.add(rowEntry);
         }
         
         result.put("plantTable", plantTable);
         result.put("timePoints", timePoints);
+        result.put("rowGroupBy", rowGroupBy);
         
         return result;
     }

--
Gitblit v1.9.3