From 66b091963fb0f3356f27ec094c013369bf91db89 Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期日, 24 十二月 2023 14:02:19 +0800
Subject: [PATCH] 游仙协议解析-3

---
 src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java                |    2 
 src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java |   27 +
 src/main/java/com/fzzy/api/utils/BytesUtil.java                                   |  834 ++++++++++++++++++++++++++++---------------------------
 src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java        |   14 
 src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java            |   11 
 5 files changed, 467 insertions(+), 421 deletions(-)

diff --git a/src/main/java/com/fzzy/api/utils/BytesUtil.java b/src/main/java/com/fzzy/api/utils/BytesUtil.java
index af4348e..491ee75 100644
--- a/src/main/java/com/fzzy/api/utils/BytesUtil.java
+++ b/src/main/java/com/fzzy/api/utils/BytesUtil.java
@@ -4,447 +4,469 @@
 
 public class BytesUtil {
 
-	/**
-	 * bytes杈撳嚭鍗佽繘鍒�
-	 * 
-	 * @param bytes
-	 * @return
-	 */
-	public static Integer bytesToInt(byte[] bytes) {
-		String str = "";
-		int i = 0;
-		boolean flag = true && bytes.length > 0;
-		while (flag) {
-			Byte b = bytes[i];
-			i++;
-			Integer bi = Byte.toUnsignedInt(b);
-			str += toHexString(bi);
-			if (i >= bytes.length || str.endsWith("EEEE"))
-				flag = false;
-		}
-		return Integer.parseInt(str, 16);
-	}
+    /**
+     * bytes杈撳嚭鍗佽繘鍒�
+     *
+     * @param bytes
+     * @return
+     */
+    public static Integer bytesToInt(byte[] bytes) {
+        String str = "";
+        int i = 0;
+        boolean flag = true && bytes.length > 0;
+        while (flag) {
+            Byte b = bytes[i];
+            i++;
+            Integer bi = Byte.toUnsignedInt(b);
+            str += toHexString(bi);
+            if (i >= bytes.length || str.endsWith("EEEE"))
+                flag = false;
+        }
+        return Integer.parseInt(str, 16);
+    }
 
-	/**
-	 * bytes杈撳嚭鍗佸叚杩涘埗瀛楃涓�
-	 * 
-	 * @param bytes
-	 * @return
-	 */
-	public static String bytesToString(byte[] bytes) {
-		String str = "";
-		int i = 0;
-		boolean flag = true && bytes.length > 0;
-		while (flag) {
-			Byte b = bytes[i];
-			i++;
-			Integer bi = Byte.toUnsignedInt(b);
-			str += toHexString(bi);
-			if (i >= bytes.length)
-				flag = false;
-		}
-		return str;
-	}
+    /**
+     * bytes杈撳嚭鍗佸叚杩涘埗瀛楃涓�
+     *
+     * @param bytes
+     * @return
+     */
+    public static String bytesToString(byte[] bytes) {
+        String str = "";
+        int i = 0;
+        boolean flag = true && bytes.length > 0;
+        while (flag) {
+            Byte b = bytes[i];
+            i++;
+            Integer bi = Byte.toUnsignedInt(b);
+            str += toHexString(bi);
+            if (i >= bytes.length)
+                flag = false;
+        }
+        return str;
+    }
 
-	/**
-	 * 鍗佸叚杩涘埗杞瓧鑺�
-	 * 
-	 * @param hex
-	 * @return
-	 */
-	public static byte hexToByte(Integer hex) {
-		return hex.byteValue();
-	}
+    /**
+     * 鍗佸叚杩涘埗杞瓧鑺�
+     *
+     * @param hex
+     * @return
+     */
+    public static byte hexToByte(Integer hex) {
+        return hex.byteValue();
+    }
 
-	/**
-	 * short杞�2瀛楄妭 宸茶皟鏁撮珮浣庝綅
-	 * 
-	 * @param number
-	 * @return
-	 */
-	public static byte[] shortToByte(short number) {
-		int temp = number;
-		byte[] b = new byte[2];
-		for (int i = 0; i < b.length; i++) {
-			b[i] = new Integer(temp & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄦ渶浣庝綅
-			temp = temp >> 8; // 鍚戝彸绉�8浣�
-		}
-		return b;
-	}
+    /**
+     * short杞�2瀛楄妭 宸茶皟鏁撮珮浣庝綅
+     *
+     * @param number
+     * @return
+     */
+    public static byte[] shortToByte(short number) {
+        int temp = number;
+        byte[] b = new byte[2];
+        for (int i = 0; i < b.length; i++) {
+            b[i] = new Integer(temp & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄦ渶浣庝綅
+            temp = temp >> 8; // 鍚戝彸绉�8浣�
+        }
+        return b;
+    }
 
-	/**
-	 * 浜岃繘鍒跺瓙涓茶浆16杩涘埗瀛愪覆
-	 * 
-	 * @param bin
-	 * @return
-	 */
-	public static String binToHex(String bin) {
-		String hexStr = "";
-		int size = bin.length() / 8;
-		for (int i = 0; i < size; i++) {
-			String value = bin.substring(i * 8, (i + 1) * 8);
-			int temp = Integer.parseInt(value, 2);
-			String tempHex = Integer.toHexString(temp);
-			hexStr += tempHex;
-		}
-		return hexStr;
-	}
+    /**
+     * 浜岃繘鍒跺瓙涓茶浆16杩涘埗瀛愪覆
+     *
+     * @param bin
+     * @return
+     */
+    public static String binToHex(String bin) {
+        String hexStr = "";
+        int size = bin.length() / 8;
+        for (int i = 0; i < size; i++) {
+            String value = bin.substring(i * 8, (i + 1) * 8);
+            int temp = Integer.parseInt(value, 2);
+            String tempHex = Integer.toHexString(temp);
+            hexStr += tempHex;
+        }
+        return hexStr;
+    }
 
-	/**
-	 * 浜岃繘鍒惰浆16杩涘埗锛屼笉瓒�2浣嶈ˉ浣�
-	 * 
-	 * @param bin
-	 * @return
-	 */
-	public static String bin2Hex(String bin) {
-		String hexStr = "";
-		int size = bin.length() / 8;
-		for (int i = 0; i < size; i++) {
-			String value = bin.substring(i * 8, (i + 1) * 8);
-			int temp = Integer.parseInt(value, 2);
-			String tempHex = Integer.toHexString(temp);
-			if (tempHex.length() < 2) {
-				tempHex = "0" + tempHex;
-			}
-			hexStr += tempHex;
-		}
+    /**
+     * 浜岃繘鍒惰浆16杩涘埗锛屼笉瓒�2浣嶈ˉ浣�
+     *
+     * @param bin
+     * @return
+     */
+    public static String bin2Hex(String bin) {
+        String hexStr = "";
+        int size = bin.length() / 8;
+        for (int i = 0; i < size; i++) {
+            String value = bin.substring(i * 8, (i + 1) * 8);
+            int temp = Integer.parseInt(value, 2);
+            String tempHex = Integer.toHexString(temp);
+            if (tempHex.length() < 2) {
+                tempHex = "0" + tempHex;
+            }
+            hexStr += tempHex;
+        }
 
-		return hexStr;
-	}
+        return hexStr;
+    }
 
-	/**
-	 * 杞负鍗佸叚杩涘埗涓诧紝涓嶈冻2浣嶈ˉ0
-	 * 
-	 * @param value
-	 * @return
-	 */
-	public static String toHexString(int value) {
-		String tempHex = Integer.toHexString(value);
-		if (tempHex.length() < 2) {
-			tempHex = "0" + tempHex;
-		}
-		return tempHex.toUpperCase();
-	}
+    /**
+     * 杞负鍗佸叚杩涘埗涓诧紝涓嶈冻2浣嶈ˉ0
+     *
+     * @param value
+     * @return
+     */
+    public static String toHexString(int value) {
+        String tempHex = Integer.toHexString(value);
+        if (tempHex.length() < 2) {
+            tempHex = "0" + tempHex;
+        }
+        return tempHex.toUpperCase();
+    }
 
-	public static String getTargetId(String value, boolean isTwo) {
-		String tempHex = Integer.toHexString(Integer.valueOf(value));
-		if (tempHex.length() < 2) {
-			tempHex = "0" + tempHex;
-		}
-		if (isTwo) {
-			if (tempHex.length() < 4) {
-				tempHex = "0" + tempHex;
-			}
-			if (tempHex.length() < 4) {
-				tempHex = "0" + tempHex;
-			}
-		}
-		return tempHex.toUpperCase();
-	}
+    public static String getTargetId(String value, boolean isTwo) {
+        String tempHex = Integer.toHexString(Integer.valueOf(value));
+        if (tempHex.length() < 2) {
+            tempHex = "0" + tempHex;
+        }
+        if (isTwo) {
+            if (tempHex.length() < 4) {
+                tempHex = "0" + tempHex;
+            }
+            if (tempHex.length() < 4) {
+                tempHex = "0" + tempHex;
+            }
+        }
+        return tempHex.toUpperCase();
+    }
 
-	/**
-	 * 鏍规嵁鏁板�艰幏鍙栧埌闀垮害涓�2瀛楄妭鐨�16杩涘埗瀛楃
-	 * 
-	 * @param value
-	 * @return
-	 */
-	public static String getHex2LenStr(int value) {
-		String tempHex = Integer.toHexString(value);
-		if (tempHex.length() < 2) {
-			tempHex = "0" + tempHex;
-		}
-		if (tempHex.length() < 4) {
-			tempHex = "0" + tempHex;
-		}
-		if (tempHex.length() < 4) {
-			tempHex = "0" + tempHex;
-		}
-		return tempHex.toUpperCase();
-	}
+    /**
+     * 鏍规嵁鏁板�艰幏鍙栧埌闀垮害涓�2瀛楄妭鐨�16杩涘埗瀛楃
+     *
+     * @param value
+     * @return
+     */
+    public static String getHex2LenStr(int value) {
+        String tempHex = Integer.toHexString(value);
+        if (tempHex.length() < 2) {
+            tempHex = "0" + tempHex;
+        }
+        if (tempHex.length() < 4) {
+            tempHex = "0" + tempHex;
+        }
+        if (tempHex.length() < 4) {
+            tempHex = "0" + tempHex;
+        }
+        return tempHex.toUpperCase();
+    }
 
-	public static String getOrderId(int value) {
-		return getHex2LenStr(value);
-	}
+    public static String getOrderId(int value) {
+        return getHex2LenStr(value);
+    }
 
-	/**
-	 * 灏唙alue杞负same涓浉鍚屾弧8浣嶇殑浜岃繘鍒跺瓧涓�
-	 * 
-	 * @param value
-	 * @param same
-	 * @return
-	 */
-	public static String toBinary8StringSame(int value, int same) {
-		String tempBinStr = toBinary8String(value);
-		String rsBinStr = "";
-		for (int i = 0; i < same; i++) {
-			rsBinStr += tempBinStr;
-		}
-		return rsBinStr;
-	}
+    /**
+     * 灏唙alue杞负same涓浉鍚屾弧8浣嶇殑浜岃繘鍒跺瓧涓�
+     *
+     * @param value
+     * @param same
+     * @return
+     */
+    public static String toBinary8StringSame(int value, int same) {
+        String tempBinStr = toBinary8String(value);
+        String rsBinStr = "";
+        for (int i = 0; i < same; i++) {
+            rsBinStr += tempBinStr;
+        }
+        return rsBinStr;
+    }
 
-	/**
-	 * 涓嶈冻width涓瓧鑺傚搴︽椂锛屽墠闈㈣ˉ0鑷硍idth*8
-	 * 
-	 * @param value
-	 * @param width
-	 * @return
-	 */
-	public static String toBinary8String(int value, int width) {
-		String tempBinStr = toBinary8String(value);
-		int size = tempBinStr.length();
-		for (int i = 0; i < width; i++) {
-			int temp = (i + 1) * 8;
-			if (temp > size) {
-				tempBinStr = "00000000" + tempBinStr;
-				size = tempBinStr.length();
-			}
-		}
-		return tempBinStr;
-	}
+    /**
+     * 涓嶈冻width涓瓧鑺傚搴︽椂锛屽墠闈㈣ˉ0鑷硍idth*8
+     *
+     * @param value
+     * @param width
+     * @return
+     */
+    public static String toBinary8String(int value, int width) {
+        String tempBinStr = toBinary8String(value);
+        int size = tempBinStr.length();
+        for (int i = 0; i < width; i++) {
+            int temp = (i + 1) * 8;
+            if (temp > size) {
+                tempBinStr = "00000000" + tempBinStr;
+                size = tempBinStr.length();
+            }
+        }
+        return tempBinStr;
+    }
 
-	/**
-	 * 琛ヨ冻8浣�
-	 * 
-	 * @param value
-	 * @return
-	 */
-	public static String toBinary8String(int value) {
-		String temp = Integer.toBinaryString(value);
-		if (value == 0) {
-			temp = "00000000";
-		}
-		int length = temp.length();
-		while (length < 8) {
-			temp = "0" + temp;
-			length = temp.length();
-		}
-		return temp;
-	}
+    /**
+     * 琛ヨ冻8浣�
+     *
+     * @param value
+     * @return
+     */
+    public static String toBinary8String(int value) {
+        String temp = Integer.toBinaryString(value);
+        if (value == 0) {
+            temp = "00000000";
+        }
+        int length = temp.length();
+        while (length < 8) {
+            temp = "0" + temp;
+            length = temp.length();
+        }
+        return temp;
+    }
 
-	public static String toEmptyBinaryWidthString(int width) {
-		String str = "";
-		for (int i = 0; i < width; i++) {
-			str += "00000000";
-		}
-		return str;
-	}
+    public static String toEmptyBinaryWidthString(int width) {
+        String str = "";
+        for (int i = 0; i < width; i++) {
+            str += "00000000";
+        }
+        return str;
+    }
 
-	public static byte[] emptyBytes(int bytes) {
-		byte[] bys = new byte[bytes];
-		for (int i = 0; i < bytes; i++) {
-			bys[i] = emptyByte();
-		}
-		return bys;
-	}
+    public static byte[] emptyBytes(int bytes) {
+        byte[] bys = new byte[bytes];
+        for (int i = 0; i < bytes; i++) {
+            bys[i] = emptyByte();
+        }
+        return bys;
+    }
 
-	public static byte emptyByte() {
-		Integer b0 = 0x00;
-		return b0.byteValue();
-	}
+    public static byte emptyByte() {
+        Integer b0 = 0x00;
+        return b0.byteValue();
+    }
 
-	public static byte binToBytes(String bin) {
-		return Integer.valueOf(bin, 2).byteValue();
-	}
+    public static byte binToBytes(String bin) {
+        return Integer.valueOf(bin, 2).byteValue();
+    }
 
-	public static byte[] binaryStrToBytes(String binStr) {
-		int size = binStr.length() / 8;
-		byte[] bs = new byte[size];
-		for (int i = 0; i < size; i++) {
-			String temp = binStr.substring(i * 8, (i + 1) * 8);
-			bs[i] = Integer.valueOf(temp, 2).byteValue();
-		}
-		return bs;
-	}
+    public static byte[] binaryStrToBytes(String binStr) {
+        int size = binStr.length() / 8;
+        byte[] bs = new byte[size];
+        for (int i = 0; i < size; i++) {
+            String temp = binStr.substring(i * 8, (i + 1) * 8);
+            bs[i] = Integer.valueOf(temp, 2).byteValue();
+        }
+        return bs;
+    }
 
-	/**
-	 * 鍗佸叚杩涘埗涓茶浆瀛楄妭鏁扮粍
-	 * 
-	 * @param hexStr
-	 * @return
-	 */
-	public static byte[] hexStrToBytes(String hexStr) {
-		int size = hexStr.length() / 2;
-		byte[] bytes = new byte[size];
-		for (int i = 0; i < size; i++) {
-			String tmp = hexStr.substring(i * 2, (i + 1) * 2);
-			Integer tmpHex = Integer.parseInt(tmp, 16);
-			bytes[i] = tmpHex.byteValue();
-		}
-		return bytes;
-	}
+    /**
+     * 鍗佸叚杩涘埗涓茶浆瀛楄妭鏁扮粍
+     *
+     * @param hexStr
+     * @return
+     */
+    public static byte[] hexStrToBytes(String hexStr) {
+        int size = hexStr.length() / 2;
+        byte[] bytes = new byte[size];
+        for (int i = 0; i < size; i++) {
+            String tmp = hexStr.substring(i * 2, (i + 1) * 2);
+            Integer tmpHex = Integer.parseInt(tmp, 16);
+            bytes[i] = tmpHex.byteValue();
+        }
+        return bytes;
+    }
 
-	/**
-	 * 涓ゅ瓧鑺傞珮浣庝綅瑁呮崲
-	 *
-	 * @param b
-	 * @return
-	 */
-	public static byte[] hexHeightLow(byte[] b) {
-		byte[] b2 = new byte[2];
-		// 杞崲楂樹綆浣�
-		b2[0] = b[1];
-		b2[1] = b[0];
-		return b2;
-	}
+    /**
+     * 涓ゅ瓧鑺傞珮浣庝綅瑁呮崲
+     *
+     * @param b
+     * @return
+     */
+    public static byte[] hexHeightLow(byte[] b) {
+        byte[] b2 = new byte[2];
+        // 杞崲楂樹綆浣�
+        b2[0] = b[1];
+        b2[1] = b[0];
+        return b2;
+    }
 
-	/**
-	 * 16杩涘埗杞崲涓�10杩涘埗
-	 * 
-	 * @param strHex
-	 * @return
-	 */
-	public static int hexToInt(String strHex) {
-		short s = (short) (Integer.valueOf(strHex, 16) & 0xffff);
-		return s;
-	}
+    /**
+     * 16杩涘埗杞崲涓�10杩涘埗
+     *
+     * @param strHex
+     * @return
+     */
+    public static int hexToInt(String strHex) {
+        short s = (short) (Integer.valueOf(strHex, 16) & 0xffff);
+        return s;
+    }
 
-	/**
-	 * 16杩涘埗杞崲涓�10杩涘埗
-	 * 
-	 * @param strHex
-	 * @return
-	 */
-	public static int hexToBigInt(String strHex) {
-		BigInteger bigint = new BigInteger(strHex, 16);
-		return bigint.intValue();
-	}
+    /**
+     * 16杩涘埗杞崲涓�10杩涘埗
+     *
+     * @param strHex
+     * @return
+     */
+    public static int hexToBigInt(String strHex) {
+        BigInteger bigint = new BigInteger(strHex, 16);
+        return bigint.intValue();
+    }
 
-	/**
-	 * int杞�16杩涘埗瀛楃涓� 2浣� 00 00
-	 *
-	 * @param num
-	 * @return
-	 */
-	public static String intToHexStr(int num) {
-		// 闇�瑕佷娇鐢�2瀛楄妭琛ㄧずb
-		return String.format("%04x", num).toUpperCase();
-	}
+    /**
+     * int杞�16杩涘埗瀛楃涓� 2浣� 00 00
+     *
+     * @param num
+     * @return
+     */
+    public static String intToHexStr(int num) {
+        // 闇�瑕佷娇鐢�2瀛楄妭琛ㄧずb
+        return String.format("%04x", num).toUpperCase();
+    }
 
 
-	public static void main(String[] args) {
-		
-		double d1 = hexToBigInt("000906EB")/100.0;
-		double d2 = hexToBigInt("0004F6E6")/100.0;
-		
-		System.out.println(d1);
-		System.out.println(d2);
-		
-		System.out.println(d1 + d2);
+    public static void main(String[] args) {
 
-		
-	}
+//		double d1 = hexToBigInt("000906EB")/100.0;
+//		double d2 = hexToBigInt("0004F6E6")/100.0;
+//
+//		System.out.println(d1);
+//		System.out.println(d2);
+//
+//		System.out.println(d1 + d2);
 
-	/**
-	 * 16杩涘埗瀛楃涓� 楂樹綆鎹綅
-	 *
-	 * @param info
-	 * @return
-	 */
-	public static String tran_LH(String info) {
-		return info.substring(2) + info.substring(0, 2);
-	}
 
-	/**
-	 * 16杩涘埗瀛楃涓� 楂樹綆鎹綅 8涓瓧绗�
-	 *
-	 * @param info
-	 * @return
-	 */
-	public static String tran_LH8(String info) {
-		return tran_LH(info.substring(4)) + tran_LH(info.substring(0, 4));
-	}
+        String kyeNumBin = "10100100";
+        String key = "00000" + kyeNumBin.substring(0, 3);
 
-	/**
-	 * 灏� 4瀛楄妭鐨�16杩涘埗瀛楃涓诧紝杞崲涓�32浣嶅甫绗﹀彿鐨勫崄杩涘埗娴偣鍨�
-	 * 
-	 * 42c60000 -> 99.00
-	 * 
-	 * @param str
-	 *            4瀛楄妭 16杩涘埗瀛楃
-	 * @return
-	 */
-	public static float hexToFloat(String str) {
-		return Float.intBitsToFloat(new BigInteger(str, 16).intValue());
-	}
+        System.out.println("-----key-----" + key);
 
-	/**
-	 * 灏嗗甫绗﹀彿鐨�32浣嶆诞鐐规暟瑁呮崲涓�16杩涘埗
-	 * 
-	 * 99.00 -> 42c60000
-	 * 
-	 * 
-	 * @param value
-	 * @return
-	 */
-	public static String folatToHexString(Float value) {
-		return Integer.toHexString(Float.floatToIntBits(value));
-	}
+        String bin2hex = BytesUtil.bin2Hex(key);
 
-	/**
-	 * int杞�16杩涘埗瀛楃涓� 1浣嶇疆 00
-	 *
-	 * @param num
-	 * @return
-	 */
-	public static String intToHexStr1(int num) {
-		// 闇�瑕佷娇鐢�2瀛楄妭琛ㄧずb
-		return String.format("%02x", num).toUpperCase();
-	}
+        System.out.println("-----bin2hex-----" + bin2hex);
 
-	public static String hexString2binaryString(String hexString, int num) {
-		//16杩涘埗杞�10杩涘埗
-		BigInteger sint = new BigInteger(hexString, num);
-		//10杩涘埗杞�2杩涘埗
-		String str = sint.toString(2);
-		if(str.length() < num){
-			for (int i = str.length(); i < num; i++) {
-				str = "0" + str;
-			}
-		}
-		return str;
-	}
+        int keyValue = BytesUtil.hexToInt(bin2hex);
 
-	/**
-	 * 灏嗕簩杩涘埗杞崲涓�10杩涘埗
-	 * @param binStr
-	 * @return
-	 */
-	public  static  Integer biannary2Decimal(String binStr){
+        System.out.println("-----keyValue-----" + keyValue);
 
-		Integer sum = 0;
-		int len = binStr.length();
+        key = "0000" + kyeNumBin.substring(4);
 
-		for (int i=1;i<=len;i++){
-			//绗琲浣� 鐨勬暟瀛椾负锛�
-			int dt = Integer.parseInt(binStr.substring(i-1,i));
-			sum+=(int)Math.pow(2,len-i)*dt;
-		}
-		return  sum;
-	}
+        System.out.println("-----key-----" + key);
 
-	/**
-	 * 浜岃繘鍒惰ˉ鐮侊細鍙栧弽鍙e姞1
-	 * @param str
-	 * @return
-	 */
-	public static Integer twoToString(String str) {
-		String two = "";
-		String[] split = str.split("");
-		for (int i = 0;i< split.length;i++){
-			if("1".equals(split[i])){
-				two += "0";
-			}else if("0".equals(split[i])){
-				two += "1";
-			}
-		}
-		return biannary2Decimal(two) + 1;
-	}
+        bin2hex = BytesUtil.bin2Hex(key);
+        System.out.println("-----bin2hex-----" + bin2hex);
+        keyValue = BytesUtil.hexToInt(bin2hex);
+        System.out.println("-----keyValue-----" + keyValue);
 
-	public static String byteToHex(byte b) {
-		String hex = Integer.toHexString(b & 0xFF);
-		if (hex.length() < 2) {
-			hex = "0" + hex;
-		}
-		return hex;
-	}
+    }
+
+    /**
+     * 16杩涘埗瀛楃涓� 楂樹綆鎹綅
+     *
+     * @param info
+     * @return
+     */
+    public static String tran_LH(String info) {
+        return info.substring(2) + info.substring(0, 2);
+    }
+
+    /**
+     * 16杩涘埗瀛楃涓� 楂樹綆鎹綅 8涓瓧绗�
+     *
+     * @param info
+     * @return
+     */
+    public static String tran_LH8(String info) {
+        return tran_LH(info.substring(4)) + tran_LH(info.substring(0, 4));
+    }
+
+    /**
+     * 灏� 4瀛楄妭鐨�16杩涘埗瀛楃涓诧紝杞崲涓�32浣嶅甫绗﹀彿鐨勫崄杩涘埗娴偣鍨�
+     * <p>
+     * 42c60000 -> 99.00
+     *
+     * @param str 4瀛楄妭 16杩涘埗瀛楃
+     * @return
+     */
+    public static float hexToFloat(String str) {
+        return Float.intBitsToFloat(new BigInteger(str, 16).intValue());
+    }
+
+    /**
+     * 灏嗗甫绗﹀彿鐨�32浣嶆诞鐐规暟瑁呮崲涓�16杩涘埗
+     * <p>
+     * 99.00 -> 42c60000
+     *
+     * @param value
+     * @return
+     */
+    public static String folatToHexString(Float value) {
+        return Integer.toHexString(Float.floatToIntBits(value));
+    }
+
+    /**
+     * int杞�16杩涘埗瀛楃涓� 1浣嶇疆 00
+     *
+     * @param num
+     * @return
+     */
+    public static String intToHexStr1(int num) {
+        // 闇�瑕佷娇鐢�2瀛楄妭琛ㄧずb
+        return String.format("%02x", num).toUpperCase();
+    }
+
+    public static String hexString2binaryString(String hexString, int num) {
+        //16杩涘埗杞�10杩涘埗
+        BigInteger sint = new BigInteger(hexString, num);
+        //10杩涘埗杞�2杩涘埗
+        String str = sint.toString(2);
+        if (str.length() < num) {
+            for (int i = str.length(); i < num; i++) {
+                str = "0" + str;
+            }
+        }
+        return str;
+    }
+
+    /**
+     * 灏嗕簩杩涘埗杞崲涓�10杩涘埗
+     *
+     * @param binStr
+     * @return
+     */
+    public static Integer biannary2Decimal(String binStr) {
+
+        Integer sum = 0;
+        int len = binStr.length();
+
+        for (int i = 1; i <= len; i++) {
+            //绗琲浣� 鐨勬暟瀛椾负锛�
+            int dt = Integer.parseInt(binStr.substring(i - 1, i));
+            sum += (int) Math.pow(2, len - i) * dt;
+        }
+        return sum;
+    }
+
+    /**
+     * 浜岃繘鍒惰ˉ鐮侊細鍙栧弽鍙e姞1
+     *
+     * @param str
+     * @return
+     */
+    public static Integer twoToString(String str) {
+        String two = "";
+        String[] split = str.split("");
+        for (int i = 0; i < split.length; i++) {
+            if ("1".equals(split[i])) {
+                two += "0";
+            } else if ("0".equals(split[i])) {
+                two += "1";
+            }
+        }
+        return biannary2Decimal(two) + 1;
+    }
+
+    public static String byteToHex(byte b) {
+        String hex = Integer.toHexString(b & 0xFF);
+        if (hex.length() < 2) {
+            hex = "0" + hex;
+        }
+        return hex;
+    }
 }
diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java
index 7ba5fdc..2d572be 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.fzzy.api.data.PushProtocol;
+import com.fzzy.data.ConfigData;
 import com.fzzy.gateway.api.GatewayDeviceReportService;
 import com.fzzy.gateway.data.BaseReqData;
 import com.fzzy.gateway.data.BaseResp;
@@ -13,6 +14,7 @@
 import com.fzzy.gateway.hx2023.data.WeightInfo;
 import com.fzzy.gateway.hx2023.kafka.KafkaDeviceReportService;
 import com.fzzy.mqtt.MqttGatewayService;
+import jdk.nashorn.internal.runtime.regexp.joni.Config;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Component;
@@ -27,6 +29,8 @@
     private KafkaDeviceReportService kafkaDeviceReportService;
     @Resource
     private MqttGatewayService publishService;
+    @Resource
+    private ConfigData configData;
 
     @Override
     public String getProtocol() {
@@ -39,6 +43,16 @@
         String topic = ScConstant.TOPIC_REPORT;
         topic = topic.replace("${productId}", reqData.getProductId()).replace("${deviceId}", reqData.getDeviceId());
 
+        //濡傛灉鏄祴璇曟ā寮忎笉鎵ц鎺ㄩ��
+        if(configData.getActive().indexOf("dev")>=0){
+
+            log.info("----------------------------鎺ㄩ�丮QTT绮儏淇℃伅锛屾敞锛氳皟璇曟ā寮忎笉鎺ㄩ��---------------------------");
+            log.info("-----TOPIC-----{}", topic);
+            log.info("-----Message-----{}", reqData.getData());
+
+            return new BaseResp();
+        }
+
         publishService.publishMqttWithTopic(reqData.getData(), topic);
 
         log.info("----------------------------鎺ㄩ�丮QTT绮儏淇℃伅---------------------------");
diff --git a/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
index 5e1d840..fd3b52b 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java
@@ -1,7 +1,6 @@
 package com.fzzy.protocol.youxian0.analysis;
 
 import com.alibaba.fastjson.JSONObject;
-import com.fzzy.api.Constant;
 import com.fzzy.api.data.GatewayDeviceType;
 import com.fzzy.api.utils.BytesUtil;
 import com.fzzy.api.utils.NumberUtil;
@@ -39,7 +38,6 @@
 
     @Resource
     private GatewayRemoteManager gatewayRemoteManager;
-
 
     private static Map<String, GrainRoot> contextGrainRoot = new HashMap<>();
 
@@ -80,11 +78,14 @@
 
         //绮儏杩斿洖
         if (ServiceUtils.FUNCTION_66.equalsIgnoreCase(funId)) {
+
+            log.info("---------寮�濮嬭В鏋愮伯鎯呬俊鎭�---------");
             this.analysisGrainStep1(device, msgId, strMsg);
         }
 
         //娓╂箍搴﹁繑鍥�
         if (ServiceUtils.FUNCTION_68.equalsIgnoreCase(funId)) {
+            log.info("---------寮�濮嬭В鏋愪粨娓╂箍搴︿俊鎭�---------");
             this.analysisGrainTh(device, strMsg);
         }
 
@@ -130,9 +131,9 @@
         String kyeNumHex = strMsg.substring(2, 4);
         String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt(kyeNumHex));
 
-        String key = kyeNumBin.substring(0, 3);
+        String key = "00000" + kyeNumBin.substring(0, 3);
         int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
-        key = kyeNumBin.substring(4);
+        key = "0000" + kyeNumBin.substring(4);
         int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
 
         //02 A4 BB BA BA B4
@@ -149,6 +150,7 @@
             point = this.getGrainTemp(keyValue, tempHex);
             log.debug("--------瑙f瀽鍚庣殑娓╁害鐐�----{}---{}", tempHex, point);
             grainRoot.getPoints().add(point);
+            start = 2 * 2;
         }
 
 
@@ -307,6 +309,7 @@
             log.error("------------绮儏鎺ㄩ�佸け璐ワ紝绯荤粺涓嶅瓨鍦ㄥ綋鍓嶅崗璁墽琛岀被----{}", reqData.getDevice().getDeviceName());
             return;
         }
+
         reportService.reportGrainData(reqData);
     }
 
diff --git a/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
index 0e99869..41e4c99 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java
@@ -31,6 +31,8 @@
         InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
 
         log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort());
+
+
     }
 
     @Override
diff --git a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
index b15b8ba..ba4473e 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
@@ -65,22 +65,26 @@
             String hexStr = "";
             InvokeResult message;
             for (int i = 1; i <= cableX; i++) {
-                if (1 == i) start = 255;
-                start = i * cableY + 1;
+                if (1 == i) {
+                    start = 255;
+                } else {
+                    start = (i - 1) * cableY + 1;
+                }
 
                 hexStr = this.buildGrainCmd(device, i, start, length);
 
-                // 鍙戦�佸懡浠�
-                Channel channel = ClientEngine.getChannel(device.getIp());
+                // 鍙戦�佸懡浠� TODO----->>>鏆傛椂璋冩暣涓烘瘡娆″垱寤轰竴涓柊杩炴帴
+                //Channel channel = ClientEngine.getChannel(device.getIp());
+                Channel channel = null;
                 if (null == channel) {
                     ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
                     clientEngine.start();
-                    Thread.sleep(500);
+                    Thread.sleep(300);
                     channel = clientEngine.getChannel();
                 }
                 message = ClientEngine.send2(hexStr, channel);
 
-                log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-{}", message);
+                log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr);
 
                 // 灏佽杩斿洖淇℃伅
                 if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) {
@@ -118,22 +122,23 @@
         //寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID
         String deviceSn = device.getDeviceSn();
         deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn));
-        content = content.replaceAll("\\{id}", deviceSn);
+        content = content.replace("{id}", deviceSn);
+        content = content.replace("{id}", deviceSn);
 
         //鍛戒护ID
         String msgIdHex = BytesUtil.intToHexStr1(cur);
-        content = content.replace("\\{msgId}", msgIdHex);
+        content = content.replace("{msgId}", msgIdHex);
 
         //鍛戒护绫诲瀷
-        content = content.replace("\\{funId}", ServiceUtils.FUNCTION_66);
+        content = content.replace("{funId}", ServiceUtils.FUNCTION_66);
 
         //寮�濮嬫牴鍙�
         String startCurHex = BytesUtil.intToHexStr1(startCur);
-        content = content.replace("\\{start}", startCurHex);
+        content = content.replace("{start}", startCurHex);
 
         //鎴彇闀垮害
         String lenHex = BytesUtil.intToHexStr1(length);
-        content = content.replace("\\{length}", lenHex);
+        content = content.replace("{length}", lenHex);
 
         //鏍¢獙鐮�
         String crcCode = this.getCRC(content);

--
Gitblit v1.9.3