From 178c71496d5508dae69110f4d988cf128723d740 Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期三, 30 八月 2023 14:58:41 +0800
Subject: [PATCH] 配置Modbus协议:增加能耗信息

---
 igds-protocol-modbus/src/main/java/com/ld/igds/models/DeviceModbus.java                              |    6 
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java          |   34 ++++++++
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteEsServiceImpl.java      |   65 +++++++++++++++
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteControlServiceImpl.java |   15 ++-
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java                      |   28 ++-----
 igds-protocol-modbus/src/main/java/com/ld/igds/modbus/service/HModbusService.java                    |   17 ++++
 igds-es/src/main/java/com/ld/igds/es/manager/EsManager.java                                          |    8 +-
 igds-protocol-modbus/src/main/java/com/ld/igds/modbus/DeviceModbus.view.xml                          |   12 +++
 8 files changed, 151 insertions(+), 34 deletions(-)

diff --git a/igds-es/src/main/java/com/ld/igds/es/manager/EsManager.java b/igds-es/src/main/java/com/ld/igds/es/manager/EsManager.java
index 142fab3..332a9cb 100644
--- a/igds-es/src/main/java/com/ld/igds/es/manager/EsManager.java
+++ b/igds-es/src/main/java/com/ld/igds/es/manager/EsManager.java
@@ -205,10 +205,10 @@
                     "鎵ц澶辫触锛氭病鏈夐厤缃�氳鍗忚銆�");
         }
 
-        if (Constant.YN_N.equals(deviceSer.getStatus())) {
-            return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
-                    "鎵ц澶辫触锛氳兘鑰楀垎鏈轰笉鍦ㄧ嚎銆�");
-        }
+//        if (Constant.YN_N.equals(deviceSer.getStatus())) {
+//            return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+//                    "鎵ц澶辫触锛氳兘鑰楀垎鏈轰笉鍦ㄧ嚎銆�");
+//        }
 
         RemoteEsService remoteEsService = remoteManager.getRemoteEsService(deviceSer.getProtocol());
 
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/DeviceModbus.view.xml b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/DeviceModbus.view.xml
index bba19cc..0992467 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/DeviceModbus.view.xml
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/modbus/DeviceModbus.view.xml
@@ -104,6 +104,15 @@
           <Property name="valueProperty">name</Property>
         </Property>
       </PropertyDef>
+      <PropertyDef name="bizType">
+        <Property/>
+        <Property name="label">涓氬姟绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider("dicTriggerPR#triggerBizType").getResult()}</Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
       <PropertyDef name="serId">
         <Property/>
         <Property name="label">鎵�灞炲垎鏈�</Property>
@@ -182,6 +191,9 @@
         <DataColumn name="serId">
           <Property name="property">serId</Property>
         </DataColumn>
+        <DataColumn name="bizType">
+          <Property name="property">bizType</Property>
+        </DataColumn>
         <ColumnGroup>
           <Property name="caption">寮�鎿嶄綔</Property>
           <DataColumn name="open">
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 0f1ff64..9ade627 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
@@ -140,6 +140,23 @@
         return null;
     }
 
+    /**
+     * 鏍规嵁绫诲瀷鑾峰彇Modbus鑳借�楄澶囬厤缃俊鎭�
+     * @param bizType
+     * @param serId
+     * @return
+     */
+    public List<DeviceModbus> getDataByBizType(String bizType, String serId) {
+
+        String hql = " from " + DeviceModbus.class.getName() + " where bizType=:bizType and serId =:serId";
+
+        Map<String, Object> param = new HashMap<>();
+        param.put("bizType", bizType);
+        param.put("serId", serId);
+
+        return this.query(hql, param);
+    }
+
 
     public DeviceModbus getGasData(String companyId, String depotId, String bizType) {
 
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/models/DeviceModbus.java b/igds-protocol-modbus/src/main/java/com/ld/igds/models/DeviceModbus.java
index 654ac0f..3c0e3d3 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/models/DeviceModbus.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/models/DeviceModbus.java
@@ -33,7 +33,7 @@
     private String bizType = BizType.AREATION.getCode();
 
     @Column(name = "OPEN_", length = 10)
-    @PropertyDef(label = "寮�鍦板潃")
+    @PropertyDef(label = "寮�鍦板潃", description = "寮�鍦板潃銆佽兘鑰楄鍙栧湴鍧�")
     private String open = Constant.YN_N;
 
 
@@ -42,7 +42,7 @@
     private String openFun = "99";
 
     @Column(name = "CLOSE_", length = 10)
-    @PropertyDef(label = "鍏冲湴鍧�")
+    @PropertyDef(label = "鍏冲湴鍧�", description = "鍏冲湴鍧�銆佺┖璋冩俯搴﹁缃湴鍧�")
     private String close = Constant.YN_N;
 
     @Column(name = "CLOSE_FUN", length = 4)
@@ -58,7 +58,7 @@
     private String stopFun = "99";
 
     @Column(name = "OPEN_END_", length = 10)
-    @PropertyDef(label = "寮�鍒颁綅鍦板潃")
+    @PropertyDef(label = "寮�鍒颁綅鍦板潃", description = "寮�鍒颁綅鍦板潃銆佽繍琛岀姸鎬佸湴鍧�(椋庢満鍜岀┖璋�)")
     private String openEnd = Constant.YN_N;
 
     @Column(name = "OPEN_END_FUN", length = 4)
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 d4385be..4eb27c7 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
@@ -10,9 +10,6 @@
 import com.serotonin.modbus4j.locator.BaseLocator;
 import com.serotonin.modbus4j.msg.*;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
 
 /**
  * @Desc: 宸ュ叿绫�
@@ -25,13 +22,10 @@
     //浠庢満榛樿鍊�
     private static Integer slaveId = 1;
 
-    private static HashMap<String, ModbusMaster> masterMap = new HashMap<>();
-
     /**
      * 宸ュ巶
      */
     static ModbusFactory modbusFactory;
-    //static ModbusMaster modbusMaster;
 
     static {
         if (modbusFactory == null) {
@@ -46,23 +40,17 @@
      * @return
      */
     public static ModbusMaster getMaster(String ip, int port) throws ModbusInitException, InterruptedException {
-        String key = ip;
-//        ModbusMaster modbusMaster = masterMap.get(key);
-//        if (modbusMaster == null || !modbusMaster.isConnected()) {
-            IpParameters ipParameters = new IpParameters();
-            ipParameters.setHost(ip);
-            ipParameters.setPort(port);
+
+        IpParameters ipParameters = new IpParameters();
+        ipParameters.setHost(ip);
+        ipParameters.setPort(port);
         ModbusMaster modbusMaster = modbusFactory.createTcpMaster(ipParameters, false);
-            modbusMaster.init();
+        modbusMaster.init();
 
-            //鍒濆鍖栦箣鍚庣瓑寰咃紝閬垮厤鍑虹幇杩炴帴鏈垱寤�
-            Thread.sleep(2500);
+        //鍒濆鍖栦箣鍚庣瓑寰咃紝閬垮厤鍑虹幇杩炴帴鏈垱寤�
+        Thread.sleep(2500);
 
-//            masterMap.put(key, modbusMaster);
-
-            return modbusMaster;
-//        }
-//        return modbusMaster;
+        return modbusMaster;
     }
 
 
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 59b1fbf..be6703b 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
@@ -2,9 +2,12 @@
 
 import com.ld.igds.common.CoreDeviceService;
 import com.ld.igds.constant.BizType;
+import com.ld.igds.es.dto.EsData;
+import com.ld.igds.es.service.CoreEsService;
 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.BaseRequest;
 import com.ld.igds.io.request.CheckGasRequest;
 import com.ld.igds.io.request.DeviceControlRequest;
 import com.ld.igds.models.Gas;
@@ -35,6 +38,8 @@
     private NotifyWebInvoker notifyInvoker;
     @Autowired
     private CoreGasService gasService;
+    @Autowired
+    private CoreEsService esService;
 
 
     /**
@@ -156,4 +161,33 @@
         notifyInvoker.notifyWeb(gas.getCompanyId(), OrderRespEnum.MSG_SUCCESS, BizType.GAS, request.getDepotId() + " 姘斾綋妫�娴嬶細缁撴灉杩斿洖鎴愬姛.");
         log.info("鎺у埗鏌�----->>>骞冲彴锛氭皵浣撹В鏋愬畬鎴�-浠撳簱={}", request.getDepotId());
     }
+
+    /**
+     * 瑙f瀽鑳借�楁暟鎹�
+     *
+     * @param request
+     * @param result
+     */
+    public void analysisEs(BaseRequest request, Number result) {
+
+        log.debug("----------寮�濮嬫墽琛岃兘鑰楃粨鏋滆В鏋�----{}", request.getDepotId());
+
+
+        //鏈夊姛鐢佃兘鍒ゆ柇鏄惁杩斿洖鏈夋晥鏁版嵁
+        if (null == result) {
+            log.error("---鑳借�楁暟鎹繑鍥炴暟鎹笉瀹屾暣锛屽仠姝㈣В鏋�----{}", result.toString());
+            return;
+        }
+
+        EsData esData = new EsData();
+        esData.setCompanyId(request.getCompanyId());
+        esData.setDepotId(request.getDepotId());
+        esData.setUpdateTime(new Date());
+
+        esData.setEp(result.doubleValue());
+        esData.setEs(result.doubleValue());
+
+        log.info("Modbus鐢佃〃----->>>骞冲彴锛氳兘鑰楁暟鎹В鏋愬畬鎴�-浠撳簱={}", esData.getDepotId());
+        esService.saveAndUpdateInc(esData);
+    }
 }
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 b6c25d7..5da1698 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
@@ -67,6 +67,7 @@
             ModbusTcp modbusTcp;
             ModbusTcp modbusTcpLink = null;
             String temp = Constant.YN_N;
+            DeviceSer deviceSer;
             for (ExeDevice exeDevice : deviceList) {
                 deviceModbus = deviceModbusService.getCacheDeviceModbus(request.getCompanyId(), exeDevice.getPassCode() + "");
 
@@ -78,6 +79,12 @@
                 modbusTcp = new ModbusTcp(deviceModbus);
                 modbusTcp.setIp(request.getIp());
                 modbusTcp.setPort(request.getPort());
+                //鑻odbus璁惧閰嶇疆鍒嗘満锛屽垯浣跨敤鎵�閰嶇疆鍒嗘満鐨処P銆佺鍙�
+                if(StringUtils.isNotEmpty(deviceModbus.getSerId())){
+                    deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
+                    modbusTcp.setIp(deviceSer.getIp());
+                    modbusTcp.setPort(deviceSer.getPort());
+                }
                 modbusTcp.setBizCode(exeDevice.getPassCode() + "");
                 modbusTcp.setSerId(request.getSerId());
                 modbusTcp.setCompanyId(request.getCompanyId());
@@ -109,7 +116,6 @@
                     continue;
                 }
 
-
                 deviceModbus = deviceModbusService.getCacheDeviceModbus(request.getCompanyId(), exeDevice.getLink());
                 if (null == deviceModbus) continue;
                 modbusTcpLink = new ModbusTcp(deviceModbus);
@@ -118,9 +124,10 @@
                 modbusTcpLink.setBizCode(exeDevice.getLink());
                 modbusTcpLink.setSerId(request.getSerId());
                 modbusTcpLink.setCompanyId(request.getCompanyId());
+
+                //鑻odbus璁惧閰嶇疆鍒嗘満锛屽垯浣跨敤鎵�閰嶇疆鍒嗘満鐨処P銆佺鍙�
                 if(StringUtils.isNotEmpty(deviceModbus.getSerId())){
-                    //鑻odbus璁惧閰嶇疆鍒嗘満锛屽垯浣跨敤鎵�閰嶇疆鍒嗘満鐨処P銆佺鍙�
-                    DeviceSer deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
+                    deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
                     modbusTcpLink.setIp(deviceSer.getIp());
                     modbusTcpLink.setPort(deviceSer.getPort());
                 }
@@ -131,9 +138,7 @@
                     //鍏堝紑绐楀彛
                     temp = modbusTcp.getDeviceModbus().getOpen();
                     modbusTcp.setAddrExe(ServerUtil.getAddrExe(temp));
-
                     doWriteExe(modbusTcp, DeviceStatus.OPEN.getCode());
-
 
                     Thread.sleep(300);
 
diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteEsServiceImpl.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteEsServiceImpl.java
index beee3fe..2c72b32 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteEsServiceImpl.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteEsServiceImpl.java
@@ -1,10 +1,24 @@
 package com.ld.igds.protocol.modbus.command;
 
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.constant.BizType;
 import com.ld.igds.io.RemoteEsService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.constant.ProtocolEnum;
 import com.ld.igds.io.request.BaseRequest;
 import com.ld.igds.io.response.BaseResponse;
+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.DeviceSer;
+import com.ld.igds.protocol.modbus.ModbusUtil2;
+import com.ld.igds.protocol.modbus.ServerUtil;
+import com.ld.igds.protocol.modbus.data.ModbusTcp;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 褰撳墠鍗忚閽堝鏍囧噯Modbus-TCP鍗忚
@@ -19,13 +33,60 @@
 
     public static final String BEAN_ID = "modbus.remoteEsService";
 
+    @Resource
+    private HModbusService modbusService;
+    @Resource
+    private AnalysisService analysisService;
+    @Resource
+    private CoreSerService coreSerService;
+
     @Override
     public String getProtocol() {
-        return null;
+        return ProtocolEnum.TCP_MODBUS.getCode();
     }
 
     @Override
     public BaseResponse checkEs(BaseRequest request) {
-        return null;
+
+        String passCode = request.getDepotId();
+
+        try {
+            //鑾峰彇闇�瑕佹墽琛岀殑璁惧閰嶇疆
+            List<DeviceModbus> list = modbusService.getDataByBizType(BizType.ES.getCode(), request.getSerId());
+
+            if(null == list || list.isEmpty()){
+                return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鏈幏鍙栧埌Modbus鑳借�楅厤缃俊鎭�");
+            }
+            ModbusTcp modbusTcp;
+            DeviceSer deviceSer;
+            for (DeviceModbus deviceModbus : list) {
+                modbusTcp = new ModbusTcp(deviceModbus);
+                modbusTcp.setIp(request.getIp());
+                modbusTcp.setPort(request.getPort());
+
+                //鑻odbus璁惧閰嶇疆鍒嗘満锛屽垯浣跨敤鎵�閰嶇疆鍒嗘満鐨処P銆佺鍙�
+                if(StringUtils.isNotEmpty(deviceModbus.getSerId())){
+                    deviceSer = coreSerService.getCacheSer(request.getCompanyId(), deviceModbus.getSerId());
+                    modbusTcp.setIp(deviceSer.getIp());
+                    modbusTcp.setPort(deviceSer.getPort());
+                }
+
+                modbusTcp.setBizCode(passCode);
+                modbusTcp.setSerId(request.getSerId());
+                modbusTcp.setCompanyId(request.getCompanyId());
+
+                modbusTcp.setAddrExe(ServerUtil.getAddrExe(deviceModbus.getOpen()));
+
+                log.debug("--------鍚姩鑳借�楁煡璇�---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode());
+                Number check = ModbusUtil2.readHoldingRegister(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe());
+
+                //瑙f瀽鑳借�楁暟鎹�
+                analysisService.analysisEs(request, check);
+            }
+        } catch (Exception e) {
+            return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庡彴鎵ц寮傚父锛�" + e.getLocalizedMessage());
+        }
+
+        return new GasResponse(OrderRespEnum.ORDER_SUCCESS);
     }
 }

--
Gitblit v1.9.3