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/service/PlcTestWriteService.java |  578 +++++++++++++++++----------------------------------------
 1 files changed, 177 insertions(+), 401 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java b/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
index ba3905b..4170ef4 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
@@ -7,8 +7,6 @@
 import com.mes.device.entity.DeviceConfig;
 import com.mes.device.service.DeviceConfigService;
 import com.mes.device.util.ConfigJsonHelper;
-import com.mes.entity.PlcBaseData;
-import com.mes.entity.PlcAddress;
 import com.mes.service.PlcDynamicDataService;
 import com.mes.s7.enhanced.EnhancedS7Serializer;
 import lombok.extern.slf4j.Slf4j;
@@ -16,13 +14,17 @@
 
 import javax.annotation.Resource;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 /**
  * PLC娴嬭瘯鍐欏叆鏈嶅姟
- * 妯℃嫙PLC琛屼负锛屽悜PLC鍐欏叆娴嬭瘯鏁版嵁锛岀敤浜庢祴璇昅ES绋嬪簭
+ * 
+ * 鍩轰簬DeviceConfig鐨勬柊API锛岀敤浜庢ā鎷烶LC琛屼负杩涜娴嬭瘯
+ * 
+ * 鎺ㄨ崘浣跨敤锛欴evicePlcOperationService锛堢敓浜х幆澧冿級
  * 
  * @author huang
  * @date 2025/10/29
@@ -31,9 +33,6 @@
 @Service
 public class PlcTestWriteService {
 
-    @Resource
-    private PlcAddressService plcAddressService;
-    
     @Resource
     private DeviceConfigService deviceConfigService;
     
@@ -46,310 +45,10 @@
     private static final int ON = 1;
     private static final int OFF = 0;
     
-    // 褰撳墠浣跨敤鐨勯」鐩爣璇�
-    private String currentProjectId = "vertical";
-    
-    // 缂撳瓨涓嶅悓椤圭洰鐨凷7Serializer瀹炰緥
+    // 缂撳瓨涓嶅悓璁惧鐨凷7Serializer瀹炰緥
     private final ConcurrentMap<String, EnhancedS7Serializer> serializerCache = new ConcurrentHashMap<>();
 
-    /**
-     * 妯℃嫙PLC鍙戦�佽姹傚瓧锛堣Е鍙慚ES浠诲姟涓嬪彂锛�
-     */
-    public boolean simulatePlcRequest() {
-        return simulatePlcRequest(currentProjectId);
-    }
-    
-    /**
-     * 妯℃嫙PLC鍙戦�佽姹傚瓧锛堣Е鍙慚ES浠诲姟涓嬪彂锛�- 鏀寔鎸囧畾椤圭洰
-     */
-    public boolean simulatePlcRequest(String projectId) {
-        try {
-            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
-            if (config == null) {
-                log.error("椤圭洰閰嶇疆涓嶅瓨鍦�: projectId={}", projectId);
-                return false;
-            }
-            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
-            if (s7Serializer == null) {
-                log.error("鏃犳硶鍒涘缓S7Serializer: projectId={}", projectId);
-                return false;
-            }
-            return simulatePlcRequestInternal(projectId, config, s7Serializer);
-        } catch (Exception e) {
-            log.error("妯℃嫙PLC璇锋眰瀛楀け璐�", e);
-            return false;
-        }
-    }
-
-    private boolean simulatePlcRequestInternal(String projectId, PlcAddress config, EnhancedS7Serializer s7Serializer) throws Exception {
-        PlcBaseData currentData = s7Serializer.read(PlcBaseData.class, config.getDbArea(), config.getBeginIndex());
-        if (currentData == null) {
-            log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥瀗ull: projectId={}, dbArea={}, beginIndex={}", 
-                    projectId, config.getDbArea(), config.getBeginIndex());
-            return false;
-        }
-
-        if (currentData.getOnlineState() == OFF) {
-            log.info("褰撳墠PLC鑱旀満妯″紡涓�0锛屽仠姝㈣仈鏈�");
-            return false;
-        } else if (currentData.getPlcReport() == ON) {
-            log.info("褰撳墠涓婄墖PLC姹囨姤瀛椾负1锛岄噸缃负0");
-            currentData.setPlcReport(OFF);
-        }
-        currentData.setPlcRequest(ON);
-        s7Serializer.write(currentData, config.getDbArea(), config.getBeginIndex());
-        log.info("妯℃嫙PLC鍙戦�佽姹傚瓧鎴愬姛锛歱lcRequest=1, projectId={}, dbArea={}, beginIndex={}", 
-                projectId, config.getDbArea(), config.getBeginIndex());
-        return true;
-    }
-
-    /**
-     * 妯℃嫙PLC浠诲姟瀹屾垚姹囨姤
-     */
-    public boolean simulatePlcReport() {
-        return simulatePlcReport(currentProjectId);
-    }
-    
-    /**
-     * 妯℃嫙PLC浠诲姟瀹屾垚姹囨姤 - 鏀寔鎸囧畾椤圭洰
-     */
-    public boolean simulatePlcReport(String projectId) {
-        try {
-            // 鑾峰彇椤圭洰閰嶇疆锛堟暟鎹簱瀹炰綋锛�
-            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
-            if (config == null) {
-                log.error("椤圭洰閰嶇疆涓嶅瓨鍦�: projectId={}", projectId);
-                return false;
-            }
-            
-            // 鑾峰彇瀵瑰簲鐨凷7Serializer
-            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
-            if (s7Serializer == null) {
-                log.error("鏃犳硶鍒涘缓S7Serializer: projectId={}", projectId);
-                return false;
-            }
-            
-            return simulatePlcReportInternal(projectId, config, s7Serializer);
-        } catch (Exception e) {
-            log.error("妯℃嫙PLC浠诲姟瀹屾垚姹囨姤澶辫触", e);
-            return false;
-        }
-    }
-
-    private boolean simulatePlcReportInternal(String projectId, PlcAddress config, EnhancedS7Serializer s7Serializer) throws Exception {
-        PlcBaseData currentData = s7Serializer.read(PlcBaseData.class, config.getDbArea(), config.getBeginIndex());
-        if (currentData == null) {
-            log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥瀗ull: projectId={}, dbArea={}, beginIndex={}", 
-                    projectId, config.getDbArea(), config.getBeginIndex());
-            return false;
-        }
-
-        currentData.setPlcReport(ON);
-        currentData.setPlcRequest(OFF);
-        currentData.setMesGlassCount(10);
-
-        s7Serializer.write(currentData, config.getDbArea(), config.getBeginIndex());
-        log.info("妯℃嫙PLC浠诲姟瀹屾垚姹囨姤锛歱lcReport=1, mesGlassCount=10, projectId={}, dbArea={}, beginIndex={}", 
-                projectId, config.getDbArea(), config.getBeginIndex());
-        return true;
-    }
-
-    /**
-     * 妯℃嫙PLC鍙戦�佽仈鏈虹姸鎬�
-     */
-    public boolean simulateOnlineStatus(int onlineState) {
-        return simulateOnlineStatus(onlineState, currentProjectId);
-    }
-    
-    /**
-     * 妯℃嫙PLC鍙戦�佽仈鏈虹姸鎬� - 鏀寔鎸囧畾椤圭洰
-     */
-    public boolean simulateOnlineStatus(int onlineState, String projectId) {
-        try {
-            // 鑾峰彇椤圭洰閰嶇疆锛堟暟鎹簱瀹炰綋锛�
-            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
-            if (config == null) {
-                log.error("椤圭洰閰嶇疆涓嶅瓨鍦�: projectId={}", projectId);
-                return false;
-            }
-            
-            // 鑾峰彇瀵瑰簲鐨凷7Serializer
-            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
-            if (s7Serializer == null) {
-                log.error("鏃犳硶鍒涘缓S7Serializer: projectId={}", projectId);
-                return false;
-            }
-            
-            return simulateOnlineStatusInternal(onlineState, projectId, config, s7Serializer);
-        } catch (Exception e) {
-            log.error("妯℃嫙PLC鑱旀満鐘舵�佸け璐�", e);
-            return false;
-        }
-    }
-
-    private boolean simulateOnlineStatusInternal(int onlineState, String projectId, PlcAddress config, EnhancedS7Serializer s7Serializer) throws Exception {
-        PlcBaseData currentData = s7Serializer.read(PlcBaseData.class, config.getDbArea(), config.getBeginIndex());
-        if (currentData == null) {
-            log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥瀗ull: projectId={}, dbArea={}, beginIndex={}", 
-                    projectId, config.getDbArea(), config.getBeginIndex());
-            return false;
-        }
-
-        currentData.setOnlineState(onlineState);
-        s7Serializer.write(currentData, config.getDbArea(), config.getBeginIndex());
-        log.info("妯℃嫙PLC鑱旀満鐘舵�侊細onlineState={}, projectId={}, dbArea={}, beginIndex={}", 
-                onlineState, projectId, config.getDbArea(), config.getBeginIndex());
-        return true;
-    }
-
-    /**
-     * 閲嶇疆PLC鎵�鏈夌姸鎬�
-     */
-    public boolean resetPlc() {
-        return resetPlc(currentProjectId);
-    }
-    
-    /**
-     * 閲嶇疆PLC鎵�鏈夌姸鎬� - 鏀寔鎸囧畾椤圭洰
-     */
-    public boolean resetPlc(String projectId) {
-        try {
-            // 鑾峰彇椤圭洰閰嶇疆锛堟暟鎹簱瀹炰綋锛�
-            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
-            if (config == null) {
-                log.error("椤圭洰閰嶇疆涓嶅瓨鍦�: projectId={}", projectId);
-                return false;
-            }
-            
-            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
-            if (s7Serializer == null) {
-                log.error("鏃犳硶鍒涘缓S7Serializer: projectId={}", projectId);
-                return false;
-            }
-            return resetPlcInternal(projectId, config, s7Serializer);
-        } catch (Exception e) {
-            log.error("閲嶇疆PLC鐘舵�佸け璐�", e);
-            return false;
-        }
-    }
-
-    private boolean resetPlcInternal(String projectId, PlcAddress config, EnhancedS7Serializer s7Serializer) throws Exception {
-        PlcBaseData resetData = new PlcBaseData();
-        resetData.setPlcRequest(OFF);
-        resetData.setPlcReport(OFF);
-        resetData.setMesSend(OFF);
-        resetData.setMesConfirm(OFF);
-        resetData.setOnlineState(ON);
-        resetData.setMesGlassCount(0);
-        resetData.setAlarmInfo(OFF);
-
-        s7Serializer.write(resetData, config.getDbArea(), config.getBeginIndex());
-        log.info("PLC鐘舵�佸凡閲嶇疆, projectId={}, dbArea={}, beginIndex={}", 
-                projectId, config.getDbArea(), config.getBeginIndex());
-        return true;
-    }
-
-    /**
-     * 璇诲彇PLC褰撳墠鐘舵��
-     */
-    public PlcBaseData readPlcStatus() {
-        return readPlcStatus(currentProjectId);
-    }
-    
-    /**
-     * 璇诲彇PLC褰撳墠鐘舵�� - 鏀寔鎸囧畾椤圭洰
-     */
-    public PlcBaseData readPlcStatus(String projectId) {
-        try {
-            // 鑾峰彇椤圭洰閰嶇疆锛堟暟鎹簱瀹炰綋锛�
-            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
-            if (config == null) {
-                log.error("椤圭洰閰嶇疆涓嶅瓨鍦�: projectId={}", projectId);
-                return null;
-            }
-            
-            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
-            if (s7Serializer == null) {
-                log.error("鏃犳硶鍒涘缓S7Serializer: projectId={}", projectId);
-                return null;
-            }
-            
-            return readPlcStatusInternal(projectId, config, s7Serializer);
-        } catch (Exception e) {
-            log.error("璇诲彇PLC鐘舵�佸け璐�", e);
-            return null;
-        }
-    }
-
-    private PlcBaseData readPlcStatusInternal(String projectId, PlcAddress config, EnhancedS7Serializer s7Serializer) throws Exception {
-        PlcBaseData data = s7Serializer.read(PlcBaseData.class, config.getDbArea(), config.getBeginIndex());
-        if (data == null) {
-            log.error("璇诲彇PLC鐘舵�佽繑鍥瀗ull: projectId={}, dbArea={}, beginIndex={}", 
-                    projectId, config.getDbArea(), config.getBeginIndex());
-        }
-        return data;
-    }
-    
-    /**
-     * 璁剧疆褰撳墠椤圭洰鏍囪瘑
-     */
-    public void setCurrentProjectId(String projectId) {
-        this.currentProjectId = projectId;
-    }
-    
-    /**
-     * 鑾峰彇褰撳墠椤圭洰鏍囪瘑
-     */
-    public String getCurrentProjectId() {
-        return this.currentProjectId;
-    }
-    
-    /**
-     * 鑾峰彇椤圭洰瀵瑰簲鐨凷7Serializer瀹炰緥
-     * 濡傛灉涓嶅瓨鍦紝鍒欏垱寤轰竴涓柊鐨勫疄渚嬪苟缂撳瓨
-     * 
-     * @param projectId 椤圭洰鏍囪瘑
-     * @param config 椤圭洰閰嶇疆
-     * @return S7Serializer瀹炰緥
-     */
-    private EnhancedS7Serializer getSerializerForProject(String projectId, PlcAddress config) {
-        return serializerCache.computeIfAbsent(projectId, id -> {
-            // 瑙f瀽PLC绫诲瀷
-            EPlcType plcType = EPlcType.S1200; // 榛樿鍊�
-            if (config != null && config.getPlcType() != null) {
-                try {
-                    plcType = EPlcType.valueOf(config.getPlcType());
-                } catch (IllegalArgumentException e) {
-                    log.warn("鏈煡鐨凱LC绫诲瀷: {}, 浣跨敤榛樿绫诲瀷 S1200", config.getPlcType());
-                }
-            }
-            
-            // 鍒涘缓S7PLC瀹炰緥
-            String plcIp = (config != null && config.getPlcIp() != null) ? config.getPlcIp() : "192.168.10.21";
-            S7PLC s7Plc = new S7PLC(plcType, plcIp);
-            
-            // 鍒涘缓骞惰繑鍥濫nhancedS7Serializer瀹炰緥
-            return EnhancedS7Serializer.newInstance(s7Plc);
-        });
-    }
-    
-    /**
-     * 娓呴櫎鎸囧畾椤圭洰鐨凷7Serializer缂撳瓨
-     * 
-     * @param projectId 椤圭洰鏍囪瘑
-     */
-    public void clearSerializerCache(String projectId) {
-        serializerCache.remove(projectId);
-        log.info("宸叉竻闄ら」鐩� {} 鐨凷7Serializer缂撳瓨", projectId);
-    }
-    
-    /**
-     * 娓呴櫎鎵�鏈塖7Serializer缂撳瓨
-     */
-    public void clearAllSerializerCache() {
-        serializerCache.clear();
-        log.info("宸叉竻闄ゆ墍鏈塖7Serializer缂撳瓨");
-    }
+    // ==================== 鍩轰簬DeviceConfig鐨勬柊API锛堟帹鑽愪娇鐢級 ====================
     
     /**
      * 鏍规嵁璁惧ID妯℃嫙PLC鍙戦�佽姹傚瓧
@@ -364,10 +63,73 @@
             return false;
         }
         try {
-            String projectId = resolveProjectId(device);
-            PlcAddress config = buildPlcAddressFromDevice(device);
             EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
-            return simulatePlcRequestInternal(projectId, config, s7Serializer);
+            if (s7Serializer == null) {
+                log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 浣跨敤PlcDynamicDataService璇诲彇鏁版嵁锛堟敮鎸乤ddressMapping锛�
+            Map<String, Object> currentData = plcDynamicDataService.readAllPlcData(device, s7Serializer);
+            if (currentData == null || currentData.isEmpty()) {
+                log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥炵┖: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 妫�鏌ヨ仈鏈虹姸鎬�
+            Object onlineStateObj = currentData.get("onlineState");
+            Integer onlineState = null;
+            if (onlineStateObj != null) {
+                if (onlineStateObj instanceof Number) {
+                    onlineState = ((Number) onlineStateObj).intValue();
+                } else {
+                    try {
+                        String strValue = String.valueOf(onlineStateObj);
+                        if (!strValue.isEmpty() && !"null".equalsIgnoreCase(strValue)) {
+                            onlineState = Integer.parseInt(strValue);
+                        }
+                    } catch (NumberFormatException e) {
+                        log.warn("瑙f瀽onlineState澶辫触: deviceId={}, value={}", deviceId, onlineStateObj, e);
+                    }
+                }
+            }
+            
+            if (onlineState != null && onlineState == OFF) {
+                log.info("褰撳墠PLC鑱旀満妯″紡涓�0锛屽仠姝㈣仈鏈�: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 妫�鏌ユ眹鎶ュ瓧锛屽鏋滀负1鍒欓噸缃负0
+            Object plcReportObj = currentData.get("plcReport");
+            Integer plcReport = null;
+            if (plcReportObj != null) {
+                if (plcReportObj instanceof Number) {
+                    plcReport = ((Number) plcReportObj).intValue();
+                } else {
+                    try {
+                        String strValue = String.valueOf(plcReportObj);
+                        if (!strValue.isEmpty() && !"null".equalsIgnoreCase(strValue)) {
+                            plcReport = Integer.parseInt(strValue);
+                        }
+                    } catch (NumberFormatException e) {
+                        log.warn("瑙f瀽plcReport澶辫触: deviceId={}, value={}", deviceId, plcReportObj, e);
+                    }
+                }
+            }
+            
+            if (plcReport != null && plcReport == ON) {
+                log.info("褰撳墠涓婄墖PLC姹囨姤瀛椾负1锛岄噸缃负0: deviceId={}", deviceId);
+                currentData.put("plcReport", OFF);
+            }
+            
+            // 璁剧疆璇锋眰瀛椾负1
+            currentData.put("plcRequest", ON);
+            
+            // 浣跨敤PlcDynamicDataService鍐欏叆鏁版嵁
+            plcDynamicDataService.writePlcData(device, currentData, s7Serializer);
+            
+            log.info("妯℃嫙PLC鍙戦�佽姹傚瓧鎴愬姛锛歱lcRequest=1, deviceId={}", deviceId);
+            return true;
         } catch (Exception e) {
             log.error("鏍规嵁璁惧妯℃嫙PLC璇锋眰瀛楀け璐�: deviceId={}", deviceId, e);
             return false;
@@ -387,10 +149,29 @@
             return false;
         }
         try {
-            String projectId = resolveProjectId(device);
-            PlcAddress config = buildPlcAddressFromDevice(device);
             EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
-            return simulatePlcReportInternal(projectId, config, s7Serializer);
+            if (s7Serializer == null) {
+                log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 浣跨敤PlcDynamicDataService璇诲彇鏁版嵁
+            Map<String, Object> currentData = plcDynamicDataService.readAllPlcData(device, s7Serializer);
+            if (currentData == null || currentData.isEmpty()) {
+                log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥炵┖: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 璁剧疆姹囨姤瀛椾负1锛岃姹傚瓧娓�0
+            currentData.put("plcReport", ON);
+            currentData.put("plcRequest", OFF);
+            currentData.put("mesGlassCount", 10);
+            
+            // 浣跨敤PlcDynamicDataService鍐欏叆鏁版嵁
+            plcDynamicDataService.writePlcData(device, currentData, s7Serializer);
+            
+            log.info("妯℃嫙PLC浠诲姟瀹屾垚姹囨姤锛歱lcReport=1, mesGlassCount=10, deviceId={}", deviceId);
+            return true;
         } catch (Exception e) {
             log.error("鏍规嵁璁惧妯℃嫙PLC姹囨姤澶辫触: deviceId={}", deviceId, e);
             return false;
@@ -410,10 +191,27 @@
             return false;
         }
         try {
-            String projectId = resolveProjectId(device);
-            PlcAddress config = buildPlcAddressFromDevice(device);
             EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
-            return resetPlcInternal(projectId, config, s7Serializer);
+            if (s7Serializer == null) {
+                log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
+                return false;
+            }
+            
+            // 鏋勫缓閲嶇疆鏁版嵁
+            Map<String, Object> resetData = new HashMap<>();
+            resetData.put("plcRequest", OFF);
+            resetData.put("plcReport", OFF);
+            resetData.put("mesSend", OFF);
+            resetData.put("mesConfirm", OFF);
+            resetData.put("onlineState", ON);
+            resetData.put("mesGlassCount", 0);
+            resetData.put("alarmInfo", OFF);
+            
+            // 浣跨敤PlcDynamicDataService鍐欏叆鏁版嵁
+            plcDynamicDataService.writePlcData(device, resetData, s7Serializer);
+            
+            log.info("PLC鐘舵�佸凡閲嶇疆, deviceId={}", deviceId);
+            return true;
         } catch (Exception e) {
             log.error("鏍规嵁璁惧閲嶇疆PLC鐘舵�佸け璐�: deviceId={}", deviceId, e);
             return false;
@@ -433,15 +231,14 @@
             return null;
         }
         try {
-            String projectId = resolveProjectId(device);
-            PlcAddress config = buildPlcAddressFromDevice(device);
             EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
-            PlcBaseData data = readPlcStatusInternal(projectId, config, s7Serializer);
-            if (data == null) {
+            if (s7Serializer == null) {
+                log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
                 return null;
             }
-            String json = objectMapper.writeValueAsString(data);
-            return objectMapper.readValue(json, MAP_TYPE);
+            // 浣跨敤PlcDynamicDataService璇诲彇鎵�鏈夋暟鎹紙鏀寔addressMapping锛�
+            Map<String, Object> data = plcDynamicDataService.readAllPlcData(device, s7Serializer);
+            return data;
         } catch (Exception e) {
             log.error("璇诲彇璁惧PLC鐘舵�佸け璐�: deviceId={}", deviceId, e);
             return null;
@@ -463,16 +260,17 @@
         }
         
         try {
-            // 浠庤澶囬厤缃腑鑾峰彇椤圭洰鏍囪瘑
-            String projectId = resolveProjectId(device);
-            
             // 鑾峰彇瀵瑰簲鐨凷7Serializer锛堜娇鐢ㄨ澶囬厤缃級
             EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
+            if (s7Serializer == null) {
+                log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
+                return false;
+            }
             
             // 浣跨敤鍔ㄦ�佹暟鎹湇鍔″啓鍏ュ瓧娈碉紙鍩轰簬DeviceConfig锛�
             plcDynamicDataService.writePlcData(device, fieldValues, s7Serializer);
             
-            log.info("鍐欏叆PLC瀛楁鎴愬姛: deviceId={}, projectId={}, fields={}", deviceId, projectId, fieldValues.keySet());
+            log.info("鍐欏叆PLC瀛楁鎴愬姛: deviceId={}, fields={}", deviceId, fieldValues.keySet());
             return true;
         } catch (Exception e) {
             log.error("鍐欏叆PLC瀛楁澶辫触: deviceId={}", deviceId, e);
@@ -487,86 +285,64 @@
      * @return S7Serializer瀹炰緥
      */
     private EnhancedS7Serializer getSerializerForDevice(DeviceConfig device) {
-        String cacheKey = "device:" + (device.getId() != null ? device.getId() : resolveProjectId(device));
-        return serializerCache.computeIfAbsent(cacheKey, id -> {
-            // 瑙f瀽PLC绫诲瀷锛堜粎鍙栧疄浣撳瓧娈碉級
-            EPlcType plcType = EPlcType.S1200;
-            String plcTypeValue = device.getPlcType();
-            if (plcTypeValue == null || plcTypeValue.isEmpty()) {
-                log.warn("璁惧鏈厤缃甈LC绫诲瀷锛屼娇鐢ㄩ粯璁ょ被鍨婼1200, deviceId={}", device.getId());
+        if (device == null) {
+            log.error("璁惧閰嶇疆涓虹┖锛屾棤娉曞垱寤篠7Serializer");
+            return null;
+        }
+        
+        try {
+            String cacheKey;
+            if (device.getId() != null) {
+                cacheKey = "device:" + device.getId();
             } else {
                 try {
-                    plcType = EPlcType.valueOf(plcTypeValue);
-                } catch (IllegalArgumentException e) {
-                    log.warn("鏈煡鐨凱LC绫诲瀷: {}, 浣跨敤榛樿绫诲瀷 S1200", plcTypeValue);
+                    cacheKey = "device:" + resolveProjectId(device);
+                } catch (Exception e) {
+                    cacheKey = "device:" + (device.getDeviceCode() != null ? device.getDeviceCode() : "unknown");
                 }
             }
             
-            // 鍒涘缓S7PLC瀹炰緥锛堜粎鍙栧疄浣撳瓧娈碉級
-            String plcIp = device.getPlcIp();
-            if (plcIp == null || plcIp.isEmpty()) {
-                log.warn("璁惧鏈厤缃甈LC IP锛屼娇鐢ㄩ粯璁� 192.168.10.21, deviceId={}", device.getId());
-                plcIp = "192.168.10.21";
-            }
-            S7PLC s7Plc = new S7PLC(plcType, plcIp);
-            
-            // 鍒涘缓骞惰繑鍥濫nhancedS7Serializer瀹炰緥
-            return EnhancedS7Serializer.newInstance(s7Plc);
-        });
+            return serializerCache.computeIfAbsent(cacheKey, id -> {
+                try {
+                    // 瑙f瀽PLC绫诲瀷锛堜粎鍙栧疄浣撳瓧娈碉級
+                    EPlcType plcType = EPlcType.S1200;
+                    String plcTypeValue = device.getPlcType();
+                    if (plcTypeValue == null || plcTypeValue.isEmpty()) {
+                        log.warn("璁惧鏈厤缃甈LC绫诲瀷锛屼娇鐢ㄩ粯璁ょ被鍨婼1200, deviceId={}", device.getId());
+                    } else {
+                        try {
+                            plcType = EPlcType.valueOf(plcTypeValue);
+                        } catch (IllegalArgumentException e) {
+                            log.warn("鏈煡鐨凱LC绫诲瀷: {}, 浣跨敤榛樿绫诲瀷 S1200", plcTypeValue);
+                        }
+                    }
+                    
+                    // 鍒涘缓S7PLC瀹炰緥锛堜粎鍙栧疄浣撳瓧娈碉級
+                    String plcIp = device.getPlcIp();
+                    if (plcIp == null || plcIp.isEmpty()) {
+                        log.warn("璁惧鏈厤缃甈LC IP锛屼娇鐢ㄩ粯璁� 192.168.10.21, deviceId={}", device.getId());
+                        plcIp = "192.168.10.21";
+                    }
+                    S7PLC s7Plc = new S7PLC(plcType, plcIp);
+                    
+                    // 鍒涘缓骞惰繑鍥濫nhancedS7Serializer瀹炰緥
+                    EnhancedS7Serializer serializer = EnhancedS7Serializer.newInstance(s7Plc);
+                    if (serializer == null) {
+                        log.error("鍒涘缓EnhancedS7Serializer澶辫触: deviceId={}, plcIp={}, plcType={}", 
+                            device.getId(), plcIp, plcType);
+                    }
+                    return serializer;
+                } catch (Exception e) {
+                    log.error("鍒涘缓S7Serializer寮傚父: deviceId={}", device.getId(), e);
+                    return null;
+                }
+            });
+        } catch (Exception e) {
+            log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", device.getId(), e);
+            return null;
+        }
     }
     
-    private PlcAddress buildPlcAddressFromDevice(DeviceConfig device) {
-        Map<String, Object> plcConfig = getPlcConfigParams(device);
-        String dbArea = plcConfig.get("dbArea") != null ? String.valueOf(plcConfig.get("dbArea")) : "DB12";
-        int beginIndex = plcConfig.get("beginIndex") != null ? parseInteger(plcConfig.get("beginIndex")) : 0;
-
-        String plcIp = device.getPlcIp();
-        if (plcIp == null || plcIp.isEmpty()) {
-            log.warn("璁惧鏈厤缃甈LC IP锛屼娇鐢ㄩ粯璁� 192.168.10.21, deviceId={}", device.getId());
-            plcIp = "192.168.10.21";
-        }
-
-        String plcType = device.getPlcType();
-        if (plcType == null || plcType.isEmpty()) {
-            log.warn("璁惧鏈厤缃甈LC绫诲瀷锛屼娇鐢ㄩ粯璁1200, deviceId={}", device.getId());
-            plcType = EPlcType.S1200.name();
-        }
-
-        String addressMapping = resolveAddressMapping(device);
-
-        PlcAddress config = new PlcAddress();
-        config.setProjectId(resolveProjectId(device));
-        config.setDbArea(dbArea);
-        config.setBeginIndex(beginIndex);
-        config.setPlcIp(plcIp);
-        config.setPlcType(plcType);
-        config.setAddressMapping(addressMapping);
-        return config;
-    }
-
-    private String resolveAddressMapping(DeviceConfig device) {
-        Map<String, Object> mapping = ConfigJsonHelper.parseToMap(device.getConfigJson(), objectMapper);
-        if (!mapping.isEmpty()) {
-            try {
-                return objectMapper.writeValueAsString(mapping);
-            } catch (Exception e) {
-                log.warn("搴忓垪鍖朿onfigJson瀛楁鏄犲皠澶辫触, deviceId={}", device.getId(), e);
-            }
-        }
-        Map<String, Object> extraParams = parseExtraParams(device);
-        Object addressMapping = extraParams.get("addressMapping");
-        if (addressMapping instanceof String) {
-            return (String) addressMapping;
-        }
-        if (addressMapping != null) {
-            try {
-                return objectMapper.writeValueAsString(addressMapping);
-            } catch (Exception e) {
-                log.warn("搴忓垪鍖杄xtraParams.addressMapping澶辫触, deviceId={}", device.getId(), e);
-            }
-        }
-        throw new IllegalStateException("璁惧鏈厤缃甈LC瀛楁鏄犲皠, deviceId=" + device.getId());
-    }
 
     private Map<String, Object> parseExtraParams(DeviceConfig device) {
         if (device.getExtraParams() == null || device.getExtraParams().trim().isEmpty()) {
@@ -646,4 +422,4 @@
         
         throw new IllegalStateException("鏃犳硶瑙f瀽璁惧鐨凱LC椤圭洰鏍囪瘑, deviceId=" + device.getId());
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.8.0