From 16f4bb3c28fc85cffcc511718c903ada9fdab134 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 26 十二月 2025 16:59:45 +0800
Subject: [PATCH] 调用mes导入工程参数修改,Excel表数据流程卡号一致;增加读取层号/工程号方法; 工程号一致覆盖更新

---
 mes-processes/mes-plcSend/src/main/java/com/mes/service/impl/PlcDynamicDataServiceImpl.java |   80 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/service/impl/PlcDynamicDataServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/service/impl/PlcDynamicDataServiceImpl.java
index 8831206..55c9cb0 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/service/impl/PlcDynamicDataServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/service/impl/PlcDynamicDataServiceImpl.java
@@ -213,8 +213,9 @@
         try {
             String addressMapping = extractAddressMapping(device);
             if (addressMapping == null || addressMapping.isEmpty()) {
-                log.error("璁惧閰嶇疆涓璦ddressMapping涓虹┖: deviceId={}", device.getId());
-                return;
+                String errorMsg = "璁惧閰嶇疆涓璦ddressMapping涓虹┖: deviceId=" + device.getId();
+                log.error(errorMsg);
+                throw new IllegalArgumentException(errorMsg);
             }
             
             // 瑙f瀽addressMapping JSON閰嶇疆
@@ -224,11 +225,18 @@
             String dbArea = extractDbArea(device);
             List<S7Parameter> parameters = buildS7ParametersWithValuesForDevice(device, dbArea, addressMappingObj, dataMap);
             
+            if (parameters.isEmpty()) {
+                log.warn("娌℃湁鏈夋晥鐨勫瓧娈甸渶瑕佸啓鍏LC: deviceId={}", device.getId());
+                return;
+            }
+            
             // 鍐欏叆PLC
             s7Serializer.write(parameters);
         } catch (Exception e) {
-            log.error("鍐欏叆PLC鏁版嵁澶辫触锛岃妫�鏌ワ細1.PLC IP鍦板潃鏄惁姝g‘[{}] 2.PLC璁惧鏄惁鍦ㄧ嚎 3.缃戠粶杩炴帴鏄惁姝e父锛宒eviceId: {}, 璇︾粏閿欒: {}", 
-                device.getPlcIp(), device.getId(), e.getMessage(), e);
+            String errorMsg = String.format("鍐欏叆PLC鏁版嵁澶辫触锛岃妫�鏌ワ細1.PLC IP鍦板潃鏄惁姝g‘[%s] 2.PLC璁惧鏄惁鍦ㄧ嚎 3.缃戠粶杩炴帴鏄惁姝e父锛宒eviceId: %s, 璇︾粏閿欒: %s", 
+                device.getPlcIp(), device.getId(), e.getMessage());
+            log.error(errorMsg, e);
+            throw new RuntimeException(errorMsg, e);
         }
     }
     
@@ -463,9 +471,12 @@
             EDataType dataType = fieldConfig.dataType != null ? fieldConfig.dataType : determineFieldTypeByName(fieldName);
             int count = fieldConfig.count > 0 ? fieldConfig.count : determineFieldCountByName(fieldName);
             
+            // 鏍规嵁瀛楁绫诲瀷杞崲鍊�
+            Object convertedValue = convertValueByType(value, dataType);
+            
             // 鍒涘缓S7Parameter锛岃缃��
             S7Parameter parameter = new S7Parameter(fullAddress, dataType, count);
-            parameter.setValue(value);
+            parameter.setValue(convertedValue);
             parameters.add(parameter);
         }
         
@@ -579,6 +590,65 @@
     }
     
     /**
+     * 鏍规嵁瀛楁绫诲瀷杞崲鍊�
+     * 涓昏澶勭悊锛欼nteger -> Boolean (瀵逛簬BOOL绫诲瀷)
+     * 
+     * @param value 鍘熷鍊�
+     * @param dataType 鐩爣鏁版嵁绫诲瀷
+     * @return 杞崲鍚庣殑鍊�
+     */
+    private Object convertValueByType(Object value, EDataType dataType) {
+        if (value == null) {
+            return null;
+        }
+        
+        // 濡傛灉宸茬粡鏄洰鏍囩被鍨嬶紝鐩存帴杩斿洖
+        if (dataType == EDataType.BOOL) {
+            if (value instanceof Boolean) {
+                return value;
+            }
+            // 灏� Integer/Number 杞崲涓� Boolean
+            if (value instanceof Number) {
+                int intValue = ((Number) value).intValue();
+                return intValue != 0;
+            }
+            // 灏濊瘯浠庡瓧绗︿覆杞崲
+            if (value instanceof String) {
+                String str = ((String) value).trim().toLowerCase();
+                return "true".equals(str) || "1".equals(str) || "on".equals(str);
+            }
+            // 鍏朵粬绫诲瀷锛屽皾璇曡浆鎹负鏁板瓧鍐嶈浆Boolean
+            try {
+                int intValue = Integer.parseInt(String.valueOf(value));
+                return intValue != 0;
+            } catch (NumberFormatException e) {
+                log.warn("鏃犳硶灏嗗�艰浆鎹负Boolean: {}", value);
+                return false;
+            }
+        }
+        
+        // 瀵逛簬鍏朵粬绫诲瀷锛屽鏋滃凡缁忔槸鐩爣绫诲瀷鎴栧吋瀹圭被鍨嬶紝鐩存帴杩斿洖
+        // 渚嬪锛歎INT16 鍙互鎺ュ彈 Integer, Short, Byte 绛�
+        if (dataType == EDataType.UINT16 || dataType == EDataType.INT16) {
+            if (value instanceof Number) {
+                return value;
+            }
+            // 灏濊瘯浠庡瓧绗︿覆杞崲
+            if (value instanceof String) {
+                try {
+                    return Integer.parseInt((String) value);
+                } catch (NumberFormatException e) {
+                    log.warn("鏃犳硶灏嗗�艰浆鎹负Integer: {}", value);
+                    return 0;
+                }
+            }
+        }
+        
+        // 瀵逛簬鍏朵粬绫诲瀷锛岀洿鎺ヨ繑鍥炲師鍊�
+        return value;
+    }
+    
+    /**
      * 鏍规嵁瀛楁鍚嶆帹鏂瓧娈甸暱搴�/鏁伴噺
      */
     private int determineFieldCountByName(String fieldName) {

--
Gitblit v1.8.0