From 070b1e9cc8fccd36e7b65720a778ac46e118c792 Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期一, 04 三月 2024 09:13:04 +0800
Subject: [PATCH] 增加西山油罐协议

---
 src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java           |   31 -
 src/main/resources/application-devGateway.yml                             |    1 
 src/main/java/com/fzzy/protocol/xsyg/package-info.java                    |    4 
 src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java             |  152 ++++++++++++
 src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java        |  214 +++++++++++++++++
 src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java            |   66 +++++
 src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java                |    3 
 src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java |  190 +++++++++++++++
 src/main/java/com/fzzy/protocol/xsyg/1.txt                                |   56 ++++
 src/main/resources/application.yml                                        |    2 
 10 files changed, 697 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
index 8b4c3a3..4aba277 100644
--- a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
+++ b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
@@ -19,6 +19,7 @@
     GRAIN_YOUXIAN0_2023("GRAIN_YOUXIAN0_2023", "绮儏-娓镐粰涓诲簱鍗忚"),
     GRAIN_YOUXIAN1_2023("GRAIN_YOUXIAN1_2023", "绮儏-娓镐粰鍒嗗簱鍗忚"),
     GRAIN_WUJIA_2023("GRAIN_WUJIA_2023", "绮儏-鍚村绮簱鍗忚"),
+    GRAIN_XSYK_2023("GRAIN_WUJIA_2023", "娌规儏-瑗垮北娌瑰簱鍗忚"),
     DEVICE_WEIGHT_HTTP("DEVICE_WEIGHT_HTTP", "鍦扮-HTTP鍗忚"),
     DEVICE_WEIGHT_TCP_YH("DEVICE_WEIGHT_TCP_YH", "鍦扮-鑰�鍗嶵CP鍗忚"),
     DEVICE_IDCARD_HTTP("DEVICE_IDCARD_HTTP", "韬唤璇�-HTTP鍗忚"),
@@ -40,7 +41,7 @@
         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(GRAIN_XSYK_2023.getCode(), GRAIN_XSYK_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()));
         list.add(new ApiTrigger(DEVICE_IDCARD_HTTP.getCode(), DEVICE_IDCARD_HTTP.getName()));
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 830878b..3fc685b 100644
--- a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java
+++ b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java
@@ -2,7 +2,8 @@
 
 import com.fzzy.api.utils.BytesUtil;
 import com.fzzy.api.utils.SpringUtil;
-import com.fzzy.protocol.wujia.analysis.AnalysisService;
+import com.fzzy.protocol.youxian0.analysis.AnalysisService;
+import com.fzzy.protocol.youxian0.client.ClientEngine;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
 import lombok.extern.slf4j.Slf4j;
@@ -15,7 +16,6 @@
 
     private AnalysisService analysisService;
 
-    private static String msgStr = "";
     @Override
     public void channelActive(ChannelHandlerContext ctx) {
         InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel()
@@ -32,7 +32,7 @@
         InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
 
         log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort());
-        //ClientEngine.defaultChannel = null;
+        ClientEngine.defaultChannel = null;
 
     }
 
@@ -45,26 +45,17 @@
         String strMsg = BytesUtil.bytesToString(bytes);
 
         log.info("缁堢杩斿洖淇℃伅锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg);
-        msgStr+= strMsg;
 
-        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);
-            }
-            msgStr = "";
-        }else{
-            log.info("娑堟伅涓嶅畬鏁达紝绛夊緟娑堟伅瀹屾暣锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg);
-
+        if (null == analysisService) {
+            analysisService = SpringUtil.getBean(AnalysisService.class);
         }
 
+       try{
+           analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg);
+       }catch (Exception e){
+           log.error(e.getMessage(),e);
+       }
+
     }
 
     @Override
diff --git a/src/main/java/com/fzzy/protocol/xsyg/1.txt b/src/main/java/com/fzzy/protocol/xsyg/1.txt
new file mode 100644
index 0000000..059e067
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/1.txt
@@ -0,0 +1,56 @@
+01 01 3C 01 1E 01 11 01 07 00 9E 00 9C 00 9B 00 95 FF FF 15 E9 AA BB CC
+02 01 4F 01 2C 01 1C 01 0E 01 03 00 FB 00 F2 00 8E FF FF 25 70 AA BB CC
+03 01 57 01 37 00 A8 00 A2 00 A3 00 9F 00 9C 00 97 FF FF 0B 39 AA BB CC
+04 01 2F 01 22 01 13 01 07 00 FB 00 F2 00 89 00 8D FF FF 21 B8 AA BB CC
+05 01 46 01 2B 01 19 00 9E 00 9F 00 9C 00 99 00 96 FF FF 0E 82 AA BB CC
+06 01 53 01 35 01 23 00 A0 00 9F 00 9F 00 9B 00 96 FF FF 0E BF AA BB CC
+07 01 47 01 23 01 0E 01 01 00 F6 00 EE 00 E5 00 87 FF FF 26 27 AA BB CC
+08 01 46 01 29 01 17 01 0A 01 01 00 97 00 97 00 90 FF FF 17 AD AA BB CC
+09 01 5A 00 FD 00 A2 00 A1 00 9C 00 9A 00 97 00 92 FF FF 06 86 AA BB CC
+0A 01 41 01 28 01 1A 00 CF 01 05 00 A6 00 A2 00 A1 FF FF 0E AD AA BB CC
+0B 01 5D 00 C2 00 A2 00 A2 00 9E 00 9B 00 9A 00 92 FF FF 05 F5 AA BB CC
+0C 01 2E 01 17 00 A5 00 A5 00 A0 00 9C 00 99 00 93 FF FF 07 A9 AA BB CC
+0E 01 5D 01 38 00 A5 00 A5 00 A1 00 9F 00 9B 00 97 FF FF 07 8A AA BB CC
+0F 01 46 01 22 01 10 01 02 00 99 00 9A 00 95 00 92 FF FF 12 3E AA BB CC
+10 01 52 01 2B 00 AF 00 A0 00 A1 00 9E 00 9B 00 96 FF FF 0B 2D AA BB CC
+11 01 0A 00 97 00 8D 00 87 FF FF FF FF FF FF FF FF FF FF 06 80 AA BB CC
+12 01 42 01 2A 01 1A 01 0E 00 97 00 9B 00 99 00 95 00 90 15 1D AA BB CC
+13 01 1E 01 0E 00 F9 00 E8 00 93 00 92 00 93 FF FF FF FF 14 0F AA BB CC
+14 01 48 01 2B 01 1A 00 A0 00 A0 00 9C 00 9A 00 96 00 94 0D 8E AA BB CC
+15 01 22 01 14 01 00 00 9D 00 9C 00 98 00 92 FF FF FF FF 10 43 AA BB CC
+16 01 4B 01 2D 01 1E 00 A2 00 A0 00 9F 00 9B 00 99 00 96 0D 26 AA BB CC
+17 00 EC 00 8B 00 84 00 85 FF FF FF FF FF FF FF FF FF FF 07 9D AA BB CC
+18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA BB CC
+19 00 FA 00 EB 00 92 00 8B FF FF FF FF FF FF FF FF FF FF 0D FD AA BB CC
+1A 01 0A 00 BB 00 AF 00 91 FF FF FF FF FF FF FF FF FF FF 07 E7 AA BB CC
+
+
+鍛戒护
+銆怰eceive from 10.0.0.17 : 49853銆戯細
+FC 64 01 01 00 09 01 1A 10 BD DB
+FC 64 02 02 00 09 01 1A 10 BD DB
+FC 64 03 03 00 09 01 1A 10 BD DB
+FC 64 04 04 00 09 01 1A 10 BD DB
+FC 64 05 05 00 09 01 1A 10 BD DB
+FC 64 06 06 00 09 01 1A 10 BD DB
+FC 64 07 07 00 09 01 1A 10 BD DB
+FC 64 08 08 00 09 01 1A 10 BD DB
+FC 64 09 09 00 09 01 1A 10 BD DB
+FC 64 0A 0A 00 09 01 1A 10 BD DB
+FC 64 0B 0B 00 09 01 1A 10 BD DB
+FC 64 0C 0C 00 09 01 1A 10 BD DB
+FC 64 0D 0D 00 09 01 1A 10 BD DB
+FC 64 0E 0E 00 09 01 1A 10 BD DB
+FC 64 0F 0F 00 09 01 1A 10 BD DB
+FC 64 10 10 00 09 01 1A 10 BD DB
+FC 64 11 11 00 09 01 1A 10 BD DB
+FC 64 12 12 00 09 01 1A 10 BD DB
+FC 64 13 13 00 09 01 1A 10 BD DB
+FC 64 14 14 00 09 01 1A 10 BD DB
+FC 64 15 15 00 09 01 1A 10 BD DB
+FC 64 16 16 00 09 01 1A 10 BD DB
+FC 64 17 17 00 09 01 1A 10 BD DB
+FC 64 18 18 00 09 01 1A 10 BD DB
+FC 64 19 19 00 09 01 1A 10 BD DB
+FC 64 1A 1A 00 09 01 1A 10 BD DB
+
diff --git a/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java
new file mode 100644
index 0000000..e4b44fb
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java
@@ -0,0 +1,214 @@
+package com.fzzy.protocol.xsyg.analysis;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fzzy.api.data.GatewayDeviceType;
+import com.fzzy.api.utils.BytesUtil;
+import com.fzzy.api.utils.NumberUtil;
+import com.fzzy.gateway.GatewayUtils;
+import com.fzzy.gateway.api.GatewayDeviceReportService;
+import com.fzzy.gateway.api.GatewayRemoteManager;
+import com.fzzy.gateway.data.BaseReqData;
+import com.fzzy.gateway.data.WeatherWebDto;
+import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.gateway.hx2023.ScConstant;
+import com.fzzy.gateway.hx2023.data.*;
+import com.fzzy.protocol.ProtocolUtils;
+import com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component(AnalysisService.BEAN_ID)
+public class AnalysisService {
+
+    public static final String BEAN_ID = "xsyg.analysisService";
+
+
+    @Resource
+    private GatewayRemoteManager gatewayRemoteManager;
+
+
+    /**
+     * 绮儏鎺ョ嚎
+     *
+     * @param address
+     * @param port
+     * @param strMsg
+     */
+    public void analysis(InetAddress address, int port, String strMsg) {
+
+        if (strMsg.startsWith("FE")) {
+
+            //DO NOTHING
+        } else {
+            this.analysisGrainStep1(address, strMsg);
+        }
+    }
+
+    /**
+     *byte(i)  01 7C   01 67   01 66   01 81 銆傘�傘��   02 89  AA BB CC
+     *   byte(i)--------鍖呭ご
+     * AA BB CC-----鍖呭熬
+     * 钃濊壊鏁版嵁姣忎袱涓瓧鑺傝〃绀轰竴涓祴娓╃偣鐨勫�硷紙杞崲涓哄崄杩涘埗鍚�*0.0625锛�.鍏辨湁cwcs[1]*2涓瓧鑺傘��
+     * 02 89 涓や釜瀛楄妭琛ㄧず璇ユ补缃愮殑绌洪珮鍊硷紙楂樹綅鍦ㄥ墠锛夊崟浣嶆绫炽�傦紙FF FF鎴�00 00琛ㄧず鏁呴殰锛岃鍦ㄨ蒋浠朵笂鍋氬嚭澶勭悊锛屾妸璇ョ┖楂樺�艰祴鍊兼垚浼犳劅鍣ㄥ畨瑁呴珮搴︼紝琛ㄧず璇ョ綈鏄┖缃愶級銆傜敤H鍊煎噺鍘昏鏁版嵁锛屽緱鍒版补浣嶉珮搴︺��
+     *
+     * @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);
+        int depotIdSys = BytesUtil.hexToInt(tag);
+
+        BaseReqData reqData = ProtocolUtils.getSyncReq(depotIdSys + "");
+
+        if (null == reqData) {
+            log.error("---------娌℃湁鑾峰彇鍒拌姹備俊鎭紝涓嶆墽琛岃В鏋�------{}", address);
+            return;
+        }
+
+        //浠撳唴婀垮害
+
+
+        GatewayDevice device = reqData.getDevice();
+
+        String[] attCable = device.getCableRule().split("-");
+        int cableZ = Integer.valueOf(attCable[0]);
+        int cableY = Integer.valueOf(attCable[1]);
+        int cableX = Integer.valueOf(attCable[2]);
+        log.info("z={},x={},y={}", cableZ, cableX, cableY);
+
+        int sumNum = cableZ * cableY * cableX;
+        //绮俯淇℃伅
+        start = 2;
+        len = 2 * 2;
+        List<Double> points = new ArrayList<>();
+        double temp = 0.0;
+        for (int i = 0; i < sumNum; i++) {
+            start = i * 2 * 2 +2;
+            tag = strMsg.substring(start, start + len);
+            if("FFFF".equals(tag)){
+                points.add(-100.00);
+                continue;
+            }
+            temp = BytesUtil.hexToInt(BytesUtil.tran_LH(tag)) * 0.0625;
+            temp = NumberUtil.keepPrecision(temp, 1);
+            points.add(temp);
+        }
+        double height = 0.0;
+        tag = strMsg.substring(strMsg.length()-4);
+        height = NumberUtil.keepPrecision((double) (BytesUtil.hexToInt(tag) /1000), 2);
+
+        //鎵ц灏佽瑙f瀽
+        analysisGrainStep2(reqData, cableZ, cableY, cableX, points, -100, -100,height);
+    }
+
+    private void analysisGrainStep2(BaseReqData reqData, int cableZ, int cableY, int cableX, List<Double> points, double hIn, double tIn,double height) {
+        GatewayDevice device = reqData.getDevice();
+        int sumNum = points.size();
+
+        //鏁版嵁灏佽
+        GrainData grain = new GrainData();
+        grain.setMessageId(ScConstant.getMessageId());
+        grain.setDeviceId(device.getDeviceId());
+        grain.setTimestamp(System.currentTimeMillis() + "");
+
+        ClientHeaders headers = new ClientHeaders();
+        headers.setDeviceName(device.getDeviceName());
+        headers.setProductId(device.getProductId());
+        headers.setOrgId(device.getOrgId());
+        headers.setMsgId(reqData.getMessageId());
+        grain.setHeaders(headers);
+
+
+        GrainOutPut outPut = new GrainOutPut();
+
+
+        double max = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP, min = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MIN_TEMP, sumT = 0.0;
+
+        List<GrainTemp> temperature = new ArrayList<>();
+        //鏍瑰彿
+        int cableNum = 1, position = 0;
+
+        double curTemp;
+        int x = 0, y = 0, z = 0;
+        for (int i = 0; i < sumNum; i++) {
+            curTemp = points.get(i);
+            position = i;
+
+            z = i % cableZ + 1;
+            x = i / (cableZ * cableY);
+            y = x * (cableZ * cableY);
+            y = (i - y) / cableZ;
+            //鏍瑰彿
+            cableNum = (i / cableZ) + 1;
+
+            temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + ""));
+
+            //姹傛渶澶ф渶灏忓��
+            if (curTemp < -900) {
+                sumNum--;
+            } else {
+                sumT += curTemp;
+                if (curTemp > max) {
+                    max = curTemp;
+                }
+                if (curTemp < min) {
+                    min = curTemp;
+                }
+            }
+        }
+
+        if (sumNum == 0) {
+            sumNum = 1;
+            log.warn("---褰撳墠绮儏閲囬泦寮傚父--");
+        }
+        //杩囨护姣旇緝鐢ㄧ殑鏈�澶ф渶灏忓��
+        if (max == com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP) {
+            max = 0.0;
+        }
+        if (min == ReMessageBuilder.MIN_TEMP) {
+            min = 0.0;
+        }
+
+        outPut.setTemperature(temperature);
+        outPut.setAvgTemperature(NumberUtil.keepPrecision((sumT / sumNum), 1) + "");
+        outPut.setMinTemperature(min + "");
+        outPut.setMaxTemperature(min + "");
+
+
+        JSONObject properties = new JSONObject();
+        properties.put("data", outPut);
+        properties.put("timestamp", grain.getTimestamp());
+
+        properties.put("liquidHeight", height);
+
+        grain.setProperties(properties);
+
+        //灏佽濂界殑鏁版嵁
+        log.info("---娴呭渾浠撳皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�");
+
+        reqData.setData(JSONObject.toJSONString(grain));
+
+        doPushGrain(reqData);
+    }
+
+    private void doPushGrain(BaseReqData reqData) {
+
+        GatewayDeviceReportService reportService = gatewayRemoteManager.getDeviceReportService(reqData.getDevice().getPushProtocol());
+        if (null == reportService) {
+            log.error("------------绮儏鎺ㄩ�佸け璐ワ紝绯荤粺涓嶅瓨鍦ㄥ綋鍓嶅崗璁墽琛岀被----{}", reqData.getDevice().getDeviceName());
+            return;
+        }
+
+        reportService.reportGrainData(reqData);
+    }
+}
diff --git a/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java b/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java
new file mode 100644
index 0000000..561abf7
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java
@@ -0,0 +1,152 @@
+package com.fzzy.protocol.xsyg.client;
+
+import com.fzzy.api.utils.BytesUtil;
+import com.ld.io.api.InvokeResult;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.*;
+import io.netty.channel.oio.OioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.oio.OioSocketChannel;
+import io.netty.handler.codec.bytes.ByteArrayDecoder;
+import io.netty.handler.codec.bytes.ByteArrayEncoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 娓镐粰涓诲簱锛岄�氳鍗忚
+ */
+@Slf4j
+public class ClientEngine implements Runnable {
+
+    /**
+     * 瀹㈡埛绔ā寮忓垱寤虹殑杩炴帴閫氶亾
+     */
+    public static Map<String, Channel> clientChannelMap = new HashMap<>();
+
+
+    private String host;
+    private int port;
+    public static Channel defaultChannel;
+
+
+    public ClientEngine(String host, int port) {
+        this.host = host;
+        this.port = port;
+    }
+
+    public void start() {
+        Thread thread = new Thread(this);
+        thread.start();
+    }
+
+    @Override
+    public void run() {
+        try {
+
+            startClient();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void startClient() throws Exception {
+        if(defaultChannel != null){
+            log.info("-----IP={},杩炴帴瀛樺湪锛岀洿鎺ヤ娇鐢�",host);
+            return;
+        }
+        EventLoopGroup group = new OioEventLoopGroup();
+        Bootstrap b = new Bootstrap();
+        //榛樿闀胯繛鎺�
+        b.option(ChannelOption.SO_KEEPALIVE, true);
+        b.group(group).channel(OioSocketChannel.class)
+                .handler(new ChannelInitializer<SocketChannel>() {
+                    @Override
+                    protected void initChannel(SocketChannel ch)
+                            throws Exception {
+                        ChannelPipeline p = ch.pipeline();
+                        // 瀛楃涓茶В鐮� 鍜� 缂栫爜
+                        p.addLast("decoder", new ByteArrayDecoder());
+                        p.addLast("encoder", new ByteArrayEncoder());
+                        // 鑷繁鐨勯�昏緫Handler
+                        p.addLast("handler", new ClientHandler());
+                    }
+                });
+
+        // 鍙戣捣寮傛杩炴帴璇锋眰锛岀粦瀹氳繛鎺ョ鍙e拰host淇℃伅
+        ChannelFuture channelFuture = b.connect(host, port);
+        this.defaultChannel = channelFuture.channel();
+        // channelFuture.channel().closeFuture().sync();
+
+        this.add2ChannelMap(host, defaultChannel);
+
+        channelFuture.addListener(new ChannelFutureListener() {
+            @Override
+            public void operationComplete(ChannelFuture arg0) throws Exception {
+                if (channelFuture.isSuccess()) {
+                    log.info("-----IP={},杩炴帴鎴愬姛",host);
+                } else {
+                    log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�",host);
+                    channelFuture.cause().printStackTrace();
+                    group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
+                }
+            }
+        });
+    }
+
+    public InvokeResult send(byte[] array) throws InterruptedException {
+
+        if (null == defaultChannel) {
+            return InvokeResult.SOCKET_NOT_CREATE;
+        }
+        if (!defaultChannel.isActive()) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+
+        defaultChannel.writeAndFlush(Unpooled.copiedBuffer(array)).sync();
+
+        return InvokeResult.SUCCESS;
+    }
+
+
+    public static Channel getChannel() {
+        return defaultChannel;
+    }
+
+    public  void add2ChannelMap(String key, Channel channel) {
+        clientChannelMap.put(key, channel);
+    }
+
+    /**
+     * 濡傛灉
+     *
+     * @param key
+     * @return
+     */
+    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 {
+        if (null == channel) {
+            return InvokeResult.SOCKET_NOT_CREATE;
+        }
+        if (!channel.isActive()) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        channel.writeAndFlush(Unpooled.copiedBuffer(BytesUtil.hexStrToBytes(hex))).sync();
+        return InvokeResult.SUCCESS;
+    }
+
+
+}
diff --git a/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java
new file mode 100644
index 0000000..339b0e6
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java
@@ -0,0 +1,66 @@
+package com.fzzy.protocol.xsyg.client;
+
+import com.fzzy.api.utils.BytesUtil;
+import com.fzzy.api.utils.SpringUtil;
+import com.fzzy.protocol.youxian0.analysis.AnalysisService;
+import com.fzzy.protocol.youxian0.client.ClientEngine;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetSocketAddress;
+
+
+@Slf4j
+public class ClientHandler extends SimpleChannelInboundHandler<Object> {
+
+    private AnalysisService analysisService;
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) {
+        InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel()
+                .remoteAddress();
+
+        log.info("杩炴帴缁堟垚鍔燂紝IP={},port={}", socketAddress.getAddress()
+                .getHostAddress(), socketAddress.getPort());
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+        super.channelInactive(ctx);
+
+        InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
+
+        log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort());
+        ClientEngine.defaultChannel = null;
+
+    }
+
+    @Override
+    public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
+        byte[] bytes = (byte[]) msg;
+
+        InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
+
+        String strMsg = BytesUtil.bytesToString(bytes);
+
+        log.info("缁堢杩斿洖淇℃伅锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg);
+
+        if (null == analysisService) {
+            analysisService = SpringUtil.getBean(AnalysisService.class);
+        }
+
+       try{
+           analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg);
+       }catch (Exception e){
+           log.error(e.getMessage(),e);
+       }
+
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+        ctx.close();
+    }
+
+}
diff --git a/src/main/java/com/fzzy/protocol/xsyg/package-info.java b/src/main/java/com/fzzy/protocol/xsyg/package-info.java
new file mode 100644
index 0000000..0d44dd6
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * 鍚村绮簱2023
+ */
+package com.fzzy.protocol.wujia;
\ No newline at end of file
diff --git a/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java b/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java
new file mode 100644
index 0000000..cf1dd38
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java
@@ -0,0 +1,190 @@
+package com.fzzy.protocol.xsyg.service;
+
+import com.fzzy.api.data.GatewayDeviceProtocol;
+import com.fzzy.gateway.api.GatewaySyncGranService;
+import com.fzzy.gateway.data.BaseReqData;
+import com.fzzy.gateway.data.BaseResp;
+import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.protocol.ProtocolUtils;
+import com.fzzy.protocol.wujia.client.ClientEngine;
+import com.ld.io.api.InvokeResult;
+import io.netty.channel.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绮儏閲囬泦鍏ュ彛
+ */
+@Slf4j
+@Component
+public class XsygGatewayGrainService implements GatewaySyncGranService {
+
+
+    @Override
+    public String getGrainProtocol() {
+        return GatewayDeviceProtocol.GRAIN_XSYK_2023.getCode();
+    }
+
+
+    /**
+     * 浠撳簱鍛戒护
+     */
+    public static Map<String, String> depotGrainCmdMap = new HashMap<>();
+
+
+    static {
+        depotGrainCmdMap.put("KEY_1",  "FC6401010009011A10BDDB");
+        depotGrainCmdMap.put("KEY_2",  "FC6402020009011A10BDDB");
+        depotGrainCmdMap.put("KEY_3",  "FC6403030009011A10BDDB");
+        depotGrainCmdMap.put("KEY_4",  "FC6404040009011A10BDDB");
+        depotGrainCmdMap.put("KEY_5",  "FC6405050009011A10BDDB");
+        depotGrainCmdMap.put("KEY_6",  "FC6406060009011A10BDDB");
+        depotGrainCmdMap.put("KEY_7",  "FC6407070009011A10BDDB");
+        depotGrainCmdMap.put("KEY_8",  "FC6408080009011A10BDDB");
+        depotGrainCmdMap.put("KEY_9",  "FC6409090009011A10BDDB");
+        depotGrainCmdMap.put("KEY_10", "FC640A0A0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_11", "FC640B0B0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_12", "FC640C0C0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_13", "FC640D0D0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_14", "FC640E0E0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_15", "FC640F0F0009011A10BDDB");
+        depotGrainCmdMap.put("KEY_16", "FC6410100009011A10BDDB");
+        depotGrainCmdMap.put("KEY_17", "FC6411110009011A10BDDB");
+        depotGrainCmdMap.put("KEY_18", "FC6412120009011A10BDDB");
+        depotGrainCmdMap.put("KEY_19", "FC6413130009011A10BDDB");
+        depotGrainCmdMap.put("KEY_20", "FC6414140009011A10BDDB");
+        depotGrainCmdMap.put("KEY_21", "FC6415150009011A10BDDB");
+        depotGrainCmdMap.put("KEY_22", "FC6416160009011A10BDDB");
+        depotGrainCmdMap.put("KEY_23", "FC6417170009011A10BDDB");
+        depotGrainCmdMap.put("KEY_24", "FC6418180009011A10BDDB");
+        depotGrainCmdMap.put("KEY_25", "FC6419190009011A10BDDB");
+        depotGrainCmdMap.put("KEY_26", "FC641A1A0009011A10BDDB");
+    }
+
+    /**
+     * FC 64 01 01 00 09 01 1A 10 BD DB
+     * FC 64 02 02 00 09 01 1A 10 BD DB
+     * FC 64 03 03 00 09 01 1A 10 BD DB
+     * FC 64 04 04 00 09 01 1A 10 BD DB
+     * FC 64 05 05 00 09 01 1A 10 BD DB
+     * FC 64 06 06 00 09 01 1A 10 BD DB
+     * FC 64 07 07 00 09 01 1A 10 BD DB
+     * FC 64 08 08 00 09 01 1A 10 BD DB
+     * FC 64 09 09 00 09 01 1A 10 BD DB
+     * FC 64 0A 0A 00 09 01 1A 10 BD DB
+     * FC 64 0B 0B 00 09 01 1A 10 BD DB
+     * FC 64 0C 0C 00 09 01 1A 10 BD DB
+     * FC 64 0D 0D 00 09 01 1A 10 BD DB
+     * FC 64 0E 0E 00 09 01 1A 10 BD DB
+     * FC 64 0F 0F 00 09 01 1A 10 BD DB
+     * FC 64 10 10 00 09 01 1A 10 BD DB
+     * FC 64 11 11 00 09 01 1A 10 BD DB
+     * FC 64 12 12 00 09 01 1A 10 BD DB
+     * FC 64 13 13 00 09 01 1A 10 BD DB
+     * FC 64 14 14 00 09 01 1A 10 BD DB
+     * FC 64 15 15 00 09 01 1A 10 BD DB
+     * FC 64 16 16 00 09 01 1A 10 BD DB
+     * FC 64 17 17 00 09 01 1A 10 BD DB
+     * FC 64 18 18 00 09 01 1A 10 BD DB
+     * FC 64 19 19 00 09 01 1A 10 BD DB
+     * FC 64 1A 1A 00 09 01 1A 10 BD DB
+     *
+     * @param reqData
+     * @return
+     */
+    @Override
+    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 {
+            //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨
+            ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData);
+
+            String hexStr = buildGrainCmd(device);
+
+            Channel channel = ClientEngine.getChannel();
+            if (null == channel) {
+                ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
+                clientEngine.start();
+                Thread.sleep(1000);
+                channel = clientEngine.getChannel();
+            }
+
+            InvokeResult message = ClientEngine.send2(hexStr, channel);
+
+            log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message, hexStr);
+
+            // 灏佽杩斿洖淇℃伅
+            if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) {
+                log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage());
+                resp.setCode(500);
+                resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage());
+            }
+        } 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();
+        return resp;
+    }
+
+    /**
+     * 鐢熸垚绮儏閲囬泦鍛戒护
+     *
+     * @param device
+     * @return
+     */
+    private String buildGrainCmd(GatewayDevice device) {
+
+        String key = "KEY_" + device.getDepotIdSys();
+
+        return depotGrainCmdMap.get(key);
+
+    }
+
+    @Override
+    public BaseResp syncConf(BaseReqData reqData) {
+        return new BaseResp();
+    }
+
+    @Override
+    public BaseResp writeConf(BaseReqData reqData) {
+        return new BaseResp();
+    }
+
+    @Override
+    public BaseResp initCable(BaseReqData reqData) {
+        return new BaseResp();
+    }
+
+    @Override
+    public BaseResp disconnect(BaseReqData reqData) {
+        return new BaseResp();
+    }
+
+    @Override
+    public BaseResp transparent(BaseReqData reqData) {
+        return new BaseResp();
+    }
+}
diff --git a/src/main/resources/application-devGateway.yml b/src/main/resources/application-devGateway.yml
index d13cc61..7e4b1e3 100644
--- a/src/main/resources/application-devGateway.yml
+++ b/src/main/resources/application-devGateway.yml
@@ -12,6 +12,7 @@
     #娆℃暟鎹簮
     secondary:
       url: jdbc:mysql://127.0.0.1:3306/igds_5012?useUnicode=true&useSSL=false&characterEncoding=utf-8
+
       username: root
       password: Abc123..
       driver-class-name: com.mysql.jdbc.Driver
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 03f1270..c91a75f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,7 +1,7 @@
 ##########################  Server   ##########################
 spring:
   profiles:
-    active: devGateway
+    active: proGateway
   application:
     name: igds-api
   main:

--
Gitblit v1.9.3