From d1b78b3277269de2224926030274713671965673 Mon Sep 17 00:00:00 2001 From: wangshilong Date: Tue, 10 Dec 2024 12:27:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=9A=84=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ase2000YearLocalDateTimeDecodeHandler.java | 47 +++++++++++++++++++ .../decode/impl/HighLowBinDecodeHandler.java | 4 ++ .../decode/impl/LocalDateDecodeHandler.java | 4 ++ .../impl/LocalDateTimeDecodeHandler.java | 4 ++ .../decode/impl/LocalTimeDecodeHandler.java | 4 ++ .../impl/SecondLocalTimeDecodeHandler.java | 3 +- .../impl/SignedNumberDecodeHandler.java | 5 ++ .../SimpleLocalDateTimeDecodeHandler.java | 4 ++ src/main/resources/application.yaml | 2 +- 9 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/Base2000YearLocalDateTimeDecodeHandler.java 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。