diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/Base2000YearLocalDateTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/Base2000YearLocalDateTimeDecodeHandler.java
new file mode 100644
index 0000000..28898c9
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/Base2000YearLocalDateTimeDecodeHandler.java
@@ -0,0 +1,47 @@
+package com.isu.gaswellwatch.modbus.data.decode.impl;
+
+import com.isu.gaswellwatch.modbus.data.ModbusMessage;
+import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Map;
+
+/**
+ * 本地日期时间类型解析器,year + 2000
+ *
+ * @author 王仕龙
+ * 2024/12/10 12:25
+ */
+@Component(Base2000YearLocalDateTimeDecodeHandler.NAME + DecodeHandler.DECODE_NAME)
+public class Base2000YearLocalDateTimeDecodeHandler implements DecodeHandler {
+ public static final String NAME = "base2000YearLocalDateTime";
+
+ public static final DateTimeFormatter IN_FORMATTER = DateTimeFormatter.ofPattern("yyyy-M-d H:m:s");
+ public static final DateTimeFormatter OUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+
+ @Override
+ public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
+ String[] splitValues = value.split(" ");
+ String[] dateValues = splitValues[0].split("-");
+ String year = dateValues[0];
+ if (NumberUtils.isCreatable(year)) {
+ year = String.valueOf(NumberUtils.createLong(year) + 2000);
+ }
+ value = StringUtils.join(year, "-", dateValues[1], "-", dateValues[2], " ", splitValues[1]);
+ return LocalDateTime.parse(value, IN_FORMATTER).format(OUT_FORMATTER);
+ }
+
+ @Override
+ public void decode(Map commandPointMap, ModbusMessage.MessagePoint point) {
+ point.setValue(this.decode(commandPointMap, point.getValue()));
+ }
+
+}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/HighLowBinDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/HighLowBinDecodeHandler.java
index 1b9bb60..b5c7ba2 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/HighLowBinDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/HighLowBinDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.Map;
@@ -19,6 +20,9 @@ public class HighLowBinDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
return String.valueOf(Integer.parseInt(value, 16));
}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateDecodeHandler.java
index 4477dcf..f8ce1a1 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
@@ -24,6 +25,9 @@ public class LocalDateDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
return LocalDate.parse(value, IN_FORMATTER).format(OUT_FORMATTER);
}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateTimeDecodeHandler.java
index 667e89f..f807564 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateTimeDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalDateTimeDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@@ -24,6 +25,9 @@ public class LocalDateTimeDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
return LocalDateTime.parse(value, IN_FORMATTER).format(OUT_FORMATTER);
}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalTimeDecodeHandler.java
index 4b82791..6cc5bd6 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalTimeDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/LocalTimeDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.time.LocalTime;
@@ -23,6 +24,9 @@ public class LocalTimeDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
return LocalTime.parse(value, IN_FORMATTER).format(OUT_FORMATTER);
}
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SecondLocalTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SecondLocalTimeDecodeHandler.java
index 49c3e16..d680533 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SecondLocalTimeDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SecondLocalTimeDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Component;
@@ -20,7 +21,7 @@ public class SecondLocalTimeDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
- if (NumberUtils.isCreatable(value)) {
+ if (StringUtils.isNotBlank(value) && NumberUtils.isCreatable(value)) {
long totalSeconds = NumberUtils.createLong(value);
long hours = TimeUnit.SECONDS.toHours(totalSeconds);
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SignedNumberDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SignedNumberDecodeHandler.java
index 652ab94..cb8f613 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SignedNumberDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SignedNumberDecodeHandler.java
@@ -3,6 +3,8 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
import com.isu.gaswellwatch.utils.ReverseComplementCodeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Component;
import java.util.Map;
@@ -19,6 +21,9 @@ public class SignedNumberDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value) || !NumberUtils.isCreatable(value)) {
+ return value;
+ }
int decimalNumber = Integer.parseInt(value, 16);
if (decimalNumber == 0) {
return String.valueOf(decimalNumber);
diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SimpleLocalDateTimeDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SimpleLocalDateTimeDecodeHandler.java
index 8db655f..5c961e2 100644
--- a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SimpleLocalDateTimeDecodeHandler.java
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/SimpleLocalDateTimeDecodeHandler.java
@@ -2,6 +2,7 @@ package com.isu.gaswellwatch.modbus.data.decode.impl;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@@ -24,6 +25,9 @@ public class SimpleLocalDateTimeDecodeHandler implements DecodeHandler {
@Override
public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value)) {
+ return value;
+ }
return LocalDateTime.parse(value, IN_FORMATTER).format(OUT_FORMATTER);
}
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 6c125d7..2dcdea6 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -23,7 +23,7 @@ spring:
virtual-host: /
# public confirms机制用于解决生产者与Rabbitmq服务器之间消息可靠传输,它在消息服务器持久化消息后通知消息生产者发送成功。
# 发送确认
- publisher-confirms: true
+ publisher-confirms: false
listener:
simple:
# manual:手动ack,需要在业务代码结束后,调用api发送ack。