From 7243e0b4bd9a267a633d2e481e17646509b6868d Mon Sep 17 00:00:00 2001
From: YYC <1833023622@qq.com>
Date: 星期四, 07 九月 2023 19:36:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java |  185 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 181 insertions(+), 4 deletions(-)

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..6918ae1 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,28 @@
 package com.ld.igds.protocol.modbus.command;
 
+import com.ld.igds.constant.BizType;
+import com.ld.igds.constant.RedisConst;
 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 com.ld.igds.util.RedisUtil;
 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 +37,182 @@
 
     public static final String BEAN_ID = "modbus.remoteGasService";
 
+    @Resource
+    private HModbusService modbusService;
+    @Resource
+    private AnalysisService analysisService;
+    @Resource
+    private RedisUtil redisUtil;
+
+
     @Override
     public String getProtocol() {
-        return null;
+        return ProtocolEnum.TCP_MODBUS.getCode();
     }
 
     @Override
     public GasResponse checkGas(CheckGasRequest request) {
-        return null;
+
+        boolean isRun = isRun(request);
+        if (isRun) {
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鎻愰啋锛氬綋鍓嶄粨姝e湪鎵ц妫�娴�");
+        }
+
+        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) {
+                addRun(request);
+                //璋冪敤寮傛鑾峰彇缁撴灉
+                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);
     }
+
+    private void addRun(CheckGasRequest request) {
+        String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId());
+
+        redisUtil.set(key, request, 6 * 60);
+    }
+
+    private void delRun(CheckGasRequest request) {
+        String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId());
+
+        redisUtil.del(key);
+    }
+
+    private boolean isRun(CheckGasRequest request) {
+        String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId());
+
+        Object obj = redisUtil.get(key);
+        if (null == obj) return false;
+
+        return true;
+    }
+
+    /**
+     * 寮傛鎵ц杩涘害鏌ヨ
+     *
+     * @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;
+            }
+
+            //鏍规嵁閫氶亾鏁伴噺绾跨▼绛夊緟锛屾瘡涓�氶亾绛夊緟60绉�
+            Thread.sleep(list.size() * 50 * 1000);
+            log.debug("--------------绛夊緟鏃堕棿瀹屾垚锛屽紑濮嬭幏鍙栨娴嬬粨鏋�-------------{}", modbusTcp.getBizCode());
+
+            boolean isRun = isRun(request);
+            if (!isRun) {
+                log.info("--------------褰撳墠浠撳簱妫�娴嬪凡缁忓仠姝紝鍙栨秷缁撴灉鏌ヨ-------------{}", modbusTcp.getBizCode());
+                return;
+            }
+
+            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);
+                log.debug("----閫氶亾{}锛孋o2={}锛孫2={}锛孭h3={}", gasModbus.getPasscode(), gasResult.getCo2(), gasResult.getO2(), gasResult.getPh3());
+                results.add(gasResult);
+            }
+
+            //鍒犻櫎杩愯鏍囪
+            delRun(request);
+
+            log.debug("----鑾峰彇鐨勬皵浣撴娴嬬粨鏋�---{}--{}", request.getDepotId(), results.toString());
+            //閫氱煡瑙f瀽
+            analysisService.analysisGas(request, results);
+        } catch (Exception e) {
+            log.error("------------鏇存柊姘斾綋妫�娴嬬粨鏋滆繘搴﹀け璐ワ紝鎵ц寮傚父-----{}--{}", modbusTcp.getBizCode(), e);
+        }
+
+    }
+
 
     @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());
+
+                //閫氱煡寮傛缁撴潫缁撴灉閲囬泦
+                delRun(request);
+            }
+
+        } catch (Exception e) {
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庡彴鎵ц寮傚父锛�" + e.getLocalizedMessage());
+        }
+
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS);
     }
+
+
 }

--
Gitblit v1.9.3