From 798400ebc4769a6afec56ebbf8198e87e6c1a683 Mon Sep 17 00:00:00 2001
From: liuhaonan <31457034@qq.com>
Date: 星期五, 12 八月 2022 18:16:23 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3ErrorCodeReportInnerFrame.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3ErrorCodeReportInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3ErrorCodeReportInnerFrame.java
index 0ed6a5d..1b26226 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3ErrorCodeReportInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3ErrorCodeReportInnerFrame.java
@@ -3,7 +3,9 @@
 import cn.hutool.core.util.HexUtil;
 import cn.hutool.core.util.StrUtil;
 import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ErrorEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import com.sandu.ximon.admin.utils.StringUtil;
 import lombok.Data;
 import lombok.ToString;
 
@@ -21,10 +23,11 @@
     /**
      * 鏁呴殰鐮�
      */
-    private int errorCode;
+    private String errorMessage;
 
     @Override
     public A5C3ErrorCodeReportInnerFrame transformFrame(String hex) {
+        //F04500080000048E0000001CA2D92F64
         if (StrUtil.isBlank(hex)) {
             return null;
         }
@@ -37,14 +40,55 @@
 
         setDestinationAddress(hex.substring(8, 16));
 
-        //鏁呴殰鐮�
+        //鏁呴殰淇℃伅
         String errorCodeHex = hex.substring(16, hex.length() - 8);
-        errorCode = HexUtil.hexToInt(errorCodeHex);
+        String errorInfo = errorInfo(errorCodeHex);
+        if (!StringUtil.strIsNullOrEmpty(errorInfo)) {
+            setErrorMessage(errorInfo);
+        }
 
         setCrc32(hex.substring(hex.length() - 8));
         //  鏍¢獙CRC32
-        String frame = getFunctionCode() + getPayloadLength() + getDestinationAddress() + errorCodeHex;
+        String frame = hex.substring(2,hex.length()-8);
         this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
         return this;
     }
+
+    /**
+     * 鏀堕泦鏁呴殰淇℃伅
+     *
+     * @param hexStr
+     * @return
+     */
+    public String errorInfo(String hexStr) {
+        String errorMsg = "";
+        String str = hexStr2BinStr(hexStr);
+
+        int index = str.indexOf("1");
+        while ((index = str.indexOf("1", index)) > 0) {
+            C3ErrorEnum[] values = C3ErrorEnum.values();
+            for (C3ErrorEnum value : values) {
+                if (value.getCode() == index) {
+                    errorMsg = errorMsg + value.getMessage() + ";";
+                }
+            }
+            index = index + 1;
+        }
+        return errorMsg;
+    }
+
+    /**
+     * 16杩涘埗瀛楃涓茶浆涓轰簩杩涘埗
+     */
+    public String hexStr2BinStr(String hexStr) {
+        if (hexStr == null || hexStr.length() % 2 != 0) {
+            return null;
+        }
+        String bString = "", tmp;
+        for (int i = 0; i < hexStr.length(); i++) {
+            tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hexStr.substring(i, i + 1), 16));
+            bString += tmp.substring(tmp.length() - 4);
+        }
+        return bString;
+    }
 }

--
Gitblit v1.9.3