From 876270f40c443d99729c5d98d629b74fa5a7a1c0 Mon Sep 17 00:00:00 2001 From: CZT <czt18638530771@163.com> Date: 星期六, 07 十月 2023 12:03:48 +0800 Subject: [PATCH] 贝博粮情解析5 --- igds-core/src/main/java/com/ld/igds/util/BytesUtil.java | 45 +++++++++-- igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java | 161 ++++++++++++++++++++++----------------- 2 files changed, 127 insertions(+), 79 deletions(-) diff --git a/igds-core/src/main/java/com/ld/igds/util/BytesUtil.java b/igds-core/src/main/java/com/ld/igds/util/BytesUtil.java index ef8863e..1e1a5c5 100644 --- a/igds-core/src/main/java/com/ld/igds/util/BytesUtil.java +++ b/igds-core/src/main/java/com/ld/igds/util/BytesUtil.java @@ -190,6 +190,42 @@ return rsBinStr; } + 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; + } + + public static void main(String[] args) { + String s = hexString2binaryString("21E9", 16); + System.out.println(s); + } + /** * 涓嶈冻width涓瓧鑺傚搴︽椂锛屽墠闈㈣ˉ0鑷硍idth*8 * @@ -362,15 +398,6 @@ nSum = nSum * nValue; } return nSum; - } - - public static void main(String[] args) { - - String hex = "<END>"; - byte[] attr = hex.getBytes(); - - hex = bytesToString(attr); - } /** diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java index f93e77b..5a789b8 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + import java.util.*; /** @@ -54,21 +55,21 @@ public static String result = ""; - public static Map<String, String> contextMap = new HashMap<>(); - public static double ERROR_CHECK_TAG = -100.0; public static double FAULT_CHECK_TAG = 85.0; public static double ERROR_CHECK_TAG2 = 50; + public static String ERROR_HEX = "FFFF"; public static double MAX_TEMP = -50.0; public static double MIN_TEMP = 50.0; public static void main(String[] args) { String str = "00000000FFEB90FEAA41E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; - System.out.println(str.substring(9*2, 10*2)); + System.out.println(str.substring(9 * 2, 10 * 2)); } + /** * 00000000FFEB90FEAA41E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF * @@ -77,59 +78,66 @@ public void analysis(String ip, int port, String hexStr) { result += hexStr; - if(result.length() < 1066*2){ + if (result.length() < 1066 * 2) { log.info("鍒嗘満------->>骞冲彴锛屾姤鏂囬暱搴︿笉澶燂紝绛夊緟涓嬩竴鍖呮暟鎹�"); return; } - //灏佽鏁版嵁 - ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(result); - reMessage.setIp(ip); - reMessage.setPort(port); - log.info("鍒嗘満------->>骞冲彴锛氱伯鎯呭畬鏁存姤鏂囦俊鎭�={}", reMessage); - result = ""; - if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) { - log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr()); - return; + try { + + + //灏佽鏁版嵁 + ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(result); + reMessage.setIp(ip); + reMessage.setPort(port); + log.info("鍒嗘満------->>骞冲彴锛氱伯鎯呭畬鏁存姤鏂囦俊鎭�={}", reMessage); + result = ""; + if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) { + log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr()); + return; + } + + //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅 + DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId()); + if (ser == null) { + log.error("鍒嗘満-------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ紝鏈幏鍙栧埌绯荤粺绮儏涓绘満閰嶇疆锛�" + reMessage.getSerId()); + return; + } + + List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId()); + if (null == list || list.isEmpty()) { + String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒版墍灞炰粨搴撲俊鎭��"; + log.error("鍒嗘満------>>>骞冲彴锛�" + info); + notifyGrainInvoker.notifyWeb(ser.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.GRAIN, info); + return; + } + + ExeRequest exeRequest = list.get(0); + log.info("鑾峰彇绮儏鍛戒护淇℃伅={}", exeRequest); + if (null == exeRequest) { + String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍘嗗彶鍛戒护銆�"; + log.error("璐濆崥鍒嗘満------>>>骞冲彴锛�" + info); + return; + } + + DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId()); + if (null == depotConf) { + String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒扮伯鎯呭弬鏁伴厤缃俊鎭��"; + log.error("鍒嗘満------>>>骞冲彴锛�" + info); + notifyGrainInvoker.notifyWeb(ser.getCompanyId(), + OrderRespEnum.MSG_ERROR, BizType.GRAIN, info); + return; + } + + // 棣栧厛鑾峰彇鍒扮郴缁熷弬鏁帮紝鍒ゆ柇鏄惁闇�瑕佹壒娆¤嚜鍔ㄤ紭鍖� + DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId()); + + reMessage.setCompanyId(ser.getCompanyId()); + analysisGrain(depotConf, reMessage, ser, exeRequest, sysConf); + } catch (Exception e) { + result = ""; + log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭紓甯革細鍘熷洜={}", e.toString()); } - - //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅 - DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId()); - if (ser == null) { - log.error("鍒嗘満-------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ紝鏈幏鍙栧埌绯荤粺绮儏涓绘満閰嶇疆锛�" + reMessage.getSerId()); - return; - } - - List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId()); - if (null == list || list.isEmpty()) { - String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒版墍灞炰粨搴撲俊鎭��"; - log.error("鍒嗘満------>>>骞冲彴锛�" + info); - notifyGrainInvoker.notifyWeb(ser.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.GRAIN, info); - return; - } - - ExeRequest exeRequest = list.get(0); - log.info("鑾峰彇绮儏鍛戒护淇℃伅={}", exeRequest); - if (null == exeRequest) { - String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍘嗗彶鍛戒护銆�"; - log.error("璐濆崥鍒嗘満------>>>骞冲彴锛�" + info); - return; - } - - DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId()); - if (null == depotConf) { - String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒扮伯鎯呭弬鏁伴厤缃俊鎭��"; - log.error("鍒嗘満------>>>骞冲彴锛�" + info); - notifyGrainInvoker.notifyWeb(ser.getCompanyId(), - OrderRespEnum.MSG_ERROR, BizType.GRAIN, info); - return; - } - - // 棣栧厛鑾峰彇鍒扮郴缁熷弬鏁帮紝鍒ゆ柇鏄惁闇�瑕佹壒娆¤嚜鍔ㄤ紭鍖� - DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId()); - - reMessage.setCompanyId(ser.getCompanyId()); - analysisGrain(depotConf, reMessage, ser, exeRequest, sysConf); } @@ -255,15 +263,22 @@ temp = "0000"; } //楂樹綆浣嶈浆鎹㈠悗杞负16浣嶄簩杩涘埗瀛楃涓� - temp = BytesUtil.toBinary8StringSame(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)), 16); - //绗﹀彿浣� - symbol = Integer.valueOf(temp.substring(0, 1)); - //鑾峰彇娓╁害鍊� - tempValue = BytesUtil.hexToInt(BytesUtil.binToHex(temp.substring(6))) * 0.0625; - if(symbol == 1){ - tempValue = (1- BytesUtil.hexToInt(BytesUtil.binToHex(temp.substring(6))))*0.0625; + temp = BytesUtil.tran_LH(temp); + if(ERROR_HEX.equals(temp)){ + tempValue = Constant.ERROR_TEMP; + }else { + //10杩涘埗杞�16浣嶇殑2杩涘埗 + temp = BytesUtil.hexString2binaryString(temp, 16); + //绗﹀彿浣� + symbol = Integer.valueOf(temp.substring(0, 1)); + //鑾峰彇娓╁害鍊� + tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625; + //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1 + if (symbol == 1) { + tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625; + } + tempValue = NumberUtil.keepPrecision(tempValue, 1); } - tempValue = NumberUtil.keepPrecision(tempValue, 1); //闈炴甯稿�� if (tempValue > ERROR_CHECK_TAG2) { @@ -370,16 +385,22 @@ temp = "0000"; } - //楂樹綆浣嶈浆鎹㈠悗杞负16浣嶄簩杩涘埗瀛楃涓� - temp = BytesUtil.toBinary8StringSame(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)), 16); - //绗﹀彿浣� - symbol = Integer.valueOf(temp.substring(0, 1)); - //鑾峰彇娓╁害鍊� - tempValue = BytesUtil.hexToInt(BytesUtil.binToHex(temp.substring(6))) * 0.0625; - if(symbol == 1){ - tempValue = (1- BytesUtil.hexToInt(BytesUtil.binToHex(temp.substring(6))))*0.0625; + if(ERROR_HEX.equals(temp)){ + tempValue = Constant.ERROR_TEMP; + }else { + //10杩涘埗杞�16浣嶇殑2杩涘埗 + temp = BytesUtil.hexString2binaryString(temp, 16); + //绗﹀彿浣� + symbol = Integer.valueOf(temp.substring(0, 1)); + //鑾峰彇娓╁害鍊� + tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625; + //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1 + if (symbol == 1) { + tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625; + } + tempValue = NumberUtil.keepPrecision(tempValue, 1); } - tempValue = NumberUtil.keepPrecision(tempValue, 1); + // 璇存槑瑙f瀽鐨勬暟鎹湁闂 if (tempValue == ERROR_CHECK_TAG || tempValue == ERROR_CHECK_TAG2) { tempValue = Constant.ERROR_TEMP; @@ -442,7 +463,7 @@ grain.setTempIn(Constant.ERROR_TEMP); grain.setHumidityIn(Constant.ERROR_TEMP); - grain.setReceiveDate(msg.getReceiveDate()); + grain.setReceiveDate(new Date()); grain.setRemark("绮俯姝e父"); // 鑾峰彇缂撳瓨涓殑鍛戒护淇℃伅 @@ -524,7 +545,7 @@ grain.setTempIn(Constant.ERROR_TEMP); grain.setHumidityIn(Constant.ERROR_TEMP); - grain.setReceiveDate(msg.getReceiveDate()); + grain.setReceiveDate(new Date()); grain.setRemark("绮俯姝e父"); grain.setCheckUser(exeRequest.getExeUser()); -- Gitblit v1.9.3