From 75bdadc0c4e468217b93142d965cd92ee52838ec Mon Sep 17 00:00:00 2001 From: vince <757871790@qq.com> Date: 星期一, 20 五月 2024 09:01:27 +0800 Subject: [PATCH] 粮情协议优化 --- src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java | 229 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 188 insertions(+), 41 deletions(-) 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 070c5bd..50ff78b 100644 --- a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java +++ b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java @@ -38,7 +38,72 @@ * @return */ @Override - public BaseResp syncGrain(BaseReqData reqData) { + public synchronized BaseResp syncGrain(BaseReqData reqData) { + + BaseResp resp = new BaseResp(); + + GatewayDevice device = reqData.getDevice(); + + if (null == device) { + resp.setCode(500); + resp.setMsg("绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅锛屾棤娉曟墽琛�"); + log.error("----------------绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅,鏃犳硶鎵ц---------"); + return resp; + } + try { + this.syncGrainTh(reqData); + //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨 + ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData); + + // 鍒ゆ柇鏁版嵁鏈夋病鏈夋敹鍙栧畬鏁� + String[] attCable = device.getCableRule().split("-"); + int cableY = Integer.valueOf(attCable[1]); + int cableX = Integer.valueOf(attCable[2]); + + int start = 0, length = cableY; + // 鐢熸垚绮儏淇℃伅 + String hexStr = ""; + InvokeResult message; + Channel channel = ClientEngine.getChannel(); + if (null == channel) { + ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort()); + clientEngine.start(); + Thread.sleep(1000); + channel = clientEngine.getChannel(); + } + for (int i = 1; i <= cableX; i++) { + if (1 == i) { + start = 255; + } else { + start = (i - 1) * cableY + 1; + } + hexStr = buildGrainCmd(device, i, start, length); + // 鍙戦�佸懡浠� TODO----->>>鏆傛椂璋冩暣涓烘瘡娆″垱寤轰竴涓柊杩炴帴 + //Channel channel = ClientEngine.getChannel(device.getIp()); + + message = ClientEngine.send2(hexStr, channel); + //log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr); + log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr); + + // 灏佽杩斿洖淇℃伅 + if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage()); + resp.setCode(500); + resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage()); + } + Thread.sleep(3000); + } + } catch (Exception e) { + log.error("绮儏妫�娴嬪紓甯革細{}", e); + resp.setCode(500); + resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠わ細" + e.getMessage()); + return resp; + } + return resp; + } + + @Override + public BaseResp syncGrainTh(BaseReqData reqData) { BaseResp resp = new BaseResp(); @@ -54,45 +119,28 @@ try { //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨 ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData); - - // 鍒ゆ柇鏁版嵁鏈夋病鏈夋敹鍙栧畬鏁� - String[] attCable = device.getCableRule().split("-"); - int cableY = Integer.valueOf(attCable[1]); - int cableX = Integer.valueOf(attCable[2]); - - int start = 0, length = cableY; - // 鐢熸垚绮儏淇℃伅 - String hexStr = ""; InvokeResult message; - for (int i = 1; i <= cableX; i++) { - if (1 == i) start = 255; - start = i * cableY + 1; - - hexStr = this.buildGrainCmd(device, i, start, length); - - // 鍙戦�佸懡浠� - Channel channel = ClientEngine.getChannel(device.getIp()); - if (null == channel) { - ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort()); - clientEngine.start(); - Thread.sleep(500); - channel = clientEngine.getChannel(); - } - message = ClientEngine.send2(hexStr, channel); - - log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-{}", message); - + Channel channel = null; + if (null == channel) { + ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort()); + clientEngine.start(); + Thread.sleep(300); + channel = clientEngine.getChannel(); + } + String hexStr = this.buildTHCmd(device); + message = ClientEngine.send2(hexStr, channel); + log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-{}---{}", message,hexStr); // 灏佽杩斿洖淇℃伅 if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) { - log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage()); + log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触{}", message.getMessage()); resp.setCode(500); - resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage()); + resp.setMsg("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触锛�" + message.getMessage()); } - } + Thread.sleep(500); } catch (Exception e) { - log.error("绮儏妫�娴嬪紓甯革細{}", e); + log.error("娓╂箍搴︽娴嬪紓甯革細{}", e); resp.setCode(500); - resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠わ細" + e.getMessage()); + resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佹俯婀垮害妫�娴嬪懡浠わ細" + e.getMessage()); return resp; } return resp; @@ -108,27 +156,50 @@ String start = "7e"; //娴嬫俯鍛戒护--7e 01 00 00 01 00 00 02 00 01 a0 ff ff 66 ff 05 3a 59 7e - String content = "{id}0000{id}{msgId}000200{id}a0ffff{funId}{start}{length}"; + //7e 0f 00 00 10 5f 00 03 00 0f 10 a0 ff ff 66 ff 05 9e 43 7e + //7e 06 00 00 06 29 00 02 00 06 a0 ff ff 66 1a 05 58 0f 7e + String content = "{depotId}0000{id1}{msgId}00{type}00{id2}a0ffff{funId}{start}{length}"; + + String type = "02"; //寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID String deviceSn = device.getDeviceSn(); + String depotId = device.getDepotIdSys(); deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn)); - content = content.replaceAll("\\{id}", deviceSn); + depotId = BytesUtil.intToHexStr1(Integer.valueOf(depotId)); + if(!depotId.equals(deviceSn)){ + type = "03"; + + content = content.replace("{depotId}", depotId); + content = content.replace("{id1}", deviceSn); + if(deviceSn.toLowerCase().equals("0e".toLowerCase())){ + content = content.replace("{id2}", depotId +"13"+ deviceSn); + type = "04"; + }else{ + content = content.replace("{id2}", depotId + deviceSn); + } + content = content.replace("{type}", type); + }else{ + content = content.replace("{type}", type); + content = content.replace("{depotId}", depotId); + content = content.replace("{id1}", deviceSn); + content = content.replace("{id2}", 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); @@ -137,7 +208,60 @@ return start + content + crcCode + end; } + private String buildTHCmd(GatewayDevice device) { + String start = "7e"; + //娴嬫俯鍛戒护--7e 01 00 00 01 06 00 02 00 01 a0 ff ff 68 1a 05 88 5c 7e + // {depotId}0000{id1}{msgId}00{type}00{id2} + String content = "{depotId}0000{id1}{msgId}00{type}00{id2}a0ffff{funId}{start}{length}"; + + String type = "02"; + //寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID + String deviceSn = device.getDeviceSn(); + String depotId = device.getDepotIdSys(); + deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn)); + depotId = BytesUtil.intToHexStr1(Integer.valueOf(depotId)); + if(!depotId.equals(deviceSn)){ + type = "03"; + + content = content.replace("{depotId}", depotId); + content = content.replace("{id1}", deviceSn); + if(deviceSn.toLowerCase().equals("0e".toLowerCase())){ + content = content.replace("{id2}", depotId +"13"+ deviceSn); + type = "04"; + }else{ + content = content.replace("{id2}", depotId + deviceSn); + } + content = content.replace("{type}", type); + }else{ + content = content.replace("{type}", type); + content = content.replace("{depotId}", depotId); + content = content.replace("{id1}", deviceSn); + content = content.replace("{id2}", deviceSn); + } + + //鍛戒护ID + String msgIdHex = BytesUtil.intToHexStr1(20); + content = content.replace("{msgId}", msgIdHex); + + //鍛戒护绫诲瀷 + content = content.replace("{funId}", ServiceUtils.FUNCTION_68); + + //寮�濮嬫牴鍙� + String startCurHex = BytesUtil.intToHexStr1(0); + content = content.replace("{start}", startCurHex); + + //鎴彇闀垮害 + String lenHex = BytesUtil.intToHexStr1(0); + content = content.replace("{length}", lenHex); + + //鏍¢獙鐮� + String crcCode = this.getCRC(content); + + String end = "7e"; + + return start + content + crcCode + end; + } /** * 鍙傝�冪粨鏋滐細http://www.ip33.com/crc.html * <p> @@ -149,17 +273,40 @@ * @param content * @return */ - private String getCRC(String content) { + private static String getCRC(String content) { byte[] bytes = HexStringToBytes(content);//16杩涘埗瀛楃涓茶浆鎴�16杩涘埗瀛楃涓叉暟缁� int i = CRC16_XMODEM(bytes);//杩涜CRC鈥擷MODEM鏍¢獙寰楀埌鍗佽繘鍒舵牎楠屾暟 String CRC = Integer.toHexString(i);//10杩涘埗杞�16杩涘埗 - + if(CRC.length() < 4){ + CRC = "0"+CRC; + } + if(CRC.length() < 4){ + CRC = "0"+CRC; + } //璋冩暣楂樹綅鍦ㄥ彸锛屽湴浣嶅湪宸︿晶 CRC = tran_LH(CRC); return CRC; } + public static void main(String[] args) { + //System.out.println(getCRC("010000010400020001a0ffff661005")); + //System.out.println(getCRC("010000010500020001a0ffff661505")); + String strMsg = "7E00010100010000A0FFFF66FF05BE01635B696FCE02A38ABAB5CE03E3003131CE044383B7B6CE0583497276D9FA"; + int start = 15 * 2; + strMsg = strMsg.substring(start); + System.out.println(strMsg); + String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt("A3")); + System.out.println(kyeNumBin); + String key = "00000" + kyeNumBin.substring(0, 3); + int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key)); + key = "0000" + kyeNumBin.substring(4); + int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key)); + System.out.println((keyValue + "")); + System.out.println((numValue + "")); + + } + public static String tran_LH(String info) { return info.substring(2) + info.substring(0, 2); } -- Gitblit v1.9.3