From d1e65a28fc73b543b8f34fe118712573682ff2fc Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期三, 17 一月 2024 02:54:28 +0800
Subject: [PATCH] 优化吴家协议

---
 src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java             |    5 +++--
 src/main/java/com/fzzy/gateway/controller/GatewayDeviceController.java      |    2 +-
 src/main/java/com/fzzy/protocol/wujia/analysis/AnalysisService.java         |   17 ++++++++++++-----
 src/main/java/com/fzzy/protocol/wujia/client/ClientEngine.java              |   23 ++++++++++++++---------
 src/main/java/com/fzzy/protocol/wujia/service/WujiaGatewayGrainService.java |    6 +++---
 src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java |    2 +-
 6 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/fzzy/gateway/controller/GatewayDeviceController.java b/src/main/java/com/fzzy/gateway/controller/GatewayDeviceController.java
index 8b6907e..2d7bc1e 100644
--- a/src/main/java/com/fzzy/gateway/controller/GatewayDeviceController.java
+++ b/src/main/java/com/fzzy/gateway/controller/GatewayDeviceController.java
@@ -310,7 +310,7 @@
 
             //鑾峰彇鍒�
             resp = gatewayRemoteManager.getGatewayTestService(device.getPushProtocol()).testGrainKafka(reqData);
-
+            log.info("resp = "+resp.toString());
             //鑷姩鎺ㄩ��
             if (BaseResp.CODE_200 == resp.getCode()) {
                 reqData.setData(resp.getData());
diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java
index b2bbc4b..fca810d 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java
@@ -80,7 +80,7 @@
 
         //鑾峰彇绗竴鏉℃暟鎹墽琛屾帹閫�
         Fz40Grain lastData = listGrain.get(0);
-
+        log.info(lastData.toString());
         return deviceReportService.grainData2GatewayApiInfo(lastData,device);
     }
 
diff --git a/src/main/java/com/fzzy/protocol/wujia/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/wujia/analysis/AnalysisService.java
index e5d8c2a..5c2e562 100644
--- a/src/main/java/com/fzzy/protocol/wujia/analysis/AnalysisService.java
+++ b/src/main/java/com/fzzy/protocol/wujia/analysis/AnalysisService.java
@@ -59,10 +59,17 @@
      * data1L data1H-----18B20杩斿洖娓╁害
      * 娉ㄦ剰锛氱伯娓╄繑鍥炴暟鎹珮浣嶅湪鍚庯紝浣庝綅鍦ㄥ墠锛岃浆鎹负鍗佽繘鍒跺悗涔樹互0.0625锛屽緱鍒板疄闄呮俯搴﹀��
      * 浠撴俯婀垮害楂樹綅鍦ㄥ墠锛屼綆浣嶅湪鍚庯紝杞崲涓哄崄杩涘埗鍚庝箻浠�0.1寰楀埌瀹為檯娓╂箍搴﹀��
-     *
+     * 02
+     * 89 00 7A 00 E2 00 8C 00 7D 00 E9 00 99 00 82 00 EC 00 87 00 87 00 ED 00 83 00 77 00 EF 00 92 00 7D 00 08 01 87 00 77 00 03 01 7F 00 7A 00 F6 00
+     * 9B 00 5D 00 D1 00
+     * 84 00 65 00 D4 00 8D 00 6D 00 D6 00 89 00 6E 00 DD 00 87 00 61 00 CA 00 81 00 6B 00 DA 00 81 00 68 00 E2 00 86 00 69 00 D0 00
+     * 87 00 6D 00 E4 00 88 00 71 00 07 01 8E 00 76 00 13 01 82 00 75 00 EB 00 86 00 6D 00 DB 00 83 00 71 00 F1 00 87 00 7B 00 03 01 79 00 7D 00 F7 00
+     * 02 C1 00 6D AA BB CC
      * @param strMsg
      */
     private void analysisGrainStep1(InetAddress address, String strMsg) {
+        strMsg = strMsg.substring(0,strMsg.length()-6);
+        log.info("瀹屾暣鐨勬暟鎹綋锛�"+strMsg);
         int start = 0;
         int len = 1 * 2;
         String tag = strMsg.substring(start, start + 2);
@@ -78,13 +85,13 @@
         //浠撳唴婀垮害
         start = 1 * 2;
         len = 2 * 2;
-        tag = strMsg.substring(start, start + len);
+        tag = strMsg.substring(strMsg.length()-8,strMsg.length() -4);
         double hIn = BytesUtil.hexToInt(tag) * 0.1;
 
         //浠撳唴娓╁害
         start = 3 * 2;
         len = 2 * 2;
-        tag = strMsg.substring(start, start + len);
+        tag = strMsg.substring(strMsg.length()-4,strMsg.length() );
         double tIn = BytesUtil.hexToInt(tag) * 0.1;
 
         GatewayDevice device = reqData.getDevice();
@@ -97,12 +104,12 @@
 
         int sumNum = cableZ * cableY * cableX;
         //绮俯淇℃伅
-        start = 5 * 2;
+        start = 2;
         len = 2 * 2;
         List<Double> points = new ArrayList<>();
         double temp = 0.0;
         for (int i = 0; i < sumNum; i++) {
-            start = start + i * 2 * 2;
+            start = i * 2 * 2 +2;
             tag = strMsg.substring(start, start + len);
             temp = BytesUtil.hexToInt(BytesUtil.tran_LH(tag)) * 0.0625;
             temp = NumberUtil.keepPrecision(temp, 1);
diff --git a/src/main/java/com/fzzy/protocol/wujia/client/ClientEngine.java b/src/main/java/com/fzzy/protocol/wujia/client/ClientEngine.java
index 3e6b01e..26b6467 100644
--- a/src/main/java/com/fzzy/protocol/wujia/client/ClientEngine.java
+++ b/src/main/java/com/fzzy/protocol/wujia/client/ClientEngine.java
@@ -16,7 +16,7 @@
 import java.util.Map;
 
 /**
- * 閫氳鍗忚
+ * 娓镐粰涓诲簱锛岄�氳鍗忚
  */
 @Slf4j
 public class ClientEngine implements Runnable {
@@ -29,7 +29,7 @@
 
     private String host;
     private int port;
-    private Channel defaultChannel;
+    public static Channel defaultChannel;
 
 
     public ClientEngine(String host, int port) {
@@ -45,6 +45,7 @@
     @Override
     public void run() {
         try {
+
             startClient();
         } catch (Exception e) {
             e.printStackTrace();
@@ -52,7 +53,10 @@
     }
 
     public void startClient() throws Exception {
-
+        if(defaultChannel != null){
+            log.info("-----IP={},杩炴帴瀛樺湪锛岀洿鎺ヤ娇鐢�",host);
+            return;
+        }
         EventLoopGroup group = new OioEventLoopGroup();
         Bootstrap b = new Bootstrap();
         //榛樿闀胯繛鎺�
@@ -82,9 +86,9 @@
             @Override
             public void operationComplete(ChannelFuture arg0) throws Exception {
                 if (channelFuture.isSuccess()) {
-                    log.info("-----IP={},杩炴帴鎴愬姛", host);
+                    log.info("-----IP={},杩炴帴鎴愬姛",host);
                 } else {
-                    log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�", host);
+                    log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�",host);
                     channelFuture.cause().printStackTrace();
                     group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
                 }
@@ -107,11 +111,11 @@
     }
 
 
-    public Channel getChannel() {
+    public static Channel getChannel() {
         return defaultChannel;
     }
 
-    public static void add2ChannelMap(String key, Channel channel) {
+    public  void add2ChannelMap(String key, Channel channel) {
         clientChannelMap.put(key, channel);
     }
 
@@ -121,18 +125,19 @@
      * @param key
      * @return
      */
-    public static Channel getChannel(String key) {
+    public static  Channel getChannel(String key) {
         Channel channel = clientChannelMap.get(key);
         if (null == channel) return null;
         if (channel.isActive()) {
             return channel;
         } else {
             channel.close();
+            defaultChannel = null;
         }
         return null;
     }
 
-    public static InvokeResult send2(String hex, Channel channel) throws InterruptedException {
+    public static InvokeResult send2(String hex,Channel channel) throws InterruptedException {
         if (null == channel) {
             return InvokeResult.SOCKET_NOT_CREATE;
         }
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 614ded3..830878b 100644
--- a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java
+++ b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java
@@ -32,7 +32,7 @@
         InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
 
         log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort());
-
+        //ClientEngine.defaultChannel = null;
 
     }
 
@@ -48,6 +48,7 @@
         msgStr+= strMsg;
 
         if(msgStr.endsWith("AABBCC")){
+
             log.info("娑堟伅鎺ユ敹瀹屾暣寮�濮嬭В鏋愶紝IP={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), msgStr);
 
             if (null == analysisService) {
@@ -58,7 +59,7 @@
             }catch (Exception e){
                 log.error(e.getMessage(),e);
             }
-
+            msgStr = "";
         }else{
             log.info("娑堟伅涓嶅畬鏁达紝绛夊緟娑堟伅瀹屾暣锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg);
 
diff --git a/src/main/java/com/fzzy/protocol/wujia/service/WujiaGatewayGrainService.java b/src/main/java/com/fzzy/protocol/wujia/service/WujiaGatewayGrainService.java
index 2196a8e..2f9b014 100644
--- a/src/main/java/com/fzzy/protocol/wujia/service/WujiaGatewayGrainService.java
+++ b/src/main/java/com/fzzy/protocol/wujia/service/WujiaGatewayGrainService.java
@@ -6,7 +6,7 @@
 import com.fzzy.gateway.data.BaseResp;
 import com.fzzy.gateway.entity.GatewayDevice;
 import com.fzzy.protocol.ProtocolUtils;
-import com.fzzy.protocol.youxian0.client.ClientEngine;
+import com.fzzy.protocol.wujia.client.ClientEngine;
 import com.ld.io.api.InvokeResult;
 import io.netty.channel.Channel;
 import lombok.extern.slf4j.Slf4j;
@@ -84,11 +84,11 @@
 
             String hexStr = buildGrainCmd(device);
 
-            Channel channel = null;
+            Channel channel = ClientEngine.getChannel();
             if (null == channel) {
                 ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
                 clientEngine.start();
-                Thread.sleep(300);
+                Thread.sleep(1000);
                 channel = clientEngine.getChannel();
             }
 

--
Gitblit v1.9.3