From 8043346013cac57ba9e0b74ec68408a463c84c18 Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期三, 31 七月 2024 16:38:03 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoVo.java             |   52 +++++
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml                                        |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPool.java                                    |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java          |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java                         |    3 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/common/CodeLocal.java                 |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPoolImp.java                                 |   16 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/CommandP206V1_0_0Ctrl.java |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java                 |   28 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java                                |    9 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java               |   23 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java                                          |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java                 |   16 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java                                    |   86 +++++++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml                                      |   20 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml                                              |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/TreadPoolFactory.java                              |   22 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoDeal.java           |   44 ++++
 pipIrr-platform/pipIrr-global/pom.xml                                                                                   |   13 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoClientAmountStatistics.java                      |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java                   |   23 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java                         |   12 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java                   |   34 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeAmountStatistics.java                      |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java     |   22 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                          |   13 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                                   |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml                                         |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java            |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java                            |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java      |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                                 |    9 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java                 |   12 +
 33 files changed, 473 insertions(+), 30 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java
index fcae238..86c3e72 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java
@@ -9,6 +9,34 @@
     public Byte meter ;//娴侀噺璁℃晠闅�
     public Byte valve ;//闃�闂�
 
+    public boolean hasAlarm(){
+        boolean flag = false ;
+        if((batteryVolt != null && batteryVolt == 1) ||
+                (loss != null && loss == 1) ||
+                (meter != null && meter == 1) ||
+                (valve != null && valve == 1)){
+            flag = true ;
+        }
+        return flag ;
+    }
+
+    public String alarmContent(){
+        String txt = "" ;
+        if(batteryVolt != null && batteryVolt == 1){
+            txt += "钃勭數姹犵數鍘嬫姤璀�" ;
+        }
+        if(meter != null && meter == 1){
+            txt += "锛屾祦閲忚鏁呴殰鎶ヨ" ;
+        }
+        if(valve != null && valve == 1){
+            txt += "锛岄榾闂ㄦ晠闅滄姤璀�" ;
+        }
+       if(loss != null && loss == 1){
+            txt += "锛屾紡鎹熸姤璀�" ;
+        }
+        return txt ;
+    }
+
     public String toString(){
         StringBuilder str = new StringBuilder() ;
         str.append("      鎶ヨ:\n");
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPool.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPool.java
index 84e72eb..32537ae 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPool.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPool.java
@@ -10,6 +10,13 @@
 	 */
 	public interface Pool{
 		/**
+		 * 绾跨▼姹犱腑绾跨▼涓暟
+		 * @return
+		 */
+		public Integer size() ;
+		public Integer maxThread() ;
+		public Integer minThread() ;
+		/**
 		 * 鎶婃墍瑕佹墽琛岀殑宸ヤ綔瀵硅薄瀹炰緥鏀惧叆绾跨▼姹犱腑
 		 * @param job ThreadJob 宸ヤ綔瀵硅薄瀹炰緥
 		 * @throws Exception 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPoolImp.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPoolImp.java
index 15cb864..ba8154a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPoolImp.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/ThreadPoolImp.java
@@ -131,6 +131,22 @@
 				this.monitorThread.start() ;
 			}
 		}
+		/**
+		 * 绾跨▼姹犱腑绾跨▼涓暟
+		 * @return
+		 */
+		@Override
+		public Integer size() {
+			return currNum ;
+		}
+		@Override
+		public Integer maxThread() {
+			return maxNum ;
+		}
+		@Override
+		public Integer minThread() {
+			return minNum ;
+		}
 
 		/**
 		 * 鎶婃墍瑕佹墽琛岀殑宸ヤ綔瀵硅薄瀹炰緥鏀惧叆绾跨▼姹犱腑
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/TreadPoolFactory.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/TreadPoolFactory.java
index f7c34ee..b20cbca 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/TreadPoolFactory.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/threadPool/TreadPoolFactory.java
@@ -5,7 +5,27 @@
 
 	private static ThreadPool.Pool pool_short ;//鐭伐浣滀换鍔$嚎绋嬫睜锛岀嚎绋嬪伐浣滅敤鏃惰緝鐭�
 	private static ThreadPool.Pool pool_long ;//闀垮伐浣滀换鍔$嚎绋嬫睜锛岀嚎绋嬪伐浣滅敤鏃惰緝闀�
-	
+
+
+	public final static Integer[] pool_short_state(){
+		Integer shortCurThread = 0 ;//鐭嚎绋嬫睜褰撳墠绾跨▼鏁�
+		Integer shortMaxThread = 0 ;//鐭嚎绋嬫睜鏈�澶х嚎绋嬫暟
+		Integer shortMinThread = 0 ;//鐭嚎绋嬫睜鏈�灏忕嚎绋嬫暟
+		shortCurThread = pool_short.size() ;
+		shortMaxThread = pool_short.maxThread() ;
+		shortMinThread = pool_short.minThread() ;
+		return new Integer[]{shortCurThread, shortMaxThread, shortMinThread} ;
+	}
+
+	public final static Integer[] pool_long_state(){
+		Integer longCurThread = 0 ;//鐭嚎绋嬫睜褰撳墠绾跨▼鏁�
+		Integer longMaxThread = 0 ;//鐭嚎绋嬫睜鏈�澶х嚎绋嬫暟
+		Integer longMinThread = 0 ;//鐭嚎绋嬫睜鏈�灏忕嚎绋嬫暟
+		longCurThread = pool_long.size() ;
+		longMaxThread = pool_long.maxThread() ;
+		longMinThread = pool_long.minThread() ;
+		return new Integer[]{longCurThread, longMaxThread, longMinThread} ;
+	}
 	/**
 	 * 鍒濆鍖栫嚎绋嬫睜
 	 * @param poolName 绾跨▼姹犲拰绾跨▼鍚嶇О
diff --git a/pipIrr-platform/pipIrr-global/pom.xml b/pipIrr-platform/pipIrr-global/pom.xml
index 67e9c0e..4624b96 100644
--- a/pipIrr-platform/pipIrr-global/pom.xml
+++ b/pipIrr-platform/pipIrr-global/pom.xml
@@ -140,6 +140,19 @@
             <artifactId>okhttp</artifactId>
             <version>4.9.2</version>
         </dependency>
+
+        <!--閽夐拤娑堟伅鎺ㄩ��-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.15</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
new file mode 100644
index 0000000..67afbfc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
@@ -0,0 +1,86 @@
+package com.dy.pipIrrGlobal.config;
+
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiRobotSendRequest;
+import com.dingtalk.api.response.OapiRobotSendResponse;
+import com.taobao.api.ApiException;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-07-31 9:20
+ * @LastEditTime 2024-07-31 9:20
+ * @Description 閽夐拤瀹㈡埛绔伐鍏风被
+ */
+
+@Component
+public class DingTalk {
+    @Value("${dingtalk.robot.url}")
+    private String URL;
+
+    @Value("${dingtalk.robot.access-token}")
+    private String CUSTOM_ROBOT_TOKEN;
+
+    @Value("${dingtalk.robot.secret}")
+    private String SECRET;
+
+    @Value("${dingtalk.at-all}")
+    private Boolean AT_ALL;
+
+    @Value("${dingtalk.mobile}")
+    private String MOBILE;
+
+    public void sendMessage(String message) {
+        try {
+            Long timestamp = System.currentTimeMillis();
+            String secret = SECRET;
+            String stringToSign = timestamp + "\n" + secret;
+            Mac mac = Mac.getInstance("HmacSHA256");
+            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
+            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+            String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
+
+            //sign瀛楁鍜宼imestamp瀛楁蹇呴』鎷兼帴鍒拌姹俇RL涓婏紝鍚﹀垯浼氬嚭鐜� 310000 鐨勯敊璇俊鎭�
+            DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "&timestamp=" + timestamp);
+            OapiRobotSendRequest req = new OapiRobotSendRequest();
+            /**
+             * 鍙戦�佹枃鏈秷鎭�
+             */
+            //瀹氫箟鏂囨湰鍐呭
+            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
+            text.setContent(message);
+            //瀹氫箟 @瀵硅薄
+            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
+            if(AT_ALL) {
+                at.setIsAtAll(true);
+            }else {
+                at.setAtMobiles(Collections.singletonList(MOBILE));
+            }
+            //璁剧疆娑堟伅绫诲瀷
+            req.setMsgtype("text");
+            req.setText(text);
+            req.setAt(at);
+            OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN);
+            System.out.println(rsp.getBody());
+        } catch (ApiException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        } catch (InvalidKeyException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java
index 6f977b5..c36da5f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.annotation.JSONField;
 import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.dy.common.po.BaseEntity;
@@ -99,4 +100,12 @@
      */
     @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Byte deleted;
+
+
+    /////////////////////////////////////////
+    // 闈炴暟鎹簱灞炴��
+    /////////////////////////////////////////
+    @TableField(exist = false)
+    @Schema(description = "鍙栨按鍙g紪鍙�")
+    public String intakeName ;
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java
index fe09f57..3ce7ed9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java
@@ -160,6 +160,11 @@
      */
     public Byte powerType;
 
+    /**
+     * 鍙戦�佹秷鎭椂鍒�
+     */
+    public Long sendMsTime ;
+
     public void valueFrom(DataV1_0_1 dV1_0_1, String rtuDt, DataAlarmVo alarmVo, DataStateVo stateVo) throws Exception{
         this.dt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt)   ;
         this.rtuDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt)  ;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoClientAmountStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoClientAmountStatistics.java
index dfdbe82..3a61efd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoClientAmountStatistics.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoClientAmountStatistics.java
@@ -5,7 +5,7 @@
 /**
  * @Author: liurunyu
  * @Date: 2024/7/24 17:09
- * @Description
+ * @Description 浠ョ敤姘存埛缁熻鐢ㄦ按閲�
  */
 @Data
 public class VoClientAmountStatistics {
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeAmountStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeAmountStatistics.java
index 508e4ae..429df09 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeAmountStatistics.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeAmountStatistics.java
@@ -5,7 +5,7 @@
 /**
  * @Author: liurunyu
  * @Date: 2024/7/24 14:16
- * @Description 浠ュ彇姘村彛缁熻婕忔崯
+ * @Description 浠ュ彇姘村彛缁熻鍙栨按閲�
  */
 @Data
 public class VoIntakeAmountStatistics {
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 408b44e..3fd34ef 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -167,3 +167,12 @@
 auto-statistics:
     startHour: 17 #寮�濮嬪皬鏃� 0
     startMinute: 19 #寮�濮嬪垎閽� 5
+
+#閽夐拤娑堟伅鎺ㄩ��
+dingtalk:
+    robot:
+        url: https://oapi.dingtalk.com/robot/send
+        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
+        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
+    at-all: true
+    mobile: 18602657034
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
index e9b32bd..3ba6bb9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -260,11 +260,14 @@
   </select>
 
   <!--鏍规嵁鎺у埗鍣ㄥ湴鍧�鑾峰彇鎺у埗鍣ㄥ垪琛�-->
-  <select id="getControllersByRtuAddrAndIntakeNotNull" parameterType="java.lang.String" resultMap="PartResultMap">
-    SELECT
-    <include refid="Part_Column_List">
-    </include>
-    FROM pr_controller WHERE deleted = 0 AND intakeId is not null AND rtuAddr=#{rtuAddr,jdbcType=VARCHAR}
+  <select id="getControllersByRtuAddrAndIntakeNotNull" parameterType="java.lang.String" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    SELECT tb.id id,
+    tb.rtuAddr rtuAddr,
+    tb.intakeId intakeId,
+    itb.name intakeName
+    FROM pr_controller tb
+    INNER JOIN pr_intake itb on tb.intakeId=itb.id
+    WHERE deleted = 0 AND intakeId is not null AND rtuAddr=#{rtuAddr,jdbcType=VARCHAR}
   </select>
 
   <!--鏍规嵁鎺у埗鍣ㄧ紪鍙烽�昏緫鍒犻櫎鎺у埗-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
index 187f1e9..738601c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
@@ -28,13 +28,14 @@
     <result column="alarm_battery_volt" jdbcType="TINYINT" property="alarmBatteryVolt" />
     <result column="alarm_valve" jdbcType="TINYINT" property="alarmValve" />
     <result column="power_type" jdbcType="TINYINT" property="alarmValve" />
+    <result column="send_ms_time" jdbcType="BIGINT" property="sendMsTime" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, controller_id, intake_id, rtu_addr, dt, rtu_dt, valve_state, alarm_remain_water,
     alarm0_water_remain, alarm_exceed_year, alarm_water_meter_fault, alarm_loss, alarm_water_meter_break,
     alarm_ele_meter_fault, alarm0_money_remain, alarm_inner_door, alarm_outer_door, alarm_ele_miss, 
-    alarm_ele_exceed, alarm_ele_low_volt, state_ic_enable,alarm_battery_volt,alarm_valve,power_type
+    alarm_ele_exceed, alarm_ele_low_volt, state_ic_enable,alarm_battery_volt,alarm_valve,power_type,send_ms_time
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -64,7 +65,8 @@
       alarm_loss, alarm_water_meter_break, alarm_ele_meter_fault, 
       alarm0_money_remain, alarm_inner_door, alarm_outer_door, 
       alarm_ele_miss, alarm_ele_exceed, alarm_ele_low_volt, 
-      state_ic_enable,alarm_battery_volt,alarm_valve,power_type)
+      state_ic_enable,alarm_battery_volt,alarm_valve,power_type,
+      send_ms_time)
     values (#{id,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, 
       #{rtuAddr,jdbcType=VARCHAR}, #{dt,jdbcType=TIMESTAMP}, #{rtuDt,jdbcType=TIMESTAMP}, 
       #{valveState,jdbcType=TINYINT}, #{alarmRemainWater,jdbcType=TINYINT}, #{alarm0WaterRemain,jdbcType=TINYINT}, 
@@ -73,7 +75,7 @@
       #{alarm0MoneyRemain,jdbcType=TINYINT}, #{alarmInnerDoor,jdbcType=TINYINT}, #{alarmOuterDoor,jdbcType=TINYINT}, 
       #{alarmEleMiss,jdbcType=TINYINT}, #{alarmEleExceed,jdbcType=TINYINT}, #{alarmEleLowVolt,jdbcType=TINYINT},
       #{stateIcEnable,jdbcType=TINYINT}, #{alarmBatteryVolt,jdbcType=TINYINT}, #{alarmValve,jdbcType=TINYINT},
-      #{powerType,jdbcType=TINYINT})
+      #{powerType,jdbcType=TINYINT},#{sendMsTime,jdbcType=BIGINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateLast">
     <!--@mbg.generated-->
@@ -151,6 +153,9 @@
      <if test="powerType != null">
         power_type,
       </if>
+     <if test="sendMsTime != null">
+       send_ms_time,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -224,6 +229,9 @@
       </if>
      <if test="powerType != null">
         #{powerType,jdbcType=TINYINT},
+      </if>
+      <if test="sendMsTime != null">
+        #{sendMsTime,jdbcType=BIGINT},
       </if>
     </trim>
   </insert>
@@ -300,6 +308,9 @@
       <if test="powerType != null">
         power_type = #{powerType,jdbcType=TINYINT},
       </if>
+      <if test="sendMsTime != null">
+        send_ms_time = #{sendMsTime,jdbcType=BIGINT},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -328,7 +339,8 @@
       state_ic_enable = #{stateIcEnable,jdbcType=TINYINT},
       alarm_battery_volt = #{alarmBatteryVolt,jdbcType=TINYINT},
       alarm_valve = #{alarmValve,jdbcType=TINYINT},
-      power_type = #{powerType,jdbcType=TINYINT}
+      power_type = #{powerType,jdbcType=TINYINT},
+      send_ms_time = #{powerType,jdbcType=BIGINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟-->
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
index 2dd5d45..7e6e557 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -189,9 +189,9 @@
 
 			//宸ヤ綔鎶ュお棰戠箒锛孨娆′笂鎶ュ鐞�1娆★紝鍙栧�艰寖鍥存槸1-100
 			ServerProperties.workReportDealOneByTimes =  conf.getSetAttrPlusInt(doc, "config.base", "workReportDealOneByTimes", null, 1, 100, null) ;
-			if(ServerProperties.workReportDealOneByTimes < 1 || ServerProperties.workReportDealOneByTimes > 100){
-				throw new Exception("workReportDealOneByTimes鍙栧�煎繀椤绘槸1~100") ;
-			}
+
+			//鏈夋姤璀﹀彂鐢熸椂锛屽悜閽夐拤鍙戦�佹秷鎭殑闂撮殧鏃堕暱锛堝垎閽燂級
+			ServerProperties.sendDingDingAlarmMsInterval =  conf.getSetAttrPlusInt(doc, "config.base", "sendDingDingAlarmMsInterval", null, 1, 600, null) ;
 
 			//璁剧疆ID鐢熸垚鍣ㄧ殑鍚庣紑
 			IDLongGenerator.setSuffix(ServerProperties.dbDataIdSuffix.intValue());
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
index c68f753..46f9287 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
@@ -46,4 +46,7 @@
 	//宸ヤ綔鎶ュお棰戠箒锛孨娆′笂鎶ュ鐞�1娆�
 	public static Integer workReportDealOneByTimes = 5 ;
 
+	//鏈夋姤璀﹀彂鐢熸椂锛屽悜閽夐拤鍙戦�佹秷鎭殑闂撮殧鏃堕暱锛堝垎閽燂級
+	public static Integer sendDingDingAlarmMsInterval = 60 ;
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java
index b4fc611..bae9ac6 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java
@@ -25,6 +25,29 @@
 		return instance ;
 	}
 
+
+	public static Integer[] info(){
+		Integer comTotalDown = 0 ;//缂撳瓨鐨勪笅琛屽懡浠ゆ�绘暟
+		Integer comNoResTotalDownByOnLine = 0 ;//RTU鍦ㄧ嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+		Integer comNoResTotalDownByOffLine = 0 ;//RTU绂荤嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+		MidResultToRtu res ;
+		TcpDownCommandObj obj ;
+		Node node = cacheQueue.getFirstNode() ;
+		while(node != null && node.obj != null){
+			obj = (TcpDownCommandObj)node.obj;
+			res = obj.result ;
+			if(!obj.onceReceivedResult){
+				comTotalDown ++ ;
+				if(TcpSessionCache.isConnect(res.rtuAddr)){
+					comNoResTotalDownByOnLine ++ ;
+				}else{
+					comNoResTotalDownByOffLine ++ ;
+				}
+			}
+		}
+		return new Integer[]{comTotalDown, comNoResTotalDownByOnLine, comNoResTotalDownByOffLine} ;
+	}
+
 	/**
 	 * 缂撳瓨鍛戒护
 	 * @param result
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
index bf28087..c7aff2f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -24,6 +24,29 @@
 	 */
 	private static HashMap<String, TcpSession> sessionTable = new HashMap<String, TcpSession>() ;
 
+
+	/**
+	 * 寰楀埌淇℃伅
+	 * @return
+	 */
+	public static Integer[] info(){
+		Integer rtuTotalConnect = 0 ;//宸茬粡杩炴帴杩囦腑闂翠欢鐨凴TU鎬绘暟锛堝寘鎷湪绾夸笌绂荤嚎鐨勶級
+		Integer rtuTotalOnLine = 0 ;//鍦ㄧ嚎RTU鎬绘暟
+		Integer rtuTotalOffLine = 0 ;//绂荤嚎RTU鎬绘暟
+		synchronized (sessionTable){
+			rtuTotalConnect = sessionTable.size() ;
+			Collection<TcpSession> col = sessionTable.values() ;
+			for(TcpSession se : col){
+				if(se.ioSession.isConnected()){
+					rtuTotalOnLine ++ ;
+				}else{
+					rtuTotalOffLine ++ ;
+				}
+			}
+		}
+		return new Integer[] {rtuTotalConnect, rtuTotalOnLine, rtuTotalOffLine} ;
+	}
+
 	/**
 	 * 鍏抽棴鎵�鏈夌綉缁滆繛鎺�
 	 */
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java
index 9ae2f68..a2dfc3a 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java
@@ -29,6 +29,8 @@
             return this.stopTcpSv(com) ;
         }else if(code.equals(CodeLocal.recoverTcpSv)){
             return this.recoverTcpSv(com) ;
+        }else if(code.equals(CodeLocal.mwState)){
+            return this.mwInfo(com) ;
         }
         return ReturnCommand.errored("鍑洪敊锛屾敹鍒板唴閮ㄥ懡浠ょ殑鍔熻兘鐮佷笉鑳借瘑鍒紒", com.getId(), com.getCode()) ;
     }
@@ -84,4 +86,14 @@
 
 
 
+    /**
+     * 鏌ヨ閫氫俊涓棿浠惰繍琛屾儏鍐�
+     * @throws Exception
+     */
+    private Command mwInfo(Command command) throws Exception{
+        MwInfoVo mwInfo = new MwInfoDeal().deal() ;
+        return ReturnCommand.successed("鏌ヨ閫氫俊涓棿浠惰繍琛屾儏鍐�", command.getId(), command.getCode(), mwInfo) ;
+    }
+
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java
index 49aa69d..2c3e0fa 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java
@@ -9,6 +9,9 @@
 	public static final String allProtocols = "LCD0100" ;//鏌ヨ鎵�鏈夊崗璁厤缃�
 
 	public static final String stopTcpSv = "LCD0110" ;//鍋滄TCP鏈嶅姟锛屼笉鍐嶆帴鍏ユ柊鐨凾CP杩炴帴锛屽凡缁廡CP杩炴帴鐨勫叏閮ㄦ柇杩炴帴
+
 	public static final String recoverTcpSv = "LCD0112" ;//閲嶅惎TCP鏈嶅姟锛屾帴鍏ユ柊鐨凾CP杩炴帴
 
+	public static final String mwState = "LCD0200" ;//寰楀埌閫氫俊涓棿浠惰繍琛屼俊鎭�
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoDeal.java
new file mode 100644
index 0000000..43658e2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoDeal.java
@@ -0,0 +1,44 @@
+package com.dy.rtuMw.server.local.localProtocol;
+
+import com.dy.common.threadPool.TreadPoolFactory;
+import com.dy.rtuMw.server.forTcp.TcpDownCommandCache;
+import com.dy.rtuMw.server.forTcp.TcpSessionCache;
+import com.dy.rtuMw.server.rtuData.RtuDataCache;
+import com.dy.rtuMw.server.rtuData.TaskPool;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/29 11:07
+ * @Description
+ */
+public class MwInfoDeal {
+
+    public MwInfoVo deal(){
+        MwInfoVo vo = new MwInfoVo() ;
+        Integer[] info = TcpSessionCache.info() ;
+        vo.rtuTotalConnect = info[0] ;
+        vo.rtuTotalOnLine = info[1] ;
+        vo.rtuTotalOffLine = info[2] ;
+
+        info = TcpDownCommandCache.info() ;
+        vo.comTotalDown = info[0] ;
+        vo.comNoResTotalDownByOnLine = info[1] ;
+        vo.comNoResTotalDownByOffLine = info[2] ;
+
+        vo.dataTotalUp = RtuDataCache.size() ;
+
+        info = TreadPoolFactory.pool_short_state() ;
+        vo.shortCurThread = info[0] ;
+        vo.shortMaxThread = info[1] ;
+        vo.shortMinThread = info[2] ;
+
+        info = TreadPoolFactory.pool_long_state() ;
+        vo.longCurThread = info[0] ;
+        vo.longMaxThread = info[1] ;
+        vo.longMinThread = info[2] ;
+
+        vo.taskTreePoolTotalInstance = TaskPool.totalTasks() ;
+
+        return vo ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoVo.java
new file mode 100644
index 0000000..9a9f330
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/MwInfoVo.java
@@ -0,0 +1,52 @@
+package com.dy.rtuMw.server.local.localProtocol;
+
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/29 10:54
+ * @Description
+ */
+@Data
+public class MwInfoVo {
+    public Integer rtuTotalConnect ;//宸茬粡杩炴帴杩囦腑闂翠欢鐨凴TU鎬绘暟锛堝寘鎷湪绾夸笌绂荤嚎鐨勶級
+    public Integer rtuTotalOnLine ;//鍦ㄧ嚎RTU鎬绘暟
+    public Integer rtuTotalOffLine ;//绂荤嚎RTU鎬绘暟
+
+    public Integer comTotalDown ;//缂撳瓨鐨勪笅琛屽懡浠ゆ�绘暟
+    public Integer comNoResTotalDownByOnLine;//RTU鍦ㄧ嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+    public Integer comNoResTotalDownByOffLine;//RTU绂荤嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+
+    public Integer dataTotalUp ;//涓婅鏁版嵁鍦ㄧ紦瀛樹腑杩樻湭澶勭悊鐨勬�绘暟
+
+    public Integer shortCurThread = 0 ;//鐭嚎绋嬫睜褰撳墠绾跨▼鏁�
+    public Integer shortMaxThread = 0 ;//鐭嚎绋嬫睜鏈�澶х嚎绋嬫暟
+    public Integer shortMinThread = 0 ;//鐭嚎绋嬫睜鏈�灏忕嚎绋嬫暟
+    public Integer longCurThread = 0 ;//闀跨嚎绋嬫睜褰撳墠绾跨▼鏁�
+    public Integer longMaxThread = 0 ;//闀跨嚎绋嬫睜鏈�澶х嚎绋嬫暟
+    public Integer longMinThread = 0 ;//闀跨嚎绋嬫睜鏈�灏忕嚎绋嬫暟
+
+    public Integer taskTreePoolTotalInstance = 0 ;//浠诲姟鏍戞睜浠诲姟瀹炰緥鎬绘暟
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("閫氫俊涓棿浠惰繍琛屼俊鎭�:\n");
+        sb.append("   杩炴帴RTU鎬绘暟锛�" + rtuTotalConnect + "\n");
+        sb.append("      鍦ㄧ嚎RTU鎬绘暟锛�" + rtuTotalOnLine + "\n");
+        sb.append("      绂荤嚎RTU鎬绘暟锛�" + rtuTotalOffLine + "\n");
+        sb.append("   涓嬭鏈簲绛斿懡浠ゆ�绘暟锛�" + comTotalDown + "\n");
+        sb.append("      鍦ㄧ嚎RTU鏈簲绛斿懡浠ゆ�绘暟锛�" + comNoResTotalDownByOnLine + "\n");
+        sb.append("      绂荤嚎RTU鏈簲绛斿懡浠ゆ�绘暟锛�" + comNoResTotalDownByOffLine + "\n");
+        sb.append("   涓婅鏈鐞嗘暟鎹�绘暟锛�" + dataTotalUp + "\n");
+        sb.append("   鐭嚎绋嬫睜褰撳墠绾跨▼鏁帮細" + shortCurThread + "\n");
+        sb.append("      鐭嚎绋嬫睜閰嶇疆鏈�澶х嚎绋嬫暟锛�" + shortMaxThread + "\n");
+        sb.append("      鐭嚎绋嬫睜閰嶇疆鏈�灏忕嚎绋嬫暟锛�" + shortMinThread + "\n");
+        sb.append("   闀跨嚎绋嬫睜褰撳墠绾跨▼鏁帮細" + longCurThread + "\n");
+        sb.append("      闀跨嚎绋嬫睜閰嶇疆鏈�澶х嚎绋嬫暟锛�" + longMaxThread + "\n");
+        sb.append("      闀跨嚎绋嬫睜閰嶇疆鏈�灏忕嚎绋嬫暟锛�" + longMinThread + "\n");
+        sb.append("   浠诲姟鏍戞睜浠诲姟瀹炰緥鎬绘暟锛�" + taskTreePoolTotalInstance + "\n");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java
index bd4f5ed..5bceac7 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java
@@ -12,12 +12,22 @@
 	private static Logger log = LogManager.getLogger(TaskPool.class.getName()) ;
 	
 	private static List<TaskSurpport> tasks = new ArrayList<TaskSurpport>() ;
+
+	private static Integer taskTotal = 0 ;
 	
 	private static TreeConfig taskTreeConf ;
 	
 	
 	public static void setTaskTreeCofig(TreeConfig conf){
 		taskTreeConf = conf ;
+	}
+
+	/**
+	 * 寰楀埌浠诲姟鏍戝疄渚嬫�绘暟
+	 * @return
+	 */
+	public static Integer totalTasks() {
+		return taskTotal ;
 	}
 	
 	
@@ -39,6 +49,8 @@
 				} finally {
 					if(t == null){
 						log.error("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞″け璐ワ紒" );
+					}else{
+						taskTotal++ ;
 					}
 				}
 			}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java
index a29a46a..5263b6e 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java
@@ -3,6 +3,7 @@
 import com.dy.common.mw.protocol.p206V1_0_0.upVos.*;
 import com.dy.common.util.DateTime;
 import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory;
+import com.dy.rtuMw.server.ServerProperties;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
 import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
 import com.dy.common.mw.protocol.Data;
@@ -92,8 +93,23 @@
             po.intakeId = controller==null?null:controller.getIntakeId() ;
             po.rtuAddr = rtuAddr ;
             po.valueFrom(dV1_0_1, rtuDt, alarmVo, stateVo);
+            if(alarmVo.hasAlarm()){
+                po.sendMsTime = System.currentTimeMillis() ;
+                this.sendMessage(controller, alarmVo);
+            }
             sv.saveRmAlarmStateLast(po) ;
         }else{
+            if(po.sendMsTime == null){
+                po.sendMsTime = System.currentTimeMillis() ;
+                this.sendMessage(controller, alarmVo);
+            }else{
+                Long now = System.currentTimeMillis() ;
+                if(((now - po.sendMsTime) / (1000 * 60)) > ServerProperties.sendDingDingAlarmMsInterval){
+                    //澶т簬瑙勫畾鐨勯棿闅旀椂闂�
+                    po.sendMsTime = System.currentTimeMillis() ;
+                    this.sendMessage(controller, alarmVo);
+                }
+            }
             po = this.update(controller, po, rtuDt, dV1_0_1, alarmVo, stateVo) ;
             sv.updateRmAlarmStateLast(po);
         }
@@ -129,7 +145,7 @@
 
 
     /**
-     * 铏氭嫙鍗″湪鍙栨按涓殑鍗犵敤鐘舵�佹敼涓洪潪搴旂敤鐘舵��
+     * 铏氭嫙鍗″湪鍙栨按鍙d笂鐨勫崰鐢ㄧ姸鎬佹敼涓洪潪搴旂敤鐘舵��
      */
     private void updateVirCardNoUseState(DbSv sv,
                                          PrController controller,
@@ -146,4 +162,8 @@
 
     }
 
+    private void sendMessage(PrController controller, DataAlarmVo alarmVo){
+        String ms = "鍙栨按鍙�" + controller.getIntakeName() + "浜х敓鎶ヨ锛�" + alarmVo.alarmContent() ;
+    }
+
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
index 4a4e9a4..0783065 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
@@ -1,8 +1,6 @@
 package com.dy.rtuMw.server.rtuData.p206V1_0_0;
 
 
-import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1;
-import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd02Vo;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
 import com.dy.common.mw.protocol.Data;
 import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
index 8c39b08..4eebda0 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
@@ -53,7 +53,7 @@
 			onceUpDataRtus.put(rtuAddr, true) ;
 		}
 
-		DbSv sv = (DbSv)SpringContextUtil.getBean(DbSv.class) ;
+		DbSv sv = SpringContextUtil.getBean(DbSv.class) ;
 		if(sv != null){
 			PrController controller = sv.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ;
 			PrControllerTramp controllerTramp = null ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
index fe018e1..8eabad2 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -20,6 +20,7 @@
 		cacheUpDownDataMaxCount锛氫笂涓嬭鏁版嵁缂撳瓨闃熷垪涓紦瀛樻暟鎹釜鏁扮殑鏈�澶у�硷紝杩欎釜涓庣幇瀹為」鐩墍鎺ユ按琛ㄦ暟鐩稿叧
 		disconnectedByNoUpDataMinutes锛氭病鏈変笂琛屾暟鎹殑鍒嗛挓鏁帮紝杈惧埌杩欎釜鍒嗛挓鏁帮紝璁や负RTU鏂綉浜嗭紝鍙栧�艰寖鍥存槸2-100
 		workReportDealOneByTimes: 宸ヤ綔鎶ュお棰戠箒锛孨娆′笂鎶ュ鐞�1娆★紝鍙栧�艰寖鍥存槸1-100
+		sendDingDingAlarmMsInterval: 鏈夋姤璀﹀彂鐢熸椂锛屽悜閽夐拤鍙戦�佹秷鎭殑闂撮殧鏃堕暱锛堝垎閽燂級
 		 -->
 		<base
 			orgTag="ym"
@@ -36,6 +37,7 @@
 			cacheUpDownDataMaxCount="110000"
 			disconnectedByNoUpDataMinutes="3"
 			workReportDealOneByTimes="5"
+			sendDingDingAlarmMsInterval="60"
 		/>
 		
 		<!-- 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
index 58f8a1d..29e1d44 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
@@ -4,5 +4,5 @@
 
 	<base rtuAddr="532328059995" onlyOneHeartBeat="true" icCardAddr="3B7D1E1A" icCardNo="61181622830147821"></base>
 	<!-- -->
-	<tcpCl mwServerIp="192.168.40.182" mwServerPort="60000" connectTimeout="3000" />
+	<tcpCl mwServerIp="127.0.0.1" mwServerPort="60000" connectTimeout="3000" />
 </config>		
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/common/CodeLocal.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/common/CodeLocal.java
index 9b7edb2..e2fae7a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/common/CodeLocal.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/common/CodeLocal.java
@@ -9,6 +9,9 @@
 	public static final String allProtocols = "LCD0100" ;//鏌ヨ鎵�鏈夊崗璁厤缃�
 
 	public static final String stopTcpSv = "LCD0110" ;//鍋滄TCP鏈嶅姟锛屼笉鍐嶆帴鍏ユ柊鐨凾CP杩炴帴锛屽凡缁廡CP杩炴帴鐨勫叏閮ㄦ柇杩炴帴
+
 	public static final String recoverTcpSv = "LCD0112" ;//鎭㈠TCP鏈嶅姟锛屾帴鍏ユ柊鐨凾CP杩炴帴
 
+	public static final String mwState = "LCD0200" ;//寰楀埌閫氫俊涓棿浠惰繍琛屼俊鎭�
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/CommandP206V1_0_0Ctrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/CommandP206V1_0_0Ctrl.java
index 8a2bfa1..6f0e02b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/CommandP206V1_0_0Ctrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V1_0_0/CommandP206V1_0_0Ctrl.java
@@ -35,6 +35,8 @@
                     rt = this.stopTcpSv() ;
                 }else if(com.equals(CodeLocal.recoverTcpSv)){
                     rt = this.recoverTcpSv() ;
+                }else if(com.equals(CodeLocal.mwState)){
+                    rt = this.mwState() ;
                 }else if(com.equals("10")){
                     rt = this.cd10() ;
                 }else if(com.equals("21")){
@@ -108,6 +110,10 @@
         return this.sendCom2Mw(this.commandLocal(CodeLocal.recoverTcpSv, null, null)) ;
     }
 
+    private BaseResponse mwState(){
+        return this.sendCom2Mw(this.commandLocal(CodeLocal.mwState, null, null)) ;
+    }
+
     private BaseResponse cd10(){
         Com10Vo comVo = new Com10Vo() ;
         comVo.rtuAddr = "532328059995" ;//鍓�6浣嶆槸琛屾斂鍖哄垝鐮侊紝鍚�6浣嶆槸搴忓垪鍙锋渶澶ф槸065535
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
index 455015f..8fabaa3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeCtrl.java
@@ -13,6 +13,7 @@
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
 import com.dy.pipIrrProject.intake.qo.OnLineIntakesQO;
 import com.dy.pipIrrProject.result.ProjectResultCode;
+import com.taobao.api.ApiException;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
@@ -51,6 +52,11 @@
 @RequiredArgsConstructor
 public class IntakeCtrl {
     private final IntakeSv intakeSv;
+
+    @GetMapping("/test")
+    public String sendMessage(String message) throws ApiException {
+        return intakeSv.sendMessage(message);
+    }
 
     /**
      * 瀹㈡埛绔姹傚緱鍒版墍鏈夊彇姘村彛鍚嶅瓧
@@ -142,7 +148,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody  @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) {
+    public BaseResponse<Boolean> add(@RequestBody @Valid PrIntake po, @Parameter(hidden = true) BindingResult bindingResult) {
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
@@ -152,7 +158,7 @@
             return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_NAME_EXIST.getMessage());
         }
         po.setOperateDt(new Date());
-        po.setDeleted((byte)0);
+        po.setDeleted((byte) 0);
         Integer rec = Optional.ofNullable(intakeSv.addIntake(po)).orElse(0);
         if (rec == 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.ADD_INTAKE_FAIL.getMessage());
@@ -182,11 +188,11 @@
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
         List<Long> ids = intakeSv.getIntakeIdByNameExcludeId(po.getId(), po.getName());
-        if (ids.size() > 0){
+        if (ids.size() > 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.INTAKE_NAME_EXIST.getMessage());
         }
         int count;
-        po.setOperateDt( new Date());
+        po.setOperateDt(new Date());
         try {
             count = this.intakeSv.update(po);
         } catch (Exception e) {
@@ -286,6 +292,7 @@
 
     /**
      * 鑾峰彇鍙栨按鍙e垪琛紙鍦ㄧ嚎鍜屼笉鍦ㄧ嚎锛�
+     *
      * @param qo
      * @return
      */
@@ -303,6 +310,7 @@
 
     /**
      * 鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛锛堝湪绾垮拰涓嶅湪绾匡級
+     *
      * @param operator
      * @return
      */
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
index e3080e5..7684816 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -3,9 +3,11 @@
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.multiDataSource.DataSourceContext;
 import com.dy.common.mw.protocol.Command;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.config.DingTalk;
 import com.dy.pipIrrGlobal.daoPr.PrDivideMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrIntake;
@@ -15,6 +17,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -45,8 +48,32 @@
     @Autowired
     private RestTemplate restTemplate;
 
-    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ;
+    protected String comSendUrl;
 
+    /**
+     * pro_mw锛氬睘鎬�
+     * tag浠庢帶鍒跺櫒涓幏鍙�
+     * key_mw锛歶rl鐨刱ey
+     */
+    private Environment env = null;
+    private String pro_mw = "mw";
+    private String key_mw = "comSendUrl";
+    @Autowired
+    public IntakeSv(Environment env) {
+        this.env = env;
+    }
+
+    @Autowired
+    private DingTalk dingTalk;
+
+    public String sendMessage(String message) {
+        try {
+            dingTalk.sendMessage(message);
+        } catch (Exception e) {
+            return "鍙戦�佸け璐�";
+        }
+        return "鍙戦�佹垚鍔�";
+    }
 
     /**
      * 娣诲姞鍙栨按鍙�
@@ -78,7 +105,6 @@
     public Long getSupperByVillageId(long vaId) {
         return prIntakeMapper.getSupperByVillageId(vaId);
     }
-
 
     /**
      * 淇濆瓨淇敼瀹炰綋
@@ -207,9 +233,9 @@
         com.id = Command.defaultId;
         com.code = "LCD0001";
         com.type = "innerCommand";
+        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
 
         JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
-
         if(response != null && response.getString("code").equals("0001")) {
             JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap");
             HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class);
@@ -272,7 +298,7 @@
      * @return
      */
     protected BaseResponse sendCom2Mw(Command com){
-        String url = UriComponentsBuilder.fromUriString(mwUrlSendCom)
+        String url = UriComponentsBuilder.fromUriString(comSendUrl)
                 .build()
                 .toUriString();
         HttpHeaders headers = new HttpHeaders();
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml
index 24d6838..ceb5374 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/application.yml
@@ -15,4 +15,4 @@
       #GenerateIdSetSuffixListener涓簲鐢紝鍙栧�艰寖鍥存槸0-99
       idSuffix: ${pipIrr.project.idSuffix}
       #ConfigListener涓簲鐢�
-      #configFileNames: config-global.xml,config-demo.xml
+      #configFileNames: config-global.xml,config-demo.xml
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml
index 8dc7ccd..b6c6612 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml
@@ -15,4 +15,4 @@
             #GenerateIdSetSuffixListener涓簲鐢紝鍙栧�艰寖鍥存槸0-99
             idSuffix: ${pipIrr.remote.idSuffix}
             #ConfigListener涓簲鐢�
-            #configFileNames: config-global.xml,config-demo.xml
+            #configFileNames: config-global.xml,config-demo.xml
\ No newline at end of file

--
Gitblit v1.8.0