From 366ba040d2447bacd3455299425e3166f1f992bb Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期四, 20 十一月 2025 14:38:32 +0800
Subject: [PATCH] 添加大车、大理片笼以及多设备串行/并行执行写入基础逻辑

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java |   85 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 82 insertions(+), 3 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
index 7d3f18a..ec1d8f2 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/impl/LoadVehicleLogicHandler.java
@@ -3,8 +3,10 @@
 import com.mes.device.entity.DeviceConfig;
 import com.mes.interaction.BaseDeviceLogicHandler;
 import com.mes.device.service.DevicePlcOperationService;
+import com.mes.device.service.GlassInfoService;
 import com.mes.device.vo.DevicePlcVO;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -23,8 +25,13 @@
 @Component
 public class LoadVehicleLogicHandler extends BaseDeviceLogicHandler {
 
-    public LoadVehicleLogicHandler(DevicePlcOperationService devicePlcOperationService) {
+    private final GlassInfoService glassInfoService;
+
+    public LoadVehicleLogicHandler(
+            DevicePlcOperationService devicePlcOperationService,
+            @Qualifier("deviceGlassInfoService") GlassInfoService glassInfoService) {
         super(devicePlcOperationService);
+        this.glassInfoService = glassInfoService;
     }
 
     @Override
@@ -50,6 +57,10 @@
                 return handleTriggerReport(deviceConfig, params, logicParams);
             case "reset":
                 return handleReset(deviceConfig, params, logicParams);
+            case "clearGlass":
+            case "clearPlc":
+            case "clear":
+                return handleClearGlass(deviceConfig, params, logicParams);
             default:
                 log.warn("涓嶆敮鎸佺殑鎿嶄綔绫诲瀷: {}", operation);
                 return DevicePlcVO.OperationResult.builder()
@@ -201,6 +212,70 @@
         );
     }
 
+    /**
+     * 娓呯┖PLC涓殑鐜荤拑鏁版嵁
+     */
+    private DevicePlcVO.OperationResult handleClearGlass(
+            DeviceConfig deviceConfig,
+            Map<String, Object> params,
+            Map<String, Object> logicParams) {
+
+        Map<String, Object> payload = new HashMap<>();
+
+        int slotCount = getLogicParam(logicParams, "glassSlotCount", 6);
+        if (slotCount <= 0) {
+            slotCount = 6;
+        }
+
+        List<String> slotFields = resolveGlassSlotFields(logicParams, slotCount);
+        for (String field : slotFields) {
+            payload.put(field, "");
+        }
+
+        payload.put("plcGlassCount", 0);
+        payload.put("plcRequest", 0);
+        payload.put("plcReport", 0);
+
+        if (params != null && params.containsKey("positionValue")) {
+            payload.put("inPosition", params.get("positionValue"));
+        } else if (params != null && Boolean.TRUE.equals(params.get("clearPosition"))) {
+            payload.put("inPosition", 0);
+        }
+
+        log.info("娓呯┖涓婂ぇ杞LC鐜荤拑鏁版嵁: deviceId={}, clearedSlots={}", deviceConfig.getId(), slotFields.size());
+
+        return devicePlcOperationService.writeFields(
+                deviceConfig.getId(),
+                payload,
+                "涓婂ぇ杞�-娓呯┖鐜荤拑鏁版嵁"
+        );
+    }
+
+    private List<String> resolveGlassSlotFields(Map<String, Object> logicParams, int fallbackCount) {
+        List<String> fields = new ArrayList<>();
+        if (logicParams != null) {
+            Object slotFieldConfig = logicParams.get("glassSlotFields");
+            if (slotFieldConfig instanceof List) {
+                List<?> configured = (List<?>) slotFieldConfig;
+                for (Object item : configured) {
+                    if (item != null) {
+                        String fieldName = String.valueOf(item).trim();
+                        if (!fieldName.isEmpty()) {
+                            fields.add(fieldName);
+                        }
+                    }
+                }
+            }
+        }
+
+        if (fields.isEmpty()) {
+            for (int i = 1; i <= fallbackCount; i++) {
+                fields.add("plcGlassId" + i);
+            }
+        }
+        return fields;
+    }
+
     @Override
     public String validateLogicParams(DeviceConfig deviceConfig) {
         Map<String, Object> logicParams = parseLogicParams(deviceConfig);
@@ -257,10 +332,14 @@
 
         if (result.isEmpty()) {
             List<String> glassIds = (List<String>) params.get("glassIds");
-            if (glassIds != null) {
+            if (glassIds != null && !glassIds.isEmpty()) {
+                // 浠庢暟鎹簱鏌ヨ鐜荤拑灏哄
+                Map<String, Integer> lengthMap = glassInfoService.getGlassLengthMap(glassIds);
                 for (String glassId : glassIds) {
-                    result.add(new GlassInfo(glassId, null));
+                    Integer length = lengthMap.get(glassId);
+                    result.add(new GlassInfo(glassId, length));
                 }
+                log.debug("浠庢暟鎹簱鏌ヨ鐜荤拑灏哄: glassIds={}, lengthMap={}", glassIds, lengthMap);
             }
         }
         return result;

--
Gitblit v1.8.0