From 0c870ae5b2af348e19b10cc1a99f103f95c5a1cc Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期六, 21 六月 2025 11:47:09 +0800
Subject: [PATCH] 1、通信中间件重构MQTT相关下行命令的逻辑; 2、remote模块完善MQTT相关下行命令解除报警、搅拌启停、注肥启停、灌溉启停功能类;

---
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java  |   16 +-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java    |   38 ++++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java     |   11 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties                                         |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java                        |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java                                 |   18 +++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttUnitConfigVo.java                 |    8 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java      |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java                                       |   12 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml                                                |    6 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java       |   39 ++++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java |    6 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java       |    9 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java   |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java    |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java             |   10 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttPubMsgNode.java                   |   32 ++++--
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java  |    3 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java      |   32 +++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java     |    4 
 20 files changed, 204 insertions(+), 60 deletions(-)

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 04f99e3..5114ad8 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
@@ -57,7 +57,7 @@
         if(com.protocolVersion == null){
             throw new Exception("鎺ユ敹鍒癕QTT鍛戒护锛屼絾鏈彁渚涘崗璁増鏈彿") ;
         }
-        if(com.code != null && com.code.trim().length() != 0){
+        if(com.code == null || com.code.trim().length() == 0){
             throw new Exception("鎺ユ敹鍒癕QTT鍛戒护锛屼絾鏈彁渚涘姛鑳界爜") ;
         }
         if(com.protocol.equals(ProtocolConstantSdV1.protocolName)){
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 0040621..acfbe14 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
@@ -148,7 +148,7 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault, cvo.no) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol + com.protocolVersion, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault, cvo.no) ;
         msg.msg = JSON.toJSONString(new FaultClearVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
@@ -164,7 +164,7 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicStir, cvo.no) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol + com.protocolVersion, com.rtuAddr, ProtocolConstantSdV1.PubTopicStir, cvo.no) ;
         msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
@@ -180,7 +180,7 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicInject, cvo.no) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol + com.protocolVersion, com.rtuAddr, ProtocolConstantSdV1.PubTopicInject, cvo.no) ;
         msg.msg = JSON.toJSONString(new InjectStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
@@ -196,7 +196,7 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = true ;
         msg.cd = CodeSdV1.cd_Fault ;
-        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicIrr, cvo.no) ;
+        msg.topic = new MqttTopic(orgTag, com.protocol + com.protocolVersion, com.rtuAddr, ProtocolConstantSdV1.PubTopicIrr, cvo.no) ;
         msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ;
         return msg ;
     }
@@ -213,7 +213,7 @@
         msg.isCacheForOffLine = false ;
         msg.hasResponse = false ;
         msg.cd = CodeSdV1.cd_Param ;
-        msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicParam, cvo.no) ;
+        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 ;
     }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
index 118b150..23b2675 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
@@ -214,6 +214,24 @@
     }
 
     /**
+     * 鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+     * @param fboxId FBox璁惧搴忓垪鍙�
+     * @param comId 鍛戒护ID
+     * @param code 鍛戒护code
+     * @return
+     */
+    public Command createMQTTCommand(String fboxId, String comId, String protocol, Short protocolVer, String code) {
+        Command com = new Command();
+        com.id = comId;
+        com.rtuAddr = fboxId;
+        com.code = code ;
+        com.protocol = protocol ;
+        com.protocolVersion = protocolVer ;
+        com.type = CommandType.mqttCommand;
+        return com ;
+    }
+
+    /**
      * 鍒涘缓澶栭儴閫忎紶鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
      * @param comId 鍛戒护ID
      * @param code 鍛戒护code
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 e823bbd..13c0ca2 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
@@ -470,10 +470,14 @@
 				}else{
 					mqVo.svUserPassword = mqVo.svUserPassword.trim() ;
 				}
-				mqVo.poolMaxSize = conf.getSetAttrPlusInt(doc, "config.mqtt", "poolMaxSize", null, 5, 360000, null);
-				if(mqVo.poolMaxSize <= 1 || mqVo.poolMaxSize > 1000){
-					throw new Exception("config.mqtt.poolMaxSize閰嶇疆鐨勮繛鎺ユ睜杩炴帴鏈�澶ф暟閲忎笉鍚堟硶") ;
-				}
+				mqVo.poolMaxSize = conf.getSetAttrPlusInt(doc, "config.mqtt", "poolMaxSize", null, 1, 1000, null);
+
+				mqVo.sendInterval = conf.getSetAttrPlusInt(doc, "config.mqtt", "sendInterval", null, 1, 3600, null) * 1000L ;
+
+				mqVo.reSendTimesByNoResult = conf.getSetAttrPlusInt(doc, "config.mqtt", "reSendTimesByNoResult", null, 0, 100, null);
+
+				mqVo.comCacheTimeout = conf.getSetAttrPlusInt(doc, "config.mqtt", "comCacheTimeout", null, 1, 3600, null) * 1000L ;
+
 				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("")){
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 504ee3f..1bfd24e 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
@@ -20,12 +20,16 @@
     public MqttPubMsg result ;//涓嬭鍛戒护
     public Long cachTime ;//缂撳瓨鏃跺埢
     public boolean onceReceivedResult ;//宸茬粡鏀跺埌鍛戒护搴旂瓟
+    public long lastSendTime = 0 ;//涓婃鍙戦�佹椂闂�
+    public int sendTimes = 0 ;//鍙戦�佹鏁�
 
 
     public MqttPubMsgNode(MqttPubMsg result){
         this.result = result ;
         this.cachTime = System.currentTimeMillis() ;
         this.onceReceivedResult = false ;
+        this.lastSendTime = 0L ;
+        this.sendTimes = 0 ;
     }
 
     /**
@@ -36,9 +40,13 @@
     public boolean dealSelf(Long now){
         if(this.onceReceivedResult){
             //宸茬粡鏀跺埌鍛戒护缁撴灉
-            //璁板綍鐘舵��
-            //RtuStatusDealer.commandSuccess(this.result.rtuAddr, this.result.downCode, this.result.downCodeName);
             return true ;
+        }
+        if(this.sendTimes >= (1 + MqttUnit.confVo.reSendTimesByNoResult)){
+            return this.decideRemoveNodeFromCach(now, null) ;
+        }
+        if(this.lastSendTime != 0 && now - this.lastSendTime >= MqttUnit.confVo.sendInterval){
+            return this.decideRemoveNodeFromCach(now, null) ;
         }
         boolean noConnect2MqSv = false ;
         MqttManager mqttManager = MqttManager.getInstance() ;
@@ -47,7 +55,7 @@
         noConnect2MqSv = mqttManager.poolIsClose() ;
         if(noConnect2MqSv){
             //鏈浘杩炴帴MQTT鏈嶅姟鍣�
-            return this.decideRemoveNodeFromCach(now) ;
+            return this.decideRemoveNodeFromCach(now, null) ;
         }else{
             try {
                 //濡傛灉缃戠粶涓嶅ソ鎴栨柇缃戯紝姝ゅ鐢ㄦ椂杈冮暱
@@ -61,16 +69,18 @@
         }
         if(noConnect2MqSv){
             //鏈浘杩炴帴MQTT鏈嶅姟鍣�
-            return this.decideRemoveNodeFromCach(now) ;
+            return this.decideRemoveNodeFromCach(now, null) ;
         }else{
             if(mqttClient != null && mqttClient.isConnected()){
                 try {
                     mqttManager.publishMsg(mqttClient, this.result.topic.longName(), this.result.msg);
+                    this.sendTimes ++ ;
+                    this.lastSendTime = System.currentTimeMillis() ;
                     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);
+                    RtuLogDealer.log4Mqtt(this.result.deviceId, "鍙戝竷娑堟伅    涓婚锛�" + this.result.topic.longName() + "   娑堟伅锛�" + this.result.msg);
+                    log.info("鍙戝竷MQTT娑堟伅锛堜富棰�=" + this.result.topic.longName() + "锛�" + this.result.msg);
                 }catch (Exception e){
-                    log.error("MQTT鍙戝竷娑堟伅澶辫触锛堜富棰�=" + this.result.topic + "锛�" , e);
+                    log.error("MQTT鍙戝竷娑堟伅澶辫触锛堜富棰�=" + this.result.topic.longName() + "锛�" , e);
                 }finally {
                     mqttManager.pushMqttClient(mqttClient);
                 }
@@ -81,18 +91,18 @@
                 }
             }else{
                 //鏈浘杩炴帴MQTT鏈嶅姟鍣�
-                return this.decideRemoveNodeFromCach(now) ;
+                return this.decideRemoveNodeFromCach(now, false) ;
             }
         }
     }
 
-    private boolean decideRemoveNodeFromCach(Long now){
-        if(!this.result.isCacheForOffLine){
+    private boolean decideRemoveNodeFromCach(Long now, Boolean isOffLine){
+        if(isOffLine != null && isOffLine.booleanValue() && !this.result.isCacheForOffLine){
             //涓嶅湪绾垮懡浠や笉缂撳瓨
             return true ;
         }else{
             //涓嶅湪绾垮懡浠ょ紦瀛�
-            if(now - this.cachTime >= ServerProperties.offLineCacheTimeout){
+            if(now - this.cachTime >= MqttUnit.confVo.comCacheTimeout){
                 //缂撳瓨瓒呮椂
                 return true ;
             }
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 e2cad34..92f347a 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,9 @@
     public String svUserName ;//
     public String svUserPassword ;//
     public Integer poolMaxSize ;//
+    public Long sendInterval ;//
+    public Integer reSendTimesByNoResult ;//
+    public Long comCacheTimeout ;//
     public Boolean useMemoryPersistence ;
     public String[] protocolAndDeviceIds ;//璁惧鍗忚涓嶪D锛團Box锛塱d
     public String[] deviceIds ;//璁惧锛團Box锛塱d
@@ -28,7 +31,10 @@
         this.svUserName = "dyyjy" ;
         this.svUserPassword = "Dyyjy2025,;.abc!@#" ;
         this.poolMaxSize = 10 ;
-        useMemoryPersistence = true ;
+        this.sendInterval = 60000L ;
+        this.reSendTimesByNoResult = 0 ;
+        this.comCacheTimeout = 60000L ;
+        this.useMemoryPersistence = true ;
         this.pubTopicQos = 1 ;
         this.noSubThenOff = 10 * 60 * 10000L ;
     }
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 fce9f73..174c558 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
@@ -48,12 +48,12 @@
 #   鍑夊窞锛� mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos=
 #   閲戝窛锛� mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather/1,1;soil/1,1;manure/1,1;state/1,1
 #   鍢夊唱鍏筹細 mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather/1,1;soil/1,1;manure/1,1;state/1,1
-mqtt.enable=false
-mqtt.ip=127.0.0.1
+mqtt.enable=true
+mqtt.ip=121.199.41.121
 mqtt.port=1883
 mqtt.user=dyyjy
 mqtt.password=Dyyjy2025,;.abc!@#
-mqtt.protocolAndDeviceIds=sd1/2430002404000840,sd1/2430002404000840
+mqtt.protocolAndDeviceIds=sd1/123456789
 mqtt.subTopicAndQos=weather/1,1;soil/1,1;manure/1,1
 #MQtt璁惧鍦ㄤ竴瀹氭椂闂达紙鍒嗛挓锛夊悗鏈彂甯冩秷鎭紝璁や负璁惧绂荤嚎
 mqtt.noSubThenOff=10
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 abe6d4b..a9a11ed 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,9 @@
 	svUserName MQTT鏈嶅姟鍣ㄧ敤鎴峰悕
 	svUserPassword MQTT鏈嶅姟鍣ㄧ敤鎴峰瘑鐮�
 	poolMaxSize 杩炴帴姹犳渶澶ц繛鎺ユ暟
+	sendInterval 鍛戒护鍙戦�侀棿闅旓紙鍗曚綅绉掞級锛屽彇鍊艰寖鍥存槸1~3600
+	reSendTimesByNoResult 鏈敹鍒板懡浠ょ粨鏋滄椂锛屾渶澶ч噸澶嶅彂閫佹鏁帮紝鍙栧�艰寖鍥存槸0~100, 0鏃惰〃绀轰笉閲嶅鍙戦��
+	comCacheTimeout: 鍛戒护鏈�澶х紦瀛樻椂闀�(绉�)锛屽彇鍊艰寖鍥存槸1~3600
 	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
@@ -186,6 +189,9 @@
 		  svUserName="${mqtt.user}"
 		  svUserPassword="${mqtt.password}"
 		  poolMaxSize="10"
+		  sendInterval="60"
+		  reSendTimesByNoResult="0"
+		  comCacheTimeout="30"
 		  useMemoryPersistence="true"
 		  protocolAndDeviceIds="${mqtt.protocolAndDeviceIds}"
 		  subTopicAndQos="${mqtt.subTopicAndQos}"
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java
index 8e47d24..76623df 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java
@@ -11,6 +11,5 @@
 @Data
 @SuperBuilder
 public class Cd4MqttParameter {
-    //鍛戒护鍔熻兘鐮�
-    public String commandCode;
+    public Integer no ;//璁惧缂栧彿
 }
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 1e252ec..cc16a8d 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
@@ -34,7 +34,7 @@
 @Slf4j
 @Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
 @RestController("mqttSd1FaultCtrl")
-@RequestMapping(path = "mqttSd1/faultCtrl")
+@RequestMapping(path = "mqttSd1/fault")
 @RequiredArgsConstructor
 @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
 public class CdCtrl extends Com4MqttCtrl {
@@ -45,7 +45,6 @@
     private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
     private static final String ComCode = CodeSdV1.cd_Fault ;
 
-
     @Autowired
     private CdSv sv ;
     /**
@@ -54,7 +53,7 @@
      * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
      * @return 杩斿洖鍓嶇
      */
-    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(path = "clear", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
     public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
         BaseResponse<Object> res ;
@@ -65,14 +64,14 @@
             res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
             if (res == null) {
                 //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
-                CdParam comParam = CdParam.builder().commandCode(ComCode).build();
+                CdParam comParam = CdParam.builder().no(ctrlPo.no).startTrueStopFalse(true).build();
                 res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
                 if (res == null) {
                     //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
                     super.pre4();
                     try {
-                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
-                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode);
+                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+                        Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
                         com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java
index 83dc00c..822e2d2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java
@@ -16,4 +16,8 @@
 @EqualsAndHashCode(callSuper = true)
 @SuperBuilder
 public class CdParam extends Cd4MqttParameter {
+    //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
+    //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
+    public boolean startTrueStopFalse;//
+
 }
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 74ac28b..1843239 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
@@ -12,6 +12,7 @@
 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;
@@ -32,9 +33,9 @@
  */
 
 @Slf4j
-@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@Tag(name = "杩滅▼鍛戒护", description = "娉ㄨ偉鍚仠")
 @RestController("mqttSd1InjectCtrl")
-@RequestMapping(path = "mqttSd1/injectCtrl")
+@RequestMapping(path = "mqttSd1/inject")
 @RequiredArgsConstructor
 @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
 public class CdCtrl extends Com4MqttCtrl {
@@ -48,15 +49,38 @@
 
     @Autowired
     private CdSv sv ;
+
     /**
      * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
      * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
      * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
      * @return 杩斿洖鍓嶇
      */
-    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> start(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) {
+        return this.send(dto, bindingResult, true) ;
+    }
+
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @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) {
+        return this.send(dto, bindingResult, false) ;
+    }
+
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    private BaseResponse<Object> send(CdDto dto, BindingResult bindingResult, boolean startTrueStopFalse) {
         BaseResponse<Object> res ;
         //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
         res = super.pre1(sv, ComCode, dto, bindingResult);
@@ -65,14 +89,14 @@
             res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
             if (res == null) {
                 //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
-                CdParam comParam = CdParam.builder().commandCode(ComCode).build();
+                CdParam comParam = CdParam.builder().no(ctrlPo.no).startTrueStopFalse(true).build();
                 res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
                 if (res == null) {
                     //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
                     super.pre4();
                     try {
-                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
-                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode);
+                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+                        Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
                         com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java
index 4293627..e0dff57 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java
@@ -16,4 +16,8 @@
 @EqualsAndHashCode(callSuper = true)
 @SuperBuilder
 public class CdParam extends Cd4MqttParameter {
+    //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
+    //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
+    public boolean startTrueStopFalse;//
+
 }
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 f808c95..9dc4801 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
@@ -12,6 +12,7 @@
 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;
@@ -29,12 +30,13 @@
  * @Author: liurunyu
  * @Date: 2025/6/16 17:35
  * @Description
+ * 澶х灏嗘按鑲ユ満搴旂敤浜庣鐏岀郴缁燂紝鎵�浠ユ按鑲ユ満涓婃湭瀹夎鐏屾簤闃�闂紝鐩稿簲姝ゅ姛鑳戒篃涓嶅簲鐢ㄤ簡
  */
 
 @Slf4j
-@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@Tag(name = "杩滅▼鍛戒护", description = "鐏屾簤鍚仠")
 @RestController("mqttSd1IrrCtrl")
-@RequestMapping(path = "mqttSd1/irrCtrl")
+@RequestMapping(path = "mqttSd1/irr")
 @RequiredArgsConstructor
 @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
 public class CdCtrl extends Com4MqttCtrl {
@@ -48,15 +50,38 @@
 
     @Autowired
     private CdSv sv ;
+
     /**
      * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
      * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
      * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
      * @return 杩斿洖鍓嶇
      */
-    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> start(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) {
+        return this.send(dto, bindingResult, true) ;
+    }
+
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @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) {
+        return this.send(dto, bindingResult, false) ;
+    }
+
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    private BaseResponse<Object> send(CdDto dto, BindingResult bindingResult, boolean startTrueStopFalse) {
         BaseResponse<Object> res ;
         //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
         res = super.pre1(sv, ComCode, dto, bindingResult);
@@ -65,14 +90,14 @@
             res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
             if (res == null) {
                 //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
-                CdParam comParam = CdParam.builder().commandCode(ComCode).build();
+                CdParam comParam = CdParam.builder().no(ctrlPo.no).startTrueStopFalse(true).build();
                 res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
                 if (res == null) {
                     //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
                     super.pre4();
                     try {
-                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
-                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode);
+                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+                        Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
                         com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java
index ffec185..07316a6 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java
@@ -16,4 +16,8 @@
 @EqualsAndHashCode(callSuper = true)
 @SuperBuilder
 public class CdParam extends Cd4MqttParameter {
+    //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
+    //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
+    public boolean startTrueStopFalse;//
+
 }
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 b74db25..dfb2772 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
@@ -12,6 +12,7 @@
 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;
@@ -32,9 +33,9 @@
  */
 
 @Slf4j
-@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@Tag(name = "杩滅▼鍛戒护", description = "璁剧疆鍙傛暟")
 @RestController("mqttSd1ParamCtrl")
-@RequestMapping(path = "mqttSd1/paramCtrl")
+@RequestMapping(path = "mqttSd1/param")
 @RequiredArgsConstructor
 @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
 public class CdCtrl extends Com4MqttCtrl {
@@ -48,15 +49,16 @@
 
     @Autowired
     private CdSv sv ;
+
     /**
      * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
      * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
      * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
      * @return 杩斿洖鍓嶇
      */
-    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(path = "set", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> set(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
         BaseResponse<Object> res ;
         //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
         res = super.pre1(sv, ComCode, dto, bindingResult);
@@ -65,14 +67,14 @@
             res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
             if (res == null) {
                 //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
-                CdParam comParam = CdParam.builder().commandCode(ComCode).build();
+                CdParam comParam = CdParam.builder().no(ctrlPo.no).injectDuration(dto.injectDuration).stirDuration(dto.stirDuration).build();
                 res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
                 if (res == null) {
                     //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
                     super.pre4();
                     try {
-                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
-                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode);
+                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+                        Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
                         com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java
index c905f87..d4721d8 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java
@@ -16,4 +16,10 @@
 @EqualsAndHashCode(callSuper = true)
 @SuperBuilder
 public class CdParam extends Cd4MqttParameter {
+
+    // 鎼呮媽璁惧畾鏃堕棿
+    public Integer stirDuration ;
+
+    // 娉ㄨ偉璁惧畾鏃堕棿
+    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 b39d06c..8839c70 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
@@ -32,7 +32,7 @@
  */
 
 @Slf4j
-@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@Tag(name = "杩滅▼鍛戒护", description = "鎼呮媽鍚仠")
 @RestController("mqttSd1StirCtrl")
 @RequestMapping(path = "mqttSd1/stirCtrl")
 @RequiredArgsConstructor
@@ -54,9 +54,29 @@
      * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
      * @return 杩斿洖鍓嶇
      */
-    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+    public BaseResponse<Object> start(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        return this.send(dto, bindingResult, true) ;
+    }
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "stop", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> stop(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        return this.send(dto, bindingResult, false) ;
+    }
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    private BaseResponse<Object> send(CdDto dto, BindingResult bindingResult, boolean startTrueStopFalse) {
         BaseResponse<Object> res ;
         //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
         res = super.pre1(sv, ComCode, dto, bindingResult);
@@ -65,14 +85,14 @@
             res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
             if (res == null) {
                 //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
-                CdParam comParam = CdParam.builder().commandCode(ComCode).build();
+                CdParam comParam = CdParam.builder().no(ctrlPo.no).startTrueStopFalse(startTrueStopFalse).build();
                 res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
                 if (res == null) {
                     //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
                     super.pre4();
                     try {
-                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
-                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode);
+                        //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+                        Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
                         com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                         com.param = comParam ;
                         //鍙戦�佸懡浠�
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 54f2946..4e8aeb1 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
@@ -1,6 +1,7 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.stir;
 
 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 = 202506201655001L;
+
+    // 鎼呮媽璁惧畾鏃堕棿 鍗曚綅绉�
+    @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/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java
index 9d026bd..26c353d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java
@@ -16,4 +16,8 @@
 @EqualsAndHashCode(callSuper = true)
 @SuperBuilder
 public class CdParam extends Cd4MqttParameter {
+    //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
+    //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
+    public boolean startTrueStopFalse;//
+
 }

--
Gitblit v1.8.0