From ef270bd1855b5ce3f398c5df024840a498e33a8f Mon Sep 17 00:00:00 2001
From: MercuryZ <zdmisif@126.com>
Date: 星期四, 31 三月 2022 14:09:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java
new file mode 100644
index 0000000..84b75c3
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3QueryReportInnerFrame.java
@@ -0,0 +1,115 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.report;
+
+import cn.hutool.core.util.StrUtil;
+import com.sandu.common.execption.BusinessException;
+import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import lombok.Data;
+import lombok.ToString;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author ZZQ
+ * @date 2022/3/18 9:51
+ * C3鍏呯數妗╂煡璇㈡寚浠ゅ搷搴斿抚
+ */
+@Data
+@ToString(callSuper = true)
+public class A5C3QueryReportInnerFrame extends BaseResponseInnerFrame<A5C3QueryReportInnerFrame> {
+    //MAC鍦板潃
+    private String mac;
+    //鐗堟湰鍙�
+    private String version;
+    //蹇冭烦鍖呴棿闅旀椂闂�
+    private String IntervalTime;
+    //鏌ヨ鐢靛帇/鐢垫祦甯告暟
+    private String constant;
+    //鏌ヨ鍦板潃(鏆傛椂涓嶇敤鍒帮級
+    private String address;
+    //鏁呴殰鐮�
+    private String faultCode;
+
+    @Override
+    public A5C3QueryReportInnerFrame transformFrame(String hex) {
+        if (StrUtil.isBlank(hex)) {
+            return null;
+        }
+        // MQTT閫氫俊鏂瑰紡(1)
+        setConnectType(hex.substring(0, 2));
+        //  鍔熻兘鐮�(1)
+        setFunctionCode(hex.substring(2, 4));
+        //  璐熻嵎闀垮害(2)
+        setPayloadLength(hex.substring(4, 8));
+        //MAC鍦板潃
+        setMac(hex.substring(8, 16));
+
+        retuenInfomation(functionCode, hex.substring(16, hex.length() - 8));
+
+        setCrc32(hex.substring(hex.length() - 8));
+        //  鏍¢獙CRC32
+        String frame = hex.substring(2, hex.length() - 8);
+        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
+        return this;
+    }
+
+    public void retuenInfomation(String functionCode, String hex) {
+
+        /**
+         * 鏌ヨ鐗堟湰鍙�
+         */
+        if (functionCode.equals(C3ChargingEnum.QueryVersion.getCode())) {
+            if (hex.length() != 8) {
+                throw new BusinessException("鏁版嵁閿欒锛岃閲嶆柊璇锋眰锛�");
+            }
+            DecimalFormat df = new DecimalFormat("00");
+            setVersion("纭欢鐗堟湰鍙凤細" + df.format(parseVal(hex, 0, 2)) + df.format(parseVal(hex, 2, 4))
+                    + "; " + "杞欢鐗堟湰鍙凤細" + df.format(parseVal(hex, 4, 6)) + df.format(parseVal(hex, 6, 8)));
+        }
+
+        /**
+         * 鏌ヨ蹇冭烦鍖呴棿闅旀椂闂�
+         */
+        if (functionCode.equals(C3ChargingEnum.QueryIntervalTime.getCode())) {
+            if (hex.length() != 4) {
+                throw new BusinessException("鏁版嵁閿欒锛岃閲嶆柊璇锋眰锛�");
+            }
+            setIntervalTime("蹇冭烦鍖呴棿闅旀椂闂�(s)锛�" + parseVal(hex, 0, 4));
+        }
+
+        /**
+         * 鏌ヨ鐢靛帇/鐢垫祦甯告暟
+         */
+        if (functionCode.equals(C3ChargingEnum.QueryConstant.getCode())) {
+            if (hex.length() != 4) {
+                throw new BusinessException("鏁版嵁閿欒锛岃閲嶆柊璇锋眰锛�");
+            }
+            setConstant("鐢靛帇甯告暟锛�" + parseVal(hex, 0, 2) + " ;鐢垫祦甯告暟锛�" + parseVal(hex, 2, 4));
+        }
+
+        /**
+         * 鏌ヨ鍦板潃(鏆傛椂涓嶇敤鍒帮級
+         */
+        if (functionCode.equals(C3ChargingEnum.QueryAddress.getCode())) {
+            if (hex.length() != 4) {
+                throw new BusinessException("鏁版嵁閿欒锛岃閲嶆柊璇锋眰锛�");
+            }
+            setAddress(hex);
+        }
+
+        /**
+         * 鏌ヨ鍦板潃(鏆傛椂涓嶇敤鍒帮級
+         */
+        if (functionCode.equals(C3ChargingEnum.QueryFaultCode.getCode())) {
+            if (hex.length() != 4) {
+                throw new BusinessException("鏁版嵁閿欒锛岃閲嶆柊璇锋眰锛�");
+            }
+            setFaultCode(hex);
+        }
+    }
+
+    private Integer parseVal(String frame, int start, int end) {
+        return Integer.parseInt(frame.substring(start, end), 16);
+    }
+}

--
Gitblit v1.9.3