From e76f0739e647fe8a7e0e2618914e2faff554b1b7 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期一, 17 十一月 2025 17:33:23 +0800
Subject: [PATCH] 解决冲突

---
 mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceInteractionServiceImpl.java |   82 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceInteractionServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceInteractionServiceImpl.java
new file mode 100644
index 0000000..9c6fb3f
--- /dev/null
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceInteractionServiceImpl.java
@@ -0,0 +1,82 @@
+package com.mes.device.service.impl;
+
+import com.mes.device.request.DeviceGlassFeedRequest;
+import com.mes.device.service.DeviceControlProfileService;
+import com.mes.device.service.DeviceInteractionService;
+import com.mes.device.service.DevicePlcOperationService;
+import com.mes.device.vo.DeviceControlProfile;
+import com.mes.device.vo.DevicePlcVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 璁惧浜や簰閫昏緫瀹炵幇
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class DeviceInteractionServiceImpl implements DeviceInteractionService {
+
+    private final DeviceControlProfileService controlProfileService;
+    private final DevicePlcOperationService devicePlcOperationService;
+
+    @Override
+    public DevicePlcVO.OperationResult feedGlass(DeviceGlassFeedRequest request) {
+        DeviceControlProfile profile = controlProfileService.getProfile(request.getDeviceId());
+        Map<String, Object> payload = buildGlassPayload(profile, request);
+        String opName = "鐜荤拑涓婃枡";
+        if (request.getPositionCode() != null) {
+            opName = opName + "(" + request.getPositionCode() + ")";
+        }
+        return devicePlcOperationService.writeFields(request.getDeviceId(), payload, opName);
+    }
+
+    private Map<String, Object> buildGlassPayload(DeviceControlProfile profile, DeviceGlassFeedRequest request) {
+        if (CollectionUtils.isEmpty(profile.getGlassSlots())) {
+            throw new IllegalStateException("璁惧鏈厤缃幓鐠冩Ы浣嶄俊鎭�");
+        }
+        List<String> glassIds = request.getGlassIds();
+        Map<String, Object> payload = new HashMap<>();
+
+        // 鍐欏叆鐜荤拑ID
+        for (int i = 0; i < profile.getGlassSlots().size(); i++) {
+            DeviceControlProfile.GlassSlot slot = profile.getGlassSlots().get(i);
+            String value = (glassIds != null && i < glassIds.size()) ? glassIds.get(i) : "";
+            payload.put(slot.getField(), value);
+        }
+
+        // 鍐欏叆鐜荤拑鏁伴噺
+        if (profile.getGlassCountField() != null) {
+            int count = glassIds != null ? glassIds.size() : 0;
+            payload.put(profile.getGlassCountField(), count);
+        }
+
+        // 鍐欏叆浣嶇疆
+        if (profile.getPositionField() != null) {
+            Integer positionValue = request.getPositionValue();
+            if (positionValue == null && request.getPositionCode() != null
+                    && profile.getPositionMappings() != null) {
+                positionValue = profile.getPositionMappings().get(request.getPositionCode());
+            }
+            if (positionValue != null) {
+                payload.put(profile.getPositionField(), positionValue);
+            }
+        }
+
+        // 鑷姩瑙﹀彂璇锋眰瀛�
+        boolean trigger = request.getTriggerRequest() != null ? request.getTriggerRequest()
+                : Boolean.TRUE.equals(profile.getAutoRequest());
+        if (trigger && profile.getRequestField() != null) {
+            payload.put(profile.getRequestField(), 1);
+        }
+
+        return payload;
+    }
+}
+

--
Gitblit v1.8.0