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