From 70f61b0638e32274d0e5f9b972ce2a18f139f1b4 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 12 六月 2025 09:51:30 +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/mqtt/MqttMessageListener.java                     |   64 +---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java |   27 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java                          |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttSubMsgDealer.java                        |   41 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java                               |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java           |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/IrrStartVo.java                    |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java                        |   22 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java                        |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java                    |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java                                              |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunInfo.java                           |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/FaultClearVo.java                  |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java             |    9 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPool.java                               |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java                                  |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java                         |   26 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java                                 |   53 +++-
 pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamSetMw.java                     |   10 
 pipIrr-platform/文档/打包发布/打包发布配置修改.docx                                                                                       |    0 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/StirStartVo.java                   |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java                 |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java                                   |   14 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java                       |   24 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java                         |    6 
 pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamKey.java                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPooledObjectFactory.java                |   15 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java                    |   31 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineInfo.java                        |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolConstantSdV1.java                  |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties                                                |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java                          |   43 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/InjectStartVo.java                 |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                                       |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java                |   23 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/CodeLocal.java                |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java                              |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/resources/application-params.yml                                        |   20 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java                                  |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgCache.java                         |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java                                  |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java                             |   35 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/Test.java                                         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java                    |   80 +++++--
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java                          |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java                        |   19 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/CommandInnerDeaLer.java                     |    4 
 47 files changed, 478 insertions(+), 179 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPool.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPool.java
index 1d6d60f..23ec867 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPool.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPool.java
@@ -13,8 +13,8 @@
 
     private final GenericObjectPool<MqttClient> pool;
 
-    public MqttClientPool(String broker, String username, String password, int maxConnections) {
-        MqttClientPooledObjectFactory factory = new MqttClientPooledObjectFactory(broker, username, password);
+    public MqttClientPool(String broker, String username, String password, int maxConnections, boolean useMemoryPersistence) {
+        MqttClientPooledObjectFactory factory = new MqttClientPooledObjectFactory(broker, username, password, useMemoryPersistence);
         GenericObjectPoolConfig<MqttClient> config = new GenericObjectPoolConfig<>();
         config.setMaxTotal(maxConnections);
         config.setMaxIdle(maxConnections);
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPooledObjectFactory.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPooledObjectFactory.java
index bd2eb0f..86fc682 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPooledObjectFactory.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/MqttClientPooledObjectFactory.java
@@ -5,6 +5,7 @@
 import org.apache.commons.pool2.impl.DefaultPooledObject;
 import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 
 /**
  * @Author: liurunyu
@@ -16,18 +17,26 @@
     private final String broker;
     private final String username;
     private final String password;
+    private final Boolean useMemoryPersistence;
 
-    public MqttClientPooledObjectFactory(String broker, String username, String password) {
+    public MqttClientPooledObjectFactory(String broker, String username, String password, boolean useMemoryPersistence) {
         this.broker = broker;
         this.username = username;
         this.password = password;
+        this.useMemoryPersistence = useMemoryPersistence;
     }
 
     @Override
     public MqttClient create() throws Exception {
         String clientId = MqttClient.generateClientId();
-        MqttClient client = new MqttClient(broker, clientId);
-
+        MqttClient client = null ;
+        // 浣跨敤鍐呭瓨鎸佷箙鍖栬�岄潪榛樿鐨勬枃浠舵寔涔呭寲
+        if (useMemoryPersistence) {
+            MemoryPersistence persistence = new MemoryPersistence();
+            client = new MqttClient(broker, clientId, persistence);
+        }else{
+            client = new MqttClient(broker, clientId);
+        }
         MqttConnectOptions options = new MqttConnectOptions();
         options.setUserName(username);
         options.setPassword(password.toCharArray());
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/Test.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/Test.java
index 2611e24..560067f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/Test.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/mqtt/Test.java
@@ -34,7 +34,7 @@
     public static void main(String[] args) {
         try{
             // 鍒濆鍖栬繛鎺ユ睜
-            pool = new MqttClientPool("tcp://" + mqSvIp + ":" + mqSvPort, mqSvUserName, mqSvUserPassword, maxConnections);
+            pool = new MqttClientPool("tcp://" + mqSvIp + ":" + mqSvPort, mqSvUserName, mqSvUserPassword, maxConnections, true);
             MqttClient clientSub = pool.popClient() ;
             testSubscribe(clientSub, topic1);
             testSubscribe(clientSub, topic2);
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
index 80e7d3f..df54556 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -328,14 +328,16 @@
         index += 8 ;
         cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ;
 
-        index += 8 ;
-        cdData.startDt  = GlParse.parseRtuDt(bs, index) ;
-
         if(cdData.clResult == (byte)0x81){
+            //2025-06-11 鐜嬫睙娴峰畨鎺�
             //澶辫触浜嗭紝涓嬮潰灏辨病鏈夋暟鎹簡
             return ;
         }
 
+        index += 8 ;
+        cdData.startDt  = GlParse.parseRtuDt(bs, index) ;
+
+
         index += 6 ;
         cdData.endDt  = GlParse.parseRtuDt(bs, index) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java
index 11cfbd6..5a03f7e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java
@@ -21,7 +21,7 @@
                 vo.orgTag = topicGrp[0] ;
                 vo.protocol = topicGrp[1] ;
                 vo.devId = topicGrp[2] ;
-                vo.topic = topicGrp[3] ;
+                vo.name = topicGrp[3] ;
                 return vo ;
             }
         }else{
@@ -30,7 +30,7 @@
     }
 
     public static String createPubTopic(MqttTopic tp) throws Exception {
-        return tp.orgTag + "/" + tp.protocol + "/" + tp.devId + "/" + tp.topic ;
+        return tp.orgTag + "/" + tp.protocol + "/" + tp.devId + "/" + tp.name;
     }
 
     public static MqttSubMsg parseSubMsg(MqttTopic subTopic, MqttMessage mqttMsg, MqttCallback callback) throws Exception {
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java
index bd864d3..eba4ecf 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java
@@ -12,7 +12,7 @@
 
     public String mqttResultSendWebUrl ;//Mqtt杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 
-    public String topic ;//娑堟伅涓婚
+    public MqttTopic topic ;//娑堟伅涓婚
     public String msg ;//娑堟伅
 
     public boolean isCacheForOffLine ;//涓嬭鍛戒护鎺у埗锛屾秷鎭腑闂翠欢涓嶅湪绾挎槸鍚︾紦瀛樺懡浠�
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java
index bc144f2..8226de7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java
@@ -15,8 +15,8 @@
     public String deviceId ;//璁惧ID
     public String protocol;//鍗忚
 
-    public String topic ;//娑堟伅涓婚
-    public String msg ;//娑堟伅
+    public MqttTopic topic ;//娑堟伅涓婚
+    public String metaData;//MQTT鎺ㄩ�佹潵鐨勫厓鏁版嵁
 
     public abstract boolean valid();
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
index 8403a73..d088e08 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
@@ -16,6 +16,18 @@
     public String orgTag ;//缁勭粐鏍囪瘑
     public String protocol ;//鍗忚鍚嶇О
     public String devId ;//璁惧锛團Box锛塈D
-    public String topic ;//娑堟伅涓婚
+    public String name;//娑堟伅涓婚鏈鍚嶇О
 
+    public boolean isEmpty(){
+        return orgTag == null || protocol == null || devId == null || name == null
+                || orgTag.trim().length() == 0 || protocol.trim().length() == 0 || devId.trim().length() == 0 || name.trim().length() == 0 ;
+    }
+
+    public String shortName(){
+        return name;
+    }
+
+    public String longName(){
+        return orgTag + "/" + protocol + "/" + devId + "/" + name;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
index 4d0cd99..a78f8b0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
@@ -10,4 +10,5 @@
     public static final String cd_Stir = "01" ;//鎼呮媽鍚仠鍛戒护
     public static final String cd_Inject = "02" ;//娉ㄨ偉鍚仠鍛戒护
     public static final String cd_Irr = "03" ;//鐏屾簤鍚仠鍛戒护
+    public static final String cd_Param = "10" ;//璁惧畾鍙傛暟
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java
index 001b8c3..c654c22 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java
@@ -24,8 +24,8 @@
     public MqttSubMsgSdV1(MqttTopic subTopic, String msg) {
         this.deviceId = subTopic.devId ;
         this.protocol = subTopic.protocol ;
-        this.topic = subTopic.topic ;
-        this.msg = msg ;
+        this.topic = subTopic ;
+        this.metaData = msg ;
     }
     public String toString(){
         StringBuilder sb = new StringBuilder();
@@ -35,24 +35,25 @@
                     .append("\n") ;
         }
         sb.append("涓婚:")
-                .append(topic)
-                .append("\n") ;
-        sb.append("娑堟伅:")
-                .append(msg)
+                .append(topic.longName())
                 .append("\n") ;
         if(vo4Up != null){
             sb.append("鏁版嵁:")
                     .append(vo4Up.toString())
                     .append("\n") ;
+        }else{
+            sb.append("鍏冩暟鎹�:")
+                    .append(metaData)
+                    .append("\n") ;
         }
-
         return sb.toString() ;
     }
 
     public boolean subMsgMatchPubMsg(MqttPubMsg pubMsg){
         if (pubMsg instanceof MqttPubMsgSdV1) {
-            MqttPubMsgSdV1 pubMsgSdV1 = (MqttPubMsgSdV1) pubMsg;
+            //MqttPubMsgSdV1 pubMsgSdV1 = (MqttPubMsgSdV1) pubMsg;
             if(this.vo4Up != null && this.vo4Up instanceof StateVo){
+                //鍙涓婃姤鐨勬槸鐘舵�佹暟鎹紝璇存槑璁惧鍝嶅簲浜嗗懡浠�
                 return true ;
             }
         }
@@ -64,7 +65,7 @@
         if (topic == null || topic.isEmpty()) {
             return false;
         }
-        if (msg == null || msg.isEmpty()) {
+        if (metaData == null || metaData.isEmpty()) {
             return false;
         }
         return true;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolConstantSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolConstantSdV1.java
index 60dc354..8961281 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolConstantSdV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolConstantSdV1.java
@@ -20,5 +20,6 @@
     public static final String PubTopicStir = "ctrlStir" ;//鎼呮媽鍚仠
     public static final String PubTopicInject = "ctrlInject" ;//娉ㄨ偉鍚仠
     public static final String PubTopicIrr = "ctrlIrr" ;//鐏屾簤鍚仠
+    public static final String PubTopicParam = "setParam" ;//璁剧疆鍙傛暟
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java
index df625b1..1a7d373 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java
@@ -4,14 +4,16 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.mw.protocol.Command;
 import com.dy.common.mw.protocol4Mqtt.MqttCallback;
-import com.dy.common.mw.protocol4Mqtt.MqttMsgParser;
 import com.dy.common.mw.protocol4Mqtt.MqttTopic;
 import com.dy.common.mw.protocol4Mqtt.Vo4Up;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.comParam.ComCtrlVo;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.comParam.ComSetParamVo;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.downVos.FaultClearVo;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.downVos.InjectStartVo;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.downVos.ParamSetVo;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.downVos.StirStartVo;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.*;
+import com.dy.common.mw.protocol4Mqtt.status.DevRunInfo;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 
 /**
@@ -21,38 +23,46 @@
  */
 public class ProtocolParserSdV1 {
     public MqttSubMsgSdV1 parseSubMsg(MqttTopic subTopic, MqttMessage mqttMsg, MqttCallback callback) throws Exception {
-        String msg = new String(mqttMsg.getPayload(), "UTF-8");
-        if(JSON.isValid(msg)){
-            throw new Exception("鎺ユ敹鍒癕QTT娑堟伅锛屽崗璁�" + subTopic.protocol + "锛岃澶嘔D" + subTopic.devId + "锛屼富棰�" + subTopic.topic + "娑堟伅鏍煎紡闈瀓son鏁版嵁(" + msg + ")") ;
+        String strTxt = new String(mqttMsg.getPayload(), "UTF-8");
+        if(!JSON.isValid(strTxt)){
+            throw new Exception("鎺ユ敹鍒癕QTT娑堟伅锛屽崗璁�" + subTopic.protocol + "锛岃澶嘔D" + subTopic.devId + "锛屼富棰�" + subTopic.longName() + "娑堟伅鏍煎紡闈瀓son鏁版嵁(" + strTxt + ")") ;
         }
-        MqttSubMsgSdV1 ms = new MqttSubMsgSdV1(subTopic, msg);
+        MqttSubMsgSdV1 msg = new MqttSubMsgSdV1(subTopic, strTxt);
         Vo4Up vo ;
-        switch (subTopic.topic) {
+        DevRunInfo stInfo = null ;
+        switch (subTopic.name) {
             case ProtocolConstantSdV1.SubTopicWeather -> {
-                vo = JSON.parseObject(msg, WeatherVo.class);
+                vo = JSON.parseObject(strTxt, WeatherVo.class);
                 break;
             }
             case ProtocolConstantSdV1.SubTopicSoil -> {
-                vo = JSON.parseObject(msg, SoilVo.class);
+                vo = JSON.parseObject(strTxt, SoilVo.class);
                 break;
             }
             case ProtocolConstantSdV1.SubTopicManure -> {
-                vo = JSON.parseObject(msg, ManureVo.class);
+                vo = JSON.parseObject(strTxt, ManureVo.class);
                 break;
             }
             case ProtocolConstantSdV1.SubTopicState -> {
                 //姝ゅ鏈畬鎴愶紝搴旇浜х敓涓�浜涢�氫俊鐨刬nfo锛屼緵涓嬮潰callback.notify(objs)閫氱煡鍑哄幓
-                vo = JSON.parseObject(msg, StateVo.class);
+                vo = JSON.parseObject(strTxt, StateVo.class);
+                StateVo stVo = (StateVo)vo ;
+                stInfo = new DevRunInfo() ;
+                stInfo.devId = msg.deviceId ;
+                stInfo.stirRunning = (stVo.stirRunning==null?false:(stVo.stirRunning.byteValue()==1?true:false)) ; //鎼呮媽杩愯 true鏄� false鍚�
+                stInfo.injectRunning = (stVo.injectRunning==null?false:(stVo.injectRunning.byteValue()==1?true:false)) ; //娉ㄨ偉杩愯 true鏄� false鍚�
+                stInfo.irrRunning = (stVo.irrRunning==null?false:(stVo.irrRunning.byteValue()==1?true:false)) ; //鐏屾簤杩愯 true鏄� false鍚�
+                stInfo.alarm = (stVo.alarm==null?false:(stVo.alarm.byteValue()==1?true:false)) ; //鎶ヨ true鏄� false鍚�
                 break;
             }
             default -> {
-                throw new Exception("鎺ユ敹鍒癕QTT娑堟伅锛屽崗璁�" + subTopic.protocol + "锛岃澶嘔D" + subTopic.devId + "锛屼富棰�" + subTopic.topic + "娑堟伅瑙f瀽閫昏緫鏈疄鐜�");
+                throw new Exception("鎺ユ敹鍒癕QTT娑堟伅锛屽崗璁�" + subTopic.protocol + "锛岃澶嘔D" + subTopic.devId + "锛屼富棰�" + subTopic.name + "娑堟伅瑙f瀽閫昏緫鏈疄鐜�");
             }
         }
-        ms.vo4Up = vo ;
-        callback.callback(ms);
-        callback.notify(null);//姝ゅ鏈畬鎴�
-        return ms;
+        msg.vo4Up = vo ;
+        callback.callback(msg);
+        callback.notify(msg.deviceId, stInfo);
+        return msg;
     }
 
     public MqttPubMsgSdV1 createPubMsg(String orgTag, Command com) throws Exception {
@@ -86,6 +96,13 @@
                 msg = this.createPubMsgOfIrr(orgTag, com);
                 break;
             }
+            case CodeSdV1.cd_Param -> {
+                //璁剧疆鍙傛暟
+                this.checkParam(com);
+                this.checkRtnWebUrl(com);
+                msg = this.createPubMsgOfParam(orgTag, com);
+                break;
+            }
             default -> {
                 throw new Exception("鎺ユ敹鍒癕QTT鍛戒护锛屽崗璁�" + com.protocol + "鐗堟湰" + com.protocolVersion + "鍔熻兘鐮�" + com.code + "鏋勯�犲櫒鏈疄鐜�");
             }
@@ -114,8 +131,8 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = MqttMsgParser.createPubTopic(new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault)) ;
-        msg.msg = JSON.toJSONString(new FaultClearVo(cvo.isDo)) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault) ;
+        msg.msg = JSON.toJSONString(new FaultClearVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
     private MqttPubMsgSdV1 createPubMsgOfStir(String orgTag, Command com) throws Exception {
@@ -130,8 +147,8 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = MqttMsgParser.createPubTopic(new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault)) ;
-        msg.msg = JSON.toJSONString(new StirStartVo(cvo.isDo)) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicStir) ;
+        msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
     private MqttPubMsgSdV1 createPubMsgOfInject(String orgTag, Command com) throws Exception {
@@ -146,8 +163,8 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = MqttMsgParser.createPubTopic(new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault)) ;
-        msg.msg = JSON.toJSONString(new InjectStartVo(cvo.isDo)) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicInject) ;
+        msg.msg = JSON.toJSONString(new InjectStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
     private MqttPubMsgSdV1 createPubMsgOfIrr(String orgTag, Command com) throws Exception {
@@ -162,8 +179,25 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = MqttMsgParser.createPubTopic(new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault)) ;
-        msg.msg = JSON.toJSONString(new StirStartVo(cvo.isDo)) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicIrr) ;
+        msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
+        return msg ;
+    }
+
+    private MqttPubMsgSdV1 createPubMsgOfParam(String orgTag, Command com) throws Exception {
+        JSONObject obj = (JSONObject) com.param;
+        String json = obj.toJSONString();
+        ComSetParamVo cvo = JSON.parseObject(json, ComSetParamVo.class);
+        if(cvo == null){
+            throw new Exception("json杞珻omSetParamVo涓簄ull") ;
+        }
+        MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ;
+        this.setPubMsgBase(com, msg);
+        msg.isCacheForOffLine = false ;
+        msg.hasResponse = false ;
+        msg.cd = CodeSdV1.cd_Param ;
+        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicParam) ;
+        msg.msg = JSON.toJSONString(new ParamSetVo(cvo.stirDuration, cvo.injectDuration)) ;
         return msg ;
     }
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java
index 185e4f5..6e6e9f6 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java
@@ -6,7 +6,7 @@
  * @Description
  */
 public class ComCtrlVo {
-    //鏄惁鎺у埗鍔ㄤ綔锛宼rue鏄紝false鍚�
+    //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
     //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
-    public boolean isDo;//
+    public boolean startTrueStopFalse;//
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java
new file mode 100644
index 0000000..a14d5b1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol4Mqtt.pSdV1.comParam;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/11 17:03
+ * @Description
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ComSetParamVo {
+    // 鎼呮媽璁惧畾鏃堕棿
+    public Integer stirDuration ;
+
+    // 娉ㄨ偉璁惧畾鏃堕棿
+    public Integer injectDuration ;
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/FaultClearVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/FaultClearVo.java
index e9657ce..ec31c5b 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/FaultClearVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/FaultClearVo.java
@@ -16,10 +16,10 @@
 @AllArgsConstructor
 public class FaultClearVo implements Vo4Down {
     @JSONField(name = "鏁呴殰瑙i櫎")
-    public boolean isDo ;
+    public Byte isDo ;//1鏄紝0鍚�
 
     @Override
     public String toString(){
-        return "鏁呴殰瑙i櫎锛�" + (isDo?"鏄�":"鍚�") ;
+        return "鏁呴殰瑙i櫎锛�" + (isDo==1?"鏄�":"鍚�") ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/InjectStartVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/InjectStartVo.java
index 4311fd2..5e4190e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/InjectStartVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/InjectStartVo.java
@@ -16,9 +16,10 @@
 @AllArgsConstructor
 public class InjectStartVo implements Vo4Down {
     @JSONField(name = "娉ㄨ偉鍚仠")
-    public boolean isDo ;//true涓哄惎锛宖alse涓哄仠
+    public Byte isDo ;//1鏄紝0鍚�
+
     @Override
     public String toString(){
-        return "娉ㄨ偉鍚仠锛�" + (isDo?"鍚�":"鍋�") ;
+        return "娉ㄨ偉鍚仠锛�" + (isDo==1?"鍚�":"鍋�") ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/IrrStartVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/IrrStartVo.java
index f05c154..69feb68 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/IrrStartVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/IrrStartVo.java
@@ -16,9 +16,10 @@
 @AllArgsConstructor
 public class IrrStartVo implements Vo4Down {
     @JSONField(name = "鐏屾簤鍚仠")
-    public boolean isDo ;//true涓哄惎锛宖alse涓哄仠
+    public Byte isDo ;//1鏄紝0鍚�
+
     @Override
     public String toString(){
-        return "鐏屾簤鍚仠锛�" + (isDo?"鍚�":"鍋�") ;
+        return "鐏屾簤鍚仠锛�" + (isDo==1?"鏄�":"鍚�") ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java
new file mode 100644
index 0000000..48ecd14
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java
@@ -0,0 +1,31 @@
+package com.dy.common.mw.protocol4Mqtt.pSdV1.downVos;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.dy.common.mw.protocol4Mqtt.Vo4Down;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/11 16:55
+ * @Description
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ParamSetVo implements Vo4Down {
+    @JSONField(name = "鎼呮媽璁惧畾鏃堕棿")
+    public Integer stirDuration ;
+
+    @JSONField(name = "娉ㄨ偉璁惧畾鏃堕棿")
+    public Integer injectDuration ;
+
+    @Override
+    public String toString(){
+        StringBuilder sb = new StringBuilder();
+        sb.append("鎼呮媽璁惧畾鏃堕棿锛�" + stirDuration + "\n" );
+        sb.append("娉ㄨ偉璁惧畾鏃堕棿锛�" + injectDuration + "\n" );
+        return sb.toString();
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/StirStartVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/StirStartVo.java
index 44baf99..333207e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/StirStartVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/StirStartVo.java
@@ -16,9 +16,10 @@
 @AllArgsConstructor
 public class StirStartVo implements Vo4Down {
     @JSONField(name = "鎼呮媽鍚仠")
-    public boolean isDo ;//true涓哄惎锛宖alse涓哄仠
+    public Byte isDo ;//1鏄紝0鍚�
+
     @Override
     public String toString(){
-        return "鎼呮媽鍚仠锛�" + (isDo?"鍚�":"鍋�") ;
+        return "鎼呮媽鍚仠锛�" + (isDo==1?"鏄�":"鍚�") ;
     }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java
index f038514..a2f9ae8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java
@@ -12,6 +12,18 @@
  */
 @Data
 public class ManureVo implements Vo4Up {
+    @JSONField(name = "flexem_message_id")
+    public Integer messageId ;//娑堟伅ID
+
+    @JSONField(name = "鑲ユ枡娴侀噺")
+    public Float manureFlow ;//鑲ユ枡娴侀噺
+
+    @JSONField(name = "娉ㄨ偉鏃堕暱")
+    public Integer manureTime ;//娉ㄨ偉鏃堕暱
+
+    @JSONField(name = "鎼呮媽鏃堕暱")
+    public Integer stirTime ;//鎼呮媽鏃堕暱
+
     @JSONField(name = "flexem_timestamp")
     public Long devDt ;//璁惧鏃堕棿
 
@@ -27,9 +39,13 @@
     @Override
     public String toString(){
         StringBuilder sb = new StringBuilder();
-        sb.append("姘磋偉鏁版嵁锛�") ;
-        sb.append(" 璁惧鏃堕棿锛�"+devDt) ;
-        sb.append(" 璁惧鏃堕棿锛�"+ this.getDevDtStr()) ;
+        sb.append("姘磋偉鏁版嵁=>") ;
+        sb.append(" 娑堟伅ID锛�" + messageId + ", ") ;
+        sb.append(" 鑲ユ枡娴侀噺锛�" + manureFlow + ", ") ;
+        sb.append(" 娉ㄨ偉鏃堕暱锛�" + manureTime + ", ") ;
+        sb.append(" 鎼呮媽鏃堕暱锛�" + stirTime + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" + devDt + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" +  this.getDevDtStr() + ", ") ;
         sb.append("\n") ;
         return sb.toString() ;
     }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
index a465609..f5bb1e0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
@@ -12,6 +12,33 @@
  */
 @Data
 public class SoilVo implements Vo4Up {
+    @JSONField(name = "flexem_message_id")
+    public Integer messageId ;//娑堟伅ID
+
+    @JSONField(name = "鍦熷¥婀垮害1")
+    public Float soilHumidity1 ;//鍦熷¥婀垮害1
+
+    @JSONField(name = "鍦熷¥婀垮害2")
+    public Float soilHumidity2 ;//鍦熷¥婀垮害2
+
+    @JSONField(name = "鍦熷¥婀垮害3")
+    public Float soilHumidity3 ;//鍦熷¥婀垮害3
+
+    @JSONField(name = "鍦熷¥婀垮害4")
+    public Float soilHumidity4 ;//鍦熷¥婀垮害4
+
+    @JSONField(name = "鍦熷¥婀垮害1")
+    public Float soilTemperature1 ;//鍦熷¥娓╁害1
+
+    @JSONField(name = "鍦熷¥娓╁害2")
+    public Float soilTemperature2 ;//鍦熷¥娓╁害2
+
+    @JSONField(name = "鍦熷¥娓╁害3")
+    public Float soilTemperature3 ;//鍦熷¥娓╁害3
+
+    @JSONField(name = "鍦熷¥娓╁害4")
+    public Float soilTemperature4 ;//鍦熷¥娓╁害4
+
     @JSONField(name = "flexem_timestamp")
     public Long devDt ;//璁惧鏃堕棿
 
@@ -27,10 +54,20 @@
     @Override
     public String toString(){
         StringBuilder sb = new StringBuilder();
-        sb.append("澧掓儏鏁版嵁锛�") ;
-        sb.append(" 璁惧鏃堕棿锛�"+devDt) ;
-        sb.append(" 璁惧鏃堕棿锛�"+ this.getDevDtStr()) ;
+        sb.append("澧掓儏鏁版嵁=>") ;
+        sb.append(" 娑堟伅ID锛�" + messageId + ", ") ;
+        sb.append(" 鍦熷¥婀垮害1锛�" + soilHumidity1 + ", ") ;
+        sb.append(" 鍦熷¥婀垮害2锛�" + soilHumidity2 + ", ") ;
+        sb.append(" 鍦熷¥婀垮害3锛�" + soilHumidity3 + ", ") ;
+        sb.append(" 鍦熷¥婀垮害4锛�" + soilHumidity4 + ", ") ;
+        sb.append(" 鍦熷¥娓╁害1锛�" + soilTemperature1 + ", ") ;
+        sb.append(" 鍦熷¥娓╁害2锛�" + soilTemperature2 + ", ") ;
+        sb.append(" 鍦熷¥娓╁害3锛�" + soilTemperature3 + ", ") ;
+        sb.append(" 鍦熷¥娓╁害4锛�" + soilTemperature4 + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" + devDt + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" +  this.getDevDtStr() + ", ") ;
         sb.append("\n") ;
         return sb.toString() ;
+
     }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java
index cae3afc..fb3885d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java
@@ -12,6 +12,21 @@
  */
 @Data
 public class StateVo implements Vo4Up {
+    @JSONField(name = "flexem_message_id")
+    public Integer messageId ;//娑堟伅ID
+
+    @JSONField(name = "鎼呮媽杩愯")
+    public Byte stirRunning ;//鎼呮媽杩愯
+
+    @JSONField(name = "娉ㄨ偉杩愯")
+    public Byte injectRunning ;//娉ㄨ偉杩愯
+
+    @JSONField(name = "鐏屾簤杩愯")
+    public Byte irrRunning ;//鐏屾簤杩愯
+
+    @JSONField(name = "鎶ヨ")
+    public Byte alarm ;//鎶ヨ
+
     @JSONField(name = "flexem_timestamp")
     public Long devDt ;//璁惧鏃堕棿
 
@@ -27,9 +42,14 @@
     @Override
     public String toString(){
         StringBuilder sb = new StringBuilder();
-        sb.append("鐘舵�佹暟鎹細") ;
-        sb.append(" 璁惧鏃堕棿锛�"+devDt) ;
-        sb.append(" 璁惧鏃堕棿锛�"+ this.getDevDtStr()) ;
+        sb.append("鐘舵�佹暟鎹�=>") ;
+        sb.append(" 娑堟伅ID锛�" + messageId + ", ") ;
+        sb.append(" 鎼呮媽杩愯锛�" + stirRunning + ", ") ;
+        sb.append(" 娉ㄨ偉杩愯锛�" + injectRunning + ", ") ;
+        sb.append(" 鐏屾簤杩愯锛�" + irrRunning + ", ") ;
+        sb.append(" 鎶ヨ锛�" + alarm + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" + devDt + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" +  this.getDevDtStr() + ", ") ;
         sb.append("\n") ;
         return sb.toString() ;
     }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
index 6ebc8be..170bf51 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
@@ -43,7 +43,7 @@
 
     public String devDtStr ;//璁惧鏃堕棿
     public String getDevDtStr() {
-        if(devDt == null){
+        if(devDt != null){
             return DateTime.yyyy_MM_dd_HH_mm_ss(DateTime.getDate(devDt)) ;
         }else{
             return "" ;
@@ -53,17 +53,17 @@
     @Override
     public String toString(){
         StringBuilder sb = new StringBuilder();
-        sb.append("姘旇薄鏁版嵁锛�") ;
-        sb.append(" 娑堟伅ID锛�"+messageId) ;
-        sb.append(" 浜屾哀鍖栫⒊锛�"+carbonDioxide) ;
-        sb.append(" 鍏夌収寮哄害锛�"+lightIntensity) ;
-        sb.append(" 澶ф皵鍘嬪姏锛�"+atmosphericPressure) ;
-        sb.append(" 绌烘皵娓╁害锛�"+airTemperature) ;
-        sb.append(" 绌烘皵婀垮害锛�"+airHumidity) ;
-        sb.append(" PM2.5锛�"+pm25) ;
-        sb.append(" PM10锛�"+pm10) ;
-        sb.append(" 璁惧鏃堕棿锛�"+devDt) ;
-        sb.append(" 璁惧鏃堕棿锛�"+ this.getDevDtStr()) ;
+        sb.append("姘旇薄鏁版嵁=>") ;
+        sb.append(" 娑堟伅ID锛�" + messageId + ", ") ;
+        sb.append(" 浜屾哀鍖栫⒊锛�" + carbonDioxide + ", ") ;
+        sb.append(" 鍏夌収寮哄害锛�" + lightIntensity + ", ") ;
+        sb.append(" 澶ф皵鍘嬪姏锛�" + atmosphericPressure + ", ") ;
+        sb.append(" 绌烘皵娓╁害锛�" + airTemperature + ", ") ;
+        sb.append(" 绌烘皵婀垮害锛�" + airHumidity + ", ") ;
+        sb.append(" PM2.5锛�" + pm25 + ", ") ;
+        sb.append(" PM10锛�" + pm10 + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" + devDt + ", ") ;
+        sb.append(" 璁惧鏃堕棿锛�" +  this.getDevDtStr() + ", ") ;
         sb.append("\n") ;
         return sb.toString() ;
     }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineSt.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineInfo.java
similarity index 83%
rename from pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineSt.java
rename to pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineInfo.java
index 1092b27..99eda6c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineSt.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevOnLineInfo.java
@@ -9,7 +9,7 @@
  * @Description
  */
 @Data
-public class DevOnLineSt implements MqttNotifyInfo {
+public class DevOnLineInfo implements MqttNotifyInfo {
     public String id ;
     public String protocol ;
     public Boolean onLine ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunSt.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunInfo.java
similarity index 82%
rename from pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunSt.java
rename to pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunInfo.java
index 0fe300a..4811f1c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunSt.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/status/DevRunInfo.java
@@ -9,8 +9,8 @@
  * @Description
  */
 @Data
-public class DevRunSt implements MqttNotifyInfo {
-    public String id ;
+public class DevRunInfo implements MqttNotifyInfo {
+    public String devId ;//MQTT璁剧疆ID
     public Boolean stirRunning ;//鎼呮媽杩愯 true鏄� false鍚�
     public Boolean injectRunning ;//娉ㄨ偉杩愯 true鏄� false鍚�
     public Boolean irrRunning ;//鐏屾簤杩愯 true鏄� false鍚�
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 0cf1c24..e823bbd 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
@@ -474,6 +474,7 @@
 				if(mqVo.poolMaxSize <= 1 || mqVo.poolMaxSize > 1000){
 					throw new Exception("config.mqtt.poolMaxSize閰嶇疆鐨勮繛鎺ユ睜杩炴帴鏈�澶ф暟閲忎笉鍚堟硶") ;
 				}
+				mqVo.useMemoryPersistence = conf.getSetAttrBoolean(doc, "config.mqtt", "useMemoryPersistence", null, null) ;
 				String proAndDevIds = conf.getSetAttrTxt(doc, "config.mqtt", "protocolAndDeviceIds", null, false, null) ;
 				if(proAndDevIds == null || proAndDevIds.trim().equals("")){
 					throw new Exception("config.mqtt.protocolAndDeviceIds閰嶇疆涓嶅悎娉�") ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java
index 5171b77..95a6248 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java
@@ -32,7 +32,7 @@
                 com2.code = CodeLocal.stopMqttSv ;
                 com2.type = CommandType.innerCommand ;
                 new CommandInnerDeaLer().deal(com2) ;
-
+                log.info("鍏抽棴绋嬪簭鍓嶏紝鍏抽棴浜哅QTT鏈嶅姟");
             }catch (Exception e){
                 log.error("绋嬪簭锛堟帶鍒跺彴锛夊叧闂挬瀛愬彂鐢熷紓甯�", e);
             }
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 6b4d081..0e2375b 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
@@ -113,6 +113,10 @@
                 rCom = this.stopMqttSv(com);
                 break;
             }
+            case CodeLocal.recoverMqttSv -> {
+                rCom = this.recoverMqttSv(com);
+                break;
+            }
             default -> {
                 rCom = ReturnCommand.errored("鍑洪敊锛屾敹鍒板唴閮ㄥ懡浠ょ殑鍔熻兘鐮佷笉鑳借瘑鍒紒", com.getId(), com.getCode());
                 break;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java
index 3a80412..676852f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java
@@ -19,7 +19,6 @@
      * @param message
      */
     public static Command successed(String message, String commandId, String code, Object attachment) {
-        log.info(message);
         Command command = new Command().createReturnSuccessCommand(message, commandId, code);
         command.setAttachment(attachment);
         return command;
@@ -29,7 +28,6 @@
      * @param message
      */
     public static Command successed(String message, String commandId, String code) {
-        log.info(message);
         return new Command().createReturnSuccessCommand(message, commandId, code);
     }
     /**
@@ -37,7 +35,6 @@
      * @param message
      */
     public static Command errored(String message, String commandId, String code) {
-        log.error(message);
         return new Command().createReturnErrorCommand(message, commandId, code);
     }
 }
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 e1a0417..56096ba 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
@@ -38,7 +38,7 @@
 
 	public static final String onPartLineMqtt = "LMCD0002" ;//鏌ヨ閮ㄥ垎MQTT璁惧鍦ㄧ嚎鎯呭喌
 
-	public static final String onLineStatisticsMqtt = "LMCD0003" ;//鏌ヨ鎵�鏈塎QTT璁惧鐘舵�佺粺璁℃儏鍐�
+	public static final String onLineStatisticsMqtt = "LMCD0003" ;//鏌ヨ鎵�鏈塎QTT璁惧鍦ㄧ嚎鐘舵�佺粺璁℃儏鍐�
 
 	public static final String allRtuStatesMqtt = "LMCD0010" ;//鏌ヨ鎵�鏈塎QTT璁惧鐘舵��
 
@@ -48,5 +48,7 @@
 
 	public static final String stopMqttSv = "LMCD0110" ;//鍋滄Mqtt鏈嶅姟
 
+	public static final String recoverMqttSv = "LMCD0112" ;//閲嶅惎MQTT鏈嶅姟锛屾帴鍏ユ柊鐨凪QTT杩炴帴
+
 
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java
index c164c0a..d3b2f2b 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java
@@ -1,6 +1,6 @@
 package com.dy.rtuMw.server.mqtt;
 
-import com.dy.common.mw.protocol4Mqtt.status.DevRunSt;
+import com.dy.common.mw.protocol4Mqtt.status.DevRunInfo;
 import com.dy.rtuMw.server.forTcp.RtuLogDealer;
 import com.dy.rtuMw.server.local.localProtocol.RtuOnLineStateStatisticsVo;
 
@@ -55,7 +55,7 @@
             Map.Entry<String, DevStatus> entry = null ;
             while(it.hasNext()){
                 entry = it.next() ;
-                if(((DevStatus)entry).onLine != null && ((DevStatus)entry).onLine.booleanValue()){
+                if((entry.getValue()).onLine != null && (entry.getValue()).onLine.booleanValue()){
                     vo.onLineNum++ ;
                 }else{
                     vo.offLineNum++ ;
@@ -166,7 +166,7 @@
         }
     }
 
-    public static void setStatus(String devId, DevRunSt st){
+    public static void setStatus(String devId, DevRunInfo st){
         DevStatus vo = map.get(devId) ;
         if(vo != null) {
             if(st.stirRunning != null){
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java
index ac3e211..8085e91 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java
@@ -3,12 +3,15 @@
 import com.dy.common.mw.channel.mqtt.MqttClientPool;
 import com.dy.common.mw.protocol4Mqtt.MqttNotify;
 import com.dy.common.mw.protocol4Mqtt.MqttNotifyInfo;
-import com.dy.common.mw.protocol4Mqtt.status.DevOnLineSt;
-import com.dy.common.mw.protocol4Mqtt.status.DevRunSt;
+import com.dy.common.mw.protocol4Mqtt.status.DevOnLineInfo;
+import com.dy.common.mw.protocol4Mqtt.status.DevRunInfo;
 import com.dy.rtuMw.server.ServerProperties;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.eclipse.paho.client.mqttv3.MqttClient;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @Author: liurunyu
@@ -24,6 +27,8 @@
     private MqttUnitConfigVo configVo ;
 
     private MqttClientPool pool;
+
+    private List<MqttClient> subClients ;
 
     private MqttManager(){
     }
@@ -43,8 +48,9 @@
      * @throws Exception
      */
     public void start()throws Exception{
+        subClients = new ArrayList<>();
         String URL = "tcp://" + this.configVo.svIp + ":" + this.configVo.svPort;
-        this.pool = new MqttClientPool(URL, this.configVo.svUserName, this.configVo.svUserPassword, this.configVo.poolMaxSize);
+        this.pool = new MqttClientPool(URL, this.configVo.svUserName, this.configVo.svUserPassword, this.configVo.poolMaxSize, this.configVo.useMemoryPersistence);
         if(this.pool.isClose()){
             throw new Exception("Mqtt杩炴帴姹犲垵濮嬪寲澶辫触");
         }
@@ -57,6 +63,7 @@
         if(clientSub == null || !clientSub.isConnected()){
             throw new Exception("Mqtt杩炴帴姹犺幏寰楄闃呰繛鎺ヤ笉鍙敤");
         }
+        subClients.add(clientSub) ;
         // 璁㈤槄涓婚
         for(int i = 0; i < this.configVo.subTopics.length; i++){
             for(int j = 0 ; j < this.configVo.protocolAndDeviceIds.length; j++){
@@ -70,15 +77,15 @@
                             public void notify(String devId, MqttNotifyInfo... infos) {
                                 if(devId != null && infos != null && infos.length > 0){
                                     for(MqttNotifyInfo info : infos){
-                                        if(info instanceof DevOnLineSt){
-                                            DevOnLineSt onLineSt = (DevOnLineSt)info;
+                                        if(info instanceof DevOnLineInfo){
+                                            DevOnLineInfo onLineSt = (DevOnLineInfo)info;
                                             if(onLineSt.onLine != null && onLineSt.onLine.booleanValue()){
-                                                DevStatusDealer.onLine(devId, ((DevOnLineSt)info).protocol);
+                                                DevStatusDealer.onLine(devId, ((DevOnLineInfo)info).protocol);
                                             }else{
                                                 DevStatusDealer.offLine(devId);
                                             }
-                                        } else if(info instanceof DevRunSt){
-                                            DevStatusDealer.setStatus(devId, (DevRunSt)info);
+                                        } else if(info instanceof DevRunInfo){
+                                            DevStatusDealer.setStatus(devId, (DevRunInfo)info);
                                         }
                                     }
                                 }
@@ -90,6 +97,18 @@
     }
 
     public void stop()throws Exception{
+        if(subClients != null && subClients.size() > 0){
+            for (MqttClient client : subClients) {
+                if(client != null && client.isConnected()){
+                    try{
+                        client.disconnect();
+                        client.close();
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
         if(this.pool != null){
             // 鍏抽棴杩炴帴姹�
             this.pool.close();
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttMessageListener.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttMessageListener.java
index 7d8c6ea..c109e53 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttMessageListener.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttMessageListener.java
@@ -22,51 +22,29 @@
 
     @Override
     public void messageArrived(String topic, MqttMessage msg) throws Exception {
-        MqttTopic subTopic = MqttMsgParser.parseSubTopic(topic) ;
-        MqttSubMsg subMsg = MqttMsgParser.parseSubMsg(subTopic, msg, new MqttCallback(){
-            @Override
-            public void callback(MqttSubMsg subMsg) {
-                DevStatusDealer.onLine(subMsg.deviceId, subMsg.protocol);
-                DevStatusDealer.afterReceiveSubMessage(subMsg.deviceId);
-                RtuLogDealer.log4Mqtt(subMsg.deviceId, "璁㈤槄娑堟伅    涓婚锛�" + subMsg.topic + "   娑堟伅锛�" + subMsg.msg);
-            }
-            @Override
-            public void notify(String devId, MqttNotifyInfo... infos) {
-                if(notify != null){
-                    notify.notify(devId, infos) ;
+        try {
+            MqttTopic subTopic = MqttMsgParser.parseSubTopic(topic);
+            MqttSubMsg subMsg = MqttMsgParser.parseSubMsg(subTopic, msg, new MqttCallback() {
+                @Override
+                public void callback(MqttSubMsg subMsg) {
+                    DevStatusDealer.onLine(subMsg.deviceId, subMsg.protocol);
+                    DevStatusDealer.afterReceiveSubMessage(subMsg.deviceId);
+                    RtuLogDealer.log4Mqtt(subMsg.deviceId, "璁㈤槄娑堟伅    涓婚锛�" + subMsg.topic.longName() + "   鍏冩暟鎹細" + subMsg.metaData);
                 }
-            }
-        }) ;
-        this.nextDeal(subMsg);
-    }
-    private void nextDeal(MqttSubMsg subMsg)throws Exception {
-        subMsg.action(new Callback() {
-            @Override
-            public void call(Object obj) {
-                MqttSubMsg subMs = (MqttSubMsg) obj ;
-                MqttPubMsg pubMs = MqttPubMsgCache.matchFromTail(subMs) ;
-                if(pubMs != null){
-                    //鍖归厤鍒颁笅琛屾秷鎭紙鍛戒护锛�
-                    subMs.mqttResultSendWebUrl = pubMs.mqttResultSendWebUrl ;
-                    subMs.commandId = pubMs.commandId ;
-                    try {
-                        MqttComResultCache.getInstance().cacheMqttComResult(new MqttComResultNode(subMs));
-                    } catch (Exception e) {
-                        log.error("缂撳瓨鍙戝竷娑堟伅锛堝懡浠わ級缁撴灉鍙戠敓寮傚父", e);
+
+                @Override
+                public void notify(String devId, MqttNotifyInfo... infos) {
+                    if (notify != null) {
+                        notify.notify(devId, infos);
                     }
                 }
-                try{
-                    MqttSubMsgCache.getInstance().cacheMsg(new MqttSubMsgNode(subMsg));
-                }catch (Exception e){
-                    log.error("缂撳瓨璁㈤槄娑堟伅鏁版嵁鍙戠敓寮傚父", e);
-                }
-            }
-            @Override
-            public void call(Object... objs) {
-            }
-            @Override
-            public void exception(Exception e) {
-            }
-        });
+            });
+            this.nextDeal(subMsg);
+        }catch(Exception e){
+            log.error("澶勭悊MQTT璁㈤槄娑堟伅鍙戠敓寮傚父", e);
+        }
+    }
+    private void nextDeal(MqttSubMsg subMsg)throws Exception {
+        subMsg.action(new MqttSubMsgDealer());
     }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgCache.java
index 2ae8adc..b4b948a 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgCache.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgCache.java
@@ -86,8 +86,7 @@
         while(node != null && node.obj != null){
             obj = (MqttPubMsgNode)node.obj;
             pubMsg = obj.result ;
-            if(pubMsg != null
-                    && subMsg.subMsgMatchPubMsg(pubMsg)){
+            if(pubMsg != null && subMsg.subMsgMatchPubMsg(pubMsg)){
                 obj.onceReceivedResult = true ;//鏍囪瘑宸茬粡鏀跺埌鍛戒护缁撴灉
                 return pubMsg;
             }else{
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java
index 7b827d5..504ee3f 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java
@@ -65,7 +65,7 @@
         }else{
             if(mqttClient != null && mqttClient.isConnected()){
                 try {
-                    mqttManager.publishMsg(mqttClient, this.result.topic, this.result.msg);
+                    mqttManager.publishMsg(mqttClient, this.result.topic.longName(), this.result.msg);
                     DevStatusDealer.afterSendPubMessage(this.result.deviceId);
                     RtuLogDealer.log4Mqtt(this.result.deviceId, "鍙戝竷娑堟伅    涓婚锛�" + this.result.topic + "   娑堟伅锛�" + this.result.msg);
                     log.info("鍙戝竷MQTT娑堟伅锛堜富棰�=" + this.result.topic + "锛�" + this.result.msg);
@@ -74,7 +74,11 @@
                 }finally {
                     mqttManager.pushMqttClient(mqttClient);
                 }
-                return false ;
+                if(this.result.hasResponse){
+                    return false ;
+                }else{
+                    return true ;
+                }
             }else{
                 //鏈浘杩炴帴MQTT鏈嶅姟鍣�
                 return this.decideRemoveNodeFromCach(now) ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttSubMsgDealer.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttSubMsgDealer.java
new file mode 100644
index 0000000..116239d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttSubMsgDealer.java
@@ -0,0 +1,41 @@
+package com.dy.rtuMw.server.mqtt;
+
+import com.dy.common.mw.protocol4Mqtt.MqttPubMsg;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.common.util.Callback;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/11 17:33
+ * @Description
+ */
+@Slf4j
+public class MqttSubMsgDealer implements Callback {
+    @Override
+    public void call(Object obj) {
+        MqttSubMsg subMs = (MqttSubMsg) obj ;
+        MqttPubMsg pubMs = MqttPubMsgCache.matchFromTail(subMs) ;
+        if(pubMs != null){
+            //鍖归厤鍒颁笅琛屾秷鎭紙鍛戒护锛�
+            subMs.mqttResultSendWebUrl = pubMs.mqttResultSendWebUrl ;
+            subMs.commandId = pubMs.commandId ;
+            try {
+                MqttComResultCache.getInstance().cacheMqttComResult(new MqttComResultNode(subMs));
+            } catch (Exception e) {
+                log.error("缂撳瓨鍙戝竷娑堟伅锛堝懡浠わ級缁撴灉鍙戠敓寮傚父", e);
+            }
+        }
+        try{
+            MqttSubMsgCache.getInstance().cacheMsg(new MqttSubMsgNode(subMs));
+        }catch (Exception e){
+            log.error("缂撳瓨璁㈤槄娑堟伅鏁版嵁鍙戠敓寮傚父", e);
+        }
+    }
+    @Override
+    public void call(Object... objs) {
+    }
+    @Override
+    public void exception(Exception e) {
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java
index f96f189..e2cad34 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java
@@ -13,6 +13,7 @@
     public String svUserName ;//
     public String svUserPassword ;//
     public Integer poolMaxSize ;//
+    public Boolean useMemoryPersistence ;
     public String[] protocolAndDeviceIds ;//璁惧鍗忚涓嶪D锛團Box锛塱d
     public String[] deviceIds ;//璁惧锛團Box锛塱d
     public String[] subTopics ;//璁㈤槄鐨勪富棰�
@@ -27,6 +28,7 @@
         this.svUserName = "dyyjy" ;
         this.svUserPassword = "Dyyjy2025,;.abc!@#" ;
         this.poolMaxSize = 10 ;
+        useMemoryPersistence = true ;
         this.pubTopicQos = 1 ;
         this.noSubThenOff = 10 * 60 * 10000L ;
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java
index 23808df..dfc00f9 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java
@@ -63,13 +63,14 @@
                                     toNext = true ;
                                 }
                             }
-                            if(this.needSave2Db( d.getRtuAddr())){
+                            //2025-06-11 鍥犱负81鍛戒护鏄疪TU鐘舵�佹敼鍙樻椂鍗充笂鎶ワ紝鎵�浠ュ彲浠ュ強鏃朵綋鐜扮姸鎬佸彉鍖栵紝杩涜�屼笉鍙楀瓨鍌ㄦ帶鍒�
+                            //if(this.needSave2Db( d.getRtuAddr())){
                                 //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
                                 this.toMsCenter(controller, d.getRtuAddr(), dV1, dataCd81Vo.alarmVo, dataCd81Vo.stateVo);
                                 this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), dataCd81Vo.rtuDt, dV1, dataCd81Vo.alarmVo, dataCd81Vo.stateVo);
                                 this.saveHistory(sv, controller, d.getRtuAddr(), dataCd81Vo.rtuDt, dV1, dataCd81Vo.alarmVo, dataCd81Vo.stateVo);
-                                this.cacheSaveTime(d.getRtuAddr());
-                            }
+                                //this.cacheSaveTime(d.getRtuAddr());
+                            //}
                         }
                     } else if (cdObj instanceof DataCd84Vo) {
                         //闃�寮�宸ヤ綔鎶�
@@ -78,7 +79,7 @@
                             Object[] objs = this.getTaskResults(TkPreGenObjs.taskId);
                             DbSv sv = (DbSv) objs[0];
                             PrController controller = (PrController) objs[1];
-                            /** 闃�寮�宸ヤ綔鎶ワ紝闃�闂ㄧ姸鎬佷竴瀹氭槸鎵撳紑鐘舵�侊紝鎵�浠ヤ笉璁剧疆涓嬮潰鏁版嵁浠ュ鍚庣画浠诲姟璁剧疆铏氭嫙鍗$姸鎬�
+                            /* 闃�寮�宸ヤ綔鎶ワ紝闃�闂ㄧ姸鎬佷竴瀹氭槸鎵撳紑鐘舵�侊紝鎵�浠ヤ笉璁剧疆涓嬮潰鏁版嵁浠ュ鍚庣画浠诲姟璁剧疆铏氭嫙鍗$姸鎬�
                              if(dataCd84Vo.stateVo != null && dataCd84Vo.stateVo.valveState != null && dataCd84Vo.stateVo.valveState.byteValue() == DataStateVo.ValveCloseState){
                                  if(controller != null && controller.getIntakeId() != null){
                                      this.taskResult = new Object[]{controller.getIntakeId(), DataStateVo.ValveCloseState} ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java
index 24e0c4b..6f0856b 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java
@@ -76,7 +76,8 @@
                         //闅忔満鑷姤鎶�
                         DataCd81Vo dataCd81Vo = (DataCd81Vo)cdObj ;
                         if (dataCd81Vo.alarmVo != null || dataCd81Vo.stateVo != null) {
-                            if(this.needSave2Db( d.getRtuAddr())) {
+                            //2025-06-11 鍥犱负81鍛戒护鏄疪TU鐘舵�佹敼鍙樻椂鍗充笂鎶ワ紝鎵�浠ュ彲浠ュ強鏃朵綋鐜扮姸鎬佸彉鍖栵紝杩涜�屼笉鍙楀瓨鍌ㄦ帶鍒�
+                            //if(this.needSave2Db( d.getRtuAddr())) {
                                 //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
                                 Object[] objs = this.getTaskResults(TkPreGenObjsV2.taskId);
                                 DbSv sv = (DbSv) objs[0];
@@ -91,7 +92,7 @@
                                         toNext = true ;
                                     }
                                 }
-                            }
+                            //}
                         }
                     } else if (cdObj instanceof DataCd84Vo) {
                         //闃�寮�宸ヤ綔鎶�
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
index c9d63e0..9062205 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
@@ -48,18 +48,16 @@
             PrController controller = (PrController)objs[1] ;
             if(cdObj instanceof DataCd81Vo){
                 //璁惧缁堢闅忔満鑷姤
-                if(this.needSave2Db( d.getRtuAddr())) {
-                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
-                    DataCd81Vo cdData = (DataCd81Vo)(cdObj) ;
-                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
-                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
-                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
-                    this.cacheSaveTime(d.getRtuAddr());
-                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
-                        if(controller != null && controller.getIntakeId() != null){
-                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
-                            toNext = true ;
-                        }
+                //81鍔熻兘鐮佹暟鎹紝涓嶈繘琛屸�滃湪涓�涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁鈥濈殑鎺у埗
+                DataCd81Vo cdData = (DataCd81Vo)(cdObj) ;
+                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                this.cacheSaveTime(d.getRtuAddr());
+                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                    if(controller != null && controller.getIntakeId() != null){
+                        this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                        toNext = true ;
                     }
                 }
             }else if(cdObj instanceof DataCd80_5BVo){
@@ -78,7 +76,9 @@
                         }
                     }
                 }
-            }else if(cdObj instanceof DataCd93_A3Vo){
+            }
+            /* 2025-06-11 鐜嬫睙娴疯锛氫互涓嬫暟鎹腑鐨勭姸鎬佷笉鍑嗙‘锛屽挨鍏堕榾闂ㄧ姸鎬侊紝鎵�浠ヤ笉鍐嶉噰绾�
+            else if(cdObj instanceof DataCd93_A3Vo){
                 //骞冲彴/APP杩滅▼鍏抽棴姘存车/闃�闂�   +  鍒峰崱鍏虫车/闃�涓婃姤
                 if(this.needSave2Db( d.getRtuAddr())) {
                     //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
@@ -127,6 +127,7 @@
                     }
                 }
             }
+             */
         }catch (Exception e){
             log.error("淇濆瓨鎺у埗鍣ㄦ姤璀﹀拰鐘舵�佹暟鎹椂鍙戠敓寮傚父", e);
         }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
index 5c13be1..a53defb 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -58,7 +58,21 @@
      */
     @GetMapping("/rtuLogFile")
     public void rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
-        File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
+        logFile(rtuAddr, req, rep) ;
+    }
+
+    /**
+     * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢
+     * @param devId
+     * @param req
+     * @param rep
+     */
+    @GetMapping("/mqttDevLogFile")
+    public void mqttDevLogFile(String devId, HttpServletRequest req, HttpServletResponse rep){
+        logFile(devId, req, rep) ;
+    }
+    private void logFile(String fileName, HttpServletRequest req, HttpServletResponse rep){
+        File logFile = ResourceUnit.getInstance().getLogFile(fileName + ".log") ;
         if(logFile != null && logFile.exists()){
             //鍦⊿pring Boot涓紝application/octet-stream;charset=UTF-8閫氬父琛ㄧず鍝嶅簲鐨勫唴瀹规槸瀛楄妭娴侊紝
             //骞朵笖瀛楃闆嗘槸UTF-8銆傚浜庤繖绉嶇被鍨嬬殑鍝嶅簲锛孲pring Boot榛樿浣跨敤ByteArrayHttpMessageConverter鏉ュ鐞嗭紝
@@ -67,7 +81,7 @@
             //瀛楃闆嗛�氬父鐢ㄤ簬鏂囨湰鍐呭锛岃�宎pplication/octet-stream閫氬父鐢ㄤ簬浜岃繘鍒跺唴瀹癸紝鍥犳鍦ㄨ繖绉嶆儏鍐典笅鎸囧畾瀛楃闆嗗彲鑳芥槸涓嶅悎閫傜殑銆�
             //涓嶈繃锛屽鏋滀綘纭疄闇�瑕佸鐞嗗甫鏈夌壒瀹氬瓧绗﹂泦鐨刟pplication/octet-stream鍝嶅簲锛屼綘鍙兘闇�瑕佽嚜瀹氫箟HttpMessageConverter銆�
             rep.addHeader("content-type", "application/octet-stream;charset=UTF-8");
-            rep.addHeader("Content-Disposition", "attachment;fileName=" + (rtuAddr + ".log")) ;
+            rep.addHeader("Content-Disposition", "attachment;fileName=" + (fileName + ".log")) ;
             ServletOutputStream out = null;
             FileInputStream in = null ;
             try {
@@ -112,27 +126,38 @@
      */
     @GetMapping("/rtuLogText")
     public BaseResponse<List<String>> rtuLogText(String rtuAddr){
+        return logText(rtuAddr, true) ;
+    }
+    /**
+     * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢
+     * @param devId
+     */
+    @GetMapping("/mqttDevLogText")
+    public BaseResponse<List<String>> mqttDevLogText(String devId){
+        return logText(devId, false) ;
+    }
+    /**
+     * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢
+     * @param fileName
+     * @param reverseOrder
+     */
+    private BaseResponse<List<String>> logText(String fileName, boolean reverseOrder){
         List<String> list ;
-        File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
+        File logFile = ResourceUnit.getInstance().getLogFile(fileName + ".log") ;
         if(logFile != null && logFile.exists()){
             BufferedReader reader = null ;
             try {
                 reader = new BufferedReader(new FileReader(logFile)) ;
-                //鏂扮殑瀹炵幇鏂规硶
                 Stream<String> linesStream = reader.lines() ;
-                //list = linesStream.toList() ; //鎸夊師鏉ラ『搴�
-                list = linesStream.sorted(Comparator.reverseOrder()).collect(Collectors.toList()) ;//鍊掑簭
-                /* 鍘熸潵鐨勫疄鐜版柟娉�
-                list = new ArrayList() ;
-                String line ;
-                while((line = reader.readLine()) != null){
-                    list.add(line) ;
+                if(reverseOrder){
+                    list = linesStream.sorted(Comparator.reverseOrder()).collect(Collectors.toList()) ;//鍊掑簭
+                }else{
+                    list = linesStream.toList() ; //鎸夊師鏉ラ『搴�
                 }
-                */
                 return BaseResponseUtils.buildSuccess(list);
             } catch (Exception e) {
                 list = new ArrayList() ;
-                list.add("璇诲彇鎺у埗鍣紙" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢寮傚父锛�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))) ;
+                list.add("璇诲彇鎺у埗鍣紙" + fileName + "锛夌殑鏃ュ織鏂囦欢寮傚父锛�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))) ;
                 return BaseResponseUtils.buildSuccess(list);
             }finally{
                 if(reader != null){
@@ -144,7 +169,7 @@
             }
         }else{
             list = new ArrayList() ;
-            list.add("鏈緱鍒版帶鍒跺櫒锛�" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢") ;
+            list.add("鏈緱鍒版帶鍒跺櫒锛�" + fileName + "锛夌殑鏃ュ織鏂囦欢") ;
             return BaseResponseUtils.buildSuccess(list);
         }
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties
index b692e83..6eaec36 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties
@@ -10,7 +10,7 @@
 #   鐢樺窞锛� gz
 #   鍑夊窞锛� lz
 #   閲戝窛锛� jc
-base.orgTag=mq
+base.orgTag=ym
 
 # 233鏈嶅姟鍣細
 #   鍏冭皨锛� 60000
@@ -45,7 +45,7 @@
 #   鐢樺窞锛� mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos=
 #   鍑夊窞锛� mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos=
 #   閲戝窛锛� mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather,1;soil,1;manure,1;state,1
-mqtt.enable=true
+mqtt.enable=false
 mqtt.protocolAndDeviceIds=sd1/338220031439,sd1/338220031440
 mqtt.subTopicAndQos=weather,1;soil,1;manure,1;state,1
 #MQtt璁惧鍦ㄤ竴瀹氭椂闂达紙鍒嗛挓锛夊悗鏈彂甯冩秷鎭紝璁や负璁惧绂荤嚎
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 3d3e466..50e5d2c 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
@@ -171,6 +171,7 @@
 	svUserName MQTT鏈嶅姟鍣ㄧ敤鎴峰悕
 	svUserPassword MQTT鏈嶅姟鍣ㄧ敤鎴峰瘑鐮�
 	poolMaxSize 杩炴帴姹犳渶澶ц繛鎺ユ暟
+	useMemoryPersistence 浣跨敤鍐呭瓨鎸佷箙鍖栬�岄潪榛樿鐨勬枃浠舵寔涔呭寲(true鏄� false鍚�)
 	protocolAndDeviceIds 鍦ㄥ瓙绯荤粺锛坥rgTag锛変腑鎺ュ叆鐨勮澶�(FBox)鎵�鐢ㄥ崗璁強璁惧id闆嗗悎,澶氫釜鐢ㄩ�楀彿闅斿紑锛屽崗璁笌ID鐢ㄦ鏂滄潬闅斿紑锛屼緥濡傦細sd1/338220031439,sd1/338220031440
 	subTopicAndQos: 璁㈤槄涓婚涓嶲os锛屼富棰樺悕涓庡叾Qos鐢ㄩ�楀彿闅斿紑锛屽涓富棰樺強Qos鐢ㄥ垎鍙烽殧寮�锛屼緥濡傦細ym/topic1,1;ym/topic2,1;ym/topic3,1锛屽鏋滄湁澶氫釜OrgTag锛屼富棰樺墠缂�鐢ㄥ叾OrgTag
 	pubTopicQos: 鍙戝竷涓婚鐨凲os锛屽彇鍊艰寖鍥达細
@@ -185,6 +186,7 @@
 		  svUserName="dyyjy"
 		  svUserPassword="Dyyjy2025,;.abc!@#"
 		  poolMaxSize="10"
+		  useMemoryPersistence="true"
 		  protocolAndDeviceIds="${mqtt.protocolAndDeviceIds}"
 		  subTopicAndQos="${mqtt.subTopicAndQos}"
 		  pubTopicQos="1"
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamKey.java b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamKey.java
index ee7504b..4f87723 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamKey.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamKey.java
@@ -31,6 +31,8 @@
     public static final String TcpPort = "tcpPort" ;
     public static final String UpDataMinInterval = "upDataMinInterval" ;
     public static final String WebPort = "webPort" ;
+    public static final String MqttEnable = "mqttEnable" ;
+    public static final String MqttNoSubThenOff = "noSubThenOff" ;
     public static final String ActutorPort = "actutorPort" ;
     public static final String DbName = "dbName" ;
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamSetMw.java b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamSetMw.java
index 806467e..b5234a5 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamSetMw.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/java/com/dy/pipIrrParamSet/paramSet/ParamSetMw.java
@@ -121,6 +121,10 @@
                     newLine = "tcp.port=" + paramMap.get(ParamKey.TcpPort);
                 }else if(newLine != null && newLine.trim().startsWith("base.upData.min.interval=")){
                     newLine = "base.upData.min.interval=" + paramMap.get(ParamKey.UpDataMinInterval);
+                }else if(newLine != null && newLine.trim().startsWith("mqtt.enable=")){
+                    newLine = "mqtt.enable=" + paramMap.get(ParamKey.MqttEnable);
+                }else if(newLine != null && newLine.trim().startsWith("mqtt.noSubThenOff=")){
+                    newLine = "mqtt.noSubThenOff=" + paramMap.get(ParamKey.MqttNoSubThenOff);
                 }
                 newLines.add(newLine);
             }
@@ -150,6 +154,12 @@
         key = ParamKey.WebPort;
         this.getConfig(env, map, paramNamePre + key, key);
 
+        key = ParamKey.MqttEnable;
+        this.getConfig(env, map, paramNamePre + key, key);
+
+        key = ParamKey.MqttNoSubThenOff;
+        this.getConfig(env, map, paramNamePre + key, key);
+
         key = ParamKey.ActutorPort;
         this.getConfig(env, map, paramNamePre + key, key);
 
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/resources/application-params.yml b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/resources/application-params.yml
index 24a9806..de19a1c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/resources/application-params.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-param-set/src/main/resources/application-params.yml
@@ -4,6 +4,8 @@
             orgTag: ym
             tcpPort: 60000
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8070
             actutorPort: 9070
             dbName: pipIrr_ym
@@ -11,6 +13,8 @@
             orgTag: sp
             tcpPort: 62000
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8073
             actutorPort: 9073
             dbName: pipIrr_sp
@@ -18,6 +22,8 @@
             orgTag: test
             tcpPort: 65000
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8072
             actutorPort: 9072
             dbName: pipIrr_test
@@ -25,6 +31,8 @@
             orgTag: mj
             tcpPort: 61000
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8071
             actutorPort: 9071
             dbName: pipIrr_mj
@@ -33,6 +41,8 @@
             orgTag: mq
             tcpPort: 60100
             upDataMinInterval: 6
+            mqttEnable: true
+            noSubThenOff: 10
             webPort: 8100
             actutorPort: 9100
             dbName: pipIrr_mq
@@ -40,6 +50,8 @@
             orgTag: yq
             tcpPort: 60101
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8101
             actutorPort: 9101
             dbName: pipIrr_yq
@@ -47,6 +59,8 @@
             orgTag: hlj
             tcpPort: 60102
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8102
             actutorPort: 9102
             dbName: pipIrr_hlj
@@ -54,6 +68,8 @@
             orgTag: gz
             tcpPort: 60103
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8103
             actutorPort: 9103
             dbName: pipIrr_gz
@@ -61,6 +77,8 @@
             orgTag: lz
             tcpPort: 60104
             upDataMinInterval: 6
+            mqttEnable: false
+            noSubThenOff: 10
             webPort: 8104
             actutorPort: 9104
             dbName: pipIrr_lz
@@ -68,6 +86,8 @@
             orgTag: jc
             tcpPort: 60105
             upDataMinInterval: 6
+            mqttEnable: true
+            noSubThenOff: 10
             webPort: 8105
             actutorPort: 9105
             dbName: pipIrr_jc
diff --git "a/pipIrr-platform/\346\226\207\346\241\243/\346\211\223\345\214\205\345\217\221\345\270\203/\346\211\223\345\214\205\345\217\221\345\270\203\351\205\215\347\275\256\344\277\256\346\224\271.docx" "b/pipIrr-platform/\346\226\207\346\241\243/\346\211\223\345\214\205\345\217\221\345\270\203/\346\211\223\345\214\205\345\217\221\345\270\203\351\205\215\347\275\256\344\277\256\346\224\271.docx"
index b568832..6a380ca 100644
--- "a/pipIrr-platform/\346\226\207\346\241\243/\346\211\223\345\214\205\345\217\221\345\270\203/\346\211\223\345\214\205\345\217\221\345\270\203\351\205\215\347\275\256\344\277\256\346\224\271.docx"
+++ "b/pipIrr-platform/\346\226\207\346\241\243/\346\211\223\345\214\205\345\217\221\345\270\203/\346\211\223\345\214\205\345\217\221\345\270\203\351\205\215\347\275\256\344\277\256\346\224\271.docx"
Binary files differ

--
Gitblit v1.8.0