From 0dfdc8148cc266fd3e877183c5b162fb986d5c65 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 12 十二月 2025 15:38:56 +0800
Subject: [PATCH] 修改导入工程json格式

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/scanner/handler/HorizontalScannerLogicHandler.java |    6 +-
 mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/GlassInfoServiceImpl.java                              |  119 ++++++++++++++++++++++++++++++++-------
 mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java                           |   13 +++-
 mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue                                                 |    2 
 4 files changed, 111 insertions(+), 29 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
index 59670ef..aac3b58 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/controller/GlassInfoImportController.java
@@ -12,9 +12,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -135,12 +133,19 @@
             List<EngineeringSequence> list = engineeringSequenceService.list();
             List<Map<String, Object>> result = list.stream()
                     .map(seq -> {
-                        Map<String, Object> map = new HashMap<>();
+                        Map<String, Object> map = new LinkedHashMap<>();
                         map.put("engineeringId", seq.getEngineeringId());
                         map.put("date", seq.getDate());
                         map.put("sequence", seq.getSequence());
                         return map;
                     })
+                    .sorted(Comparator.comparing(
+                            (Map<String, Object> map) -> (Date) map.get("date"),
+                            Comparator.nullsLast(Comparator.reverseOrder())
+                    ).thenComparing(
+                            map -> (Integer) map.get("sequence"),
+                            Comparator.nullsLast(Comparator.reverseOrder())
+                    ))
                     .collect(Collectors.toList());
             return ResponseEntity.ok(result);
         } catch (Exception e) {
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/GlassInfoServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/GlassInfoServiceImpl.java
index 36e73b8..e0c1ea0 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/GlassInfoServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/GlassInfoServiceImpl.java
@@ -16,6 +16,7 @@
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 import static java.util.stream.IntStream.range;
@@ -241,6 +242,27 @@
         final String filmsIdDefaultFinal = filmsIdDefault;
         final double thicknessDefaultFinal = thicknessDefault;
 
+        // 鐢ㄤ簬鎸� flowCardId 鍏ㄥ眬璁℃暟搴忓彿
+        Map<String, Integer> flowCardSequenceCounter = new HashMap<>();
+        // 鐢ㄤ簬鎸� flowCardId 璁℃暟 temperingFeedSequence
+        Map<String, Integer> temperingFeedSequenceCounter = new HashMap<>();
+        // 鐢ㄤ簬鎸� flowCardId 鍒嗛厤 temperingLayoutId
+        Map<String, Integer> temperingLayoutIdMap = new HashMap<>();
+        AtomicInteger nextTemperingLayoutId = new AtomicInteger(1);
+        
+        // 鍏堝缓绔嬪師鐗囨槧灏勶紝鐢ㄤ簬鍚庣画鍖归厤 rawSequence
+        Map<String, Integer> rawSequenceMap = new HashMap<>();
+        for (Map<String, Object> row : excelRows) {
+            double width = parseDouble(row.get("width"), 0d);
+            double height = parseDouble(row.get("height"), 0d);
+            double thickness = parseDouble(row.get("thickness"), thicknessDefaultFinal);
+            String filmsId = strOrDefault(row.get("filmsId"), filmsIdDefaultFinal);
+            String key = width + "_" + height + "_" + thickness + "_" + filmsId;
+            if (!rawSequenceMap.containsKey(key)) {
+                rawSequenceMap.put(key, rawSequenceMap.size() + 1);
+            }
+        }
+
         List<Map<String, Object>> glassInfolList = excelRows.stream()
                 .flatMap(row -> {
                     Object qtyObj = row.getOrDefault("quantity", 1);
@@ -249,21 +271,41 @@
                     String glassId = str(row.get("glassId"));
                     String filmsId = strOrDefault(row.get("filmsId"), filmsIdDefaultFinal);
                     String flowCardId = str(row.get("flowCardId"));
+                    // orderNumber 鏄暣鍨嬶紙鐜荤拑绫诲瀷锛夛紝浠� Excel 璇诲彇鎴栦娇鐢ㄩ粯璁ゅ�� 1
+                    Object orderNumberObj = row.get("orderNumber");
+                    final Integer finalOrderNumber = orderNumberObj != null 
+                            ? (int) parseDouble(orderNumberObj, 1) 
+                            : 1;
                     String productName = str(row.get("productName"));
                     String customerName = str(row.get("customerName"));
                     double width = parseDouble(row.get("width"), 0d);
                     double height = parseDouble(row.get("height"), 0d);
                     double thickness = parseDouble(row.get("thickness"), thicknessDefaultFinal);
+                    
+                    // 璁$畻 rawSequence
+                    String rawKey = width + "_" + height + "_" + thickness + "_" + filmsId;
+                    Integer rawSequence = rawSequenceMap.get(rawKey);
 
                     int finalQty = qty;
                     log.info("瑙f瀽鍒版暟閲忥細row={}, quantity={}, 鏈�缁坬ty={}", row, qtyObj, finalQty);
                     return range(0, qty).mapToObj(idx -> {
                         String baseGlassId = engineerIdFinal + glassId;
-                        String finalGlassId = finalQty > 1 ? baseGlassId + "_" + (idx + 1) : baseGlassId;
+                        String finalGlassId = finalQty > 1 ? baseGlassId + (idx + 1) : baseGlassId;
 
                         String baseFlowCardId = flowCardId.isEmpty() ? baseGlassId : flowCardId;
-                        String finalFlowCardSequence = baseFlowCardId + "/" + (idx + 1);
-                        String finalFlowCardId = baseFlowCardId;
+                        // 濡傛灉 baseFlowCardId 宸茬粡鍖呭惈灏鹃儴 "/鏁板瓧"锛屽厛鍘绘帀锛屽啀鐢卞悗绔粺涓�杩藉姞搴忓彿
+                        baseFlowCardId = baseFlowCardId.replaceFirst("/\\d+$", "");
+                        // 鎸� flowCardId 鍏ㄥ眬閫掑搴忓彿
+                        int sequenceNum = flowCardSequenceCounter.compute(baseFlowCardId, (k, v) -> (v == null ? 0 : v) + 1);
+                        String finalFlowCardSequence = baseFlowCardId + "/" + 1;
+                        
+                        // 鎸� flowCardId 鍒嗛厤 temperingLayoutId
+                        Integer temperingLayoutId = temperingLayoutIdMap.computeIfAbsent(baseFlowCardId, k -> nextTemperingLayoutId.getAndIncrement());
+                        // 鎸� flowCardId 閫掑 temperingFeedSequence
+                        int temperingFeedSequence = temperingFeedSequenceCounter.compute(baseFlowCardId, (k, v) -> (v == null ? 0 : v) + 1);
+                        
+                        log.debug("鐢熸垚flowCardSequence: idx={}, baseFlowCardId={}, sequenceNum={}, finalFlowCardSequence={}, temperingLayoutId={}, temperingFeedSequence={}", 
+                                idx, baseFlowCardId, sequenceNum, finalFlowCardSequence, temperingLayoutId, temperingFeedSequence);
 
                         Map<String, Object> m = new HashMap<>();
                         m.put("xAxis", 0);
@@ -272,24 +314,25 @@
                         m.put("yCoordinate", 0);
                         m.put("glassId", finalGlassId);
                         m.put("engineerId", engineerIdFinal);
-                        m.put("flowCardId", finalFlowCardId);
-                        m.put("productSortNumber", idx + 1);
-                        m.put("hollowCombineDirection", "0");
+                        m.put("flowCardId", baseFlowCardId);
+                        m.put("orderNumber", finalOrderNumber);
+                        m.put("productSortNumber", 1); // 缁熶竴涓�1
+                        m.put("hollowCombineDirection", "");
                         m.put("width", width);
                         m.put("height", height);
                         m.put("thickness", thickness);
                         m.put("filmsId", filmsId);
-                        m.put("layer", 0);
-                        m.put("totalLayer", 0);
+                        m.put("layer", 1);
+                        m.put("totalLayer", 1);
                         m.put("edgWidth", width);
                         m.put("edgHeight", height);
-                        m.put("isMultiple", 0);
+                        m.put("isMultiple", finalQty > 1 ? 1 : 0); // 鏁伴噺>1鏃朵负1
                         m.put("maxWidth", width);
                         m.put("maxHeight", height);
                         m.put("isHorizontal", 0);
-                        m.put("rawSequence", 0);
-                        m.put("temperingLayoutId", 0);
-                        m.put("temperingFeedSequence", 0);
+                        m.put("rawSequence", rawSequence != null ? rawSequence : 0);
+                        m.put("temperingLayoutId", temperingLayoutId);
+                        m.put("temperingFeedSequence", temperingFeedSequence);
                         m.put("angle", 0);
                         m.put("ruleId", 0);
                         m.put("combine", 0);
@@ -328,19 +371,27 @@
 
         List<Map<String, Object>> engineeringRawQueueList = rawGlassMap.values().stream().collect(Collectors.toList());
 
-        // 娴佺▼鍗′俊鎭�
+        // 娴佺▼鍗′俊鎭紙闇�瑕佺粺璁℃瘡涓� flowCardId 鐨勫疄闄呯幓鐠冩暟閲忥紝鑰冭檻 quantity锛�
         Map<String, Map<String, Object>> flowCardMap = new HashMap<>();
         for (Map<String, Object> row : excelRows) {
             String glassId = str(row.get("glassId"));
             String flowCardId = str(row.get("flowCardId"));
             if (flowCardId.isEmpty()) {
-                flowCardId = glassId;
+                flowCardId = engineerIdFinal + glassId;
             }
+            // 鍘绘帀灏鹃儴 "/鏁板瓧"锛堝鏋滄湁锛�
+            flowCardId = flowCardId.replaceFirst("/\\d+$", "");
+            // orderNumber 鏄暣鍨嬶紙鐜荤拑绫诲瀷锛夛紝浠� Excel 璇诲彇鎴栦娇鐢ㄩ粯璁ゅ�� 1
+            Object orderNumberObj = row.get("orderNumber");
+            Integer orderNumber = orderNumberObj != null 
+                    ? (int) parseDouble(orderNumberObj, 1) 
+                    : 1;
+            Object qtyObj = row.getOrDefault("quantity", 1);
+            int qty = parseDouble(qtyObj, 1) > 0 ? (int) parseDouble(qtyObj, 1) : 1;
             double width = parseDouble(row.get("width"), 0d);
             double height = parseDouble(row.get("height"), 0d);
             double thickness = parseDouble(row.get("thickness"), thicknessDefaultFinal);
             String filmsId = strOrDefault(row.get("filmsId"), filmsIdDefaultFinal);
-
             String productName = str(row.get("productName"));
             String customerName = str(row.get("customerName"));
 
@@ -352,15 +403,16 @@
                 m.put("height", height);
                 m.put("thickness", thickness);
                 m.put("filmsId", filmsId);
-                m.put("totalLayer", 0);
-                m.put("layer", 0);
-                m.put("glassTotal", 1);
+                m.put("totalLayer", 1);
+                m.put("layer", 1);
+                m.put("glassTotal", qty); // 浣跨敤瀹為檯鏁伴噺
+                m.put("orderNumber", orderNumber);
                 m.put("productName", productName);
                 m.put("customerName", customerName);
                 flowCardMap.put(flowCardId, m);
             } else {
-                int count = (int) exist.getOrDefault("glassTotal", 1);
-                exist.put("glassTotal", count + 1);
+                int count = (int) exist.getOrDefault("glassTotal", 0);
+                exist.put("glassTotal", count + qty); // 绱姞鏁伴噺
             }
         }
         List<Map<String, Object>> flowCardInfoList = flowCardMap.values().stream().collect(Collectors.toList());
@@ -374,8 +426,33 @@
                 .mapToDouble(m -> parseDouble(m.get("rawGlassWidth"), 0d) * parseDouble(m.get("rawGlassHeight"), 0d) / 1_000_000d)
                 .sum();
 
+        // 璁$畻鏈�澶ц礋杞藉昂瀵革紙鐢ㄤ簬閽㈠寲鍙傛暟锛�
+        double maxLoadWidth = glassInfolList.stream()
+                .mapToDouble(m -> parseDouble(m.get("width"), 0d))
+                .max().orElse(2000);
+        double maxLoadLength = glassInfolList.stream()
+                .mapToDouble(m -> parseDouble(m.get("height"), 0d))
+                .max().orElse(3000);
+        
+        // 鐢熸垚閽㈠寲鍙傛暟
+        List<Map<String, Object>> temperingParameterList = new ArrayList<>();
+        Map<String, Object> temperingParam = new HashMap<>();
+        temperingParam.put("engineerId", engineerIdFinal);
+        temperingParam.put("heatMode", 1);
+        temperingParam.put("chaosPct", 50);
+        temperingParam.put("maxLoadPct", 100);
+        temperingParam.put("loadWidth", (int) Math.round(maxLoadWidth));
+        temperingParam.put("loadLength", (int) Math.round(maxLoadLength));
+        temperingParam.put("xSpace", 50);
+        temperingParam.put("ySpace", 50);
+        temperingParam.put("rotateMode", 0);
+        temperingParam.put("allowRotate", 0);
+        temperingParam.put("tempering", 1);
+        temperingParam.put("curtainWall", 0);
+        temperingParameterList.add(temperingParam);
+        
         result.put("engineerId", engineerIdFinal);
-        result.put("engineerName", "宸ョ▼_" + engineerIdFinal);
+        result.put("engineerName", thicknessDefaultFinal + "mm" + filmsIdDefaultFinal);
         result.put("avgAvailability", "90");
         result.put("validAvailability", "90");
         result.put("lastAvailability", "90");
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/scanner/handler/HorizontalScannerLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/scanner/handler/HorizontalScannerLogicHandler.java
index 5dd8525..f676a3d 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/scanner/handler/HorizontalScannerLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/scanner/handler/HorizontalScannerLogicHandler.java
@@ -125,7 +125,7 @@
             clearPlcRequestFields(deviceConfig, serializer);
             return buildResult(deviceConfig, "scanOnce", false, "MES鍐欏尯鏈彁渚涚幓鐠僆D", null);
         }
-        // 璇诲彇MES灏哄鏁版嵁锛歮esWidth=琛ㄥ锛宮esHeight=闀�
+        // 璇诲彇MES灏哄鏁版嵁锛歮esWidth=瀹斤紝mesHeight=闀�
         Integer rawWidth = parseInteger(mesData.get("mesWidth"));
         Integer rawHeight = parseInteger(mesData.get("mesHeight"));
         Integer workLine = parseInteger(mesData.get("workLine"));
@@ -144,7 +144,7 @@
         saveScannedGlassId(params, glassId);
 
         Integer intervalMs = config != null ? config.getScanIntervalMs() : null;
-        String msg = String.format("鐜荤拑[%s] 灏哄[琛ㄥ:%s x 闀�:%s] 宸叉帴鏀讹紝workLine=%s锛屾壂鎻忛棿闅�=%s",
+        String msg = String.format("鐜荤拑[%s] 灏哄[瀹�:%s x 闀�:%s] 宸叉帴鏀讹紝workLine=%s锛屾壂鎻忛棿闅�=%s",
                 glassId,
                 rawWidth != null ? rawWidth + "mm" : "-",
                 rawHeight != null ? rawHeight + "mm" : "-",
@@ -272,7 +272,7 @@
     private GlassInfo buildGlassInfo(String glassId, Integer width, Integer height, Integer workLine) {
         GlassInfo glassInfo = new GlassInfo();
         glassInfo.setGlassId(glassId.trim());
-        // mesWidth=琛ㄥ -> glassWidth, mesHeight=闀� -> glassLength
+        // mesWidth=瀹� -> glassWidth, mesHeight=闀� -> glassLength
         if (width != null) {
             glassInfo.setGlassWidth(width);
         }
diff --git a/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue b/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
index 05e0b07..5f2b44e 100644
--- a/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
+++ b/mes-web/src/views/plcTest/components/MultiDeviceTest/TaskOrchestration.vue
@@ -616,7 +616,7 @@
     const qty = parseInt(quantity) || 1
     for (let j = 0; j < qty; j++) {
       // 濡傛灉鏁伴噺澶т簬1锛屼负姣忔潯璁板綍鐢熸垚鍞竴鐨勭幓鐠僆D锛堣拷鍔犲簭鍙凤級
-      const finalGlassId = qty > 1 ? `${glassId}_${j + 1}` : glassId
+      const finalGlassId = qty > 1 ? `${glassId}${j + 1}` : glassId
 
       result.push({
         glassId: finalGlassId,

--
Gitblit v1.8.0