From 664bb4d0b7799328667ffc47e39da711a77ddbfa Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期一, 28 八月 2023 12:05:33 +0800
Subject: [PATCH] 更新MODBUS-TCP协议,调整配置2

---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java          |   13 +
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java |   51 ++---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java                      |   80 +++++++--
 igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java                    |   44 +---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusGasResult.java             |   31 +++
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java     |  142 +++++++++++++++++
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusTcp.java                   |    9 
 igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbus.view.xml                             |   26 +--
 igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbusPR.java                               |   11 -
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java                       |   19 +
 10 files changed, 307 insertions(+), 119 deletions(-)

diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbus.view.xml b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbus.view.xml
index 50f26ee..12ec7d6 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbus.view.xml
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbus.view.xml
@@ -118,11 +118,11 @@
     <DataType name="dtGas">
       <Property name="creationType">com.ld.igds.models.GasModbus</Property>
       <PropertyDef name="id">
-        <Property/>
+        <Property></Property>
         <Property name="label">ID</Property>
       </PropertyDef>
       <PropertyDef name="depotId">
-        <Property/>
+        <Property></Property>
         <Property name="label">鎵�灞炰粨搴�</Property>
       </PropertyDef>
       <PropertyDef name="passcode">
@@ -130,27 +130,27 @@
         <Property name="label">閫氶亾</Property>
       </PropertyDef>
       <PropertyDef name="co2">
-        <Property/>
+        <Property></Property>
         <Property name="label">浜屾哀鍖栫⒊</Property>
       </PropertyDef>
       <PropertyDef name="co2Fun">
-        <Property/>
+        <Property></Property>
         <Property name="label">鍔熻兘鍙�</Property>
       </PropertyDef>
       <PropertyDef name="o2">
-        <Property/>
+        <Property></Property>
         <Property name="label">姘ф皵</Property>
       </PropertyDef>
       <PropertyDef name="o2Fun">
-        <Property/>
+        <Property></Property>
         <Property name="label">鍔熻兘鍙�</Property>
       </PropertyDef>
       <PropertyDef name="ph3">
-        <Property/>
+        <Property></Property>
         <Property name="label">纾峰寲姘�</Property>
       </PropertyDef>
       <PropertyDef name="ph3Fun">
-        <Property/>
+        <Property></Property>
         <Property name="label">鍔熻兘鍙�</Property>
       </PropertyDef>
     </DataType>
@@ -199,12 +199,6 @@
         <Property name="caption">鍒犻櫎閫氶亾</Property>
         <Property name="exClassName">btn-warn</Property>
         <Property name="iconClass">fa fa-minus</Property>
-      </Button>
-      <Button layoutConstraint="left">
-        <Property name="caption">鍒锋柊缂撳瓨</Property>
-        <Property name="exClassName">btn-default</Property>
-        <Property name="iconClass">fa fa-refresh</Property>
-        <Property name="action">ajaxFlushCache</Property>
       </Button>
     </Container>
     <Container layout="regionPadding:10" layoutConstraint="center">
@@ -364,10 +358,6 @@
     <AjaxAction id="ajaxDel">
       <Property name="service">gasModbusPR#delData</Property>
       <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property>
-    </AjaxAction>
-    <AjaxAction id="ajaxFlushCache">
-      <Property name="service">gasModbusPR#flushCache</Property>
-      <Property name="successMessage">缂撳瓨鏇存柊鎴愬姛</Property>
     </AjaxAction>
   </View>
 </ViewConfig>
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbusPR.java b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbusPR.java
index 266c5ac..05d89ff 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbusPR.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/GasModbusPR.java
@@ -70,17 +70,6 @@
     }
 
     /**
-     * gasModbusPR#flushCache
-     *
-     * @return
-     */
-    @Expose
-    public void flushCache() {
-        String companyId = ContextUtil.getCompanyId();
-        modbusService.flushCacheGas(companyId);
-    }
-
-    /**
      * deviceModbusPR#delData
      *
      * @return
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java
index 7652715..0f1ff64 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java
@@ -18,7 +18,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 
 @Component
@@ -49,13 +48,26 @@
         for (DeviceModbus hibDevice : listAll) {
             entityDevice = new DeviceModbus();
             BeanUtils.copyProperties(hibDevice, entityDevice);
-            key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_DEVICE_CACHE, hibDevice.getDeviceCode());
+
+            if (null == hibDevice.getBizType()) hibDevice.setBizType(BizType.AREATION.getCode());
+            if (BizType.AREATION.getCode().equals(hibDevice.getBizType())) {
+                key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_DEVICE_CACHE, hibDevice.getDeviceCode());
+            } else {
+                key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_DEVICE_CACHE, hibDevice.getDeviceCode(), hibDevice.getBizType());
+            }
             redisUtil.set(key, entityDevice);
         }
     }
 
     public DeviceModbus getCacheDeviceModbus(String companyId, String deviceCode) {
+        return getCacheDeviceModbus(companyId, deviceCode, null);
+    }
+
+    public DeviceModbus getCacheDeviceModbus(String companyId, String deviceCode, String bizType) {
         String key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_DEVICE_CACHE, deviceCode);
+        if (null != bizType && !BizType.AREATION.equals(bizType)) {
+            key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_DEVICE_CACHE, deviceCode, bizType);
+        }
         return (DeviceModbus) redisUtil.get(key);
     }
 
@@ -194,32 +206,6 @@
                 session.update(gas);
             }
         }
-        flushCacheGas(null);
-    }
-
-    public void flushCacheGas(String companyId) {
-
-        List<GasModbus> listAll = this.listGasModBus(null);
-
-        if (null == listAll || listAll.isEmpty()) return;
-
-        if (null == companyId) companyId = ContextUtil.getDefaultCompanyId();
-
-
-        Map<String, List<GasModbus>> collect = listAll.stream().collect(Collectors.groupingBy(GasModbus::getDepotId));
-
-        String key;
-        for (String depotId : collect.keySet()) {
-            key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_GAS_CACHE_LIST, depotId);
-            redisUtil.set(key, key);
-        }
-    }
-
-
-    public List<GasModbus> getCacheGasModbus(String companyId, String depotId) {
-        if (null == companyId) companyId = ContextUtil.getDefaultCompanyId();
-        String key = RedisConst.buildKey(companyId, ModbusConstant.MODBUS_GAS_CACHE_LIST, depotId);
-        return (List<GasModbus>) redisUtil.get(key);
     }
 
 
@@ -227,8 +213,6 @@
         Session session = this.getSessionFactory().openSession();
         try {
             session.delete(data);
-
-            flushCacheGas(null);
         } catch (Exception e) {
         } finally {
             session.flush();
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
index b6395c0..56a5d85 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
@@ -2,6 +2,7 @@
 
 import com.serotonin.modbus4j.ModbusFactory;
 import com.serotonin.modbus4j.ModbusMaster;
+import com.serotonin.modbus4j.code.DataType;
 import com.serotonin.modbus4j.exception.ErrorResponseException;
 import com.serotonin.modbus4j.exception.ModbusInitException;
 import com.serotonin.modbus4j.exception.ModbusTransportException;
@@ -44,7 +45,7 @@
      *
      * @return
      */
-    public static ModbusMaster getMaster(String ip, int port) throws ModbusInitException {
+    public static ModbusMaster getMaster(String ip, int port) throws ModbusInitException, InterruptedException {
         String key = ip;
         ModbusMaster modbusMaster = masterMap.get(key);
         if (modbusMaster == null || !modbusMaster.isConnected()) {
@@ -53,7 +54,12 @@
             ipParameters.setPort(port);
             modbusMaster = modbusFactory.createTcpMaster(ipParameters, true);
             modbusMaster.init();
+
+            //鍒濆鍖栦箣鍚庣瓑寰咃紝閬垮厤鍑虹幇杩炴帴鏈垱寤�
+            Thread.sleep(2000);
+
             masterMap.put(key, modbusMaster);
+
             return modbusMaster;
         }
         return modbusMaster;
@@ -69,7 +75,7 @@
      * @throws ModbusTransportException
      * @throws ErrorResponseException
      */
-    public static Boolean readCoilStatus(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException {
+    public static Boolean readCoilStatus(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
         BaseLocator<Boolean> coilStatus = BaseLocator.coilStatus(slaveId, offset);
         Boolean res = getMaster(ip, port).getValue(coilStatus);
         return res;
@@ -87,7 +93,7 @@
     public static Boolean readInputStatus(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
         BaseLocator<Boolean> inputStatus = BaseLocator.inputStatus(slaveId, offset);
 
-        Thread.sleep(3000);
+        // Thread.sleep(3000);
         Boolean res = getMaster(ip, port).getValue(inputStatus);
         return res;
     }
@@ -102,10 +108,15 @@
      * @throws ModbusTransportException
      * @throws ErrorResponseException
      */
-    public static Number readHoldingRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException {
+    public static Number readHoldingRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
         BaseLocator<Number> holdingRegister = BaseLocator.holdingRegister(slaveId, offset, dataType);
         Number value = getMaster(ip, port).getValue(holdingRegister);
         return value;
+    }
+
+    public static Number readHoldingRegister(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        int dataType = DataType.TWO_BYTE_INT_SIGNED;
+        return readHoldingRegister(ip, port, offset, dataType);
     }
 
     /**
@@ -118,10 +129,24 @@
      * @throws ModbusTransportException
      * @throws ErrorResponseException
      */
-    public static Number readInputRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException {
+    public static Number readInputRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
         BaseLocator<Number> inputRegister = BaseLocator.inputRegister(slaveId, offset, dataType);
         Number value = getMaster(ip, port).getValue(inputRegister);
         return value;
+    }
+
+    /**
+     * 璇昏緭鍏ュ瘎瀛樺櫒鏁版嵁   0x04
+     *
+     * @param offset
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Number readInputRegister(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        int dataType = DataType.TWO_BYTE_INT_SIGNED;
+        return readInputRegister(ip, port, offset, dataType);
     }
 
 
@@ -135,21 +160,38 @@
      * @throws ModbusInitException
      */
     public static Boolean writeCoilStatus(String ip, int port, int offset, boolean status) throws ModbusTransportException, ModbusInitException, InterruptedException {
-//        boolean coilValue = status;
-//        WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, coilValue);
-//        WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest);
-//        return !coilResponse.isException();
-
         WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, status);
-        Thread.sleep(3000);
         WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest);
-
-        //鍙戦�佹竻闄ゅ懡浠�
-        WriteCoilRequest coilRequest1 = new WriteCoilRequest(slaveId, offset, !status);
-        getMaster(ip, port).send(coilRequest1);
-
         return !coilResponse.isException();
     }
+
+
+    /**
+     * 鍐欑嚎鍦堝紑鍏崇姸鎬佹暟鎹�  0x05
+     *
+     * @param offset
+     * @param status
+     * @return
+     * @throws ModbusTransportException
+     * @throws ModbusInitException
+
+    public static Boolean writeCoilStatus(String ip, int port, int offset, boolean status) throws ModbusTransportException, ModbusInitException, InterruptedException {
+    //        boolean coilValue = status;
+    //        WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, coilValue);
+    //        WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest);
+    //        return !coilResponse.isException();
+
+    WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, status);
+    // Thread.sleep(3000);
+    WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest);
+
+    //鍙戦�佹竻闄ゅ懡浠�
+    WriteCoilRequest coilRequest1 = new WriteCoilRequest(slaveId, offset, !status);
+    getMaster(ip, port).send(coilRequest1);
+
+    return !coilResponse.isException();
+    }
+     */
 
 
     /**
@@ -161,7 +203,7 @@
      * @throws ModbusTransportException
      * @throws ModbusInitException
      */
-    public static Boolean writeRegister(String ip, int port, int offset, int value) throws ModbusTransportException, ModbusInitException {
+    public static Boolean writeRegister(String ip, int port, int offset, int value) throws ModbusTransportException, ModbusInitException, InterruptedException {
         WriteRegisterRequest registerRequest = new WriteRegisterRequest(slaveId, offset, value);
         WriteRegisterResponse registerResponse = (WriteRegisterResponse) getMaster(ip, port).send(registerRequest);
         return !registerResponse.isException();
@@ -177,7 +219,7 @@
      * @throws ModbusTransportException
      * @throws ModbusInitException
      */
-    public static Boolean writeCoils(String ip, int port, int offset, boolean[] booleans) throws ModbusTransportException, ModbusInitException {
+    public static Boolean writeCoils(String ip, int port, int offset, boolean[] booleans) throws ModbusTransportException, ModbusInitException, InterruptedException {
         WriteCoilsRequest writeCoils = new WriteCoilsRequest(slaveId, offset, booleans);
         WriteCoilsResponse coilsResponse = (WriteCoilsResponse) getMaster(ip, port).send(writeCoils);
         return !coilsResponse.isException();
@@ -193,7 +235,7 @@
      * @throws ModbusTransportException
      * @throws ModbusInitException
      */
-    public static Boolean writeRegisters(String ip, int port, int offset, short[] nums) throws ModbusTransportException, ModbusInitException {
+    public static Boolean writeRegisters(String ip, int port, int offset, short[] nums) throws ModbusTransportException, ModbusInitException, InterruptedException {
         WriteRegistersRequest writeRegisters = new WriteRegistersRequest(slaveId, offset, nums);
         WriteRegistersResponse registersResponse = (WriteRegistersResponse) getMaster(ip, port).send(writeRegisters);
         return !registersResponse.isException();
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java
index b31119c..84352e8 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java
@@ -1,5 +1,6 @@
 package com.ld.igds.protocol.modbus;
 
+import com.ld.igds.constant.Constant;
 import com.ld.igds.util.ContextUtil;
 
 import java.util.HashMap;
@@ -10,11 +11,6 @@
  */
 public class ServerUtil {
 
-
-    /**
-     * 鐢ㄦ潵缂撳瓨锛孴CP璁惧鎵ц鏃堕棿璁板綍key = TCP鍞竴鏍囧織锛寁alue = 褰撳墠鎵ц鏃堕棿
-     */
-    public static Map<String, Long> contextExeModbusTcp = new HashMap<>();
 
 
     /**
@@ -38,4 +34,17 @@
         return contextStatusMap;
     }
 
+
+
+
+
+
+    public static int getAddrExe(String temp) {
+        if (Constant.YN_N.equals(temp)) return 65535;
+        if (temp.length() > 4) {
+            temp = temp.substring(temp.length() - 4);
+        }
+        return Integer.valueOf(temp) - 1;
+    }
+
 }
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java
index 07211d3..e069867 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java
@@ -3,13 +3,16 @@
 import com.ld.igds.common.CoreDeviceService;
 import com.ld.igds.io.constant.OrderRespEnum;
 import com.ld.igds.io.notify.NotifyWebInvoker;
+import com.ld.igds.io.request.CheckGasRequest;
 import com.ld.igds.io.request.DeviceControlRequest;
 import com.ld.igds.protocol.modbus.ServerUtil;
+import com.ld.igds.protocol.modbus.data.ModbusGasResult;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 瑙f瀽
@@ -46,4 +49,14 @@
             log.error("---MODBUS-TCP-鐘舵�佽В鏋愬紓甯竰}", e);
         }
     }
+
+
+    /**
+     * 瑙f瀽姘斾綋妫�娴嬬粨鏋�
+     *
+     * @param request
+     * @param results
+     */
+    public void analysisGas(CheckGasRequest request, List<ModbusGasResult> results) {
+    }
 }
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
index 9d6730e..2fe10f4 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java
@@ -74,7 +74,7 @@
                 modbusTcp = new ModbusTcp(deviceModbus);
                 modbusTcp.setIp(request.getIp());
                 modbusTcp.setPort(request.getPort());
-                modbusTcp.setDeviceCode(exeDevice.getPassCode() + "");
+                modbusTcp.setBizCode(exeDevice.getPassCode() + "");
                 modbusTcp.setSerId(request.getSerId());
                 modbusTcp.setCompanyId(request.getCompanyId());
 
@@ -89,7 +89,7 @@
 
                 if (StringUtils.isBlank(exeDevice.getLink()) || "null".equals(exeDevice.getLink())) {
                     //鏍规嵁璁惧鐩爣鐘舵�侊紝璋冪敤MODBUS鎵ц
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
                     doWriteExe(modbusTcp, exeDevice.getTargetStatus());
 
                     continue;
@@ -101,7 +101,7 @@
                 modbusTcpLink = new ModbusTcp(deviceModbus);
                 modbusTcpLink.setIp(request.getIp());
                 modbusTcpLink.setPort(request.getPort());
-                modbusTcpLink.setDeviceCode(exeDevice.getLink());
+                modbusTcpLink.setBizCode(exeDevice.getLink());
                 modbusTcpLink.setSerId(request.getSerId());
                 modbusTcpLink.setCompanyId(request.getCompanyId());
 
@@ -111,7 +111,7 @@
 
                     //鍏堝紑绐楀彛
                     temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, DeviceStatus.OPEN.getCode());
 
@@ -120,7 +120,7 @@
 
                     //鍐嶅紑椋庢満
                     temp = modbusTcpLink.getDeviceModbus().getOpen();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcpLink, DeviceStatus.OPEN.getCode());
                 }
@@ -128,7 +128,7 @@
                 //濡傛灉鍏抽鏈�
                 if (DeviceStatus.F_CLOSE.getCode().equals(exeDevice.getTargetStatus())) {
                     temp = modbusTcpLink.getDeviceModbus().getStop();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcpLink, DeviceStatus.CLOSE.getCode());
                 }
@@ -137,7 +137,7 @@
                 //濡傛灉寮�绐�
                 if (DeviceStatus.W_OPEN.getCode().equals(exeDevice.getTargetStatus())) {
                     temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, exeDevice.getTargetStatus());
                 }
@@ -147,14 +147,14 @@
 
                     //鍏堝叧椋庢満
                     temp = modbusTcpLink.getDeviceModbus().getStop();
-                    modbusTcpLink.setAddrExe(this.getAddrExe(temp));
+                    modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(temp));
                     doWriteExe(modbusTcpLink, DeviceStatus.CLOSE.getCode());
 
                     Thread.sleep(300);
 
                     //鍦ㄥ叧绐楁埛
                     temp = modbusTcp.getDeviceModbus().getOpen();
-                    modbusTcp.setAddrExe(this.getAddrExe(temp));
+                    modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
 
                     doWriteExe(modbusTcp, DeviceStatus.CLOSE.getCode());
                 }
@@ -168,19 +168,14 @@
         return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS);
     }
 
-    private int getAddrExe(String temp) {
-        if (Constant.YN_N.equals(temp)) return 65535;
-        if (temp.length() > 4) {
-            temp = temp.substring(temp.length() - 4);
-        }
-        return Integer.valueOf(temp) - 1;
-    }
-
     private void doWriteExe(ModbusTcp modbusTcp, String targetStatus) throws Exception {
         boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true);
         if (exeResult) {
-            log.debug("--------鍐欏叆鍊�---{}-{}-{}", modbusTcp.getSerId(), modbusTcp.getDeviceCode(), targetStatus);
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), targetStatus);
+            //鏍规嵁Modbus-TCP锛屽皢鍐欒繃鐨勫�硷紝鎭㈠鍘熸潵鐨勫��
+            ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false);
+            
+            log.debug("--------鍐欏叆鍊�---{}-{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), targetStatus);
         }
     }
 
@@ -214,7 +209,7 @@
                 modbusTcp = new ModbusTcp(deviceModbus);
                 modbusTcp.setIp(request.getIp());
                 modbusTcp.setPort(request.getPort());
-                modbusTcp.setDeviceCode(device.getPassCode() + "");
+                modbusTcp.setBizCode(device.getPassCode() + "");
                 modbusTcp.setSerId(device.getSerId());
                 modbusTcp.setCompanyId(device.getCompanyId());
 
@@ -232,10 +227,10 @@
                 modbusTcpLink.setIp(request.getIp());
                 modbusTcpLink.setPort(request.getPort());
                 modbusTcpLink.setSerId(device.getSerId());
-                modbusTcpLink.setDeviceCode(device.getLink());
+                modbusTcpLink.setBizCode(device.getLink());
                 modbusTcpLink.setCompanyId(device.getCompanyId());
 
-                modbusTcpLink.setAddrExe(this.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
+                modbusTcpLink.setAddrExe(ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd()));
 
                 doReadStatus(modbusTcpLink);
             }
@@ -260,22 +255,22 @@
 
         if (Constant.YN_N.equals(modbusTcp.getDeviceModbus().getOpen())) return;
 
-        int addrExe = getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd());
+        int addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getOpenEnd());
 
         boolean result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
-        log.debug("---------璇诲紑鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getDeviceCode(), addrExe, result);
+        log.debug("---------璇诲紑鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
 
         if (result) {
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), DeviceStatus.OPEN.getCode());
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.OPEN.getCode());
         }
 
 
-        addrExe = getAddrExe(modbusTcp.getDeviceModbus().getCloseEnd());
+        addrExe = ServerUtil.getAddrExe(modbusTcp.getDeviceModbus().getCloseEnd());
         result = ModbusUtil2.readInputStatus(modbusTcp.getIp(), modbusTcp.getPort(), addrExe);
-        log.debug("---------璇诲叧鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getDeviceCode(), addrExe, result);
+        log.debug("---------璇诲叧鍒颁綅鐘舵��------{}-{}-{}", modbusTcp.getBizCode(), addrExe, result);
 
         if (result) {
-            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getDeviceCode(), DeviceStatus.CLOSE.getCode());
+            ServerUtil.add2StatusMap(modbusTcp.getCompanyId(), modbusTcp.getSerId(), modbusTcp.getBizCode(), DeviceStatus.CLOSE.getCode());
         }
     }
 
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java
index 8862faa..f475b24 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java
@@ -1,10 +1,26 @@
 package com.ld.igds.protocol.modbus.command;
 
+import com.ld.igds.constant.BizType;
 import com.ld.igds.io.RemoteGasService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.constant.ProtocolEnum;
 import com.ld.igds.io.request.CheckGasRequest;
+import com.ld.igds.io.response.DeviceControlResponse;
 import com.ld.igds.io.response.GasResponse;
+import com.ld.igds.modbus.service.HModbusService;
+import com.ld.igds.models.DeviceModbus;
+import com.ld.igds.models.GasModbus;
+import com.ld.igds.protocol.modbus.ModbusUtil2;
+import com.ld.igds.protocol.modbus.ServerUtil;
+import com.ld.igds.protocol.modbus.data.ModbusGasResult;
+import com.ld.igds.protocol.modbus.data.ModbusTcp;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 褰撳墠鍗忚閽堝鏍囧噯Modbus-TCP鍗忚
@@ -19,23 +35,141 @@
 
     public static final String BEAN_ID = "modbus.remoteGasService";
 
+    @Resource
+    private HModbusService modbusService;
+    @Resource
+    private AnalysisService analysisService;
+
     @Override
     public String getProtocol() {
-        return null;
+        return ProtocolEnum.TCP_MODBUS.getCode();
     }
 
     @Override
     public GasResponse checkGas(CheckGasRequest request) {
-        return null;
+        String passCode = request.getDepotId();
+
+        try {
+            //鑾峰彇闇�瑕佹墽琛岀殑璁惧閰嶇疆
+            DeviceModbus deviceModbus = modbusService.getCacheDeviceModbus(request.getCompanyId(), passCode, BizType.GAS.getCode());
+
+            ModbusTcp modbusTcp = new ModbusTcp(deviceModbus);
+            modbusTcp.setIp(request.getIp());
+            modbusTcp.setPort(request.getPort());
+            modbusTcp.setBizCode(passCode);
+            modbusTcp.setSerId(request.getSerId());
+            modbusTcp.setCompanyId(request.getCompanyId());
+
+            modbusTcp.setAddrExe(ServerUtil.getAddrExe(deviceModbus.getOpen()));
+
+            boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true);
+            if (exeResult) {
+                //璋冪敤寮傛鑾峰彇缁撴灉
+                progressGasResult(request, modbusTcp);
+                log.debug("--------鍚姩娴嬫皵---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode());
+            }
+
+        } catch (Exception e) {
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庡彴鎵ц寮傚父锛�" + e.getLocalizedMessage());
+        }
+
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS);
+    }
+
+    /**
+     * 寮傛鎵ц杩涘害鏌ヨ
+     *
+     * @param modbusTcp
+     */
+    @Async
+    public void progressGasResult(CheckGasRequest request, ModbusTcp modbusTcp) {
+
+        log.debug("--------------寮傛鎵ц姘斾綋妫�娴嬭杩囪幏鍙�-------------");
+
+        try {
+            List<GasModbus> list = modbusService.listGasModBus(modbusTcp.getBizCode());
+
+            if (null == list || list.isEmpty()) {
+                log.error("------------鏇存柊姘斾綋妫�娴嬬粨鏋滆繘搴﹀け璐ワ紝娌℃湁鑾峰彇鍒版娴嬮�氶亾閰嶇疆淇℃伅-----{}", modbusTcp.getBizCode());
+                return;
+            }
+
+            //鏍规嵁閫氶亾鏁伴噺绾跨▼绛夊緟锛屾瘡涓�氶亾绛夊緟50绉�
+            Thread.sleep(list.size() * 50 * 1000);
+            log.debug("--------------绛夊緟鏃堕棿瀹屾垚锛屽紑濮嬭幏鍙栨娴嬬粨鏋�-------------{}", modbusTcp.getBizCode());
+
+            ModbusTcp modbusTcpTemp = modbusTcp;
+            List<ModbusGasResult> results = new ArrayList<>();
+            ModbusGasResult gasResult;
+            Number check;
+            for (GasModbus gasModbus : list) {
+                gasResult = new ModbusGasResult();
+                gasResult.setPasscode(gasModbus.getPasscode());
+
+                //浜屾哀鍖栫⒊
+                modbusTcpTemp.setAddrExe(ServerUtil.getAddrExe(gasModbus.getCo2()));
+                check = ModbusUtil2.readHoldingRegister(modbusTcpTemp.getIp(), modbusTcpTemp.getPort(), modbusTcpTemp.getAddrExe());
+                gasResult.setCo2(check);
+
+                //姘ф皵
+                modbusTcpTemp.setAddrExe(ServerUtil.getAddrExe(gasModbus.getO2()));
+                check = ModbusUtil2.readHoldingRegister(modbusTcpTemp.getIp(), modbusTcpTemp.getPort(), modbusTcpTemp.getAddrExe());
+                gasResult.setO2(check);
+
+                //纾峰寲姘�
+                modbusTcpTemp.setAddrExe(ServerUtil.getAddrExe(gasModbus.getPh3()));
+                check = ModbusUtil2.readHoldingRegister(modbusTcpTemp.getIp(), modbusTcpTemp.getPort(), modbusTcpTemp.getAddrExe());
+                gasResult.setPh3(check);
+
+                results.add(gasResult);
+            }
+
+
+            log.debug("----鑾峰彇鐨勬皵浣撴娴嬬粨鏋�---{}--{}", request.getDepotId(), results.toString());
+            //閫氱煡瑙f瀽
+            analysisService.analysisGas(request, results);
+
+        } catch (Exception e) {
+            log.error("------------鏇存柊姘斾綋妫�娴嬬粨鏋滆繘搴﹀け璐ワ紝鎵ц寮傚父-----{}--{}", modbusTcp.getBizCode(), e.getMessage());
+        }
+
     }
 
     @Override
     public GasResponse checkGasByPoint(CheckGasRequest request) {
-        return null;
+        return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "褰撳墠鎺у埗鏌滀笉鏀寔閫夋嫨鐐逛綅閲囬泦");
     }
 
     @Override
     public GasResponse stopCheckGas(CheckGasRequest request) {
-        return null;
+        String passCode = request.getDepotId();
+
+        try {
+            //鑾峰彇闇�瑕佹墽琛岀殑璁惧閰嶇疆
+            DeviceModbus deviceModbus = modbusService.getCacheDeviceModbus(request.getCompanyId(), passCode, BizType.GAS.getCode());
+
+            ModbusTcp modbusTcp = new ModbusTcp(deviceModbus);
+            modbusTcp.setIp(request.getIp());
+            modbusTcp.setPort(request.getPort());
+            modbusTcp.setBizCode(passCode);
+            modbusTcp.setSerId(request.getSerId());
+            modbusTcp.setCompanyId(request.getCompanyId());
+
+            modbusTcp.setAddrExe(ServerUtil.getAddrExe(deviceModbus.getStop()));
+
+            boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true);
+            if (exeResult) {
+                log.debug("--------鍏抽棴娴嬫皵---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode());
+
+                //閫氱煡寮傛缁撴潫缁撴灉閲囬泦
+            }
+
+        } catch (Exception e) {
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庡彴鎵ц寮傚父锛�" + e.getLocalizedMessage());
+        }
+
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS);
     }
+
+
 }
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusGasResult.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusGasResult.java
new file mode 100644
index 0000000..5285f72
--- /dev/null
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusGasResult.java
@@ -0,0 +1,31 @@
+package com.ld.igds.protocol.modbus.data;
+
+import lombok.Data;
+
+/**
+ * @Desc: 鐢ㄤ簬灏佽ModBUsTCP鐨勪俊鎭�
+ * @author: andy.jia
+ * @update-time: 2023/8/12 15:29
+ */
+@Data
+public class ModbusGasResult {
+
+    private int passcode;
+
+    private Number co2;
+
+    private Number o2;
+
+    private Number ph3;
+
+
+    @Override
+    public String toString() {
+        return "GasResult{" +
+                "passcode=" + passcode +
+                ", co2=" + co2 +
+                ", o2=" + o2 +
+                ", ph3=" + ph3 +
+                '}';
+    }
+}
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusTcp.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusTcp.java
index c69d629..f743c9d 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusTcp.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/data/ModbusTcp.java
@@ -13,8 +13,9 @@
 
 
     private String companyId;
-    
-    private String deviceCode;
+
+    //涓氬姟鐩稿叧缂栫爜
+    private String bizCode;
 
     private String serId;
 
@@ -34,9 +35,9 @@
         this.deviceModbus = deviceModbus;
     }
 
-    public ModbusTcp(String companyId, String deviceCode, String serId, String ip, int port, DeviceModbus deviceModbus) {
+    public ModbusTcp(String companyId, String bizCode, String serId, String ip, int port, DeviceModbus deviceModbus) {
         this.companyId = companyId;
-        this.deviceCode = deviceCode;
+        this.bizCode = bizCode;
         this.serId = serId;
         this.ip = ip;
         this.port = port;

--
Gitblit v1.9.3