From cfd01ea8a1ddd581273d4dbc6305416e9d4852dc Mon Sep 17 00:00:00 2001
From: 于杰 <1210123631@qq.com>
Date: 星期三, 24 九月 2025 10:44:10 +0800
Subject: [PATCH] 解决优化部分调整之后余料数量异常问题,增加优化部分设置标签选项

---
 north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml                     |   10 +-
 north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java   |    2 
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue      |   30 ++++++++-
 north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java |    8 +-
 north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue        |  125 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 162 insertions(+), 13 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
index 673bb79..b5a8092 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
@@ -40,6 +40,14 @@
 
 // const fileSaveMode = ref(1);
 const fileMode = ref();
+const haveMark = ref();
+const haveOptimaMark = ref();
+const haveQMark = ref();
+const glassIdMode = ref();
+const optimaMarkPosition = ref();
+const optimaMarkName = ref();
+const optimaMarkWidth = ref();
+const optimaMarkHeight = ref();
 
 const userStore = useUserInfoStore()
 const username = userStore.user.userName;
@@ -108,9 +116,15 @@
       }
       const parsedData = JSON.parse(response.data);
       console.log('璁剧疆鍐呭:', parsedData);
-      if (parsedData.server && parsedData.server.fileMode) {
-        fileMode.value = parsedData.server.fileMode;
-      }
+      fileMode.value = parsedData.server.fileMode;
+      haveMark.value = parsedData.server.haveMark;
+      haveOptimaMark.value = parsedData.server.haveOptimaMark;
+      haveQMark.value = parsedData.server.haveQMark;
+      glassIdMode.value = parsedData.server.glassIdMode;
+      optimaMarkPosition.value = parsedData.server.optimaMarkPosition;
+      optimaMarkName.value = parsedData.server.optimaMarkName;
+      optimaMarkWidth.value = parsedData.server.optimaMarkWidth;
+      optimaMarkHeight.value = parsedData.server.optimaMarkHeight;
     } else {
       console.error('璇锋眰澶辫触锛岀姸鎬佺爜:', response.code);
     }
@@ -165,12 +179,20 @@
     console.log("鎻愪氦鏁版嵁:", optimizeLayouts);
     const response = await requestOptimize.post('api/cutFiles', {
       fileName: processId,
+      projectNo: processId,
       glassThickness:inventoryData.value[0].thickness,
       glassType:inventoryData.value[0].model,
       quantity: inventoryData.value[0].processingQuantity,
       fileType:"OPT",
       fileSaveMode:fileMode.value,
-      glassIdMode:1,
+      glassIdMode:glassIdMode.value,
+      haveMark:haveMark.value,
+      haveOptimaMark:haveOptimaMark.value,
+      haveQMark:haveQMark.value,
+      optimaMarkPosition:optimaMarkPosition.value,
+      optimaMarkName:optimaMarkName.value,
+      optimaMarkWidth:optimaMarkWidth.value,
+      optimaMarkHeight:optimaMarkHeight.value,
       layouts: optimizeLayouts.value.layouts
     }, {
       headers: {
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
index a1a2143..98c5b49 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
@@ -264,6 +264,131 @@
               <label for="multiFile">澶氭枃浠�</label>
             </div>
           </div>
+          <div style="border: 2px solid #d2d0d0; margin-top: 10px;padding: 4px; border-radius: 8px;">
+            <div class="form-group">
+              <label>鏄惁鎵撴爣</label>
+              <div style="margin-left: 3px;"></div>
+              <div class="radio-group">
+                <input
+                    type="radio"
+                    id="singleFile"
+                    value="0"
+                    v-model="settings.server.haveMark"
+                />
+                <label for="singleFile">鏄�</label>
+
+                <input
+                    type="radio"
+                    id="multiFile"
+                    value="1"
+                    v-model="settings.server.haveMark"
+                    style="margin-left: 20px;"
+                />
+                <label for="multiFile">鍚�</label>
+              </div>
+            </div>
+            <div class="form-group">
+              <label>鏄惁鐢熸垚OPTIMA鎵撴爣淇℃伅</label>
+              <div style="margin-left: 3px;"></div>
+              <div class="radio-group">
+                <input
+                    type="radio"
+                    id="singleFile"
+                    value="0"
+                    v-model="settings.server.haveOptimaMark"
+                />
+                <label for="singleFile">鏄�</label>
+
+                <input
+                    type="radio"
+                    id="multiFile"
+                    value="1"
+                    v-model="settings.server.haveOptimaMark"
+                    style="margin-left: 20px;"
+                />
+                <label for="multiFile">鍚�</label>
+              </div>
+            </div>
+            <div class="form-group">
+              <label>鏄惁鐢熸垚閫熷埢鎵撴爣淇℃伅</label>
+              <div style="margin-left: 28px;"></div>
+              <div class="radio-group">
+                <input
+                    type="radio"
+                    id="singleFile"
+                    value="0"
+                    v-model="settings.server.haveQMark"
+                />
+                <label for="singleFile">鏄�</label>
+
+                <input
+                    type="radio"
+                    id="multiFile"
+                    value="1"
+                    v-model="settings.server.haveQMark"
+                    style="margin-left: 20px;"
+                />
+                <label for="multiFile">鍚�</label>
+              </div>
+            </div>
+            <div class="form-group">
+              <label>鐜荤拑ID妯″紡</label>
+              <div style="margin-left: 28px;"></div>
+              <div class="radio-group">
+                <input
+                    type="radio"
+                    id="singleFile"
+                    value="1"
+                    v-model="settings.server.glassIdMode"
+                />
+                <label for="singleFile">鍥哄畾闀垮害</label>
+
+                <input
+                    type="radio"
+                    id="multiFile"
+                    value="2"
+                    v-model="settings.server.glassIdMode"
+                    style="margin-left: 20px;"
+                />
+                <label for="multiFile">鑷姩闀垮害</label>
+              </div>
+            </div>
+            <div class="form-group">
+              <label>榛樿浜岀淮鐮佷綅缃�</label>
+              <div style="margin-left: 28px;"></div>
+              <div class="radio-group">
+                <input
+                    type="radio"
+                    id="singleFile"
+                    value="1"
+                    v-model="settings.server.optimaMarkPosition"
+                />
+                <label for="singleFile">闀胯竟瀵硅</label>
+
+                <input
+                    type="radio"
+                    id="multiFile"
+                    value="2"
+                    v-model="settings.server.optimaMarkPosition"
+                    style="margin-left: 20px;"
+                />
+                <label for="multiFile">闀胯竟鍚岃竟</label>
+              </div>
+            </div>
+            <div class="form-group">
+              <label>浜岀淮鐮佹枃浠跺悕绉�(.ez3)</label>
+              <input type="text" v-model="settings.server.optimaMarkName" />
+            </div>
+            <div class="form-group">
+              <label>瀹�(mm)</label>
+              <input type="text" v-model="settings.server.optimaMarkWidth" />
+            </div>
+            <div class="form-group">
+              <label>楂�(mm)</label>
+              <input type="text" v-model="settings.server.optimaMarkHeight" />
+            </div>
+          </div>
+
           <div class="form-group">
             <label>宸ョ▼鏂囦欢淇濆瓨璺緞</label>
             <input type="text" v-model="settings.server.output_format" />
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 6502aa7..a18f3cd 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
@@ -212,7 +212,7 @@
 
     void deleteOffcutDetails(String processId);
 
-    void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness);
+    void addUpdateOffcut(Map<String, Object> detail, String processId, String glassType, String glassThickness, int stockId);
 
     void updateProjectOptimize(String projectId, Integer states, Map<String, Object> optimalResults);
 }
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 377f98d..a83f3fe 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
@@ -365,7 +365,9 @@
             List<Map<String, Object>> objectMapList = (List<Map<String, Object>>) object.get("layouts");
 
             Map<String, Object> glassInfo = glassOptimizeMapper.getGlassInfo(processId);
+            glassOptimizeMapper.deleteOffcutDetails(processId);
 
+            int stockId = 1;
             for (Map<String, Object> objectMap : objectMapList) {
                 List<Map<String, Object>> objectMap2 = (List<Map<String, Object>>) objectMap.get("glassDetails");
 
@@ -406,18 +408,18 @@
                     }
                 }
 
-                // 渚嬪瀵� remainDetails 閮ㄥ垎鍏堝垹闄� offcut 鍐嶅鐞�
+                // 瀵� remainDetails 閮ㄥ垎鍏堝垹闄� offcut 鍐嶅鐞�
                 if (!offCutDetails.isEmpty()) {
-                    glassOptimizeMapper.deleteOffcutDetails(processId);
                     if (glassInfo != null) {
                         String glassType = (String) glassInfo.get("glass_type");
                         String glassThickness = (String) glassInfo.get("glass_thickness");
                         // 浣欐枡瀛樺叆optimizeoffcut
                         for (Map<String, Object> detail : offCutDetails) {
-                            glassOptimizeMapper.addUpdateOffcut(detail, processId, glassType, glassThickness);
+                            glassOptimizeMapper.addUpdateOffcut(detail, processId, glassType, glassThickness, stockId);
                         }
                     }
                 }
+                stockId++;
             }
             // 鏇存柊浼樺寲缁撴灉鏂囦欢
             String jsonString = mapper.writeValueAsString(object);
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 288f536..f4951e2 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1413,7 +1413,7 @@
             thickness
         ) VALUES (
                      #{processId},
-                     1,
+                     #{stockId},
                      #{detail.width},
                      #{detail.height},
                      #{detail.x},
@@ -1920,11 +1920,11 @@
             od.rack_no AS rackNo
         FROM
             pp.optimize_detail od
-                LEFT JOIN pp.flow_card fc on od.process_id = fc.process_id
-                LEFT JOIN sd.order_glass_detail ogd ON fc.order_id = ogd.order_id
+                LEFT JOIN pp.flow_card fc on (od.process_id = fc.process_id and od.layer = fc.technology_number and od.order_sort = fc.order_number )
+                LEFT JOIN sd.order_glass_detail ogd ON (fc.order_id = ogd.order_id and od.order_sort = ogd.order_number)
                 LEFT JOIN sd.ORDER o ON o.order_id = fc.order_id
-                LEFT JOIN sd.order_detail ord ON fc.order_id = ord.order_id
-                LEFT JOIN pp.optimize_heat_detail h ON h.process_id = fc.process_id
+                LEFT JOIN sd.order_detail ord ON (fc.order_id = ord.order_id  and od.order_sort = ord.order_number)
+                LEFT JOIN pp.optimize_heat_detail h ON (h.process_id = fc.process_id  and od.order_sort = h.sort)
         WHERE
             od.project_no =  #{projectId}
     </select>

--
Gitblit v1.8.0