From 5f92b2034f84caeab9cb6efc61ecbe22407935b4 Mon Sep 17 00:00:00 2001 From: vince <757871790@qq.com> Date: 星期二, 16 一月 2024 12:14:03 +0800 Subject: [PATCH] 优化主库协议,支持路由 --- src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java | 25 +++++-- src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java | 3 src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java | 77 ++++++++++++++++++++----- src/main/java/com/fzzy/gateway/hx2023/controller/GatewayController.java | 17 +++++ src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java | 1 src/main/java/com/fzzy/gateway/hx2023/ScConstant.java | 5 + src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java | 5 + src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java | 24 ++++++- 8 files changed, 122 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java index a43d799..bae9cd8 100644 --- a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java +++ b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java @@ -38,6 +38,7 @@ list.add(new ApiTrigger(GRAIN_FZZY_ZLDZ_WEB.getCode(), GRAIN_FZZY_ZLDZ_WEB.getName())); list.add(new ApiTrigger(GRAIN_YOUXIAN0_2023.getCode(), GRAIN_YOUXIAN0_2023.getName())); list.add(new ApiTrigger(GRAIN_YOUXIAN1_2023.getCode(), GRAIN_YOUXIAN1_2023.getName())); + list.add(new ApiTrigger(GRAIN_WUJIA_2023.getCode(), GRAIN_WUJIA_2023.getName())); list.add(new ApiTrigger(DEVICE_WEIGHT_HTTP.getCode(), DEVICE_WEIGHT_HTTP.getName())); list.add(new ApiTrigger(DEVICE_WEIGHT_TCP_YH.getCode(), DEVICE_WEIGHT_TCP_YH.getName())); diff --git a/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java b/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java index 13ef51c..c3f9da4 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java +++ b/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java @@ -46,7 +46,10 @@ * 涓嬪彂鎸囦护鍥炲鎶ユ枃topic */ public static String TOPIC_REPORT = "/${productId}/${deviceId}/properties/report"; - + /** + * 涓嬪彂鎸囦护鍥炲鎶ユ枃topic + */ + public static String TOPIC_REPORT_GRAIN = "TOPIC_ZLJ_GRAIN_TEMPERATURE"; /** * 璁惧鐩稿叧淇℃伅鎭㈠鎶ユ枃-topic */ diff --git a/src/main/java/com/fzzy/gateway/hx2023/controller/GatewayController.java b/src/main/java/com/fzzy/gateway/hx2023/controller/GatewayController.java index 9919675..fd4433d 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/controller/GatewayController.java +++ b/src/main/java/com/fzzy/gateway/hx2023/controller/GatewayController.java @@ -7,6 +7,7 @@ import com.fzzy.gateway.entity.GatewayConf; import com.fzzy.gateway.hx2023.data.GatewayAuthData; import com.fzzy.gateway.service.GatewayConfService; +import com.ld.license.LicenseVerify; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @@ -84,7 +85,21 @@ json.put("message", "鎴愬姛"); json.put("status", 0); json.put("code", 200); - return json; + try{ + LicenseVerify licenseVerify = new LicenseVerify(); + //鏍¢獙璇佷功鏄惁鏈夋晥 + boolean verifyResult = licenseVerify.verify(); + + if(verifyResult){ + return json; + }else{ + log.error("璇佷功楠岃瘉澶辫触!鎷掔粷璁块棶"); + return null; + } + }catch (Exception e){ + log.error("璇佷功楠岃瘉澶辫触:" + e.getMessage(),e); + return null; + } } public void updateGatewayToken(String token, String username) { diff --git a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java index 1f87e38..614ded3 100644 --- a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java +++ b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java @@ -15,6 +15,7 @@ private AnalysisService analysisService; + private static String msgStr = ""; @Override public void channelActive(ChannelHandlerContext ctx) { InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel() @@ -44,16 +45,24 @@ String strMsg = BytesUtil.bytesToString(bytes); log.info("缁堢杩斿洖淇℃伅锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); + msgStr+= strMsg; - if (null == analysisService) { - analysisService = SpringUtil.getBean(AnalysisService.class); + if(msgStr.endsWith("AABBCC")){ + log.info("娑堟伅鎺ユ敹瀹屾暣寮�濮嬭В鏋愶紝IP={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), msgStr); + + if (null == analysisService) { + analysisService = SpringUtil.getBean(AnalysisService.class); + } + try{ + analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), msgStr); + }catch (Exception e){ + log.error(e.getMessage(),e); + } + + }else{ + log.info("娑堟伅涓嶅畬鏁达紝绛夊緟娑堟伅瀹屾暣锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); + } - - try{ - analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg); - }catch (Exception e){ - log.error(e.getMessage(),e); - } } 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 bab4d2e..0f3d8ce 100644 --- a/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java +++ b/src/main/java/com/fzzy/protocol/youxian0/analysis/AnalysisService.java @@ -160,7 +160,7 @@ String tempStr = ""; for (int j = 0;j<cableY;j++){ - tempStr = strMsg.substring(12 * j,12 * j +12); + tempStr = strMsg.substring((6+2*cableZ) * j,(6+2*cableZ) * j + (6+2*cableZ) ); //瀵嗛挜鍜岀偣鏁� 02 A4 BB BA BA B4 String kyeNumHex = tempStr.substring(2, 4); String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt(kyeNumHex)); @@ -207,14 +207,24 @@ List<Double> points = new ArrayList<>(); GrainRoot root; + List<Double> t = null; for (int i = 1; i <= cableX; i++) { root = this.getGrainRoot(buildGrainRootKey(reqData.getDevice().getDeviceSn(), i)); if (null == root || null == root.getPoints()) { log.error("-----------瑙f瀽鑾峰彇鎵�鏈夌伯鎯呮娴嬬偣澶辫触锛屽彇娑堟墽琛�---------{}---{}", reqData.getDevice().getDeviceName(),i); - return; + ; + t = new ArrayList<>(); + for (int x = 0;x<cableY*cableZ;x++ + ) { + t.add(-100.00); + } + //return; + points.addAll(t); + }else{ + points.addAll(root.getPoints()); } - points.addAll(root.getPoints()); + } //鎵ц灏佽瑙f瀽 @@ -342,7 +352,7 @@ reportService.reportGrainData(reqData); } - private void add2GrainMap(GrainRoot grainRoot) { + private synchronized void add2GrainMap(GrainRoot grainRoot) { contextGrainRoot.put(grainRoot.getKey(), grainRoot); } @@ -371,8 +381,12 @@ int num1 = BytesUtil.hexToInt(valueHex); int num2 = BytesUtil.hexToInt(tempHex); + if((num1 ^ num2) / 2.0 > 35){ + return -100.00; + }else { + return (num1 ^ num2) / 2.0; + } - return (num1 ^ num2) / 2.0; } private void add2ThMap(String depotIdSys, THDto th) { diff --git a/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java b/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java index 2bc98f2..3266acc 100644 --- a/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java +++ b/src/main/java/com/fzzy/protocol/youxian0/client/ClientEngine.java @@ -30,7 +30,7 @@ private String host; private int port; - public static Channel defaultChannel; + public static Channel defaultChannel; public ClientEngine(String host, int port) { @@ -116,7 +116,7 @@ return defaultChannel; } - public static void add2ChannelMap(String key, Channel channel) { + public void add2ChannelMap(String key, Channel channel) { clientChannelMap.put(key, channel); } @@ -133,6 +133,7 @@ return channel; } else { channel.close(); + defaultChannel = null; } return null; } 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 f29fd15..50521eb 100644 --- a/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java +++ b/src/main/java/com/fzzy/protocol/youxian0/client/ClientHandler.java @@ -3,6 +3,7 @@ import com.fzzy.api.utils.BytesUtil; import com.fzzy.api.utils.SpringUtil; import com.fzzy.protocol.youxian0.analysis.AnalysisService; +import com.fzzy.protocol.youxian0.service.Youxian0GatewayGrainService; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; @@ -31,7 +32,7 @@ InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort()); - + //ClientEngine.defaultChannel = null; } 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 0495501..f0f8637 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,7 @@ * @return */ @Override - public synchronized BaseResp syncGrain(BaseReqData reqData) { + public synchronized BaseResp syncGrain(BaseReqData reqData) { BaseResp resp = new BaseResp(); @@ -64,6 +64,13 @@ // 鐢熸垚绮儏淇℃伅 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; @@ -73,13 +80,7 @@ hexStr = buildGrainCmd(device, i, start, length); // 鍙戦�佸懡浠� 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(300); - channel = clientEngine.getChannel(); - } + message = ClientEngine.send2(hexStr, channel); log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr); @@ -90,7 +91,7 @@ resp.setCode(500); resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage()); } - Thread.sleep(500); + Thread.sleep(3000); } } catch (Exception e) { log.error("绮儏妫�娴嬪紓甯革細{}", e); @@ -155,14 +156,36 @@ 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.replace("{id}", deviceSn); - content = content.replace("{id}", deviceSn); - content = content.replace("{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); @@ -189,14 +212,34 @@ String start = "7e"; //娴嬫俯鍛戒护--7e 01 00 00 01 06 00 02 00 01 a0 ff ff 68 1a 05 88 5c 7e - String content = "{id}0000{id}{msgId}000200{id}a0ffff{funId}{start}{length}"; + // {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)); - content = content.replace("{id}", deviceSn); - content = content.replace("{id}", deviceSn); - content = content.replace("{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(20); content = content.replace("{msgId}", msgIdHex); -- Gitblit v1.9.3