From fc757ded11123dd192a4bf2a36cf3520ac489677 Mon Sep 17 00:00:00 2001
From: 于杰 <1210123631@qq.com>
Date: 星期三, 05 十一月 2025 16:04:42 +0800
Subject: [PATCH] 修改生产可见和取消生产可见功能,解决大量bug

---
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                     |   17 ++++-
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java   |    4 +
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue         |   30 +++++++++
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue   |   25 -------
 north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java |   53 ++++++++++++++++-
 5 files changed, 98 insertions(+), 31 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
index f4014d9..afa7e0c 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
@@ -266,7 +266,35 @@
 };
 
 
-const handleSimulationClick = () => {
+const handleSimulationClick = async () => {
+
+  try {
+    const projectNumber = inputValue.value;
+    if (!projectNumber) {
+      ElMessage.warning('璇疯緭鍏ュ伐绋嬪彿');
+      return;
+    }
+
+    const res = await request.post(`/glassOptimize/getProjectState/${projectNumber}`);
+    if (Number(res.code) === 200) {
+      const projectData = res.data.data;
+
+      // 妫�鏌� tempering_state 鐘舵��
+      if (projectData.tempering_state === 1) {
+        // 濡傛灉宸插畬鎴愭ā鎷熻绠楋紝鎻愮ず鐢ㄦ埛骞堕樆姝㈢户缁墽琛�
+        ElMessage.warning('宸插畬鎴愭ā鎷熻绠楋紝涓嶅厑璁搁噸澶嶈绠�');
+        return;
+      }
+    } else {
+      ElMessage.warning(res.msg);
+      return;
+    }
+  } catch (error) {
+    ElMessage.error('妫�鏌ュ伐绋嬬姸鎬佸け璐ワ紝璇风◢鍚庨噸璇�');
+    console.error('妫�鏌ュ伐绋嬬姸鎬佸け璐�:', error);
+    return;
+  }
+
 
   inputValues.project_no = inputValue.value;
   inputValues.chaos_pct = optionVal.value * 0.01; // 娣锋帓绛夌骇
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
index 0f62169..274dab1 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -446,31 +446,10 @@
 };
 
 const handleCommand = async (command) => {
-  // 褰撻�夋嫨妯℃嫙璁$畻锛坈ommand === 3锛夋椂锛屽厛妫�鏌� tempering_state 鐘舵��
   if (command === 3) {
-    try {
-      const res = await request.post(`/glassOptimize/getProjectState/${projectNo.value}`);
-      if (Number(res.code) === 200) {
-        const projectData = res.data.data;
+    // 鎵ц妯℃嫙璁$畻
+    await emit('changeDialog', command);
 
-        // 妫�鏌� tempering_state 鐘舵��
-        if (projectData.tempering_state === 1) {
-          // 濡傛灉宸插畬鎴愭ā鎷熻绠楋紝鎻愮ず鐢ㄦ埛骞堕樆姝㈡墦寮�
-          ElMessage.warning('宸插畬鎴愭ā鎷熻绠楋紝涓嶅厑璁搁噸澶嶈绠�');
-          return;
-        } else if (projectData.tempering_state === 0) {
-          // 濡傛灉鏈繘琛屾ā鎷熻绠楋紝鍏佽鎵撳紑
-          await emit('changeDialog', command);
-        }
-      } else {
-        ElMessage.warning(res.msg);
-        return;
-      }
-    } catch (error) {
-      ElMessage.error('妫�鏌ュ伐绋嬬姸鎬佸け璐ワ紝璇风◢鍚庨噸璇�');
-      console.error('妫�鏌ュ伐绋嬬姸鎬佸け璐�:', error);
-      return;
-    }
   } else {
     // 鍏朵粬鍛戒护鐩存帴鎵ц
     await emit('changeDialog', command);
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
index 13558ff..1b63367 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -214,7 +214,7 @@
 
     void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness, int stockId);
 
-    void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults);
+    void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults,double totalArea );
 
     List<Map<String, Object>> getReportDataProcessIdSv(String processId);
 
@@ -237,4 +237,6 @@
     Map<String, Object> getGlassProjectList(String projectId);
 
     Map<String, Object> getProjectState(String projectNo);
+
+    void updateProjectTemperingId(String projectNumber);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
index 1d8bbb9..f25f35d 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -367,8 +367,22 @@
                 // tempering_state 涓� 0 鏃剁殑澶勭悊閫昏緫
                 glassOptimizeMapper.addOptimizeDetail(allGlassDetails,projectId);
             }
-
-            glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults);
+            List<Map<String, Object>> materialStoreList = glassOptimizeMapper.materialStoreOptimizeUse(projectId);
+            double totalUseArea = 0.0;
+            for (Map<String, Object> material : materialStoreList) {
+                if (material.containsKey("totalArea")) {
+                    Object totalAreaObj = material.get("totalArea");
+                    if (totalAreaObj != null) {
+                        try {
+                            double area = Double.parseDouble(totalAreaObj.toString());
+                            totalUseArea += area;
+                        } catch (NumberFormatException e) {
+                            System.err.println("鏃犳硶瑙f瀽鎬婚潰绉暟鎹�: " + totalAreaObj);
+                        }
+                    }
+                }
+            }
+            glassOptimizeMapper.updateProjectOptimize(projectId, 1, optimalResults, totalUseArea);
             return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -718,6 +732,22 @@
                 glassOptimizeMapper.deleteOptimizeHeatDetail(projectNumber);
                 glassOptimizeMapper.deleteOptimizeHeatLayout(projectNumber);
                 glassOptimizeMapper.updateProjectTemperingStateMp(projectNumber, states);
+                Map<String, Object> temperingState = glassOptimizeMapper.getProjectState(projectNumber);
+
+                if (temperingState != null && temperingState.containsKey("optimize_state")) {
+                    Object optimizeStateObj = temperingState.get("optimize_state");
+                    if (optimizeStateObj != null) {
+                        try {
+                            int optimizeState = Integer.parseInt(optimizeStateObj.toString());
+                            if (optimizeState == 1) {
+                                glassOptimizeMapper.updateProjectTemperingId(projectNumber);
+                            }
+                        } catch (NumberFormatException e) {
+                            // 澶勭悊杞崲寮傚父锛岃褰曟棩蹇楁垨閲囧彇鍏朵粬閫傚綋鎺柦
+                            System.err.println("瑙f瀽 optimize_state 澶辫触: " + e.getMessage());
+                        }
+                    }
+                }
             }
             //鎾ら攢浼樺寲鎺掔増
             else if(code==2){
@@ -739,7 +769,22 @@
             }
             //鐢熶骇涓嶅彲瑙�
             else if(code==4){
-                glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
+                Map<String, Object> cancelResult = issuingCancelProject(projectNumber);
+                // 鑾峰彇杩斿洖缁撴灉涓殑data瀛楁
+                Map<String, Object> responseData = (Map<String, Object>) cancelResult.get("data");
+
+                // 妫�鏌ュ搷搴斾腑鐨刢ode瀛楁锛屽彧鏈夊綋code涓�200鎴�202鏃舵墠鍏佽鏇存柊鐘舵��
+                if (responseData != null && responseData.containsKey("code")) {
+                    Object responseCode = responseData.get("code");
+                    if (responseCode.equals(200) || responseCode.equals(202)) {
+                        glassOptimizeMapper.updateProjectStateMp(projectNumber, state);
+                    }else {
+                        return false;
+                    }
+                } else {
+                    return false;
+                }
+
             }
             //鍒濆鍖栧伐绋�
             else if(code==5){
@@ -1198,6 +1243,7 @@
             // 1. 鍒涘缓URL瀵硅薄
 //            URL url = new URL("http://10.153.19.31:88/api/loadGlass/engineering/importEngineer");
             URL url = new URL("http://localhost:88/api/loadGlass/engineering/importEngineer");
+
             // 2. 鎵撳紑杩炴帴
             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
             conn.setRequestMethod("POST");
@@ -1437,6 +1483,7 @@
 //            URL url = new URL("http://10.153.19.31:88/api/loadGlass/engineering/optimizeCancelTask");
             URL url = new URL("http://localhost:88/api/loadGlass/engineering/optimizeCancelTask");
 
+
             // 2. 鎵撳紑杩炴帴
             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
             conn.setRequestMethod("POST");
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index 32d8197..aa53310 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -582,7 +582,8 @@
                ou.right_trim as rightTrim,
                JSON_EXTRACT(ms.json, '$.thickness') AS thickness,
                JSON_EXTRACT(ms.json, '$.name') AS name,
-               JSON_EXTRACT(ms.json, '$.model') AS model
+               JSON_EXTRACT(ms.json, '$.model') AS model,
+               (ou.width * ou.height * ou.use_count / 1000000.0) AS totalArea
         from pp.optimize_use ou
             left join mm.material_store ms on ou.raw_stock_code=ms.id where project_no=#{projectNumber} and state=1
     </select>
@@ -795,7 +796,9 @@
     <!--淇敼妯℃嫙璁$畻宸ョ▼鐘舵��-->
     <update id="updateProjectTemperingStateMp">
         update pp.optimize_project as p
-        set p.tempering_state = #{states}
+        set p.tempering_state = #{states},
+            p.load_rate = NULL,
+            p.furnaces_qty = NULL
         where p.project_no = #{projectNumber}
     </update>
 
@@ -1560,8 +1563,15 @@
             p.avg_cut_pct = #{optimalResults.avgCutRate},
             p.valid_cut_pct = #{optimalResults.validCutRate},
             p.last_cut_pct = #{optimalResults.lastCutRate},
-            p.raw_stock_qty = #{optimalResults.totalQuantity}
+            p.raw_stock_qty = #{optimalResults.totalQuantity},
+            p.raw_stock_area = #{totalArea}
         where p.project_no = #{projectId}
+    </update>
+    <update id="updateProjectTemperingId">
+        UPDATE pp.optimize_detail
+        SET heat_layout_id = NULL,
+            heat_layout_sort = NULL
+        WHERE project_no = #{projectNumber}
     </update>
 
     <select id="simulatedTypesettingUsingOpt">
@@ -1810,6 +1820,7 @@
 
 
     <select id="selectOptimizeDetail">
+
         select
             opd.glass_id as glassId,
             opd.project_no as engineerId,

--
Gitblit v1.8.0