2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-08-12 423b61bfb18ceab430303bada28f93631f0e8392
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;
    }
}