From e9d04864135236c8b39b06f62d001631524197e6 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 20 六月 2025 17:02:58 +0800
Subject: [PATCH] 1、协议细化,处理小数; 2、水肥机、气象站、墒情站实体增加属性fboxId(FBox序列号);

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml                                         |   25 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdSv.java    |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java     |  122 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttSv.java        |   50 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStWeather.java                              |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdSv.java      |   15 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java                 |   48 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdDto.java     |   16 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java       |  122 ++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java                                   |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStSoil.java                                 |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdDto.java        |   16 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java   |   16 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java                          |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java   |   19 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdParam.java    |   12 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml                                        |   25 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java  |   16 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java      |  122 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java     |   19 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStManure.java                               |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java  |  122 ++++
 pipIrr-platform/文档/水肥气象墒情/FlexManager软件配置参数.docx                                                                     |    0 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java    |  122 ++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java                            |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java                |    8 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml                                           |   25 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java             |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java      |  193 +++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdDto.java      |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java                   |   20 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/Command4MqttSv.java                          |  137 +++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdSv.java       |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdSv.java        |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java      |   19 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Dto4MqttBase.java          |   33 +
 /dev/null                                                                                                            |    9 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdSv.java         |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java |   19 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java                       |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java       |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java             |   37 +
 42 files changed, 1,438 insertions(+), 71 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 59b6ec0..2399abe 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
@@ -41,7 +41,7 @@
 	public Short protocolVersion;
 
 	/**
-	 * RTU 鍦板潃
+	 * RTU鍦板潃 鍜� FBox璁惧鍙�
 	 */
 	public String rtuAddr ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
index da40d12..5bc518e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
@@ -16,7 +16,7 @@
     public String orgTag ;//缁勭粐鏍囪瘑
     public String protocol ;//鍗忚鍚嶇О
     public String devId ;//璁惧锛團Box锛塈D
-    public String type;//娴嬬珯绫诲瀷
+    public String type;//鏁版嵁锛堝懡浠わ級绫诲瀷
     public Integer no;//娴嬬珯缂栧彿
 
     public boolean isEmpty(){
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
index a78f8b0..a029596 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/CodeSdV1.java
@@ -10,5 +10,18 @@
     public static final String cd_Stir = "01" ;//鎼呮媽鍚仠鍛戒护
     public static final String cd_Inject = "02" ;//娉ㄨ偉鍚仠鍛戒护
     public static final String cd_Irr = "03" ;//鐏屾簤鍚仠鍛戒护
-    public static final String cd_Param = "10" ;//璁惧畾鍙傛暟
+    public static final String cd_Param = "10" ;//璁剧疆鍙傛暟
+
+    public static String getCodeName(String code) {
+        String name = (code.equals(cd_Fault) ? "鏁呴殰瑙i櫎" :
+                (code.equals(cd_Stir) ? "鎼呮媽鍚仠" :
+                (code.equals(cd_Inject) ? "娉ㄨ偉鍚仠" :
+                (code.equals(cd_Irr) ? "鐏屾簤鍚仠" :
+                (code.equals(cd_Param) ? "璁剧疆鍙傛暟" :
+                 ""))))) ;
+        if(name == null || name.equals("")){
+            name = code ;
+        }
+        return name ;
+    }
 }
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 5c7bb13..0040621 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
@@ -32,22 +32,43 @@
         DevRunInfo stInfo = null ;
         switch (subTopic.type) {
             case ProtocolConstantSdV1.SubTopicWeather -> {
-                vo = JSON.parseObject(strTxt, WeatherVo.class);
+                WeatherVo wvo = JSON.parseObject(strTxt, WeatherVo.class);
+                //璋冩暣灏忔暟
+                wvo.airTemperature = (wvo.airTemperature == null ? null: (wvo.airTemperature / 10.0F)) ;
+                wvo.airHumidity = (wvo.airHumidity == null ? null: (wvo.airHumidity / 10.0F)) ;
+                wvo.rainfall = (wvo.rainfall == null ? null: (wvo.rainfall / 10.0F)) ;
+                wvo.windSpeed = (wvo.windSpeed == null ? null: (wvo.windSpeed / 10.0F)) ;
+                vo = wvo ;
                 break;
             }
             case ProtocolConstantSdV1.SubTopicSoil -> {
-                vo = JSON.parseObject(strTxt, SoilVo.class);
+                SoilVo svo = JSON.parseObject(strTxt, SoilVo.class);
+                //璋冩暣灏忔暟
+                svo.soilHumidity1 = (svo.soilHumidity1 == null ? null: (svo.soilHumidity1 / 10.0F)) ;
+                svo.soilHumidity2 = (svo.soilHumidity2 == null ? null: (svo.soilHumidity2 / 10.0F)) ;
+                svo.soilHumidity3 = (svo.soilHumidity3 == null ? null: (svo.soilHumidity3 / 10.0F)) ;
+                svo.soilHumidity4 = (svo.soilHumidity4 == null ? null: (svo.soilHumidity4 / 10.0F)) ;
+                svo.soilHumidity5 = (svo.soilHumidity5 == null ? null: (svo.soilHumidity5 / 10.0F)) ;
+                svo.soilTemperature1 = (svo.soilTemperature1 == null ? null: (svo.soilTemperature1 / 10.0F)) ;
+                svo.soilTemperature2 = (svo.soilTemperature2 == null ? null: (svo.soilTemperature2 / 10.0F)) ;
+                svo.soilTemperature3 = (svo.soilTemperature3 == null ? null: (svo.soilTemperature3 / 10.0F)) ;
+                svo.soilTemperature4 = (svo.soilTemperature4 == null ? null: (svo.soilTemperature4 / 10.0F)) ;
+                svo.soilTemperature5 = (svo.soilTemperature5 == null ? null: (svo.soilTemperature5 / 10.0F)) ;
+                vo = svo ;
                 break;
             }
             case ProtocolConstantSdV1.SubTopicManure -> {
-                vo = JSON.parseObject(strTxt, ManureVo.class);
-                ManureVo stVo = (ManureVo)vo ;
+                ManureVo mvo = JSON.parseObject(strTxt, ManureVo.class);
+                //璋冩暣灏忔暟
+                mvo.manureFlow = (mvo.manureFlow == null ? null: (mvo.manureFlow / 10.0F)) ;
+                vo = mvo ;
+
                 stInfo = new DevRunInfo() ;
                 stInfo.devId = msg.deviceId ;
-                stInfo.stirRunning = (stVo.stirRunning==null?false:(stVo.stirRunning.byteValue()==1?true:false)) ; //鎼呮媽杩愯 true鏄� false鍚�
-                stInfo.injectRunning = (stVo.injectRunning==null?false:(stVo.injectRunning.byteValue()==1?true:false)) ; //娉ㄨ偉杩愯 true鏄� false鍚�
-                stInfo.irrRunning = (stVo.irrRunning==null?false:(stVo.irrRunning.byteValue()==1?true:false)) ; //鐏屾簤杩愯 true鏄� false鍚�
-                stInfo.alarm = (stVo.alarm==null?false:(stVo.alarm.byteValue()==1?true:false)) ; //鎶ヨ true鏄� false鍚�
+                stInfo.stirRunning = (mvo.stirRunning1 ==null?false:(mvo.stirRunning1.byteValue()==1?true:false)) ; //鎼呮媽杩愯 true鏄� false鍚�
+                stInfo.injectRunning = (mvo.injectRunning==null?false:(mvo.injectRunning.byteValue()==1?true:false)) ; //娉ㄨ偉杩愯 true鏄� false鍚�
+                stInfo.irrRunning = (mvo.irrRunning==null?false:(mvo.irrRunning.byteValue()==1?true:false)) ; //鐏屾簤杩愯 true鏄� false鍚�
+                stInfo.alarm = (mvo.alarm==null?false:(mvo.alarm.byteValue()==1?true:false)) ; //鎶ヨ true鏄� false鍚�
                 break;
             }
             default -> {
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java
index 48ecd14..4b421d9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/downVos/ParamSetVo.java
@@ -15,9 +15,15 @@
 @NoArgsConstructor
 @AllArgsConstructor
 public class ParamSetVo implements Vo4Down {
+    /**
+     * 鍗曚綅绉�
+     */
     @JSONField(name = "鎼呮媽璁惧畾鏃堕棿")
     public Integer stirDuration ;
 
+    /**
+     * 鍗曚綅绉�
+     */
     @JSONField(name = "娉ㄨ偉璁惧畾鏃堕棿")
     public Integer injectDuration ;
 
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 10e0875..f6b5647 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
@@ -17,24 +17,60 @@
 
     public Integer no ;//娴嬬珯缂栧彿锛屽叾涓嶅湪JSON鏁版嵁涓紝鍏跺湪涓婚涓�
 
-    @JSONField(name = "鎼呮媽杩愯")
-    public Byte stirRunning ;//鎼呮媽杩愯
+    /**
+     * 鎼呮媽鏈�1鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
+     */
+    @JSONField(name = "鎼呮媽杩愯1")
+    public Byte stirRunning1;//鎼呮媽1杩愯鐘舵��
+    /**
+     * 鎼呮媽鏈�2鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
+     * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
+     */
+    @JSONField(name = "鎼呮媽杩愯2")
+    public Byte stirRunning2;//鎼呮媽2杩愯鐘舵��
+    /**
+     * 鎼呮媽鏈�3鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
+     * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
+     */
+    @JSONField(name = "鎼呮媽杩愯3")
+    public Byte stirRunning3;//鎼呮媽3杩愯鐘舵��
+    /**
+     * 鎼呮媽鏈�4鏄惁杩愯锛涳紙姘磋偉鏈鸿繕鍙瓨鍦ㄦ悈鎷屾満2銆佹悈鎷屾満3銆佹悈鎷屾満4 ......锛� 杩愯鏃�1锛屽仠姝�0.
+     * (褰撳墠澶х搴旂敤涓嶅瓨鍦�)
+     */
+    @JSONField(name = "鎼呮媽杩愯4")
+    public Byte stirRunning4;//鎼呮媽4杩愯鐘舵��
 
+    /**
+     * 涓�涓按鑲ユ満鍙湁涓�涓敞鑲ユ车
+     */
     @JSONField(name = "娉ㄨ偉杩愯")
-    public Byte injectRunning ;//娉ㄨ偉杩愯
+    public Byte injectRunning ;//娉ㄨ偉杩愯鐘舵��
 
     @JSONField(name = "鐏屾簤杩愯")
-    public Byte irrRunning ;//鐏屾簤杩愯
+    public Byte irrRunning ;//鐏屾簤杩愯鐘舵��
 
+    /**
+     *  1:娉ㄨ偉娉垫湁鏁呴殰銆�0:娉ㄨ偉娉垫病鏈夋晠闅�
+     */
     @JSONField(name = "鎶ヨ")
-    public Byte alarm ;//鎶ヨ
+    public Byte alarm ;//娉ㄨ偉娉垫晠闅�
 
+    /**
+     * 鑲ユ枡娴侀噺锛屽崟浣嶅崌
+     */
     @JSONField(name = "鑲ユ枡娴侀噺")
     public Float manureFlow ;
 
+    /**
+     * 鍗曚綅绉�
+     */
     @JSONField(name = "娉ㄨ偉缁忚繃鏃堕棿")
     public Integer manureTime ;
 
+    /**
+     * 鍗曚綅绉�
+     */
     @JSONField(name = "鎼呮媽缁忚繃鏃堕棿")
     public Integer stirTime ;
 
@@ -61,7 +97,7 @@
         StringBuilder sb = new StringBuilder();
         sb.append("姘磋偉鏁版嵁=>") ;
         sb.append(" 娑堟伅ID锛�" + messageId + ", ") ;
-        sb.append(" 鎼呮媽杩愯锛�" + stirRunning + ", ") ;
+        sb.append(" 鎼呮媽杩愯锛�" + stirRunning1 + ", ") ;
         sb.append(" 娉ㄨ偉杩愯锛�" + injectRunning + ", ") ;
         sb.append(" 鐏屾簤杩愯锛�" + irrRunning + ", ") ;
         sb.append(" 鎶ヨ锛�" + alarm + ", ") ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
index 9f3a71e..1f51b63 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
@@ -18,34 +18,34 @@
     public Integer no ;//娴嬬珯缂栧彿锛屽叾涓嶅湪JSON鏁版嵁涓紝鍏跺湪涓婚涓�
 
     @JSONField(name = "鍦熷¥婀垮害1")
-    public Integer soilHumidity1 ;
+    public Float soilHumidity1 ;
 
     @JSONField(name = "鍦熷¥婀垮害2")
-    public Integer soilHumidity2 ;
+    public Float soilHumidity2 ;
 
     @JSONField(name = "鍦熷¥婀垮害3")
-    public Integer soilHumidity3 ;
+    public Float soilHumidity3 ;
 
     @JSONField(name = "鍦熷¥婀垮害4")
-    public Integer soilHumidity4 ;
+    public Float soilHumidity4 ;
 
     @JSONField(name = "鍦熷¥婀垮害5")
-    public Integer soilHumidity5 ;
+    public Float soilHumidity5 ;
 
     @JSONField(name = "鍦熷¥婀垮害1")
-    public Integer soilTemperature1 ;
+    public Float soilTemperature1 ;
 
     @JSONField(name = "鍦熷¥娓╁害2")
-    public Integer soilTemperature2 ;
+    public Float soilTemperature2 ;
 
     @JSONField(name = "鍦熷¥娓╁害3")
-    public Integer soilTemperature3 ;
+    public Float soilTemperature3 ;
 
     @JSONField(name = "鍦熷¥娓╁害4")
-    public Integer soilTemperature4 ;
+    public Float soilTemperature4 ;
 
     @JSONField(name = "鍦熷¥娓╁害5")
-    public Integer soilTemperature5 ;
+    public Float soilTemperature5 ;
 
     @JSONField(name = "flexem_timestamp")
     public Long devDt ;//璁惧鏃堕棿
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
index 58926a5..2891399 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
@@ -25,10 +25,10 @@
     //public Integer atmosphericPressure ;
 
     @JSONField(name = "绌烘皵娓╁害")
-    public Integer airTemperature ;
+    public Float airTemperature ;
 
     @JSONField(name = "绌烘皵婀垮害")
-    public Integer airHumidity ;
+    public Float airHumidity ;
 
     @JSONField(name = "绱绾�")
     public Integer ultraviolet ;
@@ -37,10 +37,10 @@
     public Integer lightIntensity ;
 
     @JSONField(name = "闆ㄩ噺")
-    public Integer rainfall ;
+    public Float rainfall ;
 
     @JSONField(name = "椋庨��")
-    public Integer windSpeed ;
+    public Float windSpeed ;
 
     @JSONField(name = "椋庡悜")
     public Integer windDirection ;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/Command4MqttSv.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/Command4MqttSv.java
new file mode 100644
index 0000000..a292a01
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/Command4MqttSv.java
@@ -0,0 +1,137 @@
+package com.dy.pipIrrGlobal.command;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.CommandBackParam;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.pipIrrGlobal.daoPr.PrStManureMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/6 11:41
+ * @Description
+ */
+public class Command4MqttSv extends Web2RtuMw {
+
+
+    /**
+     * 浠庢暟鎹簱涓煡璇㈡按鑲ユ満瀵硅薄
+     * @param prStManureDao
+     * @param manureId
+     * @return
+     */
+    public PrStManure getManure(PrStManureMapper prStManureDao, Long manureId){
+        return prStManureDao.selectByPrimaryKey(manureId);
+    }
+
+    /**
+     * 妫�鏌ュ崗璁槸鍚︽敮鎸�
+     * @param ctrlPo
+     * @return
+     */
+    public String checkProtocol(PrStManure ctrlPo){
+        return null ;
+    }
+
+    /**
+     * 鏍规嵁鍗忚鑾峰彇鍛戒护鍚嶇О
+     * @param nowComCode
+     * @param protocol
+     * @return
+     */
+    public String getCommandName(String nowComCode, String protocol, Short protocolVer){
+        if(protocol.equals(ProtocolConstantSdV1.protocolName)
+            && protocolVer.equals(ProtocolConstantSdV1.protocolVer)) {
+            return CodeSdV1.getCodeName(nowComCode) ;
+        }
+        return null ;
+    }
+
+    /**
+     * 淇濆瓨鍛戒护鍘嗗彶璁板綍
+     * @param rmCommandHistoryDao
+     * @param comId
+     * @param protocol
+     * @param commandCode
+     * @param commandName
+     * @param manureId
+     * @param rtuAddr
+     * @param param
+     * @param operator
+     * @return
+     */
+    public RmCommandHistory saveComHistoryPo(RmCommandHistoryMapper rmCommandHistoryDao,
+                                             Long comId,
+                                             String protocol,
+                                             String commandCode,
+                                             String commandName,
+                                             Long manureId,
+                                             String rtuAddr,
+                                             Object param,
+                                             Long operator) {
+        RmCommandHistory po = new RmCommandHistory();
+        po.setComId(comId);
+        po.setCommandCode(commandCode);
+        po.setCommandName(commandName);
+        po.setIntakeId(manureId);
+        po.setRtuAddr(rtuAddr);
+        po.setProtocol(protocol);
+        po.setParam((JSONObject) JSON.toJSON(param));
+        po.setSendTime(new Date());
+        po.setOperator(operator);
+        int count = rmCommandHistoryDao.insertSelective(po) ;
+        if(count == 0){
+            po = null ;
+        }
+        return po;
+    }
+
+    /**
+     * 澶勭悊閫氫俊涓棿浠惰繑鍥炵殑鍛戒护澶勭悊缁撴灉
+     * @param res
+     * @return
+     */
+    public String dealMwDealResponse(BaseResponse res){
+        if(res != null){
+            Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ;
+            CommandBackParam bakParam = JSON.parseObject((reCom== null || reCom.param == null) ? null : JSON.toJSONString(reCom.param), CommandBackParam.class) ;
+            if(res.isSuccess()){
+                if(bakParam != null){
+                    if(bakParam.getSuccess().booleanValue()){
+                        //閫氫俊涓棿浠舵垚鍔熷鐞嗕簡鍛戒护
+                        //绛夊緟鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鍚庣殑搴旂瓟锛岀劧鍚庨�氫俊涓棿浠堕�氱煡鏈ā鍧�
+                        return null ;
+                    }else{
+                        return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + bakParam.getMessage();
+                    }
+                }else{
+                    return "閫氫俊涓棿浠惰繑鍥炲懡浠ょ粨鏋滀腑涓嶅寘鍚獵ommandBackParam绫诲瀷鍙傛暟";
+                }
+            }else{
+                if(bakParam != null){
+                    if(bakParam.getSuccess().booleanValue()){
+                        //閫氫俊涓棿浠舵垚鍔熷鐞嗕簡鍛戒护
+                        //绛夊緟鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鍚庣殑搴旂瓟锛岀劧鍚庨�氫俊涓棿浠堕�氱煡鏈ā鍧�
+                        return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + (res.getMsg() == null? "" : ("锛�" + res.getMsg())) ;
+                    }else{
+                        return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + bakParam.getMessage();
+                    }
+                }else{
+                    return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + (res.getMsg() == null? "" : ("锛�" + res.getMsg())) ;
+                }
+            }
+        }else{
+            return "閫氫俊涓棿浠惰繑鍥炲懡浠ょ粨鏋滀负null";
+        }
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStManure.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStManure.java
index ce4d50f..d8ea7a5 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStManure.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStManure.java
@@ -37,6 +37,12 @@
     public Long id;
 
     /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(description = "FBox搴忓垪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String fboxId ;
+
+    /**
      * 姘磋偉绔欑紪鍙�
      */
     @Schema(description = "姘磋偉绔欑紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStSoil.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStSoil.java
index 56ad0c7..c0a4814 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStSoil.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStSoil.java
@@ -37,6 +37,12 @@
     public Long id;
 
     /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(description = "FBox搴忓垪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String fboxId ;
+
+    /**
      * 澧掓儏绔欑紪鍙�
      */
     @Schema(description = "澧掓儏绔欑紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStWeather.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStWeather.java
index 77db182..46b38cb 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStWeather.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrStWeather.java
@@ -37,6 +37,12 @@
     public Long id;
 
     /**
+     * FBox搴忓垪鍙�
+     */
+    @Schema(description = "FBox搴忓垪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String fboxId ;
+
+    /**
      * 姘旇薄绔欑紪鍙�
      */
     @Schema(description = "姘旇薄绔欑紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
index c16fe8a..a70239a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStManureMapper.xml
@@ -6,6 +6,7 @@
     <!--@Table pr_st_manure-->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="no" jdbcType="INTEGER" property="no" />
+    <result column="fbox_id" jdbcType="VARCHAR" property="fboxId" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="lng" jdbcType="DOUBLE" property="lng" />
     <result column="lat" jdbcType="DOUBLE" property="lat" />
@@ -14,11 +15,11 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark, deleted
+    id, fbox_id,`no`, `name`, lng, lat, remark, deleted
   </sql>
   <sql id="part_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark
+    id, fbox_id, `no`, `name`, lng, lat, remark
   </sql>
   <sql id="simple_Column_List">
     <!--@mbg.generated-->
@@ -50,11 +51,11 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStManure">
     <!--@mbg.generated-->
-    insert into pr_st_manure (id, `no`, `name`, lng,
+    insert into pr_st_manure (id, fbox_id, `no`, `name`, lng,
       lat, remark, deleted)
-    values (#{id,jdbcType=BIGINT}, #{no,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
-        #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remark,jdbcType=VARCHAR},
-        #{deleted,jdbcType=TINYINT})
+    values (#{id,jdbcType=BIGINT}, #{fboxId,jdbcType=BIGINT}, #{no,jdbcType=INTEGER},
+        #{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE},
+        #{remark,jdbcType=VARCHAR},#{deleted,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStManure">
     <!--@mbg.generated-->
@@ -62,6 +63,9 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
+      </if>
+      <if test="fboxId != null">
+        fbox_id,
       </if>
       <if test="no != null">
         `no`,
@@ -85,6 +89,9 @@
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
+      </if>
+      <if test="fboxId != null">
+        #{fboxId,jdbcType=BIGINT},
       </if>
       <if test="no != null">
         #{no,jdbcType=INTEGER},
@@ -110,6 +117,9 @@
     <!--@mbg.generated-->
     update pr_st_manure
     <set>
+      <if test="fboxId != null">
+        fbox_id = #{fboxId,jdbcType=BIGINT},
+      </if>
       <if test="no != null">
         `no` = #{no,jdbcType=INTEGER},
       </if>
@@ -134,7 +144,8 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStManure">
     <!--@mbg.generated-->
     update pr_st_manure
-    set `no` = #{no,jdbcType=INTEGER},
+    set fbox_id = #{fboxId,jdbcType=INTEGER},
+      `no` = #{no,jdbcType=INTEGER},
       `name` = #{name,jdbcType=VARCHAR},
       lng = #{lng,jdbcType=DOUBLE},
       lat = #{lat,jdbcType=DOUBLE},
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
index 682efa1..598436b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStSoilMapper.xml
@@ -6,6 +6,7 @@
     <!--@Table pr_st_soil-->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="no" jdbcType="INTEGER" property="no" />
+    <result column="fbox_id" jdbcType="VARCHAR" property="fboxId" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="lng" jdbcType="DOUBLE" property="lng" />
     <result column="lat" jdbcType="DOUBLE" property="lat" />
@@ -14,11 +15,11 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark, deleted
+    id, fbox_id,`no`, `name`, lng, lat, remark, deleted
   </sql>
   <sql id="part_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark
+    id, fbox_id, `no`, `name`, lng, lat, remark
   </sql>
   <sql id="simple_Column_List">
     <!--@mbg.generated-->
@@ -50,11 +51,11 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStSoil">
     <!--@mbg.generated-->
-    insert into pr_st_soil (id, `no`, `name`, lng,
+    insert into pr_st_soil (id, fbox_id, `no`, `name`, lng,
     lat, remark, deleted)
-    values (#{id,jdbcType=BIGINT}, #{no,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
-    #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remark,jdbcType=VARCHAR},
-    #{deleted,jdbcType=TINYINT})
+    values (#{id,jdbcType=BIGINT}, #{fboxId,jdbcType=BIGINT}, #{no,jdbcType=INTEGER},
+    #{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE},
+    #{remark,jdbcType=VARCHAR},#{deleted,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStSoil">
     <!--@mbg.generated-->
@@ -62,6 +63,9 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
+      </if>
+      <if test="fboxId != null">
+        fbox_id,
       </if>
       <if test="no != null">
         `no`,
@@ -85,6 +89,9 @@
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
+      </if>
+      <if test="fboxId != null">
+        #{fboxId,jdbcType=BIGINT},
       </if>
       <if test="no != null">
         #{no,jdbcType=INTEGER},
@@ -110,6 +117,9 @@
     <!--@mbg.generated-->
     update pr_st_soil
     <set>
+      <if test="fboxId != null">
+        fbox_id = #{fboxId,jdbcType=BIGINT},
+      </if>
       <if test="no != null">
         `no` = #{no,jdbcType=INTEGER},
       </if>
@@ -134,7 +144,8 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStSoil">
     <!--@mbg.generated-->
     update pr_st_soil
-    set `no` = #{no,jdbcType=INTEGER},
+    set fbox_id = #{fboxId,jdbcType=INTEGER},
+    `no` = #{no,jdbcType=INTEGER},
     `name` = #{name,jdbcType=VARCHAR},
     lng = #{lng,jdbcType=DOUBLE},
     lat = #{lat,jdbcType=DOUBLE},
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
index e971ed2..ade2d3c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrStWeatherMapper.xml
@@ -6,6 +6,7 @@
     <!--@Table pr_st_weather-->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="no" jdbcType="INTEGER" property="no" />
+    <result column="fbox_id" jdbcType="VARCHAR" property="fboxId" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="lng" jdbcType="DOUBLE" property="lng" />
     <result column="lat" jdbcType="DOUBLE" property="lat" />
@@ -14,11 +15,11 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark, deleted
+    id, fbox_id,`no`, `name`, lng, lat, remark, deleted
   </sql>
   <sql id="part_Column_List">
     <!--@mbg.generated-->
-    id, `no`, `name`, lng, lat, remark
+    id, fbox_id, `no`, `name`, lng, lat, remark
   </sql>
   <sql id="simple_Column_List">
     <!--@mbg.generated-->
@@ -50,11 +51,11 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStWeather">
     <!--@mbg.generated-->
-    insert into pr_st_weather (id, `no`, `name`, lng,
+    insert into pr_st_weather (id, fbox_id, `no`, `name`, lng,
     lat, remark, deleted)
-    values (#{id,jdbcType=BIGINT}, #{no,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
-    #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remark,jdbcType=VARCHAR},
-    #{deleted,jdbcType=TINYINT})
+    values (#{id,jdbcType=BIGINT}, #{fboxId,jdbcType=BIGINT}, #{no,jdbcType=INTEGER},
+    #{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE},
+    #{remark,jdbcType=VARCHAR},#{deleted,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStWeather">
     <!--@mbg.generated-->
@@ -62,6 +63,9 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
+      </if>
+      <if test="fboxId != null">
+        fbox_id,
       </if>
       <if test="no != null">
         `no`,
@@ -85,6 +89,9 @@
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
+      </if>
+      <if test="fboxId != null">
+        #{fboxId,jdbcType=BIGINT},
       </if>
       <if test="no != null">
         #{no,jdbcType=INTEGER},
@@ -110,6 +117,9 @@
     <!--@mbg.generated-->
     update pr_st_weather
     <set>
+      <if test="fboxId != null">
+        fbox_id = #{fboxId,jdbcType=BIGINT},
+      </if>
       <if test="no != null">
         `no` = #{no,jdbcType=INTEGER},
       </if>
@@ -134,7 +144,8 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrStWeather">
     <!--@mbg.generated-->
     update pr_st_weather
-    set `no` = #{no,jdbcType=INTEGER},
+    set fbox_id = #{fboxId,jdbcType=INTEGER},
+    `no` = #{no,jdbcType=INTEGER},
     `name` = #{name,jdbcType=VARCHAR},
     lng = #{lng,jdbcType=DOUBLE},
     lat = #{lat,jdbcType=DOUBLE},
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 a53defb..5e701f9 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
@@ -375,15 +375,15 @@
      * @return 缁撴灉
      */
     private BaseResponse<Command> dealMqttCommand(Command command){
-        String rtuAddr = command.getRtuAddr() ;
+        String rtuAddr = command.getRtuAddr() ;//FBox璁惧鍙�
         if(rtuAddr == null || rtuAddr.trim().equals("")){
-            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛岃澶嘔D涓虹┖锛�", command.getId(), command.getCode())) ;
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孎Box璁惧ID涓虹┖锛�", command.getId(), command.getCode())) ;
         }
         if(!ServerProperties.mqttUnitEnable.booleanValue()){
             return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孧QTT杩炴帴妯″潡閰嶇疆鏈惎鍔紒", command.getId(), command.getCode())) ;
         }
         if(MqttManager.getInstance().poolIsClose()){
-            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孧QTT杩炴帴姹犳按鍒涘缓鎴愬姛锛�", command.getId(), command.getCode())) ;
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孧QTT杩炴帴姹犳湭鍒涘缓鎴愬姛锛�", command.getId(), command.getCode())) ;
         }
 
         //鐢熸垚寮傛浠诲姟
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Dto4MqttBase.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Dto4MqttBase.java
new file mode 100644
index 0000000..26586ad
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Dto4MqttBase.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrRemote.common.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-22 16:54
+ * @LastEditTime 2024-05-22 16:54
+ * @Description 璁剧疆鍛戒护鍩虹被
+ */
+
+@Data
+public class Dto4MqttBase {
+    public static final long serialVersionUID = 202506201459001L;
+
+    /**
+     * 姘磋偉鏈篒D
+     */
+    @NotNull(message = "姘磋偉鏈轰笉鑳戒负绌�")
+    public Long manureId;
+
+    /**
+     * 姘磋偉鏈哄悕绉�
+     */
+    public String manureName;
+
+    /**
+     * 鎿嶄綔浜�
+     */
+    @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
+    public Long operator;
+}
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
new file mode 100644
index 0000000..8e47d24
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Cd4MqttParameter.java
@@ -0,0 +1,16 @@
+package com.dy.pipIrrRemote.monitor.common;
+
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/9 16:11
+ * @Description
+ */
+@Data
+@SuperBuilder
+public class Cd4MqttParameter {
+    //鍛戒护鍔熻兘鐮�
+    public String commandCode;
+}
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
new file mode 100644
index 0000000..c0e4801
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttCtrl.java
@@ -0,0 +1,193 @@
+package com.dy.pipIrrRemote.monitor.common;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.util.Callback;
+import com.dy.common.util.IDLongGenerator;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.command.ComResultWait;
+import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/9 14:53
+ * @Description
+ */
+public abstract class Com4MqttCtrl {
+
+    @Autowired
+    protected Environment env ;
+
+    @Autowired
+    protected RestTemplate restTemplate ;
+
+    @Value("${mw.waitMwRtnResultTimeout}")
+    protected int waitMwRtnResultTimeout ;
+
+    @Value("${mw.rtuCallbackUrl_rm}")
+    protected String rtuResultSendWebUrl;
+
+    //姘磋偉鏈哄璞�
+    protected PrStManure ctrlPo ;
+    //寮傛绛夊緟鍣�
+    protected CompletableFuture<JSONObject> feature;
+    //鍛戒护鍚嶇О
+    protected String comName ;
+    //鍛戒护鏃ュ織id
+    protected Long comId ;
+
+    /**
+     * 鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+     * @param comSv
+     * @param comCode
+     * @param dto
+     * @param bindingResult
+     * @return
+     */
+    public BaseResponse<Object> pre1(Com4MqttSv comSv, String comCode, Dto4MqttBase dto, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildError(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        String msg = this.checkDto(dto) ;
+        if(msg != null){
+            return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝" + msg) ;
+        }
+        return  null ;
+    }
+
+    /**
+     * 鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+     * @param comSv
+     * @param protocol
+     * @param protocolVer
+     * @param comCode
+     * @param dto
+     * @param bindingResult
+     * @return
+     */
+    public BaseResponse<Object> pre2(Com4MqttSv comSv, String protocol, Short protocolVer, String comCode, Dto4MqttBase dto, BindingResult bindingResult) {
+        //寰楀埌姘磋偉鏈哄璞�
+        ctrlPo = comSv.getManure(dto.getManureId());
+        if (ctrlPo == null) {
+            return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝浠庢暟鎹簱涓湭寰楀埌姘磋偉鏈烘暟鎹�") ;
+        }
+        //妫�鏌ュ崗璁�
+        String msg = comSv.checkProtocol(ctrlPo) ;
+        if(msg != null) {
+            return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝" + msg) ;
+        }
+        //寰楀埌鍔熻兘鐮佸搴旂殑鍛戒护鍚嶇О
+        comName = comSv.getCommandName(comCode, protocol, protocolVer) ;
+        if(comName == null) {
+            return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈緱鍒板姛鑳界爜瀵瑰簲鍛戒护鍚嶇О") ;
+        }
+        return  null ;
+    }
+    /**
+     * 鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+     * @param comSv sv瀵硅薄
+     * @param manureId 姘磋偉鏈篒D
+     * @param operator 褰撳墠鐢ㄧ櫥褰曠敤鎴穒d(鎿嶄綔浜�)
+     * @param protocol 鍗忚
+     * @param protocolVerion 鍗忚
+     * @param comCode 鍔熻兘鐮�
+     * @param param 鍛戒护鍙傛暟
+     * @return
+     */
+    public BaseResponse<Object> pre3(Com4MqttSv comSv, Long manureId, Long operator, String protocol, Short protocolVerion, String comCode, Cd4MqttParameter param) {
+        comId = new IDLongGenerator().generate();
+        //鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇�
+        RmCommandHistory po = comSv.saveComHistoryPo(comId,
+                protocol + protocolVerion ,
+                comCode,
+                comName,
+                manureId,
+                ctrlPo.fboxId ,
+                param,
+                operator);
+        if(po == null){
+            return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈兘鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇�") ;
+        }
+        return  null ;
+    }
+    /**
+     * 鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+     * @return
+     */
+    public void pre4() {
+        feature = new CompletableFuture<>();
+        ComResultWait.put(comId, feature);
+    }
+
+    /**
+     * 鍙戦�佸懡浠�
+     * @param comSv
+     * @param com
+     * @return
+     */
+    public BaseResponse<Object> doSend(Com4MqttSv comSv, Command com){
+        //寰楀埌閫氫俊涓棿浠跺彂閫佸懡浠ょ殑web URL
+        String rqUrl = comSv.get2MwRequestUrl(env, comSv.ContextComSend) ;
+        //鍚戦�氫俊涓棿浠跺彂閫亀eb璇锋眰
+        BaseResponse res = comSv.sendPostRequest2Mw(restTemplate, rqUrl, com) ;
+        //澶勭悊閫氫俊涓棿浠跺web璇锋眰鐨勫搷搴�
+        String msg = comSv.dealMwDealResponse(res) ;
+        if(msg != null) {
+            return BaseResponseUtils.buildError(msg) ;
+        }else{
+            return null ;
+        }
+    }
+
+    /**
+     * 鍙戦�佸懡浠ゅ悗
+     * @return
+     */
+    public BaseResponse<Object> after(String comCode, Callback callback) {
+        try{
+            //绛夊緟閫氫俊涓棿浠堕�氱煡姘磋偉鏈烘墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛�
+            JSONObject resultData = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS);
+            return BaseResponseUtils.buildSuccess(this.dealComResult(comCode, resultData, callback));
+        }catch (Exception e){
+            return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂");
+        }
+    }
+
+    /**
+     * 鍙戦�佸懡浠ゆ渶鍚�
+     * @return
+     */
+    public void end(){
+        try {
+            //鏈�鍚庢竻闄ompletableFuture缂撳瓨
+            if(ComResultWait.contain(comId)){
+                ComResultWait.remove(comId);
+            }
+        }catch (Exception ee){}
+    }
+
+    /**
+     * 楠岃瘉
+     * @param dto
+     * @return
+     */
+    protected abstract String checkDto(Dto4MqttBase dto) ;
+
+
+    /**
+     * 鐢熸垚鍛戒护杩斿洖淇℃伅
+     */
+    protected abstract String dealComResult(String code, JSONObject resultData, Callback callback);
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttSv.java
new file mode 100644
index 0000000..0b31743
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/Com4MqttSv.java
@@ -0,0 +1,50 @@
+package com.dy.pipIrrRemote.monitor.common;
+
+import com.dy.pipIrrGlobal.command.Command4MqttSv;
+import com.dy.pipIrrGlobal.daoPr.PrStManureMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/9 14:45
+ * @Description
+ */
+public class Com4MqttSv extends Command4MqttSv {
+
+    @Autowired
+    protected PrStManureMapper prStManureDao ;
+    @Autowired
+    protected RmCommandHistoryMapper rmCommandHistoryDao ;
+
+    public PrStManure getManure(Long manureId){
+        return this.getManure(prStManureDao, manureId);
+    }
+    /**
+     * 鍒涘缓鍛戒护鏃ュ織瀵硅薄
+     *
+     * @param comId       涓婚敭
+     * @param commandCode 鍔熻兘鐮�
+     * @param rtuAddr     闃�鎺у櫒鍦板潃
+     * @param protocol    閫氳鍗忚鍚嶇О
+     * @param param       鍙傛暟鏁版嵁
+     * @param operator    鎿嶄綔鍛�
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public RmCommandHistory saveComHistoryPo(Long comId,
+                                             String protocol,
+                                             String commandCode,
+                                             String commandName,
+                                             Long manureId,
+                                             String rtuAddr,
+                                             Object param,
+                                             Long operator) {
+        return this.saveComHistoryPo(rmCommandHistoryDao, comId, protocol, commandCode, commandName, manureId, rtuAddr, param, operator) ;
+    }
+
+
+}
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
new file mode 100644
index 0000000..1e252ec
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdCtrl.java
@@ -0,0 +1,122 @@
+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.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:35
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController("mqttSd1FaultCtrl")
+@RequestMapping(path = "mqttSd1/faultCtrl")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends Com4MqttCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+    private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+    private static final String ComCode = CodeSdV1.cd_Fault ;
+
+
+    @Autowired
+    private CdSv sv ;
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        BaseResponse<Object> res ;
+        //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+        res = super.pre1(sv, ComCode, dto, bindingResult);
+        if(res == null) {
+            //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+            res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+            if (res == null) {
+                //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+                CdParam comParam = CdParam.builder().commandCode(ComCode).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);
+                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.param = comParam ;
+                        //鍙戦�佸懡浠�
+                        res = super.doSend(sv, com);
+                        if (res == null) {
+                            //鍙戦�佸懡浠ゅ悗
+                            res = super.after(ComCode, null);
+                        }
+                    } catch (Exception e) {
+                        res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+                    } finally {
+                        //鏈�缁�
+                        super.end();
+                    }
+                }
+            }
+        }
+        return res ;
+    }
+
+    @Override
+    protected String checkDto(Dto4MqttBase dto) {
+        return null;
+    }
+
+    @Override
+    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+        String msg;
+        if(resultData != null){
+            log.info(resultData.toString());
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            if(codeData == null){
+                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/fault/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdDto.java
index 8d9b6f1..ab368e4 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdDto.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdDto.java
@@ -1,6 +1,6 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
 
-import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -11,6 +11,6 @@
  */
 @Data
 @EqualsAndHashCode(callSuper=true)
-public class CdDto extends DtoBase {
-    public static final long serialVersionUID = 202506161739001L;
+public class CdDto extends Dto4MqttBase {
+    public static final long serialVersionUID = 202506501650001L;
 }
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 6fde608..83dc00c 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
@@ -1,9 +1,19 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
 
+import com.dy.pipIrrRemote.monitor.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
 /**
  * @Author: liurunyu
  * @Date: 2025/6/16 17:36
  * @Description
  */
-public class CdParam {
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends Cd4MqttParameter {
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStartCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStartCtrl.java
deleted file mode 100644
index 1a182a9..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStartCtrl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.dy.common.util.Callback;
-import com.dy.pipIrrRemote.common.dto.DtoBase;
-import com.dy.pipIrrRemote.monitor.common.ComCtrl;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Scope;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @Author: liurunyu
- * @Date: 2025/6/16 17:35
- * @Description
- */
-
-@Slf4j
-@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
-@RestController("mqttSd1FaultStartCtrl")
-@RequestMapping(path = "mqttSd1/faultStartCtrl")
-@RequiredArgsConstructor
-@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
-public class CdStartCtrl extends ComCtrl {
-
-    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
-
-    private static final String ComCode = "5B" ;
-
-    @Autowired
-    private CdSv sv ;
-
-    @Override
-    protected String checkDto(DtoBase dto) {
-        return null;
-    }
-
-    @Override
-    protected String dealComResult(String code, JSONObject resultData, Callback callback) {
-        return null;
-    }
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStopCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStopCtrl.java
deleted file mode 100644
index e8e4617..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdStopCtrl.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
-
-/**
- * @Author: liurunyu
- * @Date: 2025/6/16 17:35
- * @Description
- */
-public class CdStopCtrl {
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdSv.java
index e1a3f6d..d28981f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/fault/CdSv.java
@@ -1,6 +1,6 @@
 package com.dy.pipIrrRemote.monitor.mqttSd1.fault;
 
-import com.dy.pipIrrRemote.monitor.common.ComSv;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttSv;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -10,6 +10,6 @@
  * @Description
  */
 @Slf4j
-@Service("faultSv")
-public class CdSv extends ComSv {
+@Service("mqttSd1FaultSv")
+public class CdSv extends Com4MqttSv {
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..74ac28b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdCtrl.java
@@ -0,0 +1,122 @@
+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.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:35
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController("mqttSd1InjectCtrl")
+@RequestMapping(path = "mqttSd1/injectCtrl")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends Com4MqttCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+    private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+    private static final String ComCode = CodeSdV1.cd_Inject ;
+
+
+    @Autowired
+    private CdSv sv ;
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        BaseResponse<Object> res ;
+        //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+        res = super.pre1(sv, ComCode, dto, bindingResult);
+        if(res == null) {
+            //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+            res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+            if (res == null) {
+                //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+                CdParam comParam = CdParam.builder().commandCode(ComCode).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);
+                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.param = comParam ;
+                        //鍙戦�佸懡浠�
+                        res = super.doSend(sv, com);
+                        if (res == null) {
+                            //鍙戦�佸懡浠ゅ悗
+                            res = super.after(ComCode, null);
+                        }
+                    } catch (Exception e) {
+                        res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+                    } finally {
+                        //鏈�缁�
+                        super.end();
+                    }
+                }
+            }
+        }
+        return res ;
+    }
+
+    @Override
+    protected String checkDto(Dto4MqttBase dto) {
+        return null;
+    }
+
+    @Override
+    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+        String msg;
+        if(resultData != null){
+            log.info(resultData.toString());
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            if(codeData == null){
+                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/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdDto.java
new file mode 100644
index 0000000..2d8fef0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdDto.java
@@ -0,0 +1,16 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.inject;
+
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends Dto4MqttBase {
+    public static final long serialVersionUID = 202506201653001L;
+}
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
new file mode 100644
index 0000000..4293627
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdParam.java
@@ -0,0 +1,19 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.inject;
+
+import com.dy.pipIrrRemote.monitor.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends Cd4MqttParameter {
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdSv.java
new file mode 100644
index 0000000..c03f344
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/inject/CdSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.inject;
+
+import com.dy.pipIrrRemote.monitor.common.Com4MqttSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Slf4j
+@Service("mqttSd1InjectSv")
+public class CdSv extends Com4MqttSv {
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..f808c95
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java
@@ -0,0 +1,122 @@
+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.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:35
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController("mqttSd1IrrCtrl")
+@RequestMapping(path = "mqttSd1/irrCtrl")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends Com4MqttCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+    private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+    private static final String ComCode = CodeSdV1.cd_Irr ;
+
+
+    @Autowired
+    private CdSv sv ;
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        BaseResponse<Object> res ;
+        //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+        res = super.pre1(sv, ComCode, dto, bindingResult);
+        if(res == null) {
+            //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+            res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+            if (res == null) {
+                //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+                CdParam comParam = CdParam.builder().commandCode(ComCode).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);
+                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.param = comParam ;
+                        //鍙戦�佸懡浠�
+                        res = super.doSend(sv, com);
+                        if (res == null) {
+                            //鍙戦�佸懡浠ゅ悗
+                            res = super.after(ComCode, null);
+                        }
+                    } catch (Exception e) {
+                        res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+                    } finally {
+                        //鏈�缁�
+                        super.end();
+                    }
+                }
+            }
+        }
+        return res ;
+    }
+
+    @Override
+    protected String checkDto(Dto4MqttBase dto) {
+        return null;
+    }
+
+    @Override
+    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+        String msg;
+        if(resultData != null){
+            log.info(resultData.toString());
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            if(codeData == null){
+                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/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdDto.java
new file mode 100644
index 0000000..466869e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdDto.java
@@ -0,0 +1,16 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.irr;
+
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends Dto4MqttBase {
+    public static final long serialVersionUID = 202506201654001L;
+}
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
new file mode 100644
index 0000000..ffec185
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdParam.java
@@ -0,0 +1,19 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.irr;
+
+import com.dy.pipIrrRemote.monitor.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends Cd4MqttParameter {
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdSv.java
new file mode 100644
index 0000000..ae5e083
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.irr;
+
+import com.dy.pipIrrRemote.monitor.common.Com4MqttSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Slf4j
+@Service("mqttSd1IrrSv")
+public class CdSv extends Com4MqttSv {
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..b74db25
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdCtrl.java
@@ -0,0 +1,122 @@
+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.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:35
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController("mqttSd1ParamCtrl")
+@RequestMapping(path = "mqttSd1/paramCtrl")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends Com4MqttCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+    private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+    private static final String ComCode = CodeSdV1.cd_Param ;
+
+
+    @Autowired
+    private CdSv sv ;
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        BaseResponse<Object> res ;
+        //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+        res = super.pre1(sv, ComCode, dto, bindingResult);
+        if(res == null) {
+            //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+            res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+            if (res == null) {
+                //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+                CdParam comParam = CdParam.builder().commandCode(ComCode).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);
+                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.param = comParam ;
+                        //鍙戦�佸懡浠�
+                        res = super.doSend(sv, com);
+                        if (res == null) {
+                            //鍙戦�佸懡浠ゅ悗
+                            res = super.after(ComCode, null);
+                        }
+                    } catch (Exception e) {
+                        res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+                    } finally {
+                        //鏈�缁�
+                        super.end();
+                    }
+                }
+            }
+        }
+        return res ;
+    }
+
+    @Override
+    protected String checkDto(Dto4MqttBase dto) {
+        return null;
+    }
+
+    @Override
+    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+        String msg;
+        if(resultData != null){
+            log.info(resultData.toString());
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            if(codeData == null){
+                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
new file mode 100644
index 0000000..d80897a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdDto.java
@@ -0,0 +1,16 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.paramSet;
+
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends Dto4MqttBase {
+    public static final long serialVersionUID = 202506201656001L;
+}
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
new file mode 100644
index 0000000..c905f87
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdParam.java
@@ -0,0 +1,19 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.paramSet;
+
+import com.dy.pipIrrRemote.monitor.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends Cd4MqttParameter {
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdSv.java
new file mode 100644
index 0000000..98f1e66
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/paramSet/CdSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.paramSet;
+
+import com.dy.pipIrrRemote.monitor.common.Com4MqttSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Slf4j
+@Service("mqttSd1ParamSv")
+public class CdSv extends Com4MqttSv {
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..b39d06c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdCtrl.java
@@ -0,0 +1,122 @@
+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.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:35
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController("mqttSd1StirCtrl")
+@RequestMapping(path = "mqttSd1/stirCtrl")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends Com4MqttCtrl {
+
+    private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+    private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+    private static final String ComCode = CodeSdV1.cd_Stir ;
+
+
+    @Autowired
+    private CdSv sv ;
+    /**
+     * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+     * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+     * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+     * @return 杩斿洖鍓嶇
+     */
+    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @SsoAop()
+    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+        BaseResponse<Object> res ;
+        //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+        res = super.pre1(sv, ComCode, dto, bindingResult);
+        if(res == null) {
+            //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+            res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+            if (res == null) {
+                //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+                CdParam comParam = CdParam.builder().commandCode(ComCode).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);
+                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+                        com.param = comParam ;
+                        //鍙戦�佸懡浠�
+                        res = super.doSend(sv, com);
+                        if (res == null) {
+                            //鍙戦�佸懡浠ゅ悗
+                            res = super.after(ComCode, null);
+                        }
+                    } catch (Exception e) {
+                        res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+                    } finally {
+                        //鏈�缁�
+                        super.end();
+                    }
+                }
+            }
+        }
+        return res ;
+    }
+
+    @Override
+    protected String checkDto(Dto4MqttBase dto) {
+        return null;
+    }
+
+    @Override
+    protected String dealComResult(String code, JSONObject resultData, Callback callback){
+        String msg;
+        if(resultData != null){
+            log.info(resultData.toString());
+            JSONObject codeData = resultData.getJSONObject("data") ;
+            if(codeData == null){
+                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
new file mode 100644
index 0000000..54f2946
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdDto.java
@@ -0,0 +1,16 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.stir;
+
+import com.dy.pipIrrRemote.common.dto.Dto4MqttBase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends Dto4MqttBase {
+    public static final long serialVersionUID = 202506201655001L;
+}
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
new file mode 100644
index 0000000..9d026bd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdParam.java
@@ -0,0 +1,19 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.stir;
+
+import com.dy.pipIrrRemote.monitor.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends Cd4MqttParameter {
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdSv.java
new file mode 100644
index 0000000..0587c4d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/stir/CdSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrRemote.monitor.mqttSd1.stir;
+
+import com.dy.pipIrrRemote.monitor.common.Com4MqttSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/16 17:36
+ * @Description
+ */
+@Slf4j
+@Service("mqttSd1StirSv")
+public class CdSv extends Com4MqttSv {
+}
\ No newline at end of file
diff --git "a/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/FlexManager\350\275\257\344\273\266\351\205\215\347\275\256\345\217\202\346\225\260.docx" "b/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/FlexManager\350\275\257\344\273\266\351\205\215\347\275\256\345\217\202\346\225\260.docx"
new file mode 100644
index 0000000..c544565
--- /dev/null
+++ "b/pipIrr-platform/\346\226\207\346\241\243/\346\260\264\350\202\245\346\260\224\350\261\241\345\242\222\346\203\205/FlexManager\350\275\257\344\273\266\351\205\215\347\275\256\345\217\202\346\225\260.docx"
Binary files differ

--
Gitblit v1.8.0