From 7d84b6cbf8268a6993f661e22a842ffa12c13732 Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期六, 01 七月 2023 11:03:33 +0800
Subject: [PATCH] 邦海控制柜

---
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java                        |   16 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java                        |   22 
 igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java                             |    4 
 igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java                                      |    1 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java              |  150 ++++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java     |   47 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java                        |   15 
 igds-web/src/main/resources/static/img/areation/5324/pfc_a.png                                         |    0 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java    |   28 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java |   98 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java                        |   36 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java    |   88 ++
 igds-core/src/main/java/com/ld/igds/models/DepotConf.java                                              |    4 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java                        |   24 
 igds-web/src/main/resources/static/img/aerial-5324_001.png                                             |    0 
 igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml                                            |    5 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java            |   68 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java         |   48 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java          |   87 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java                     |   35 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java      |   43 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java        |  127 +++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java            |   72 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java     |   35 +
 igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java                                       |    2 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java     |  147 ++++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java      |   78 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java              |   35 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java  |  177 +++++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java    |   65 +
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java          |   99 ++
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java                      |    4 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java                           |    7 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java       |  118 +++
 igds-web/src/main/resources/static/img/areation/5324/pfc_b.png                                         |    0 
 igds-core/src/main/java/models/igds.model.xml                                                          |    4 
 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java           |  193 +++++
 igds-web/src/main/resources/verb-conf.properties                                                       |   27 
 38 files changed, 2,004 insertions(+), 5 deletions(-)

diff --git a/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java b/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java
index b99095b..02446e1 100644
--- a/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java
+++ b/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java
@@ -206,7 +206,7 @@
 
         // 鑾峰彇鍒嗘満淇℃伅
         DeviceSer deviceSer = coreSerService.getCacheSer(param.getCompanyId(),
-                depotConf.getGrainSer());
+                depotConf.getGasSer());
 
         CheckGasRequest request = new CheckGasRequest();
         request.setDepotId(param.getDepotId());
diff --git a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
index daa1f3b..99f2dc8 100644
--- a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
+++ b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
@@ -29,6 +29,7 @@
     TCP_FZZY_QUANTITY_V35("TCP_FZZY_QUANTITY_V35", "鏁伴噺妫�娴媀35"),
     TCP_BHZH_GRAIN_FM_V1("TCP_BHZH_GRAIN_FM_V1", "閭︽捣鏅鸿兘鏃犵嚎涓绘満鐗圴1"),
     TCP_BHZH_GRAIN_V2("TCP_BHZH_GRAIN_V2", "閭︽捣鏅鸿兘鏈夌嚎鐗圴2"),
+    TCP_BHZH_VERB_V2("TCP_BHZH_VERB_V2", "閭︽捣鎺у埗鏌滄櫤鑳芥湁绾跨増V2"),
     FZZY_OPENAPI_HTTP("FZZY_OPENAPI_HTTP", "椋庢鑷磋繙API-HTTP鍗忚");
     private String code;
     private String msg;
diff --git a/igds-core/src/main/java/com/ld/igds/models/DepotConf.java b/igds-core/src/main/java/com/ld/igds/models/DepotConf.java
index df5d095..ef59d56 100644
--- a/igds-core/src/main/java/com/ld/igds/models/DepotConf.java
+++ b/igds-core/src/main/java/com/ld/igds/models/DepotConf.java
@@ -43,6 +43,10 @@
     @PropertyDef(label = "鑳借�楀垎鏈�")
     private String esSer;
 
+    @Column(name = "GAS_SER_", length = 40)
+    @PropertyDef(label = "姘斾綋鍒嗘満")
+    private String gasSer;
+
     @Column(name = "GRAIN_FREQ_", length = 4)
     @PropertyDef(label = "绮儏淇濆瓨棰戠巼", description = "榛樿涓�澶╁娆�")
     private String grainFreq = GrainFrequence.FREQ_01.getCode();
diff --git a/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml b/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml
index e968b49..0f9aaac 100644
--- a/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml
+++ b/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml
@@ -279,6 +279,11 @@
               <Property name="labelSeparator">锛�</Property>
               <Property name="labelWidth">120</Property>
               <AutoFormElement>
+                <Property name="name">gasSer</Property>
+                <Property name="property">gasSer</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
                 <Property name="name">gasStart</Property>
                 <Property name="property">gasStart</Property>
                 <Editor/>
diff --git a/igds-core/src/main/java/models/igds.model.xml b/igds-core/src/main/java/models/igds.model.xml
index 7dd3e2f..c1570ad 100644
--- a/igds-core/src/main/java/models/igds.model.xml
+++ b/igds-core/src/main/java/models/igds.model.xml
@@ -894,6 +894,10 @@
         <Property name="valueProperty">name</Property>
       </Property>
     </PropertyDef>
+    <PropertyDef name="gasSer">
+      <Property/>
+      <Property name="label">姘斾綋鍒嗘満</Property>
+    </PropertyDef>
   </DataType>
   <DataType name="dtDicSlogan">
     <Property name="creationType">com.ld.igds.models.DicSlogan</Property>
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java
similarity index 81%
rename from igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java
rename to igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java
index c3c0f92..2e86689 100644
--- a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java
@@ -1,7 +1,8 @@
-package com.ld.igds.protocol.bhzn.grainv2;
+package com.ld.igds.protocol.bhzn;
 
 import com.ld.igds.data.ConfigData;
 import com.ld.igds.protocol.bhzn.grainv2.server.BhznGrainV2ServerEngine;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerEngine;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.core.annotation.Order;
@@ -20,12 +21,14 @@
     private ConfigData configData;
     @Autowired
     private BhznGrainV2ServerEngine bhznGrainServerEngine;
-
+    @Autowired
+    private BhznVerbServerEngine bhznVerbServerEngine;
     @Override
     public void run(String... strings) throws Exception {
 
         if (configData.getActive().indexOf("pro") >= 0) {
             bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT);
+            bhznVerbServerEngine.start(BhznVerbServerEngine.PORT);
         }
         if (configData.getActive().indexOf("dev") >= 0) {
             bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT);
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java
new file mode 100644
index 0000000..2718f04
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java
@@ -0,0 +1,193 @@
+package com.ld.igds.protocol.bhzn.verb.analysis;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ld.igds.common.CoreDeviceService;
+import com.ld.igds.constant.DeviceStatus;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.notify.NotifyWebInvoker;
+import com.ld.igds.io.request.ExeDevice;
+import com.ld.igds.models.Device;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.protocol.bhzn.verb.command.BaseRemoteImpl;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Res247;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+import com.ld.igds.temp.dto.TempParam;
+import com.ld.igds.util.BytesUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * 璁惧鎿嶄綔绫�
+ */
+@Slf4j
+@Component(AnalysisDevice.BEAN_ID)
+public class AnalysisDevice extends BaseRemoteImpl {
+
+    public static final String BEAN_ID = "bhzn.analysisDevice";
+
+    @Autowired
+    private CoreDeviceService deviceService;
+    @Autowired
+    private NotifyWebInvoker notifyInvoker;
+
+
+
+    /**
+     * 璁惧鐘舵��
+     *
+     * @param reMessage
+     * @param ser
+     */
+    public void analysis(IoMessage reMessage, DeviceSer ser) {
+        Res247 res247 = JSONObject.parseObject(reMessage.getContentStr(),Res247.class);
+        AnalysisWin(ser,res247.getWin_Str());
+        AnalysisFan(ser,res247.getFan_Str());
+        AnalysisAir(ser,res247.getAir_Str());
+        AnalysisLight(ser,res247.getLight_Str());
+//        BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),0, "");
+//        }
+        deviceService.updateStatus(ser.getCompanyId(), ser.getId(), BhznVerbServerUtils.getStatusMap());
+//
+//        notifyInvoker.notifyAnalysisStatusSuccess(ser.getCompanyId(), ser.getId(), OrderRespEnum.MSG_SUCCESS, "璁惧鐘舵�佹煡璇㈡垚鍔熷苟瀹屾垚瑙f瀽锛�");
+    }
+
+    /**
+     * 瑙f瀽绐楁埛鐘舵��
+     * @param ser
+     * @param winStr
+     */
+    private void AnalysisWin(DeviceSer ser,Integer[] winStr){
+        if(winStr == null || winStr.length == 0)return;
+        for (int i=1;i<= winStr.length;i++) {
+            BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i, getWinStatus(winStr[i-1]));
+        }
+    }
+    /**
+     * 瑙f瀽椋庢満鐘舵��
+     * @param ser
+     * @param fanStr
+     */
+    private void AnalysisFan(DeviceSer ser,Integer[] fanStr){
+        if(fanStr == null || fanStr.length == 0)return;
+        for (int i=1;i<= fanStr.length;i++) {
+            BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+20, getFanStatus(fanStr[i-1]));
+        }
+    }
+    /**
+     * 瑙f瀽绌鸿皟鐘舵��
+     * @param ser
+     * @param airStr
+     */
+    private void AnalysisAir(DeviceSer ser,Integer[] airStr){
+        if(airStr == null || airStr.length == 0)return;
+        Integer s= 0;
+        for (int i=1;i<= airStr.length;i++) {
+            List<Device> devices = deviceService.getCacheDeviceBySerId(ser.getCompanyId(),ser.getId());
+            // 璋冩暣缂撳瓨
+            if (null == devices || devices.isEmpty())
+                return;
+            // 鏇存柊缂撳瓨
+            Device temp;
+            s = airStr[i-1];
+            for (int j = 0; j < devices.size(); j++) {
+                if(i == (devices.get(j).getPassCode() - 40)){
+                    // 4608 -12  00
+                    String hexStr = BytesUtil.intToHexStr(s);
+                    for (int k =0;k<4;k++){
+                        if(hexStr.length() < 16){
+                            hexStr = "0" + hexStr;
+                        }
+                    }
+                    // 12
+                    String l = hexStr.substring(0,2);
+                    //00
+                    String h = hexStr.substring(2,4);
+                    String hb = BytesUtil.toBinary8String(BytesUtil.hexToInt(h));
+                    //00000000 0000 0 000
+                    Integer status = Integer.parseInt(hb.substring(4,5));
+                    Integer t = BytesUtil.hexToInt(l);
+                    BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(), devices.get(j).getId(), getLightStatus(status));
+                    TempParam param = new TempParam();
+                    param.setId( devices.get(j).getId());
+                    param.setTargetTemp(t+"");
+                    param.setTargetStatus(getLightStatus(status));
+                    param.setTargetModel("01");
+                    List<ExeDevice> exeDeviceList = new ArrayList<>();
+                    ExeDevice dev = new ExeDevice();
+                    dev.setSerId(ser.getId());
+                    exeDeviceList.add(dev);
+                    param.setDeviceList(exeDeviceList);
+                    param.setCompanyId(ser.getCompanyId());
+                    deviceService.updateTempControlInfo(param);
+
+                    log.info("绌鸿皟鐘舵�佽В鏋愬畬鎴愶細"+param.toString());
+                    //BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+40, getWinStatus(airStr[i]));
+
+                }
+            }
+                  }
+    }
+    /**
+     * 瑙f瀽鐓ф槑鐘舵��
+     * @param ser
+     * @param lightStr
+     */
+    private void AnalysisLight(DeviceSer ser,Integer[] lightStr){
+        if(lightStr == null || lightStr.length == 0)return;
+        for (int i=1;i<= lightStr.length;i++) {
+            BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+60, getLightStatus(lightStr[i-1]));
+        }
+    }
+
+    private String getWinStatus(Integer s){
+        if(s == null)return DeviceStatus.ZERO.getCode();
+        String hexStr = BytesUtil.intToHexStr(s);
+        for (int i =0;i<4;i++){
+            if(hexStr.length() < 4){
+                hexStr = "0" + hexStr;
+            }
+        }
+        String h = hexStr.substring(0,2);
+        String l = hexStr.substring(2,4);
+        h = BytesUtil.toBinary8String(BytesUtil.hexToInt(h));
+        int kaidu = (BytesUtil.hexToInt(l));
+        String temp = h.substring(6,8);
+        if("00".equals(temp ) && kaidu == 100){
+            return DeviceStatus.OPEN.getCode();
+        }
+        if("00".equals(temp ) && kaidu == 0){
+            return DeviceStatus.CLOSE.getCode();
+        }
+        if("01".equals(temp )){
+            return DeviceStatus.OPEN.getCode();
+        }
+        if("10".equals(temp )){
+            return DeviceStatus.CLOSE.getCode();
+        }
+
+        return DeviceStatus.ZERO.getCode();
+    }
+    private String getFanStatus(Integer s){
+        if(0 == s){
+            return DeviceStatus.CLOSE.getCode();
+        }
+        if(1 == s){
+            return DeviceStatus.OPEN.getCode();
+        }
+        return DeviceStatus.ZERO.getCode();
+    }
+
+    private String getLightStatus(Integer s){
+        if(0 == s){
+            return DeviceStatus.CLOSE.getCode();
+        }
+        if(1 == s){
+            return DeviceStatus.OPEN.getCode();
+        }
+        return DeviceStatus.ZERO.getCode();
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java
new file mode 100644
index 0000000..170c5a0
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java
@@ -0,0 +1,150 @@
+package com.ld.igds.protocol.bhzn.verb.analysis;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ld.igds.common.CoreCommonService;
+import com.ld.igds.common.CoreDeviceService;
+import com.ld.igds.constant.BizType;
+import com.ld.igds.constant.DeviceStatus;
+import com.ld.igds.gas.CoreGasService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.notify.NotifyWebInvoker;
+import com.ld.igds.io.request.ExeDevice;
+import com.ld.igds.models.*;
+import com.ld.igds.protocol.bhzn.verb.command.BaseRemoteImpl;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Res209;
+import com.ld.igds.protocol.bhzn.verb.dto.Res247;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+import com.ld.igds.temp.dto.TempParam;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.ContextUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 姘斾綋瑙f瀽
+ */
+@Slf4j
+@Component(AnalysisGas.BEAN_ID)
+public class AnalysisGas extends BaseRemoteImpl {
+
+    public static final String BEAN_ID = "bhzn.analysisGas";
+
+    @Autowired
+    private CoreDeviceService deviceService;
+    @Autowired
+    private NotifyWebInvoker notifyInvoker;
+    @Autowired
+    private CoreGasService gasService;
+    @Autowired
+    private CoreCommonService commonService;
+
+
+    /**
+     * 璁惧鐘舵��
+     *
+     * @param reMessage
+     * @param ser
+     */
+    public void analysis(IoMessage reMessage, DeviceSer ser) {
+
+        log.info("姘斾綋妫�娴嬪紑濮嬭В鏋�");
+        Res209 res209 = JSONObject.parseObject(reMessage.getContentStr(),Res209.class);
+
+        DepotConf depotConf = commonService.getCacheDepotConfBySerId(ser.getCompanyId(),ser.getId() );
+        //涓讳綋淇℃伅
+        Gas gas = new Gas();
+        gas.setBatchId(ContextUtil.getDefaultBatchId());
+        gas.setCheckNum(res209.getCO2ValArray().length);
+        gas.setCompanyId(ser.getCompanyId());
+        gas.setDepotId(depotConf.getDepotId());
+        gas.setGasEnd(depotConf.getPestEnd());
+        gas.setGasStart(depotConf.getPestStart());
+        gas.setReceiveDate(new Date());
+        StringBuffer sb = new StringBuffer();
+        List<GasInfo> items = new ArrayList<>();
+        GasInfo info;
+        Integer[] n2ValArray = res209.getN2ValArray();
+        Integer[] pH3ValArray = res209.getPH3ValArray();
+        Integer[] cO2ValArray = res209.getCO2ValArray();
+        for (int i=0;i<res209.getCO2ValArray().length;i++){
+            info = new GasInfo();
+            info.setId(ContextUtil.buildInfoId(gas.getCompanyId(), gas.getDepotId(), gas.getBatchId()));
+            info.setPassCode(i+1);
+            info.setPerCo2(cO2ValArray[i].doubleValue());
+            info.setPerO2(99 - (n2ValArray[i].doubleValue() /10 ));
+            info.setPerPh3(pH3ValArray[i].doubleValue());
+            info.setPerN2(n2ValArray[i].doubleValue() / 10);
+            items.add(info);
+            if(i == 0){
+                //娣诲姞鏈�澶у�煎拰鏈�灏忓��
+                gas.setPerCo2Max(info.getPerCo2());
+                gas.setPerCo2Min(info.getPerCo2());
+                gas.setPerO2Max(info.getPerO2());
+                gas.setPerO2Min(info.getPerO2());
+                gas.setPerPh3Max(info.getPerPh3());
+                gas.setPerPh3Min(info.getPerPh3());
+                gas.setPerN2Max(info.getPerN2());
+                gas.setPerN2Min(info.getPerN2());
+            }
+            if (info.getPerCo2() > gas.getPerCo2Max()) {
+                gas.setPerCo2Max(info.getPerCo2());
+            }
+            if (info.getPerCo2() < gas.getPerCo2Min()) {
+                gas.setPerCo2Min(info.getPerCo2());
+            }
+
+            if (info.getPerO2() > gas.getPerO2Max()) {
+                gas.setPerO2Max(info.getPerO2());
+            }
+
+            if (info.getPerO2() < gas.getPerO2Min()) {
+                gas.setPerO2Min(info.getPerO2());
+            }
+
+            if (info.getPerPh3() > gas.getPerPh3Max()) {
+                gas.setPerPh3Max(info.getPerPh3());
+            }
+
+            if (info.getPerPh3() < gas.getPerPh3Min()) {
+                gas.setPerPh3Min(info.getPerPh3());
+            }
+
+            if (info.getPerN2() > gas.getPerN2Max()) {
+                gas.setPerN2Max(info.getPerN2());
+            }
+
+            if (info.getPerN2() < gas.getPerN2Min()) {
+                gas.setPerN2Min(info.getPerN2());
+            }
+
+            //鍥哄畾涓猴細passCode,co2,o2,ph3,n2;passCode,co2,o2,ph3,n2;"
+            sb.append(info.getPassCode());
+            sb.append(",");
+            sb.append(info.getPerCo2());
+            sb.append(",");
+            sb.append(info.getPerO2());
+            sb.append(",");
+            sb.append(info.getPerPh3());
+            sb.append(",");
+            sb.append(info.getPerN2());
+            sb.append(";");
+        }
+        gas.setPoints(sb.toString());
+        gasService.saveInfoGas(items);
+
+        gasService.saveOrUpdateData(gas);
+
+        // 璋冪敤閫氱煡鍓嶇
+        notifyInvoker.notifyWeb(gas.getCompanyId(), OrderRespEnum.MSG_SUCCESS, BizType.GAS, depotConf.getDepotName() + " 姘斾綋妫�娴嬶細缁撴灉杩斿洖鎴愬姛.");
+
+        log.info("鎺у埗鏌�----->>>骞冲彴锛氭皵浣撹В鏋愬畬鎴�-浠撳簱={}", depotConf.getDepotName());
+
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java
new file mode 100644
index 0000000..f6b00ce
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java
@@ -0,0 +1,87 @@
+package com.ld.igds.protocol.bhzn.verb.analysis;
+
+import com.ld.igds.common.CoreCommonService;
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.common.dto.THDto;
+import com.ld.igds.constant.BizType;
+import com.ld.igds.constant.Constant;
+import com.ld.igds.grain.GrainUtil;
+import com.ld.igds.grain.dto.GrainItemInfo;
+import com.ld.igds.io.notify.NotifyGrainInvoker;
+import com.ld.igds.models.DepotConf;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.models.DicSysConf;
+import com.ld.igds.models.Grain;
+import com.ld.igds.order.ExeOrderService;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.warn.WarnUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * 鍗忚瑙f瀽
+ *
+ * @author vince
+ */
+@Slf4j
+@Component(AnalysisService.BEAN_ID)
+public class AnalysisService {
+
+
+    public static final String BEAN_ID = "bhznVerb.analysisService";
+
+    @Autowired
+    private CoreSerService coreSerService;
+    @Autowired
+    private CoreCommonService commonService;
+    @Autowired
+    private NotifyGrainInvoker notifyGrainInvoker;
+    @Autowired
+    private GrainUtil grainUtil;
+    @Autowired
+    private WarnUtils warnUtils;
+    @Autowired
+    private ExeOrderService exeOrderService;
+    @Autowired
+    private AnalysisDevice analysisDevice;
+    @Autowired
+    private AnalysisGas analysisGas;
+
+
+    /**
+     * @param message
+     */
+    public void analysis(IoMessage message)  {
+        try{
+            DeviceSer ser = coreSerService.getCacheSerBySn(message.getCompanyId(), message.getSn());
+            if (null == ser) {
+                log.warn("鎺у埗鏌�------>>>骞冲彴锛氬綋鍓嶇粍缁囩紪鐮�={}锛屽垎鏈篒D={}锛岀郴缁熸病鏈夎幏鍙栧埌鍒嗘満淇℃伅锛屾姤鏂囨棤娉曡繘琛岃В鏋�", message.getCompanyId(), message.getSn());
+
+                return;
+            }else{
+                    ser.setIp(message.getIp());
+                    ser.setPort(message.getPort());
+                    ser.setStatus(Constant.YN_Y);
+                    coreSerService.updateByData(ser);
+            }
+            //鏍规嵁鎺ュ彛缂栧彿杩涜瑙f瀽璺敱
+            switch (message.getCmd()) {
+                case 247:
+                    analysisDevice.analysis(message, ser);
+                    break;
+                case 209:
+                    analysisGas.analysis(message, ser);
+                    break;
+                default:
+                    log.error("鎺у埗鏌滃懡浠ょ爜瑙f瀽澶辫触锛�");
+                    break;
+            }
+        }catch (Exception e){
+            log.error("鎺у埗鏌滆В鏋愬け璐ュ嚭閿欙細" + e.getMessage(),e);
+        }
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java
new file mode 100644
index 0000000..53d3290
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java
@@ -0,0 +1,68 @@
+package com.ld.igds.protocol.bhzn.verb.builder;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
+import com.ld.igds.io.request.BaseRequest;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+
+
+/**
+ * 鍛戒护鐢熸垚
+ *
+ * @author Andy
+ */
+public abstract class CommandBuilder {
+
+    public IoMessage buildMessage(BaseRequest request) {
+        IoMessage message = new IoMessage();
+        message.setIp(request.getIp());
+        message.setPort(request.getPort());
+        message.setBegin(BhznVerbServerUtils.MSG_START1);
+        // 璋冩暣淇℃伅
+        buildInfo(message, request);
+        message.setSign("0000");
+        message.setStNum(Integer.parseInt(request.getDepotId()));
+        message.setVersion("V1.0000000");
+        message.setCmd(248);
+        message.setResult("");
+        message.setOrderId(request.getOrderId());
+        message.setContent(null);
+        message.setEnd(BhznVerbServerUtils.MSG_END);
+
+        // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅
+        build(message);
+
+        return message;
+    }
+
+    public void buildInfo(IoMessage message, BaseRequest request) {
+
+
+    }
+
+    /**
+     * 鏍规嵁鐢熸垚鐨勫懡浠わ紝杩涜璋冩暣
+     *
+     * @param message
+     */
+    public void build(IoMessage message) {
+        StringBuffer hexSb = new StringBuffer();
+        hexSb.append(message.getBegin());
+        SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
+        filter.getExcludes().add("ip");
+        filter.getExcludes().add("port");
+        filter.getExcludes().add("companyId");
+        filter.getExcludes().add("strMsg");
+        filter.getExcludes().add("begin");
+        filter.getExcludes().add("end");
+        filter.getExcludes().add("byteMsg");
+        filter.getExcludes().add("contentSr");
+        message.setContent(JSONObject.parseObject(message.getContentStr()));
+        message.setStrMsg(JSONObject.toJSONString(message,filter));
+        hexSb.append(message.getStrMsg());
+        hexSb.append(message.getEnd());
+        message.setByteMsg(hexSb.toString().getBytes());
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java
new file mode 100644
index 0000000..1d1dc1f
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java
@@ -0,0 +1,147 @@
+package com.ld.igds.protocol.bhzn.verb.builder;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ld.igds.constant.DeviceStatus;
+import com.ld.igds.constant.DeviceType;
+import com.ld.igds.io.request.DeviceControlRequest;
+import com.ld.igds.io.request.ExeDevice;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Req248;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ControlCommandBuilder extends CommandBuilder {
+
+    private final static ControlCommandBuilder instance = new ControlCommandBuilder();
+
+    private ControlCommandBuilder() {
+    }
+
+    public static ControlCommandBuilder getInstance() {
+        return instance;
+    }
+
+    public IoMessage buildMessage(DeviceControlRequest request) {
+
+        IoMessage message = new IoMessage();
+        message.setIp(request.getIp());
+        message.setPort(request.getPort());
+        message.setBegin(BhznVerbServerUtils.MSG_START1);
+        // 璋冩暣淇℃伅
+        buildInfo(message, request);
+        message.setSign("0000");
+        message.setVersion("V1.0000000");
+        message.setStNum(Integer.parseInt(request.getDepotId()));
+        message.setSn(request.getSerId());
+        message.setCmd(248);
+        message.setResult("");
+        message.setOrderId(request.getOrderId());
+        message.setEnd(BhznVerbServerUtils.MSG_END);
+
+        // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅
+        build(message);
+
+        return message;
+    }
+
+    public void buildInfo(IoMessage message, DeviceControlRequest request) {
+        Req248 info = new Req248();
+        Integer[] winStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] fanStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] airStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] lightStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        int winCount = 0,fanCount = 0,airCount = 0,lightCount = 0;
+        List<ExeDevice> deviceList = request.getDeviceList();
+        for (ExeDevice exeDevice : deviceList) {
+            //绐楁埛绫诲瀷璁惧 鍖呭惈
+            if(
+                    DeviceType.TYPE_0B.getCode().equals(exeDevice.getType())
+                    || DeviceType.TYPE_01.getCode().equals(exeDevice.getType())
+                    || DeviceType.TYPE_02.getCode().equals(exeDevice.getType())
+                    || DeviceType.TYPE_0C.getCode().equals(exeDevice.getType())
+            ){
+                winStr[exeDevice.getPassCode()-1] = getVinStatus(exeDevice.getTargetStatus());
+                if(exeDevice.getPassCode() > winCount){
+                    winCount = exeDevice.getPassCode();
+                }
+                if(StringUtils.isNotEmpty(exeDevice.getLink()) && !"null".equals(exeDevice.getLink())){
+                    fanStr[Integer.parseInt(exeDevice.getLink())-21] = getFanStatus(exeDevice.getTargetStatus());
+                    if(Integer.parseInt(exeDevice.getLink()) > fanCount){
+                        fanCount = exeDevice.getPassCode();
+                    }
+                }
+            }
+            //椋庢満绫诲瀷璁惧
+            if(DeviceType.TYPE_04.getCode().equals(exeDevice.getType())
+            ){
+                fanStr[exeDevice.getPassCode()-21] = getFanStatus(exeDevice.getTargetStatus());
+                if(exeDevice.getPassCode() > fanCount){
+                    fanCount = exeDevice.getPassCode();
+                }
+            }
+            //绌鸿皟绫诲瀷璁惧
+//            if(DeviceType.TYPE_05.getCode().equals(exeDevice.getType())
+//            ){
+//                fanStr[exeDevice.getPassCode()-1] = getFanStatus(exeDevice.getTargetStatus());
+//                if(exeDevice.getPassCode() > fanCount){
+//                    fanCount = exeDevice.getPassCode();
+//                }
+//            }
+            //鐓ф槑绫诲瀷璁惧
+            if(DeviceType.TYPE_06.getCode().equals(exeDevice.getType())
+            ){
+                lightStr[exeDevice.getPassCode()-61] = getFanStatus(exeDevice.getTargetStatus());
+                if(exeDevice.getPassCode() > lightCount){
+                    lightCount = exeDevice.getPassCode();
+                }
+            }
+        }
+        info.setWinCount(winCount);
+        info.setWin_Str(winStr);
+        info.setFanCount(fanCount);
+        info.setFan_Str(fanStr);
+        info.setAirCount(airCount);
+        info.setAir_Str(airStr);
+        info.setLightCount(lightCount);
+        info.setLight_Str(lightStr);
+        message.setContentStr(JSON.toJSONString(info));
+    }
+
+
+    private int getVinStatus(String deviceStatus){
+        if(DeviceStatus.W_OPEN.getCode().equals(deviceStatus) || DeviceStatus.OPEN.getCode().equals(deviceStatus)){
+            return 1;
+        }
+        if(DeviceStatus.W_CLOSE.getCode().equals(deviceStatus) || DeviceStatus.CLOSE.getCode().equals(deviceStatus)){
+            return 2;
+        }
+        if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus) ){
+            return 0;
+        }
+        if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){
+            return 1;
+        }
+        return -1;
+    }
+
+    private int getFanStatus(String deviceStatus){
+        if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus)  ){
+            return 0;
+        }
+        if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){
+            return 1;
+        }
+        return -1;
+    }
+
+//    private int getAirStatus(ExeDevice exeDevice){
+//        String s = "";
+//        s += "001";
+//        if(exeDevice.)
+//        return 0;
+//    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java
new file mode 100644
index 0000000..bcdfe35
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java
@@ -0,0 +1,48 @@
+package com.ld.igds.protocol.bhzn.verb.builder;
+
+import com.alibaba.fastjson.JSON;
+import com.ld.igds.io.request.CheckGasRequest;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Req209;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+
+public class GasCommandBuilder extends CommandBuilder {
+    private final static GasCommandBuilder instance = new GasCommandBuilder();
+
+    private GasCommandBuilder() {
+    }
+
+    public static GasCommandBuilder getInstance() {
+        return instance;
+    }
+
+    public IoMessage buildMessage(CheckGasRequest request) {
+
+
+        IoMessage message = new IoMessage();
+        message.setIp(request.getIp());
+        message.setPort(request.getPort());
+        message.setBegin(BhznVerbServerUtils.MSG_START1);
+        // 璋冩暣淇℃伅
+        buildInfo(message, request);
+        message.setSign("0000");
+        message.setVersion("V1.0000000");
+        message.setStNum(Integer.parseInt(request.getDepotId()));
+        message.setSn(request.getSerId());
+        message.setCmd(209);
+        message.setResult("");
+        message.setOrderId(request.getOrderId());
+        message.setEnd(BhznVerbServerUtils.MSG_END);
+
+        // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅
+        build(message);
+        return message;
+    }
+
+    public void buildInfo(IoMessage message, CheckGasRequest request) {
+        Req209 info = new Req209();
+        info.setStart(1);
+        info.setChannel(0);
+        message.setContentStr(JSON.toJSONString(info));
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java
new file mode 100644
index 0000000..6f3638f
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java
@@ -0,0 +1,47 @@
+package com.ld.igds.protocol.bhzn.verb.builder;
+
+import com.alibaba.fastjson.JSON;
+import com.ld.igds.io.request.CheckGasRequest;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Req209;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+
+public class GasStopCommandBuilder extends CommandBuilder {
+    private final static GasStopCommandBuilder instance = new GasStopCommandBuilder();
+
+    private GasStopCommandBuilder() {
+    }
+
+    public static GasStopCommandBuilder getInstance() {
+        return instance;
+    }
+
+    public IoMessage buildMessage(CheckGasRequest request) {
+
+        IoMessage message = new IoMessage();
+        message.setIp(request.getIp());
+        message.setPort(request.getPort());
+        message.setBegin(BhznVerbServerUtils.MSG_START1);
+        // 璋冩暣淇℃伅
+        buildInfo(message, request);
+        message.setSign("0000");
+        message.setVersion("V1.0000000");
+        message.setStNum(Integer.parseInt(request.getDepotId()));
+        message.setSn(request.getSerId());
+        message.setCmd(209);
+        message.setResult("");
+        message.setOrderId(request.getOrderId());
+        message.setEnd(BhznVerbServerUtils.MSG_END);
+
+        // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅
+        build(message);
+        return message;
+    }
+
+    public void buildInfo(IoMessage message, CheckGasRequest request) {
+        Req209 info = new Req209();
+        info.setStart(1);
+        info.setChannel(0);
+        message.setContentStr(JSON.toJSONString(info));
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java
new file mode 100644
index 0000000..658f7d3
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java
@@ -0,0 +1,98 @@
+package com.ld.igds.protocol.bhzn.verb.builder;
+
+import com.alibaba.fastjson.JSON;
+import com.ld.igds.constant.DeviceStatus;
+import com.ld.igds.constant.DeviceType;
+import com.ld.igds.io.request.ExeDevice;
+import com.ld.igds.io.request.TempControlRequest;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.dto.Req248;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+import com.ld.igds.util.BytesUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+@Slf4j
+public class TempControlCommandBuilder extends CommandBuilder {
+
+    private final static TempControlCommandBuilder instance = new TempControlCommandBuilder();
+
+    private TempControlCommandBuilder() {
+    }
+
+    public static TempControlCommandBuilder getInstance() {
+        return instance;
+    }
+
+    public IoMessage buildMessage(TempControlRequest request) {
+
+        IoMessage message = new IoMessage();
+        message.setIp(request.getIp());
+        message.setPort(request.getPort());
+        message.setBegin(BhznVerbServerUtils.MSG_START1);
+        // 璋冩暣淇℃伅
+        buildInfo(message, request);
+        message.setSign("0000");
+        message.setVersion("V1.0000000");
+        message.setStNum(Integer.parseInt(request.getDepotId()));
+        message.setSn(request.getSerId());
+        message.setCmd(248);
+        message.setResult("");
+        message.setOrderId(request.getOrderId());
+        message.setEnd(BhznVerbServerUtils.MSG_END);
+        // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅
+        build(message);
+
+        return message;
+    }
+
+    public void buildInfo(IoMessage message, TempControlRequest request) {
+        Req248 info = new Req248();
+        Integer[] winStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] fanStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] airStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        Integer[] lightStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+        int winCount = 0,fanCount = 0,airCount = 0,lightCount = 0;
+        ExeDevice exeDevice = request.getExeDevice();
+
+            //绌鸿皟绫诲瀷璁惧
+        airStr[exeDevice.getPassCode()-41] = getAirStatus(request);
+        airCount = exeDevice.getPassCode()-41;
+            info.setWinCount(winCount);
+            info.setWin_Str(winStr);
+            info.setFanCount(fanCount);
+            info.setFan_Str(fanStr);
+            info.setAirCount(airCount);
+            info.setAir_Str(airStr);
+            info.setLightCount(lightCount);
+            info.setLight_Str(lightStr);
+            message.setContentStr(JSON.toJSONString(info));
+    }
+
+
+    private Integer getAirStatus(TempControlRequest request){
+        try{
+            String h = "";
+            String l = "";
+            h = "001"+h;
+            if(DeviceStatus.OPEN.getCode().equals(request.getExeDevice().getTargetStatus())){
+                h = "1"+h;
+            }else{
+                h = "0"+h;
+            }
+            h = "0000"+h;
+            h = BytesUtil.hexToInt(BytesUtil.bin2Hex(h)) + "";
+            if (h.length() < 2) {
+                h = "0" + h;
+            }
+            l = BytesUtil.intToHexStr1(Integer.parseInt(request.getTargetTemp()));
+            String s=  l+ h ;
+            return BytesUtil.hexToInt(s);
+        }catch (Exception e){
+            log.error(e.getMessage(),e);
+            return -1;
+        }
+
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java
new file mode 100644
index 0000000..fdc3475
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java
@@ -0,0 +1,72 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.io.constant.ProtocolEnum;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerEngine;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.ContextUtil;
+import com.ld.io.api.InvokeResult;
+import com.ld.io.api.IoSession;
+import com.ld.io.api.IoSessionQuery;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component(BaseRemoteImpl.BEAN_ID)
+public class BaseRemoteImpl {
+    public static final String BEAN_ID = "bhzn.remoteBaseCommonService";
+    public String getProtocol() {
+        return ProtocolEnum.TCP_BHZH_VERB_V2.getCode();
+    }
+
+    @Autowired
+    private BhznVerbServerEngine bhznVerbServerEngine;
+
+    /**
+     * 鍙戦�佸懡浠�
+     *
+     * @param ip
+     * @param port
+     * @param msg
+     * @return
+     */
+    public InvokeResult send(String ip, int port, byte[] msg) {
+        log.debug("骞冲彴鎺ㄩ�佹姤鏂囦俊鎭�--{}", BytesUtil.bytesToString(msg));
+        IoSessionQuery sessionFactory = bhznVerbServerEngine.getSessionQuery();
+        List<IoSession> sessions = sessionFactory.getAllSession();
+        IoSession session = null;
+        for (IoSession ioSession : sessions) {
+            if (ContextUtil.getServerKey(ip, port).equals(
+                    ioSession.getBusinessKey())) {
+                session = ioSession;
+                break;
+            }
+        }
+        if (null == session) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        return session.invoke(msg);
+    }
+
+    public InvokeResult send(IoMessage message) {
+        log.debug("骞冲彴鎺ㄩ�佹姤鏂囦俊鎭�--{}", message.toString());
+        IoSessionQuery sessionFactory =  bhznVerbServerEngine.getSessionQuery();
+        List<IoSession> sessions = sessionFactory.getAllSession();
+        IoSession session = null;
+        for (IoSession ioSession : sessions) {
+            if (ContextUtil.getServerKey(message.getIp(), message.getPort()).equals(
+                    ioSession.getBusinessKey())) {
+                session = ioSession;
+                break;
+            }
+        }
+        if (null == session) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        return session.invoke(message.getByteMsg());
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java
new file mode 100644
index 0000000..819b3ff
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java
@@ -0,0 +1,99 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.constant.BizType;
+import com.ld.igds.io.RemoteCommonService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.notify.NotifyWebInvoker;
+import com.ld.igds.io.request.*;
+import com.ld.igds.io.response.BaseResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 褰撳墠鍗忚瀹炵幇锛岀伯鎯呮ā鍧楀懡浠ゆ帴鍙�
+ *
+ * @author jiazx
+ */
+@Slf4j
+@Component(RemoteCommonImpl.BEAN_ID)
+public class RemoteCommonImpl extends BaseRemoteImpl implements RemoteCommonService {
+
+    public static final String BEAN_ID = "bhzn.remoteCommonService";
+
+    @Autowired
+    private NotifyWebInvoker notifyWebInvoker;
+
+    @Override
+    public BaseResponse checkTh(CheckThRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse pullDevice(BaseRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+
+    @Override
+    public BaseResponse pullDepot(BaseRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse pullAccess(AccessRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse pullDepotStatus(DepotStatusRequest request) {
+
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse heartBeat(BaseRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse readConf(GrainSerConfRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse writeConf(GrainSerConfRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse initCable(BaseRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse updateGrainSerCable(GrainSerConfRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse destroyCon(BaseRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse checkGrainSerCable(GrainSerConfRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse sumGrainSerCable(GrainSerConfRequest request) {
+        return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public BaseResponse updateSysDepotConf(BaseRequest request) {
+        return null;
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java
new file mode 100644
index 0000000..f35fa8f
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java
@@ -0,0 +1,177 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.constant.BizType;
+import com.ld.igds.constant.DeviceStatus;
+import com.ld.igds.constant.DeviceType;
+import com.ld.igds.io.RemoteControlService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.notify.NotifyWebInvoker;
+import com.ld.igds.io.request.DeviceAutoControlRequest;
+import com.ld.igds.io.request.DeviceControlRequest;
+import com.ld.igds.io.request.ExeDevice;
+import com.ld.igds.io.request.TempControlRequest;
+import com.ld.igds.io.response.BaseResponse;
+import com.ld.igds.io.response.DeviceControlResponse;
+import com.ld.igds.protocol.bhzn.verb.builder.ControlCommandBuilder;
+import com.ld.igds.protocol.bhzn.verb.builder.TempControlCommandBuilder;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.io.api.InvokeResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component(RemoteControlServiceImpl.BEAN_ID)
+public class RemoteControlServiceImpl extends BaseRemoteImpl implements RemoteControlService {
+
+    public static final String BEAN_ID = "bhzn.remoteControlService";
+
+    @Autowired
+    private NotifyWebInvoker notifyWebInvoker;
+
+
+    @Override
+    public DeviceControlResponse deviceControl(DeviceControlRequest request) {
+        try {
+            controlBatchExe(request);
+        } catch (Exception e) {
+            log.error("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-鍚庣寮傚父-{}", e);
+            return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), e.getMessage());
+        }
+        return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS);
+    }
+
+
+    /**
+     * 澶氫釜璁惧鎵ц
+     *
+     * @param request
+     * @throws Exception
+     */
+    public void controlBatchExe(DeviceControlRequest request) throws Exception {
+
+        IoMessage message = ControlCommandBuilder.getInstance().buildMessage(request);
+
+        log.info("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-{}", message.toString());
+
+        InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg());
+
+        // 濡傛灉鏈夋墽琛屽紓甯革紝鐩存帴閫氱煡鍒板墠绔�
+        if (InvokeResult.SUCCESS.getCode() != result.getCode()) {
+            log.error("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-鎵ц澶辫触-{}", result.getMessage());
+            notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, "璁惧鎿嶄綔寮傚父锛氬師鍥狅細" + result.getMessage());
+            
+           return;
+        }
+
+        List<ExeDevice> listDevice = request.getDeviceList();
+        String deviceType = listDevice.get(0).getType();
+        String targetStatus = listDevice.get(0).getTargetStatus();
+
+        //闂撮殧鏃堕棿瀹氫箟
+        long longTime = 1000;
+
+        if (DeviceType.TYPE_01.getCode().equals(deviceType)) {
+            longTime = 15 * 1000;
+        }
+        if (DeviceType.TYPE_0B.getCode().equals(deviceType)) {
+            longTime = 15 * 1000;
+        }
+        if (DeviceType.TYPE_07.getCode().equals(deviceType)) {
+            longTime = 15 * 1000;
+        }
+        if (DeviceType.TYPE_06.getCode().equals(deviceType)) {
+            longTime = 500;
+        }
+        if (DeviceType.TYPE_09.getCode().equals(deviceType)) {
+            longTime = 15 * 1000;
+        }
+        if (DeviceStatus.W_OPEN.getCode().equals(targetStatus) || DeviceStatus.W_CLOSE.getCode().equals(targetStatus)) {
+            longTime = 15 * 1000;
+        }
+        if (DeviceStatus.F_OPEN.getCode().equals(targetStatus) || DeviceStatus.F_OPEN_F.getCode().equals(targetStatus)) {
+            longTime = 3 * 1000;
+        }
+
+        Thread.sleep(longTime);
+
+        //濡傛灉涓嶆槸绯荤粺鎵ц锛岀洿鎺ヨ鑾峰彇璁惧鐘舵��
+        if (!request.isSysExeTag()) {
+            log.debug("--------------------鎵ц瀹屾垚鍚庯紝绯荤粺鑷姩鍙戦�佺姸鎬佹煡璇�------------------{}", request.getDepotId());
+            //queryStatus(request);
+        }
+    }
+
+    @Override
+    public DeviceControlResponse closeAll(DeviceControlRequest request) {
+        return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public DeviceControlResponse queryStatus(DeviceControlRequest request) {
+
+        return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+
+    @Override
+    public DeviceControlResponse tempControl(TempControlRequest request) {
+        try {
+            IoMessage message = TempControlCommandBuilder.getInstance().buildMessage(request);
+
+            log.info("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-{}", message.toString());
+
+            InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg());
+
+            // 濡傛灉鏈夋墽琛屽紓甯革紝鐩存帴閫氱煡鍒板墠绔�
+            if (InvokeResult.SUCCESS.getCode() != result.getCode()) {
+                log.error("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-鎵ц澶辫触-{}", result.getMessage());
+
+               // notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, "璁惧鎿嶄綔寮傚父锛氬師鍥狅細" + result.getMessage());
+
+                return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鎵ц寮傚父锛氬師鍥狅細" + result.getMessage());
+            }
+
+        } catch (Exception e) {
+            log.error("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-鍚庣寮傚父-{}", e);
+            return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), e.getMessage());
+        }
+
+        return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS);
+    }
+
+
+    @Override
+    public DeviceControlResponse n2AutoControl(DeviceAutoControlRequest request) {
+        return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+
+    /**
+     * 鑷姩閫氶锛屾櫤鑳芥帶鍒舵煖鎵ц
+     *
+     * @param request
+     * @return
+     */
+    @Override
+    public DeviceControlResponse airAutoControl(DeviceAutoControlRequest request) {
+        return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "褰撳墠鍗忚涓嶆敮鎸佸綋鍓嶆ā寮忥紒");
+    }
+
+    /**
+     * 椤甸潰閫氱煡
+     *
+     * @param companyId
+     * @param orderResp
+     * @param notifyMsg
+     */
+    private void notifyWeb(String companyId, OrderRespEnum orderResp,
+                           String notifyMsg) {
+        notifyWebInvoker.notifyWeb(companyId, orderResp, BizType.AREATION,
+                notifyMsg);
+    }
+
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java
new file mode 100644
index 0000000..6f10778
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java
@@ -0,0 +1,78 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.io.RemoteGasService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.request.CheckGasRequest;
+import com.ld.igds.io.response.GasResponse;
+import com.ld.igds.protocol.bhzn.verb.builder.GasCommandBuilder;
+import com.ld.igds.protocol.bhzn.verb.builder.GasStopCommandBuilder;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.io.api.InvokeResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 姘斾綋閲囬泦鍛戒护瀹炵幇
+ */
+@Slf4j
+@Component(RemoteGasServiceImpl.BEAN_ID)
+public class RemoteGasServiceImpl extends BaseRemoteImpl implements RemoteGasService {
+
+    public static final String BEAN_ID = "bhzn.remoteGasService";
+
+
+    @Override
+    public GasResponse checkGas(CheckGasRequest request) {
+        try {
+            IoMessage message = GasCommandBuilder.getInstance().buildMessage(request);
+
+            InvokeResult result = send(request.getIp(), request.getPort(),
+                    message.getByteMsg());
+
+            log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-{}", message.toString());
+
+            if (InvokeResult.SUCCESS != result) {
+                log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-澶辫触{}", result.getMessage());
+                return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "閲囬泦鎵ц澶辫触锛�" + result.getMessage());
+            }
+
+        } catch (Exception e) {
+            log.error("姘斾綋妫�娴嬪紓甯革細{}", e);
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "閲囬泦寮傚父锛屽師鍥狅細" + e.getMessage());
+        }
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                "姘斾綋閲囬泦鍛戒护鍙戦�佹垚鍔燂紒");
+    }
+
+    @Override
+    public GasResponse stopCheckGas(CheckGasRequest request) {
+        try {
+            IoMessage message = GasStopCommandBuilder.getInstance().buildMessage(request);
+
+            InvokeResult result = send(request.getIp(), request.getPort(),
+                    message.getByteMsg());
+
+            log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-{}", message.toString());
+
+            if (InvokeResult.SUCCESS != result) {
+                log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-澶辫触{}", result.getMessage());
+                return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "閲囬泦鎵ц澶辫触锛�" + result.getMessage());
+            }
+
+        } catch (Exception e) {
+            log.error("姘斾綋妫�娴嬪紓甯革細{}", e);
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "閲囬泦寮傚父锛屽師鍥狅細" + e.getMessage());
+        }
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                "姘斾綋閲囬泦鍛戒护鍙戦�佹垚鍔燂紒");
+    }
+
+    @Override
+    public GasResponse checkGasByPoint(CheckGasRequest request) {
+        return checkGas(request);
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java
new file mode 100644
index 0000000..2a5767c
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java
@@ -0,0 +1,28 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.io.RemoteGrainService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.request.CheckGrainRequest;
+import com.ld.igds.io.response.DeviceControlResponse;
+import com.ld.igds.io.response.GrainResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 褰撳墠鍗忚瀹炵幇锛岀伯鎯呮ā鍧楀懡浠ゆ帴鍙�
+ *
+ * @author jiazx
+ */
+@Slf4j
+@Component(RemoteGrainServiceImpl.BEAN_ID)
+public class RemoteGrainServiceImpl extends BaseRemoteImpl implements
+        RemoteGrainService {
+
+    public static final String BEAN_ID = "bhzn.remoteGrainService";
+
+    @Override
+    public GrainResponse checkGrain(CheckGrainRequest request) {
+
+        return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java
new file mode 100644
index 0000000..946e765
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ld.igds.protocol.bhzn.verb.command;
+
+import com.ld.igds.io.RemotePestService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.request.CheckPestRequest;
+import com.ld.igds.io.response.GrainResponse;
+import com.ld.igds.io.response.PestResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 妫�娴嬭櫕瀹�
+ */
+@Slf4j
+@Component(RemotePestServiceImpl.BEAN_ID)
+public class RemotePestServiceImpl extends BaseRemoteImpl implements RemotePestService {
+
+    public static final String BEAN_ID = "bhzn.remotePestService";
+
+    @Override
+    public PestResponse checkPest(CheckPestRequest request) {
+        return new PestResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public PestResponse stopCheckPest(CheckPestRequest request) {
+        return new PestResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�");
+    }
+
+    @Override
+    public PestResponse checkPestByPoint(CheckPestRequest request) {
+        return checkPest(request);
+    }
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java
new file mode 100644
index 0000000..47ec0f8
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java
@@ -0,0 +1,35 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class IoMessage {
+    @JSONField(serialize = false)
+    private String ip;
+    @JSONField(serialize = false)
+    private int port;
+    private String sn;
+    private Integer stNum;
+    private String sign;
+    private String version;
+    private Integer cmd;
+    private String result;
+    private String orderId;
+
+    private JSONObject content;
+    @JSONField(serialize = false)
+    private  String contentStr;
+
+    @JSONField(serialize = false)
+    private String companyId;
+    @JSONField(serialize = false)
+    private String strMsg;
+    @JSONField(serialize = false)
+    private String begin;
+    @JSONField(serialize = false)
+    private String end;
+    @JSONField(serialize = false)
+    private byte[] byteMsg;
+}
\ No newline at end of file
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java
new file mode 100644
index 0000000..5fcb885
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java
@@ -0,0 +1,16 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import lombok.Data;
+
+/**
+ * 姘斾綋妫�娴嬪懡浠�
+ */
+@Data
+public class Req209 {
+
+   private Integer Start;
+   /**
+    * 1-10 0鎴栬�呯┖琛ㄧず鎵�鏈夐�氶亾
+    */
+   private Integer Channel = 0;
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java
new file mode 100644
index 0000000..2407b61
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java
@@ -0,0 +1,22 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import lombok.Data;
+
+/**
+ * 璁惧鎺у埗
+ */
+@Data
+public class Req248 {
+
+
+ private  Integer WinCount;
+ private  Integer[] Win_Str;
+ private  Integer FanCount;
+ private  Integer[] Fan_Str;
+ private  Integer AirCount;
+ private  Integer[] Air_Str;
+ private  Integer LightCount;
+ private  Integer[] Light_Str;
+
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java
new file mode 100644
index 0000000..30e543d
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java
@@ -0,0 +1,24 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import lombok.Data;
+
+/**
+ * 姘斾綋妫�娴嬭繑鍥�
+ */
+@Data
+public class Res209 {
+
+   private Integer State;
+   private String Error;
+   private Integer N2Avage;
+   private Integer PH3Avage;
+   private Integer CO2Avage;
+   private Integer[] N2ValArray;
+   private Integer[] PH3ValArray;
+   private Integer[] CO2ValArray;
+   private Integer[] N2LayAvage;
+   private Integer[] PH3LayAvage;
+   private Integer[] CO2LayAvage;
+   private Integer[] WormVal;
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java
new file mode 100644
index 0000000..cdde1ca
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java
@@ -0,0 +1,36 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Data;
+
+/**
+ * 璁惧鐘舵�佽繑鍥�
+ */
+@Data
+public class Res247 {
+
+   private Integer State;
+   private String Error;
+   private Integer THCount;
+   private Integer[] TH_Str;
+   private Integer WinCount;
+   private Integer[] Win_Str;
+   private Integer FanCount;
+   private Integer[] Fan_Str;
+   private Integer AirCount;
+   private Integer[] Air_Str;
+   private Integer Mode;
+   private Integer[] Light_Str;
+   private Integer LightCount;
+   private Integer GasDev;
+   private Integer N2Val;
+   private Integer PH3Val;
+   private Integer CO2Val;
+   private Integer N2Avage;
+   private Integer PH3Avage;
+   private Integer CO2Avage;
+   private Integer AirPVal;
+   private Integer[] ValveSt;
+   private Integer[] AriSt;
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java
new file mode 100644
index 0000000..00e7ae2
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java
@@ -0,0 +1,15 @@
+package com.ld.igds.protocol.bhzn.verb.dto;
+
+import lombok.Data;
+
+/**
+ * 璁惧鎺у埗
+ */
+@Data
+public class Res248 {
+
+ private  Integer State;
+ private  String Error;
+
+
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java
new file mode 100644
index 0000000..bf71521
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java
@@ -0,0 +1,35 @@
+package com.ld.igds.protocol.bhzn.verb.msg;
+
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.util.BytesUtil;
+
+/**
+ * 鏍规嵁鎺ユ敹鍒扮殑淇℃伅杩涜灏佽
+ *
+ * @author vince
+ */
+public class ReMessageBuilder {
+
+
+    public final static String ERROR_TAG = "3CF6";
+    public static double FAULT_CHECK_TAG = 85.0;
+    public static double MAX_TEMP = -50.0;
+    public static double MIN_TEMP = 50.0;
+    private final static ReMessageBuilder instance = new ReMessageBuilder();
+
+    private ReMessageBuilder() {
+    }
+
+    public static ReMessageBuilder getInstance() {
+        return instance;
+    }
+
+    /**
+     * @param message
+     * @return
+     */
+    public IoMessage buildMessage(String message) throws Exception {
+        IoMessage ioMessage = new IoMessage();
+        return ioMessage;
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java
new file mode 100644
index 0000000..82aed49
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * 閭︽捣鎺у埗鏌滃崗璁�
+ */
+package com.ld.igds.protocol.bhzn.verb;
\ No newline at end of file
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java
new file mode 100644
index 0000000..0588072
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java
@@ -0,0 +1,43 @@
+package com.ld.igds.protocol.bhzn.verb.server;
+
+
+import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils;
+import com.ld.io.api.HeartbeatProvider;
+import com.ld.io.api.IoSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鎻愪緵蹇冭烦淇℃伅
+ *
+ * @author Andy
+ */
+@Slf4j
+@Service
+public class BhznVerbHeartbeatImpl implements HeartbeatProvider {
+
+    @Override
+    public byte[] provide(IoSession session) {
+
+
+        //鐩存帴鏍规嵁涓绘満SESSIOn鍒ゆ柇
+        //IoSession session1 = BhznVerbServerUtils.getSession();
+
+        Long lastBeatTime = BhznVerbServerUtils.getHearBeat(session);
+
+        if (null == lastBeatTime) {
+            return null;
+        }
+
+        //濡傛灉鏈�鍚庝竴娆$粓绔績璺虫椂闂磋窛绂诲綋鍓嶆椂闂村ぇ浜� 缁堢蹇冭烦鏃堕棿鐨�3娆★紝鍒欏垽鏂负绂荤嚎
+        long deTime = System.currentTimeMillis() - lastBeatTime;
+
+        if (deTime > (BhznVerbServerUtils.HEART_BEAT_TIME * 3 * 1000)) {
+            log.info("-----------瓒呰繃{}绉掓湭鑾峰彇鍒板績璺充俊鎭紝鍒ゅ畾缁堢绂荤嚎锛岃涪鍑鸿繛鎺�------------{}-{}", deTime, session.getAddress(), session.getPort());
+
+            session.destroy();
+        }
+
+        return null;
+    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java
new file mode 100644
index 0000000..a358996
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java
@@ -0,0 +1,88 @@
+package com.ld.igds.protocol.bhzn.verb.server;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.ld.igds.protocol.bhzn.verb.analysis.AnalysisService;
+import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
+import com.ld.igds.protocol.bhzn.verb.msg.ReMessageBuilder;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.SpringUtil;
+import com.ld.io.api.IoMsgConsumer;
+import com.ld.io.api.IoSession;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import static com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils.CHARSET;
+
+/**
+ *
+ */
+@Slf4j
+@Service
+public class BhznVerbMessageConsumer implements IoMsgConsumer {
+
+
+    @Autowired
+    private AnalysisService analysisService;
+
+    /**
+     * 澶勭悊娑堟伅
+     *
+     * @param session
+     * @param bytes
+     */
+    @Override
+    public void consume(IoSession session, byte[] bytes) {
+        if (null == bytes) {
+            log.error("Reply bytes is null");
+            return;
+        }
+        //娣诲姞淇℃伅蹇冭烦鏍囪
+        BhznVerbServerUtils.addHeartBeat(session);
+        IoMessage reMessage = null;
+        try {
+            String message = new String(bytes, CHARSET);
+            message = message.substring(message.indexOf(BhznVerbServerUtils.MSG_START1) + BhznVerbServerUtils.MSG_START1.length());
+            log.info("銆�"+session.getAddress()+"銆戞帶鍒舵煖------>>>>骞冲彴锛�"+message);
+            reMessage = JSON.parseObject(message, IoMessage.class);
+            JSONObject jsonObject = JSON.parseObject(message);
+            reMessage.setContentStr(jsonObject.getString("content"));
+            if (StringUtils.isEmpty(reMessage.getSn()) ||
+                    reMessage.getStNum()== null ||
+                    reMessage.getCmd() == null) {
+                log.error("鎺у埗鏌�------>>>>骞冲彴锛氭姤鏂囦俊鎭笉瀹屾暣锛屼笉鍋氳В鏋�-IP={}锛宲ort={}锛宮sg={}", session.getAddress(), session.getPort(), message);
+                return;
+            }
+
+            //鏍规嵁SN鑾峰彇缁勭粐缂栫爜
+            String companyId = ContextUtil.getCompanyIdBySn(reMessage.getSn());
+            if (null == companyId) {
+                log.error("鎺у埗鏌�------>>>>骞冲彴锛氭姤鏂囦俊鎭笉瀹屾暣锛屽綋鍓嶅垎鏈虹郴缁熸湭娉ㄥ唽锛屼笉鍋氳В鏋�-IP={}锛宲ort={}锛宮sg={}", session.getAddress(), session.getPort(), message);
+                return;
+            }
+
+            reMessage.setCompanyId(companyId);
+            reMessage.setIp(session.getAddress());
+            reMessage.setPort(session.getPort());
+            reMessage.setStrMsg(message);
+            session.setCompanyId(companyId);
+
+            log.info("鎺у埗鏌�------>>>>骞冲彴锛欼P={}锛孭ORT={}锛宮essage={}", reMessage.getIp(), reMessage.getPort(), message);
+
+        } catch (Exception e) {
+            log.error("鎺у埗鏌�------>>>>骞冲彴锛氭敹鍒版姤鏂囪В鏋愬紓甯革細{}" , e.getMessage());
+            log.error(e.getMessage(),e);
+            e.printStackTrace();
+        }
+
+        //璋冪敤瑙f瀽鎺ュ彛寮�濮嬭В鏋�
+        if (null == analysisService) {
+            analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID);
+        }
+        analysisService.analysis(reMessage);
+    }
+}
\ No newline at end of file
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java
new file mode 100644
index 0000000..2188f0c
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java
@@ -0,0 +1,118 @@
+package com.ld.igds.protocol.bhzn.verb.server;
+
+import com.ld.io.api.*;
+import com.ld.io.netty.NettyServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Desc: 閭︽捣鏅鸿兘绾伯鎯呭崗璁�
+ * @author: Andy
+ * @update-time: 2023/5/11
+ */
+@Slf4j
+@Service
+public class BhznVerbServerEngine {
+
+    public static final Integer PORT = 9310;
+
+    @Autowired
+    private BhznVerbMessageConsumer defaultMessageConsumer;
+    @Autowired
+    private BhznVerbSessionListener defaultSessionListener;
+    // 蹇冭烦鎻愪緵
+    private static HeartbeatProvider heartbeatProvider = new BhznVerbHeartbeatImpl();
+
+    private IoSessionQuery sessionQuery;
+
+    public void start(Integer port) {
+        IoServerOption ioServerOption = new IoServerOption();
+
+        if (null != port) {
+            ioServerOption.setPort(port);
+        } else {
+            ioServerOption.setPort(PORT);
+        }
+
+        //纭缁撳熬鏍囧織
+        ioServerOption.setDelimiter(BhznVerbServerUtils.MSG_END.getBytes());
+
+        // 閰嶇疆绯荤粺蹇冭烦闂撮殧
+        ioServerOption.setReaderIdleTime(5 * 60);
+
+        NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider);
+        ioServer.startup();
+
+        sessionQuery = ioServer.getSessionQuery();
+
+
+        log.info("* ");
+        log.info("* ========================");
+        log.info("* ");
+        log.info("* [VERB-SERVER锛欱HZN_VERB,PORT={}]", PORT);
+        log.info("* ");
+        log.info("* ========================");
+        log.info("* ");
+
+        System.out.println("* ========================");
+        System.out.println("* ");
+        System.out.println("* [VERB-SERVER锛欱HZN_VERB,PORT={}]" + port);
+        System.out.println("* ");
+        System.out.println("* ========================");
+    }
+
+    public IoSessionQuery getSessionQuery() {
+        return sessionQuery;
+    }
+
+    /**
+     * 鍙戦�佷俊鎭�
+     *
+     * @param ip
+     * @param port
+     * @param msg
+     * @return
+     */
+    public InvokeResult push(String ip, int port, byte[] msg) {
+        IoSessionQuery sessionFactory = getSessionQuery();
+        List<IoSession> sessions = sessionFactory.getAllSession();
+        IoSession session = null;
+        for (IoSession ioSession : sessions) {
+            if (BhznVerbServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) {
+                session = ioSession;
+                break;
+            }
+        }
+        if (null == session) {
+            return InvokeResult.CHANNEL_CLOSED;
+        }
+        return session.invoke(msg);
+    }
+
+
+//    public InvokeResult push(String ip, int port, String hexStr) {
+//
+//        byte[] msg = BytesUtil.hexStrToBytes(hexStr);
+//
+//        IoSessionQuery sessionFactory = getSessionQuery();
+//        List<IoSession> sessions = sessionFactory.getAllSession();
+//        IoSession session = null;
+//        for (IoSession ioSession : sessions) {
+//            if (BhznGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) {
+//                session = ioSession;
+//                break;
+//            }
+//        }
+//
+//        if (null == session) {
+//            return InvokeResult.CHANNEL_CLOSED;
+//        }
+//        return session.invoke(msg);
+//    }
+
+
+
+}
\ No newline at end of file
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java
new file mode 100644
index 0000000..d72ee37
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java
@@ -0,0 +1,127 @@
+package com.ld.igds.protocol.bhzn.verb.server;
+
+
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.ContextUtil;
+import com.ld.io.api.IoSession;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 宸ュ叿绫�
+ *
+ * @author vince
+ */
+public class BhznVerbServerUtils {
+
+
+    /**
+     * 璁惧鐘舵�佽繑鍥炵殑缁撴灉 KEY= serId + "_STATUS_" + deviceId value = 缁撴灉鐘舵��
+     */
+    private static Map<String, String> contextStatusMap = new HashMap<>();
+
+
+    /**
+     * 璁惧瑙f瀽鍚庣殑瑁呮硶瀛樻斁
+     *
+     * @param serId
+     * @param passcode 璁惧閫氶亾ID
+     * @param status
+     */
+    public static void add2StatusMap(String companyId, String serId, String passcode, String status) {
+        contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, passcode), status);
+    }
+    public static void add2StatusMap(String companyId, String serId, int passcode, String status) {
+        contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, passcode), status);
+    }
+    public static Map<String, String> getStatusMap() {
+        return contextStatusMap;
+    }
+    /**
+     * 璁板綍姣忎釜杩炴帴鐨勬渶鍚庝竴娆′俊鎭椂闂� key = 杩炴帴鐨凨YE锛宒ata =褰撳墠鏃堕棿鎴�
+     */
+    public static Map<String, Long> contextMapHeart = new HashMap<>();
+
+    public static Map<String, IoSession> contextIoSession = new HashMap<>();
+
+
+    public static int HEART_BEAT_TIME = 30;//蹇冭烦闂撮殧鏃堕棿
+
+
+    public static String MSG_START = "3C42485A4E3E";//<BHZN>
+    public static String MSG_START1 = "<BHZN>";//<BHZN>
+    public static String MSG_START2 = "AA";
+    public static String MSG_END = "<END>";//<END>
+    public static String MSG_END_16 = "3C454E443E";//<END>
+    public static final String CHARSET = "UTF-8";
+
+
+    /**
+     * 閽堝鏃犵嚎绮儏涓绘満鐨勯粯璁D閰嶇疆
+     */
+    public static String DEFAULT_MAC_ID = "53681";
+
+    public static String FUNCTION_ID_00 = "00";
+    public static String FUNCTION_ID_F1 = "F1";
+    public static String FUNCTION_ID_F2 = "F2";
+    public static String FUNCTION_ID_83 = "83";
+    public static String FUNCTION_ID_93 = "93";
+    public static String FUNCTION_ID_92 = "92";
+
+
+    /**
+     * 鐢熸垚TCP杩炴帴鐨凨EY
+     *
+     * @param ip
+     * @param port
+     * @return
+     */
+    public static String getServerKey(String ip, Integer port) {
+        return ip + ":" + port;
+    }
+
+
+    /**
+     * 娣诲姞鏈�鏂板績璺虫椂闂存埑
+     *
+     * @param session
+     */
+    public static void addHeartBeat(IoSession session) {
+        contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis());
+    }
+
+    public static Long getHearBeat(IoSession session) {
+        return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort()));
+    }
+
+
+    /**
+     * 璁$畻鏍¢獙
+     *
+     * @param content
+     * @return
+     */
+    public static String getCheck(String content) {
+        int start = BhznVerbServerUtils.MSG_START.length() + BhznVerbServerUtils.MSG_START2.length();
+        content = content.substring(start);
+        int sum = 0;
+        String hex;
+        for (int i = 0; i < content.length() / 2; i++) {
+            hex = content.substring(i * 2, i * 2 + 2);
+            sum += BytesUtil.hexToInt(hex);
+        }
+        String hexSum = BytesUtil.intToHexStr(sum);
+        int check = BytesUtil.hexToInt(hexSum.substring(hexSum.length() - 2));
+
+        return BytesUtil.intToHexStr(256 - check).substring(2);
+    }
+
+//    public static void addSession(IoSession session) {
+//        contextIoSession.put(DEFAULT_MAC_ID, session);
+//    }
+//
+//    public static IoSession getSession() {
+//        return contextIoSession.get(DEFAULT_MAC_ID);
+//    }
+}
diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java
new file mode 100644
index 0000000..51928a7
--- /dev/null
+++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java
@@ -0,0 +1,65 @@
+package com.ld.igds.protocol.bhzn.verb.server;
+
+import com.ld.igds.common.CoreSerService;
+import com.ld.io.api.IoSession;
+import com.ld.io.api.IoSessionListener;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ */
+@Slf4j
+@Service
+public class BhznVerbSessionListener implements IoSessionListener {
+
+    @Autowired
+    private CoreSerService coreSerService;
+
+    /**
+     * 璁惧鍒涘缓鍦ㄧ嚎锛岄渶瑕佹敞鎰忓綋鍓嶄娇鐢ㄤ富鏈烘ā寮忥紝涓绘満涓婄嚎榛樿鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄤ笂绾�
+     *
+     * @param session
+     */
+    @Override
+    public void onCreate(IoSession session) {
+
+//        //娣诲姞鍒板唴瀛�
+//        BhznVerbServerUtils.addSession(session);
+
+        log.info("++++鏂板缓杩炴帴++++-IP={}锛孭ORT={}", session.getAddress(), session.getPort());
+
+        // 娣诲姞鑷畾涔変笟鍔D
+        session.setBusinessKey(BhznVerbServerUtils.getServerKey(session.getAddress(), session.getPort()));
+
+        //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶�
+       // DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID);
+
+        //if (null == deviceSer) return;
+
+        //coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y);
+        //鏇存柊缂撳瓨
+       // coreSerService.refreshCache(deviceSer.getCompanyId());
+    }
+
+    /**
+     * 娉ㄦ剰锛屽綋鍓嶉噰鐢ㄤ富鏈烘ā寮忥紝涓绘満绂荤嚎鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄧ绾�
+     *
+     * @param session
+     */
+    @Override
+    public void onDestroy(IoSession session) {
+        log.info("----杩炴帴鏂紑-----IP={}锛孭ORT={}", session.getAddress(), session.getPort());
+
+//        //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶�
+//        DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID);
+//
+//        if (null == deviceSer) return;
+
+        //鐢变簬璁惧鎺夌嚎鍚庤嚜鍔ㄨ皟鏁�
+//        coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_N);
+//        //鏇存柊缂撳瓨
+//        coreSerService.refreshCache(deviceSer.getCompanyId());
+    }
+}
diff --git a/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java b/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java
index 30e1078..26e600e 100644
--- a/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java
+++ b/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java
@@ -169,7 +169,7 @@
 	public static void main(String[] args) {
 
 		int  i = calcCrc16(BytesUtil.hexStrToBytes("01050046000001"));
-
-		System.out.println(BytesUtil.intToHexStr(i));
+		String s = "<BHZN>";
+		System.out.println(s.length());
 	}
 }
\ No newline at end of file
diff --git a/igds-web/src/main/resources/static/img/aerial-5324_001.png b/igds-web/src/main/resources/static/img/aerial-5324_001.png
new file mode 100644
index 0000000..04cddbd
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/aerial-5324_001.png
Binary files differ
diff --git a/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png b/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png
new file mode 100644
index 0000000..8fa743b
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png
Binary files differ
diff --git a/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png b/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png
new file mode 100644
index 0000000..8fa743b
--- /dev/null
+++ b/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png
Binary files differ
diff --git a/igds-web/src/main/resources/verb-conf.properties b/igds-web/src/main/resources/verb-conf.properties
index 1603509..2bc21bb 100644
--- a/igds-web/src/main/resources/verb-conf.properties
+++ b/igds-web/src/main/resources/verb-conf.properties
@@ -147,3 +147,30 @@
 ## 5322_001 广东徐闻
 verb.mapImg.5322_001.a=default_pfc_a.png
 verb.mapImg.5322_001.b=default_pfc_b.png
+
+
+## 5322_001 广东徐闻
+verb.mapImg.5324_001.a=default_pfc_a.png
+verb.mapImg.5324_001.b=default_pfc_b.png
+verb.mapImg.5324_1.a=pfc_a.png
+verb.mapImg.5324_1.b=pfc_b.png
+verb.mapImg.5324_2.a=pfc_a.png
+verb.mapImg.5324_2.b=pfc_b.png
+verb.mapImg.5324_3.a=pfc_a.png
+verb.mapImg.5324_3.b=pfc_b.png
+verb.mapImg.5324_4.a=pfc_a.png
+verb.mapImg.5324_4.b=pfc_b.png
+verb.mapImg.5324_5.a=pfc_a.png
+verb.mapImg.5324_5.b=pfc_b.png
+verb.mapImg.5324_6.a=pfc_a.png
+verb.mapImg.5324_6.b=pfc_b.png
+verb.mapImg.5324_7.a=pfc_a.png
+verb.mapImg.5324_7.b=pfc_b.png
+verb.mapImg.5324_8.a=pfc_a.png
+verb.mapImg.5324_8.b=pfc_b.png
+verb.mapImg.5324_9.a=pfc_a.png
+verb.mapImg.5324_9.b=pfc_b.png
+verb.mapImg.5324_10.a=pfc_a.png
+verb.mapImg.5324_10.b=pfc_b.png
+verb.mapImg.5324_11.a=pfc_a.png
+verb.mapImg.5324_11.b=pfc_b.png
\ No newline at end of file

--
Gitblit v1.9.3