From 431bbfaddba9f39496359bc0c1e2dcaf2bb6fca2 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 23 六月 2025 15:09:04 +0800
Subject: [PATCH] 采用模拟软件MQTTX进行模拟测试,发现并修改MQTT相关水肥机上行数据与下行命令逻辑bug.

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkMqttData.java                   |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java |   33 +-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java   |   37 ++--
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/DevStatusDealer.java                 |   10 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java    |   32 +-
 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                                        |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java     |   13 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java                |   35 ++-
 /dev/null                                                                                                           |   79 --------
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java      |   32 +-
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java                                  |    7 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java  |    9 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java        |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttSubMsg.java                          |   61 ++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java      |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkFindPSdV1.java            |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java                         |    8 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttPubMsg.java                          |   18 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/MqttResultCtrl.java           |   40 ++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java            |   36 +--
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java     |   34 +-
 22 files changed, 284 insertions(+), 226 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
index 2399abe..f7b490a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
@@ -76,7 +76,12 @@
 		s += (protocol == null ? "" : ("鍗忚=" + protocol + "\n"));
 		s += (protocolVersion == null ? "" : ("鍗忚鐗堟湰鍙�=" + protocolVersion + "\n"));
 		s += (rtuAddr == null ? "" : ("Rtu鍦板潃=" + rtuAddr + "\n"));
-		s += "鍛戒护绫诲瀷=" + (type.equals(CommandType.innerCommand)?"鍐呴儴鍛戒护":(type.equals(CommandType.outerCommand)?"RTU鍛戒护":"閫忎紶鍛戒护")) + "\n" ;
+		s += "鍛戒护绫诲瀷=" + (
+				type.equals(CommandType.innerCommand)?"鍐呴儴鍛戒护":(
+						type.equals(CommandType.outerCommand)?"RTU鍛戒护":(
+								type.equals(CommandType.mqttCommand)?"MQTT鍛戒护":(
+										type.equals(CommandType.outerTransCommand)?"閫忎紶鍛戒护":
+												"")))) + "\n" ;
 		s += (code == null ? "" : ("鍔熻兘鐮�=" + code + "\n")) ;
 		s += (rtuResultSendWebUrl == null ? "" : ("鍥炶皟缃戝潃=" + rtuResultSendWebUrl + "\n"));
 		if(param != null){
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 eba4ecf..2c1c6f1 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
@@ -1,12 +1,18 @@
 package com.dy.common.mw.protocol4Mqtt;
 
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
 /**
  * @Author: liurunyu
  * @Date: 2025/6/5 11:44
  * @Description
  */
-public abstract class MqttPubMsg {
+@Data
+public class MqttPubMsg {
     public String commandId ;//鍛戒护ID
+
+    public String cd ;//鍔熻兘鐮�
 
     public String deviceId ;//璁惧ID
 
@@ -18,6 +24,14 @@
     public boolean isCacheForOffLine ;//涓嬭鍛戒护鎺у埗锛屾秷鎭腑闂翠欢涓嶅湪绾挎槸鍚︾紦瀛樺懡浠�
     public boolean hasResponse ;//涓嬭鍛戒护鎺у埗锛屽懡浠ゆ槸鍚︽湁搴旂瓟
 
-    public abstract boolean valid();
+    public boolean valid(){
+        if (topic == null || topic.isEmpty()) {
+            return false;
+        }
+        if (msg == null || msg.isEmpty()) {
+            return false;
+        }
+        return true;
+    }
 
 }
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 8226de7..7577e67 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
@@ -1,14 +1,16 @@
 package com.dy.common.mw.protocol4Mqtt;
 
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
 import com.dy.common.util.Callback;
+import lombok.Data;
 
 /**
  * @Author: liurunyu
  * @Date: 2025/6/5 11:44
  * @Description
  */
-
-public abstract class MqttSubMsg {
+@Data
+public class MqttSubMsg {
     public String commandId ;//鍛戒护ID
     public String mqttResultSendWebUrl ;//Mtt杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 
@@ -18,9 +20,58 @@
     public MqttTopic topic ;//娑堟伅涓婚
     public String metaData;//MQTT鎺ㄩ�佹潵鐨勫厓鏁版嵁
 
-    public abstract boolean valid();
+    public Vo4Up vo4Up;//璁㈤槄鐨勬秷鎭暟鎹�煎璞�
+    public MqttSubMsg() {
+    }
+    public MqttSubMsg(MqttTopic subTopic, String msg) {
+        this.deviceId = subTopic.devId ;
+        this.protocol = subTopic.protocol ;
+        this.topic = subTopic ;
+        this.metaData = msg ;
+    }
 
-    public abstract boolean subMsgMatchPubMsg(MqttPubMsg pubMsg);
+    public boolean valid() {
+        if (topic == null || topic.isEmpty()) {
+            return false;
+        }
+        if (metaData == null || metaData.isEmpty()) {
+            return false;
+        }
+        return true;
+    }
 
-    public abstract void action(Callback callback);
+    public boolean subMsgMatchPubMsg(MqttPubMsg pubMsg){
+        if(this.vo4Up != null && this.vo4Up instanceof ManureVo){
+            //鍙涓婃姤鐨勬槸鐘舵�佹暟鎹紝璇存槑璁惧鍝嶅簲浜嗗懡浠�
+            return true ;
+        }
+        return false ;
+    }
+
+    public void action(Callback callback){
+        callback.call(this) ;
+    }
+
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder();
+        if(commandId != null){
+            sb.append("commandId:")
+                    .append(commandId)
+                    .append("\n") ;
+        }
+        sb.append("涓婚:")
+                .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() ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttPubMsgSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttPubMsgSdV1.java
deleted file mode 100644
index 6193843..0000000
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttPubMsgSdV1.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.dy.common.mw.protocol4Mqtt.pSdV1;
-
-import com.dy.common.mw.protocol4Mqtt.MqttPubMsg;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @Author: liurunyu
- * @Date: 2025/6/4 18:00
- * @Description 涓嬪彂鐨勫彂甯冩秷鎭紙鍗充笅琛屽懡浠わ級
- */
-@Data
-@EqualsAndHashCode(callSuper=false)
-public class MqttPubMsgSdV1 extends MqttPubMsg {
-
-    public String cd ;//鍔熻兘鐮�
-
-    @Override
-    public boolean valid() {
-        if (topic == null || topic.isEmpty()) {
-            return false;
-        }
-        if (msg == null || msg.isEmpty()) {
-            return false;
-        }
-        return true;
-    }
-}
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
deleted file mode 100644
index cfccbef..0000000
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/MqttSubMsgSdV1.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.dy.common.mw.protocol4Mqtt.pSdV1;
-
-import com.dy.common.mw.protocol4Mqtt.MqttPubMsg;
-import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
-import com.dy.common.mw.protocol4Mqtt.MqttTopic;
-import com.dy.common.mw.protocol4Mqtt.Vo4Up;
-import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
-import com.dy.common.util.Callback;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @Author: liurunyu
- * @Date: 2025/6/4 16:58
- * @Description 鏀跺埌鐨勮闃呮秷鎭�
- */
-@Data
-@EqualsAndHashCode(callSuper=false)
-public class MqttSubMsgSdV1 extends MqttSubMsg {
-    public Vo4Up vo4Up;//璁㈤槄鐨勬秷鎭暟鎹�煎璞�
-
-    public MqttSubMsgSdV1(){}
-
-    public MqttSubMsgSdV1(MqttTopic subTopic, String msg) {
-        this.deviceId = subTopic.devId ;
-        this.protocol = subTopic.protocol ;
-        this.topic = subTopic ;
-        this.metaData = msg ;
-    }
-    public String toString(){
-        StringBuilder sb = new StringBuilder();
-        if(commandId != null){
-            sb.append("commandId:")
-                    .append(commandId)
-                    .append("\n") ;
-        }
-        sb.append("涓婚:")
-                .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;
-            if(this.vo4Up != null && this.vo4Up instanceof ManureVo){
-                //鍙涓婃姤鐨勬槸鐘舵�佹暟鎹紝璇存槑璁惧鍝嶅簲浜嗗懡浠�
-                return true ;
-            }
-        }
-        return false ;
-    }
-
-    @Override
-    public boolean valid() {
-        if (topic == null || topic.isEmpty()) {
-            return false;
-        }
-        if (metaData == null || metaData.isEmpty()) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public void action(Callback callback){
-        callback.call(this) ;
-    }
-
-}
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 8961281..df832f1 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
@@ -13,7 +13,6 @@
     public static final String SubTopicWeather = "weather" ;//姘旇薄
     public static final String SubTopicSoil = "soil" ;//鍦熷¥澧掓儏
     public static final String SubTopicManure = "manure" ;//姘磋偉
-    public static final String SubTopicState = "state" ;//鐘舵��
 
     //鍙戝竷鐨勪富棰�
     public static final String PubTopicFault = "ctrlFault" ;//鏁呴殰瑙i櫎
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 acfbe14..7ba7e80 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
@@ -3,9 +3,7 @@
 import com.alibaba.fastjson2.JSON;
 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.MqttTopic;
-import com.dy.common.mw.protocol4Mqtt.Vo4Up;
+import com.dy.common.mw.protocol4Mqtt.*;
 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;
@@ -22,12 +20,12 @@
  * @Description
  */
 public class ProtocolParserSdV1 {
-    public MqttSubMsgSdV1 parseSubMsg(MqttTopic subTopic, MqttMessage mqttMsg, MqttCallback callback) throws Exception {
+    public MqttSubMsg parseSubMsg(MqttTopic subTopic, MqttMessage mqttMsg, MqttCallback callback) throws Exception {
         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 msg = new MqttSubMsgSdV1(subTopic, strTxt);
+        MqttSubMsg msg = new MqttSubMsg(subTopic, strTxt);
         Vo4Up vo ;
         DevRunInfo stInfo = null ;
         switch (subTopic.type) {
@@ -82,8 +80,8 @@
         return msg;
     }
 
-    public MqttPubMsgSdV1 createPubMsg(String orgTag, Command com) throws Exception {
-        MqttPubMsgSdV1 msg ;
+    public MqttPubMsg createPubMsg(String orgTag, Command com) throws Exception {
+        MqttPubMsg msg ;
         switch (com.code) {
             case CodeSdV1.cd_Fault -> {
                 //鏁呴殰瑙i櫎鍛戒护
@@ -136,14 +134,14 @@
             throw new Exception("鎺ユ敹鍒癕QTT鍛戒护锛屽崗璁�" + com.protocol + "鐗堟湰" + com.protocolVersion + "鍔熻兘鐮�" + com.code + "鍛戒护缁撴灉鍥炴敹URL涓虹┖") ;
         }
     }
-    private MqttPubMsgSdV1 createPubMsgOfFault(String orgTag, Command com) throws Exception {
+    private MqttPubMsg createPubMsgOfFault(String orgTag, Command com) throws Exception {
         JSONObject obj = (JSONObject) com.param;
         String json = obj.toJSONString();
         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class);
         if(cvo == null){
             throw new Exception("json杞珻omCtrlVo涓簄ull") ;
         }
-        MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ;
+        MqttPubMsg msg = new MqttPubMsg() ;
         this.setPubMsgBase(com, msg);
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
@@ -152,14 +150,14 @@
         msg.msg = JSON.toJSONString(new FaultClearVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
-    private MqttPubMsgSdV1 createPubMsgOfStir(String orgTag, Command com) throws Exception {
+    private MqttPubMsg createPubMsgOfStir(String orgTag, Command com) throws Exception {
         JSONObject obj = (JSONObject) com.param;
         String json = obj.toJSONString();
         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class);
         if(cvo == null){
             throw new Exception("json杞珻omCtrlVo涓簄ull") ;
         }
-        MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ;
+        MqttPubMsg msg = new MqttPubMsg() ;
         this.setPubMsgBase(com, msg);
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
@@ -168,14 +166,14 @@
         msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
-    private MqttPubMsgSdV1 createPubMsgOfInject(String orgTag, Command com) throws Exception {
+    private MqttPubMsg createPubMsgOfInject(String orgTag, Command com) throws Exception {
         JSONObject obj = (JSONObject) com.param;
         String json = obj.toJSONString();
         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class);
         if(cvo == null){
             throw new Exception("json杞珻omCtrlVo涓簄ull") ;
         }
-        MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ;
+        MqttPubMsg msg = new MqttPubMsg() ;
         this.setPubMsgBase(com, msg);
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
@@ -184,14 +182,14 @@
         msg.msg = JSON.toJSONString(new InjectStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
-    private MqttPubMsgSdV1 createPubMsgOfIrr(String orgTag, Command com) throws Exception {
+    private MqttPubMsg createPubMsgOfIrr(String orgTag, Command com) throws Exception {
         JSONObject obj = (JSONObject) com.param;
         String json = obj.toJSONString();
         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class);
         if(cvo == null){
             throw new Exception("json杞珻omCtrlVo涓簄ull") ;
         }
-        MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ;
+        MqttPubMsg msg = new MqttPubMsg() ;
         this.setPubMsgBase(com, msg);
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
@@ -201,24 +199,24 @@
         return msg ;
     }
 
-    private MqttPubMsgSdV1 createPubMsgOfParam(String orgTag, Command com) throws Exception {
+    private MqttPubMsg 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() ;
+        MqttPubMsg msg = new MqttPubMsg() ;
         this.setPubMsgBase(com, msg);
         msg.isCacheForOffLine = false ;
-        msg.hasResponse = false ;
+        msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Param ;
         msg.topic = new MqttTopic(orgTag, com.protocol + com.protocolVersion, com.rtuAddr, ProtocolConstantSdV1.PubTopicParam, cvo.no) ;
         msg.msg = JSON.toJSONString(new ParamSetVo(cvo.stirDuration, cvo.injectDuration)) ;
         return msg ;
     }
 
-    private void setPubMsgBase(Command com, MqttPubMsgSdV1 msg){
+    private void setPubMsgBase(Command com, MqttPubMsg msg){
         msg.commandId = com.id ;
         msg.deviceId = com.rtuAddr ;
         msg.mqttResultSendWebUrl = com.rtuResultSendWebUrl ;
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 b72f3d0..98acc81 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
@@ -20,59 +20,72 @@
     /**
      * 鎼呮媽鏈�1鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
      */
-    @JSONField(name = "鎼呮媽杩愯1")
+    @JSONField(alternateNames = {"鎼呮媽杩愯1", "stirRunning1"})
     public Byte stirRunning1;//鎼呮媽1杩愯鐘舵��
     /**
      * 鎼呮媽鏈�2鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
      * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
      */
-    @JSONField(name = "鎼呮媽杩愯2")
+    @JSONField(alternateNames = {"鎼呮媽杩愯2", "stirRunning2"})
     public Byte stirRunning2;//鎼呮媽2杩愯鐘舵��
     /**
      * 鎼呮媽鏈�3鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
      * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
      */
-    @JSONField(name = "鎼呮媽杩愯3")
+    @JSONField(alternateNames = {"鎼呮媽杩愯3", "stirRunning3"})
     public Byte stirRunning3;//鎼呮媽3杩愯鐘舵��
     /**
      * 鎼呮媽鏈�4鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
      * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
      */
-    @JSONField(name = "鎼呮媽杩愯4")
+    @JSONField(alternateNames = {"鎼呮媽杩愯4", "stirRunning4"})
     public Byte stirRunning4;//鎼呮媽4杩愯鐘舵��
 
     /**
      * 涓�涓按鑲ユ満鍙湁涓�涓敞鑲ユ车
      */
-    @JSONField(name = "娉ㄨ偉杩愯")
+    @JSONField(alternateNames = {"娉ㄨ偉杩愯", "injectRunning"})
     public Byte injectRunning ;//娉ㄨ偉杩愯鐘舵��
 
-    @JSONField(name = "鐏屾簤杩愯")
+
+    @JSONField(alternateNames = {"鐏屾簤杩愯", "irrRunning"})
     public Byte irrRunning ;//鐏屾簤杩愯鐘舵��
 
     /**
      *  1:娉ㄨ偉娉垫湁鏁呴殰銆�0:娉ㄨ偉娉垫病鏈夋晠闅�
      */
-    @JSONField(name = "鎶ヨ")
+    @JSONField(alternateNames = {"鎶ヨ", "alarm"})
     public Byte alarm ;//娉ㄨ偉娉垫晠闅�
 
     /**
      * 鑲ユ枡娴侀噺锛屽崟浣嶅崌
      */
-    @JSONField(name = "鑲ユ枡娴侀噺")
+    @JSONField(alternateNames = {"鑲ユ枡娴侀噺", "manureFlow"})
     public Float manureFlow ;
 
     /**
      * 鍗曚綅绉�
      */
-    @JSONField(name = "娉ㄨ偉缁忚繃鏃堕棿")
+    @JSONField(alternateNames = {"娉ㄨ偉缁忚繃鏃堕棿", "manureTime"})
     public Integer manureTime ;
 
     /**
      * 鍗曚綅绉�
      */
-    @JSONField(name = "鎼呮媽缁忚繃鏃堕棿")
+    @JSONField(alternateNames = {"鎼呮媽缁忚繃鏃堕棿", "stirTime"})
     public Integer stirTime ;
+
+    /**
+     * 鍗曚綅绉�
+     */
+    @JSONField(alternateNames = {"鎼呮媽璁惧畾鏃堕棿", "stirDuration"})
+    public Integer stirDuration ;
+
+    /**
+     * 鍗曚綅绉�
+     */
+    @JSONField(alternateNames = {"娉ㄨ偉璁惧畾鏃堕棿", "injectDuration"})
+    public Integer injectDuration ;
 
     @JSONField(name = "flexem_timestamp")
     public Long devDt ;//璁惧鏃堕棿
@@ -107,6 +120,8 @@
         sb.append(" 鑲ユ枡娴侀噺锛�" + manureFlow + ", ") ;
         sb.append(" 娉ㄨ偉缁忚繃鏃堕棿锛�" + manureTime + ", ") ;
         sb.append(" 鎼呮媽缁忚繃鏃堕棿锛�" + stirTime + ", ") ;
+        sb.append(" 娉ㄨ偉璁惧畾鏃堕棿锛�" + injectDuration + ", ") ;
+        sb.append(" 鎼呮媽璁惧畾鏃堕棿锛�" + stirDuration + ", ") ;
         sb.append(" 璁惧鏃堕棿锛�" + devDt + ", ") ;
         sb.append(" 璁惧鏃堕棿锛�" +  this.getDevDtStr()) ;
         sb.append("\n") ;
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 d3b2f2b..35f3c71 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
@@ -43,6 +43,16 @@
             return rsMap ;
         }
     }
+
+    public static Boolean oneOnLine(String devId){
+        synchronized (map){
+            DevStatus st = map.get(devId) ;
+            if(st != null){
+                return st.onLine ;
+            }
+            return false ;
+        }
+    }
     /**
      * 缁熻鍦ㄧ嚎涓庝笉鍦ㄧ嚎鎯呭喌
      */
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkMqttData.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkMqttData.java
index 918f363..6139870 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkMqttData.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TkMqttData.java
@@ -1,6 +1,6 @@
 package com.dy.rtuMw.server.rtuData;
 
-import com.dy.common.mw.protocol4Mqtt.pSdV1.MqttSubMsgSdV1;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.rtuMw.server.rtuData.pSdV1.TkFindPSdV1;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -26,7 +26,7 @@
         if(data == null){
             log.error("涓ラ噸閿欒锛孧qtt璁㈤槄娑堟伅鏁版嵁涓虹┖锛�" );
         }else{
-            if(data instanceof MqttSubMsgSdV1){
+            if(data instanceof MqttSubMsg){
                 this.toNextOneTask(data, TkFindPSdV1.taskId);
             }else{
                 log.error("涓ラ噸閿欒锛岃鏁版嵁绫诲瀷锛�" + data.getClass().getName() + "锛夛紝鎺ユ敹鏁版嵁浠诲姟杩樻湭瀹炵幇锛�" );
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkFindPSdV1.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkFindPSdV1.java
index eec2554..ce5def5 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkFindPSdV1.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkFindPSdV1.java
@@ -1,6 +1,6 @@
 package com.dy.rtuMw.server.rtuData.pSdV1;
 
-import com.dy.common.mw.protocol4Mqtt.pSdV1.MqttSubMsgSdV1;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -24,7 +24,7 @@
     @Override
     public void execute(Object data) {
         //鍓嶉潰鐨勪换鍔″凡缁忓垽鏂簡data涓嶄负绌�
-        MqttSubMsgSdV1 msg = (MqttSubMsgSdV1)data ;
+        MqttSubMsg msg = (MqttSubMsg)data ;
         log.info(msg.toString());
     }
 
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 5e701f9..196b13c 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
@@ -7,6 +7,7 @@
 import com.dy.rtuMw.server.forTcp.TcpSessionCache;
 import com.dy.rtuMw.server.local.CommandInnerDeaLer;
 import com.dy.rtuMw.server.local.ReturnCommand;
+import com.dy.rtuMw.server.mqtt.DevStatusDealer;
 import com.dy.rtuMw.server.mqtt.MqttManager;
 import com.dy.rtuMw.server.msCenter.MsCenterUnit;
 import com.dy.rtuMw.server.tasks.WebDownCom4MqttTask;
@@ -375,8 +376,8 @@
      * @return 缁撴灉
      */
     private BaseResponse<Command> dealMqttCommand(Command command){
-        String rtuAddr = command.getRtuAddr() ;//FBox璁惧鍙�
-        if(rtuAddr == null || rtuAddr.trim().equals("")){
+        String mqttDevId = command.getRtuAddr() ;//FBox璁惧鍙�
+        if(mqttDevId == null || mqttDevId.trim().equals("")){
             return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孎Box璁惧ID涓虹┖锛�", command.getId(), command.getCode())) ;
         }
         if(!ServerProperties.mqttUnitEnable.booleanValue()){
@@ -385,6 +386,9 @@
         if(MqttManager.getInstance().poolIsClose()){
             return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孧QTT杩炴帴姹犳湭鍒涘缓鎴愬姛锛�", command.getId(), command.getCode())) ;
         }
+        if(!DevStatusDealer.oneOnLine(mqttDevId)){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孎Box璁惧鏈湪绾匡紒", command.getId(), command.getCode())) ;
+        }
 
         //鐢熸垚寮傛浠诲姟
         WebDownCom4MqttTask task = new WebDownCom4MqttTask() ;
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 174c558..f22d25e 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
@@ -11,7 +11,7 @@
 #   鍑夊窞锛� lz
 #   閲戝窛锛� jc
 #   鍢夊唱鍏筹細 jyg
-base.orgTag=ym
+base.orgTag=jyg
 
 # 233鏈嶅姟鍣細
 #   鍏冭皨锛� 60000
@@ -26,7 +26,7 @@
 #   鍑夊窞锛� 60104
 #   閲戝窛锛� 60105
 #   鍢夊唱鍏筹細 60106
-tcp.port=60000
+tcp.port=60106
 
 #RTU涓婅鏁版嵁鏈�灏忛棿闅旓紝澶т簬杩欎釜闂撮殧璁や负璁惧绂荤嚎浜嗭紝娴嬫帶涓�浣撻榾鏄�3锛岃〃闃�涓�浣撴満鏄�6锛岄粯璁ら噰鐢ㄦ椂闂存渶闀跨殑6
 base.upData.min.interval=6
@@ -53,7 +53,7 @@
 mqtt.port=1883
 mqtt.user=dyyjy
 mqtt.password=Dyyjy2025,;.abc!@#
-mqtt.protocolAndDeviceIds=sd1/123456789
+mqtt.protocolAndDeviceIds=sd1/2430002404000840,sd1/2430002404000840
 mqtt.subTopicAndQos=weather/1,1;soil/1,1;manure/1,1
 #MQtt璁惧鍦ㄤ竴瀹氭椂闂达紙鍒嗛挓锛夊悗鏈彂甯冩秷鎭紝璁や负璁惧绂荤嚎
 mqtt.noSubThenOff=10
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
index 86f89d6..c03f7a0 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
@@ -35,9 +35,9 @@
         if(codeDataObj != null){
             if(codeDataObj instanceof JSONObject){
                 codeData = protocolData == null ? null : (protocolData.getJSONObject("subData")) ; //鍗忚鍔熻兘鐮佹暟鎹�
-            }else if(codeDataObj instanceof JSONArray){{
+            }else if(codeDataObj instanceof JSONArray){
                 codeArrayData = protocolData == null ? null : (protocolData.getJSONArray("subData")) ; //鍗忚鍔熻兘鐮佹暟鎹�
-            }}
+            }
         }
         JSONObject job_response = new JSONObject();
         job_response.put("data", codeData!=null?codeData:(codeArrayData!=null?codeArrayData:null));
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/MqttResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/MqttResultCtrl.java
new file mode 100644
index 0000000..d4bb4ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/MqttResultCtrl.java
@@ -0,0 +1,40 @@
+package com.dy.pipIrrRemote.common;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.pipIrrGlobal.command.ComResultWait;
+import com.dy.pipIrrGlobal.command.ComSupport;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-23 8:19
+ * @LastEditTime 2024-05-23 8:19
+ * @Description
+ */
+
+@Slf4j
+@RestController
+@RequestMapping(path="mqttRes")
+public class MqttResultCtrl extends ComSupport {
+    @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public void receive(@RequestBody MqttSubMsg subMsg) {
+        if(subMsg != null){
+            CompletableFuture<MqttSubMsg> feature = (CompletableFuture<MqttSubMsg>) ComResultWait.get(Long.parseLong(subMsg.commandId));
+            if(feature != null) {
+                feature.complete(subMsg);
+            }else{
+                //瓒呮椂锛宖eature琚竻闄や簡
+            }
+        }else{
+            log.error("mqtt鍗忚娑堟伅涓虹┖");
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java
index c0e4801..9bae744 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.util.Callback;
 import com.dy.common.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
@@ -36,13 +37,13 @@
     @Value("${mw.waitMwRtnResultTimeout}")
     protected int waitMwRtnResultTimeout ;
 
-    @Value("${mw.rtuCallbackUrl_rm}")
-    protected String rtuResultSendWebUrl;
+    @Value("${mw.mqttCallbackUrl_rm}")
+    protected String mqttResultSendWebUrl;
 
     //姘磋偉鏈哄璞�
     protected PrStManure ctrlPo ;
     //寮傛绛夊緟鍣�
-    protected CompletableFuture<JSONObject> feature;
+    protected CompletableFuture<MqttSubMsg> feature;
     //鍛戒护鍚嶇О
     protected String comName ;
     //鍛戒护鏃ュ織id
@@ -158,8 +159,8 @@
     public BaseResponse<Object> after(String comCode, Callback callback) {
         try{
             //绛夊緟閫氫俊涓棿浠堕�氱煡姘磋偉鏈烘墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛�
-            JSONObject resultData = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS);
-            return BaseResponseUtils.buildSuccess(this.dealComResult(comCode, resultData, callback));
+            MqttSubMsg subMsg = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS);
+            return BaseResponseUtils.buildSuccess(this.dealComResult(comCode, subMsg, callback));
         }catch (Exception e){
             return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂");
         }
@@ -189,5 +190,5 @@
     /**
      * 鐢熸垚鍛戒护杩斿洖淇℃伅
      */
-    protected abstract String dealComResult(String code, JSONObject resultData, Callback callback);
+    protected abstract String dealComResult(String code, MqttSubMsg subMsg, Callback callback);
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java
index cc16a8d..8d673ee 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
@@ -24,6 +24,9 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 
 /**
  * @Author: liurunyu
@@ -72,7 +75,7 @@
                     try {
                         //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
                         Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
-                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.rtuResultSendWebUrl = mqttResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
                         res = super.doSend(sv, com);
@@ -98,24 +101,21 @@
     }
 
     @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+    protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
         String msg;
-        if(resultData != null){
-            log.info(resultData.toString());
-            JSONObject codeData = resultData.getJSONObject("data") ;
-            if(codeData == null){
+        if(subMsg != null){
+            if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+                // 鑾峰彇浠g悊鐨� InvocationHandler
+                InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+                String json = JSON.toJSONString(handler) ;
+                ManureVo vo = JSON.parseObject(json, ManureVo.class);
+                msg = vo.toString() ;
+            }else{
                 msg = RtuSuccessMsg ;
-            }else {
-                String json = codeData.toJSONString();
-                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ;
-                if(cvo != null){
-                    msg = cvo.toString() ;
-                }else{
-                    msg = RtuSuccessMsg ;
-                }
             }
         }else{
             msg = RtuSuccessMsg ;
         }
         return msg;
-    }}
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java
index 1843239..5331d0a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.inject;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
@@ -12,7 +12,6 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
 import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
-import com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -25,6 +24,9 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 
 /**
  * @Author: liurunyu
@@ -58,7 +60,7 @@
      */
     @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> start(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> start(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
         return this.send(dto, bindingResult, true) ;
     }
 
@@ -70,7 +72,7 @@
      */
     @PostMapping(path = "stop", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> stop(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> stop(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
         return this.send(dto, bindingResult, false) ;
     }
 
@@ -97,7 +99,7 @@
                     try {
                         //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
                         Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
-                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.rtuResultSendWebUrl = mqttResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
                         res = super.doSend(sv, com);
@@ -123,24 +125,21 @@
     }
 
     @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+    protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
         String msg;
-        if(resultData != null){
-            log.info(resultData.toString());
-            JSONObject codeData = resultData.getJSONObject("data") ;
-            if(codeData == null){
+        if(subMsg != null){
+            if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+                // 鑾峰彇浠g悊鐨� InvocationHandler
+                InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+                String json = JSON.toJSONString(handler) ;
+                ManureVo vo = JSON.parseObject(json, ManureVo.class);
+                msg = vo.toString() ;
+            }else{
                 msg = RtuSuccessMsg ;
-            }else {
-                String json = codeData.toJSONString();
-                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ;
-                if(cvo != null){
-                    msg = cvo.toString() ;
-                }else{
-                    msg = RtuSuccessMsg ;
-                }
             }
         }else{
             msg = RtuSuccessMsg ;
         }
         return msg;
-    }}
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java
index 9dc4801..a361d9a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.irr;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
@@ -25,6 +25,9 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 
 /**
  * @Author: liurunyu
@@ -98,7 +101,7 @@
                     try {
                         //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
                         Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
-                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.rtuResultSendWebUrl = mqttResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
                         res = super.doSend(sv, com);
@@ -124,24 +127,21 @@
     }
 
     @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+    protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
         String msg;
-        if(resultData != null){
-            log.info(resultData.toString());
-            JSONObject codeData = resultData.getJSONObject("data") ;
-            if(codeData == null){
+        if(subMsg != null){
+            if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+                // 鑾峰彇浠g悊鐨� InvocationHandler
+                InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+                String json = JSON.toJSONString(handler) ;
+                ManureVo vo = JSON.parseObject(json, ManureVo.class);
+                msg = vo.toString() ;
+            }else{
                 msg = RtuSuccessMsg ;
-            }else {
-                String json = codeData.toJSONString();
-                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ;
-                if(cvo != null){
-                    msg = cvo.toString() ;
-                }else{
-                    msg = RtuSuccessMsg ;
-                }
             }
         }else{
             msg = RtuSuccessMsg ;
         }
         return msg;
-    }}
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java
index dfb2772..c3e8120 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.paramSet;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
@@ -12,7 +12,6 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
 import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
-import com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -25,6 +24,9 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 
 /**
  * @Author: liurunyu
@@ -75,7 +77,7 @@
                     try {
                         //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
                         Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
-                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.rtuResultSendWebUrl = mqttResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
                         res = super.doSend(sv, com);
@@ -101,24 +103,21 @@
     }
 
     @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+    protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
         String msg;
-        if(resultData != null){
-            log.info(resultData.toString());
-            JSONObject codeData = resultData.getJSONObject("data") ;
-            if(codeData == null){
+        if(subMsg != null){
+            if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+                // 鑾峰彇浠g悊鐨� InvocationHandler
+                InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+                String json = JSON.toJSONString(handler) ;
+                ManureVo vo = JSON.parseObject(json, ManureVo.class);
+                msg = vo.toString() ;
+            }else{
                 msg = RtuSuccessMsg ;
-            }else {
-                String json = codeData.toJSONString();
-                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ;
-                if(cvo != null){
-                    msg = cvo.toString() ;
-                }else{
-                    msg = RtuSuccessMsg ;
-                }
             }
         }else{
             msg = RtuSuccessMsg ;
         }
         return msg;
-    }}
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java
index d80897a..491dffd 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java
@@ -1,6 +1,7 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.paramSet;
 
 import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -13,4 +14,12 @@
 @EqualsAndHashCode(callSuper=true)
 public class CdDto extends Dto4MqttBase {
     public static final long serialVersionUID = 202506201656001L;
+
+    // 鎼呮媽璁惧畾鏃堕棿 鍗曚綅绉�
+    @NotNull(message = "鎼呮媽璁惧畾鏃堕棿涓嶈兘涓虹┖")
+    public Integer stirDuration ;
+
+    // 娉ㄨ偉璁惧畾鏃堕棿 鍗曚綅绉�
+    @NotNull(message = "娉ㄨ偉璁惧畾鏃堕棿涓嶈兘涓虹┖")
+    public Integer injectDuration ;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java
index 8839c70..698f108 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.stir;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
 import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
@@ -25,6 +25,9 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
 /**
  * @Author: liurunyu
  * @Date: 2025/6/16 17:35
@@ -34,7 +37,7 @@
 @Slf4j
 @Tag(name = "杩滅▼鍛戒护", description = "鎼呮媽鍚仠")
 @RestController("mqttSd1StirCtrl")
-@RequestMapping(path = "mqttSd1/stirCtrl")
+@RequestMapping(path = "mqttSd1/stir")
 @RequiredArgsConstructor
 @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
 public class CdCtrl extends Com4MqttCtrl {
@@ -93,7 +96,7 @@
                     try {
                         //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
                         Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
-                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.rtuResultSendWebUrl = mqttResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
                         res = super.doSend(sv, com);
@@ -119,24 +122,21 @@
     }
 
     @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+    protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
         String msg;
-        if(resultData != null){
-            log.info(resultData.toString());
-            JSONObject codeData = resultData.getJSONObject("data") ;
-            if(codeData == null){
+        if(subMsg != null){
+            if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+                // 鑾峰彇浠g悊鐨� InvocationHandler
+                InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+                String json = JSON.toJSONString(handler) ;
+                ManureVo vo = JSON.parseObject(json, ManureVo.class);
+                msg = vo.toString() ;
+            }else{
                 msg = RtuSuccessMsg ;
-            }else {
-                String json = codeData.toJSONString();
-                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ;
-                if(cvo != null){
-                    msg = cvo.toString() ;
-                }else{
-                    msg = RtuSuccessMsg ;
-                }
             }
         }else{
             msg = RtuSuccessMsg ;
         }
         return msg;
-    }}
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java
index 4e8aeb1..c447a8c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java
@@ -15,11 +15,4 @@
 public class CdDto extends Dto4MqttBase {
     public static final long serialVersionUID = 202506201655001L;
 
-    // 鎼呮媽璁惧畾鏃堕棿 鍗曚綅绉�
-    @NotNull(message = "鎼呮媽璁惧畾鏃堕棿涓嶈兘涓虹┖")
-    public Integer stirDuration ;
-
-    // 娉ㄨ偉璁惧畾鏃堕棿 鍗曚綅绉�
-    @NotNull(message = "娉ㄨ偉璁惧畾鏃堕棿涓嶈兘涓虹┖")
-    public Integer injectDuration ;
 }

--
Gitblit v1.8.0