From 9c0d574df29258bed16ae02344d652e385f0ab4d Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 31 七月 2024 16:15:17 +0800
Subject: [PATCH] 通信中间件对报警的取水口间隔发送消息实现

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java                                      |    6 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                               |    2 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmAlarmStateLast.java                        |    5 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml                                  |   20 ++++++++--
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java                     |    3 +
 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-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java |   22 ++++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java             |   28 ++++++++++++++
 8 files changed, 78 insertions(+), 10 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-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/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/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/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"
 		/>
 		
 		<!-- 

--
Gitblit v1.8.0