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