From 566d6dba9ac3309a716efa43ecbeaaf09e46e394 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 27 六月 2025 16:33:48 +0800
Subject: [PATCH] 表阀一体机协议增加35、36、37、38、9D功能码协议实现

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_Down.java             |  225 +++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd38Vo.java            |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java         |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_36_Down.java             |  225 +++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_9D_A3Vo.java       |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_37_Down.java             |  267 +++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA3/CdCtrl.java |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd35Vo.java            |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd36Vo.java            |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd37Vo.java            |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_38_Down.java             |  266 +++++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java                  |   15 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_36_37_38Up.java       |   92 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd93/CdCtrl.java |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9DVo.java            |   12 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd35_36Vo.java          |  114 ++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9D_Down.java             |  120 +++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java            |    7 
 18 files changed, 1,425 insertions(+), 13 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
index 3bce602..9cd3273 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
@@ -41,6 +41,12 @@
 	public static final String cd_9B = "9B" ; //娓呴櫎璁惧缁堢娉ㄥ唽鍙�
 	public static final String cd_9C = "9C" ; //榛戝悕鍗曡繙绋嬪己鍒跺叧闂按娉�/闃�闂�
 	public static final String cd_C2 = "C2" ; //寮�鍏虫按娉�/闃�闂ㄦ垚鍔�/澶辫触涓婃姤
+	public static final String cd_9D = "9D" ; //姝e父杩滅▼鍏抽棴姘存车/闃�闂�
+
+	public static final String cd_35 = "35" ; //APP绔繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�
+	public static final String cd_36 = "36" ; //APP绔繙绋嬪畾閲忓紑鍚按娉�/闃�闂�
+	public static final String cd_37 = "37" ; //APP绔鍒掕繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�
+	public static final String cd_38 = "38" ; //APP绔繙绋嬭鍒掑畾閲忓紑鍚按娉�/闃�闂�
 
 	public static final String cd_1600 = "1600" ;//鍗囩骇澶嶄綅
 	public static final String cd_1601 = "1601" ;//鍗囩骇閰嶇疆
@@ -90,6 +96,13 @@
 			(code.equals(cd_9B) ? "娓呴櫎璁惧缁堢娉ㄥ唽鍙�" :
 			(code.equals(cd_9C) ? "榛戝悕鍗曡繙绋嬪己鍒跺叧闂按娉�/闃�闂�" :
 			(code.equals(cd_C2) ? "寮�鍏虫按娉�/闃�闂ㄧ粨鏋滀笂鎶�" :
+			(code.equals(cd_9D) ? "姝e父杩滅▼鍏抽棴姘存车/闃�闂�" :
+
+			(code.equals(cd_35) ? "APP绔繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�" :
+			(code.equals(cd_36) ? "APP绔繙绋嬪畾閲忓紑鍚按娉�/闃�闂�" :
+			(code.equals(cd_37) ? "APP绔鍒掕繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�" :
+			(code.equals(cd_38) ? "APP绔繙绋嬭鍒掑畾閲忓紑鍚按娉�/闃�闂�" :
+
 			(code.equals(cd_1600) ? "鍗囩骇澶嶄綅" :
 			(code.equals(cd_1601) ? "鍗囩骇閰嶇疆" :
 			(code.equals(cd_1602) ? "鍗囩骇鏁版嵁" :
@@ -97,7 +110,7 @@
 			(code.equals(cd_9601) ? "鍗囩骇閰嶇疆" :
 			(code.equals(cd_9602) ? "鍗囩骇鏁版嵁" :
 			(code.equals(cd_9603) ? "鍗囩骇鏍¢獙" :
-			"")))))))))))))))))))))))))))))))))))))))))))))) ;
+			""))))))))))))))))))))))))))))))))))))))))))))))))))) ;
 		if(name == null || name.equals("")){
 			name = code ;
 		}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd35Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd35Vo.java
new file mode 100644
index 0000000..5110913
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd35Vo.java
@@ -0,0 +1,16 @@
+package com.dy.common.mw.protocol.p206V202404.downVos;
+
+import lombok.Data;
+
+@Data
+public class ComCd35Vo {
+    public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�02锛�0x02锛�:琛ㄩ榾涓�浣撴満锛�57(0x57):浜曠數鎺у埗鍣�
+    public Integer projectNo ;//椤圭洰缂栧彿
+    public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+    public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+    public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+    public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+    public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd36Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd36Vo.java
new file mode 100644
index 0000000..8d99591
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd36Vo.java
@@ -0,0 +1,16 @@
+package com.dy.common.mw.protocol.p206V202404.downVos;
+
+import lombok.Data;
+
+@Data
+public class ComCd36Vo {
+    public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�02锛�0x02锛�:琛ㄩ榾涓�浣撴満锛�57(0x57):浜曠數鎺у埗鍣�
+    public Integer projectNo ;//椤圭洰缂栧彿
+    public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+    public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+    public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+    public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+    public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd37Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd37Vo.java
new file mode 100644
index 0000000..2b300ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd37Vo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol.p206V202404.downVos;
+
+import lombok.Data;
+
+@Data
+public class ComCd37Vo {
+    public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�02锛�0x02锛�:琛ㄩ榾涓�浣撴満锛�57(0x57):浜曠數鎺у埗鍣�
+    public Integer projectNo ;//椤圭洰缂栧彿
+    public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+    public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+    public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+    public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+
+    public Integer year ; //璁″垝寮�闃�鏃堕棿---骞�
+    public Integer month ;//璁″垝寮�闃�鏃堕棿---鏈�
+    public Integer day ;//璁″垝寮�闃�鏃堕棿---鏃�
+    public Integer hour ;//璁″垝寮�闃�鏃堕棿---鏃�
+    public Integer minute ;//璁″垝寮�闃�鏃堕棿---鍒�
+
+    public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd38Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd38Vo.java
new file mode 100644
index 0000000..959630d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd38Vo.java
@@ -0,0 +1,23 @@
+package com.dy.common.mw.protocol.p206V202404.downVos;
+
+import lombok.Data;
+
+@Data
+public class ComCd38Vo {
+    public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�02锛�0x02锛�:琛ㄩ榾涓�浣撴満锛�57(0x57):浜曠數鎺у埗鍣�
+    public Integer projectNo ;//椤圭洰缂栧彿
+    public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+    public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+    public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+    public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+    public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+
+    public Integer year ; //璁″垝寮�闃�鏃堕棿---骞�
+    public Integer month ;//璁″垝寮�闃�鏃堕棿---鏈�
+    public Integer day ;//璁″垝寮�闃�鏃堕棿---鏃�
+    public Integer hour ;//璁″垝寮�闃�鏃堕棿---鏃�
+    public Integer minute ;//璁″垝寮�闃�鏃堕棿---鍒�
+
+    public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9DVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9DVo.java
new file mode 100644
index 0000000..a0ddac9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9DVo.java
@@ -0,0 +1,12 @@
+package com.dy.common.mw.protocol.p206V202404.downVos;
+
+import lombok.Data;
+
+@Data
+public class ComCd9DVo {
+    public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�02锛�0x02锛�:琛ㄩ榾涓�浣撴満锛�57(0x57):浜曠數鎺у埗鍣�
+    public Integer projectNo ;//椤圭洰缂栧彿
+    public String icCardAddr ;//鐢ㄦ埛鍗″湴鍧�锛夛紙4瀛楄妭HEX锛�
+    public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+    public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_36_37_38Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_36_37_38Up.java
new file mode 100644
index 0000000..a87a415
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_36_37_38Up.java
@@ -0,0 +1,92 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.*;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd35_36Vo;
+import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+@AnnotationCodeUp(ifAny={
+        CodeV202404.cd_35,
+        CodeV202404.cd_36,
+        CodeV202404.cd_37,
+        CodeV202404.cd_38
+})
+@SuppressWarnings("unused")
+public class Cd_35_36_37_38Up implements CodeParse{
+
+    private static final Logger log = LogManager.getLogger(Cd_35_36_37_38Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV202404 para = (ParseParamsForUpV202404)params ;
+        int bsLen = new CommonV202404().parseDataLen4P202404(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("\n鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV202404.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.upCode = para.upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
+        midRs.upHex = para.upHex ;//涓婅鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.upBuffer = para.upBuffer ;//涓婅鏁版嵁瀛楄妭鏁扮粍
+        midRs.data = para.data ;//瑙f瀽鍚庣殑鏁版嵁
+
+        midRs.reportOrResponse_trueOrFalse = false ;
+
+        callback.callback(midRs.reportOrResponse_trueOrFalse, para.data.subData==null?null:((DataV202404)(para.data.subData)).subData);
+        if(para.data != null && para.data.getSubData() != null){
+            DataCd35_36Vo subData = (DataCd35_36Vo)((DataV202404)para.data.getSubData()).subData ;
+            //opResult ;//寮�鍚车/闃�缁撴灉: 0x00:鎴愬姛 0x81:澶辫触
+            callback.notify(new ValveStateInfo(subData.opResult.byteValue() == 0 ? true:false));
+        }
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鎵ц鍒嗘瀽
+     * @param bs 瀛楄妭鏁扮粍
+     * @param bsLen 瀛楄妭闀垮害锛堟�诲寘闀匡紝鍖呮嫭鍖呭ご鍜屽寘灏撅級
+     * @param dataCode 鍔熻兘鐮�
+     * @param data 鏁版嵁
+     * @throws Exception 寮傚父
+     */
+    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
+        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
+        DataCd35_36Vo cdData = new DataCd35_36Vo(CodeV202404.getCodeName(dataCode)) ;
+        dV202404.subData = cdData ;
+        int index = ProtocolConstantV206V202404.dataIndex ;
+        cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
+
+        index++ ;
+        cdData.projectNo = (int)bs[index];
+
+        index++ ;
+        cdData.icCardNo = GlParse.parseIcCardNo(bs, index, 6, 2) ;
+
+        index += 8 ;
+        cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ;
+
+        //index += 8 ;
+        //cdData.opDt = GlParse.parseRtuDt(bs, index) ;
+
+        index += 6 ;
+        cdData.opType = bs[index];
+
+        index ++ ;
+        cdData.opResult = bs[index];
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_Down.java
new file mode 100644
index 0000000..5da03c8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_35_Down.java
@@ -0,0 +1,225 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd35Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.NumUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_35
+})
+public class Cd_35_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = false ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV202404 para) throws Exception {
+        byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode);
+        if(para.param != null){
+            JSONObject obj = (JSONObject)para.param;
+            String json = obj.toJSONString();
+            ComCd35Vo cvo = JSON.parseObject(json, ComCd35Vo.class) ;
+            if(cvo == null){
+                throw new Exception("json杞珻omCd35Vo涓簄ull") ;
+            }
+            if(cvo.waterRemain != null){
+                if(cvo.waterRemain < 0 || cvo.waterRemain > 99999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑姘撮噺蹇呴』鏄�0~99999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.moneyRemain != null){
+                if(cvo.moneyRemain < 0 || cvo.moneyRemain > 999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑閲戦蹇呴』鏄�0~999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.waterPrice != null){
+                if(cvo.waterPrice < 0 || cvo.waterPrice > 99.99){
+                    throw new Exception("姘撮噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.elePrice != null){
+                if(cvo.elePrice < 0 || cvo.elePrice > 99.99){
+                    throw new Exception("鐢甸噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.orderNo.length() != 16){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.minutes == null || cvo.minutes == 0.0){
+                throw new Exception("鐢ㄦ按鏃堕暱涓嶈兘涓虹┖鎴栦负0") ;
+            }
+            if(cvo.minutes < 0 || cvo.minutes > 9999){
+                throw new Exception("鐢ㄦ按鏃堕暱鍙栧�艰寖鍥存槸0~9999鍒嗛挓") ;
+            }
+
+            byte[] bs = new byte[47] ;
+            int index = 0 ;
+            bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
+
+            index ++ ;
+            bs[index] = cvo.projectNo.byteValue() ;
+
+            index ++ ;
+            GlCreate.createValveOrPump(cvo.controllerType, bs, index) ;
+
+            index ++ ;
+            GlCreate.createIcCardNo(cvo.icCardNo, bs, index);
+
+            index += 8 ;
+            if(cvo.waterRemain == null){
+                cvo.waterRemain = 0.0 ;
+            }
+            String strTemp = "" + Double.valueOf(cvo.waterRemain * 100).intValue() ;
+            byte[] bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            int bTempLen = bTemp.length ;
+            int count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 5){
+                    break ;
+                }
+            }
+            for(; count < 5; count++){
+                bs[index++] = 0 ;
+            }
+
+            if(cvo.moneyRemain == null){
+                cvo.moneyRemain = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.moneyRemain * 10000)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 4){
+                    break ;
+                }
+            }
+            for(; count < 4; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.waterPrice == null){
+                cvo.waterPrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.waterPrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.elePrice == null){
+                cvo.elePrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.elePrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            ByteUtil.string2BCD_BE(bs, cvo.orderNo, index) ;
+
+            index += 8 ;
+            GlCreate.createDt(bs, index);
+
+            index += 6 ;
+            bTemp = ByteUtil.int2BCD_LE(cvo.minutes) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+            GlCreate.createPw(bs, index);
+
+            index += 2 ;
+            GlCreate.createS2D(bs, index) ;
+
+            index += 4 ;
+            bs[index] = 0 ; //鏃跺欢
+
+            bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        }else{
+            throw new Exception("涓嬭鍛戒护鍙傛暟鎹负null") ;
+        }
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_36_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_36_Down.java
new file mode 100644
index 0000000..56af443
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_36_Down.java
@@ -0,0 +1,225 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd35Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd36Vo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.NumUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_36
+})
+public class Cd_36_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = false ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV202404 para) throws Exception {
+        byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode);
+        if(para.param != null){
+            JSONObject obj = (JSONObject)para.param;
+            String json = obj.toJSONString();
+            ComCd36Vo cvo = JSON.parseObject(json, ComCd36Vo.class) ;
+            if(cvo == null){
+                throw new Exception("json杞珻omCd35Vo涓簄ull") ;
+            }
+            if(cvo.waterRemain != null){
+                if(cvo.waterRemain < 0 || cvo.waterRemain > 99999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑姘撮噺蹇呴』鏄�0~99999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.moneyRemain != null){
+                if(cvo.moneyRemain < 0 || cvo.moneyRemain > 999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑閲戦蹇呴』鏄�0~999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.waterPrice != null){
+                if(cvo.waterPrice < 0 || cvo.waterPrice > 99.99){
+                    throw new Exception("姘撮噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.elePrice != null){
+                if(cvo.elePrice < 0 || cvo.elePrice > 99.99){
+                    throw new Exception("鐢甸噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.orderNo.length() != 16){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.waterAmount == null || cvo.waterAmount == 0.0){
+                throw new Exception("棰勭敤姘撮噺涓嶈兘涓虹┖鎴栦负0") ;
+            }
+            if(cvo.waterAmount < 0 || cvo.waterAmount > 9999){
+                throw new Exception("棰勭敤姘撮噺鍙栧�艰寖鍥存槸0~9999m3") ;
+            }
+
+            byte[] bs = new byte[47] ;
+            int index = 0 ;
+            bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
+
+            index ++ ;
+            bs[index] = cvo.projectNo.byteValue() ;
+
+            index ++ ;
+            GlCreate.createValveOrPump(cvo.controllerType, bs, index) ;
+
+            index ++ ;
+            GlCreate.createIcCardNo(cvo.icCardNo, bs, index);
+
+            index += 8 ;
+            if(cvo.waterRemain == null){
+                cvo.waterRemain = 0.0 ;
+            }
+            String strTemp = "" + Double.valueOf(cvo.waterRemain * 100).intValue() ;
+            byte[] bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            int bTempLen = bTemp.length ;
+            int count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 5){
+                    break ;
+                }
+            }
+            for(; count < 5; count++){
+                bs[index++] = 0 ;
+            }
+
+            if(cvo.moneyRemain == null){
+                cvo.moneyRemain = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.moneyRemain * 10000)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 4){
+                    break ;
+                }
+            }
+            for(; count < 4; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.waterPrice == null){
+                cvo.waterPrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.waterPrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.elePrice == null){
+                cvo.elePrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.elePrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            ByteUtil.string2BCD_BE(bs, cvo.orderNo, index) ;
+
+            index += 8 ;
+            GlCreate.createDt(bs, index);
+
+            index += 6 ;
+            bTemp = ByteUtil.int2BCD_LE(cvo.waterAmount) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+            GlCreate.createPw(bs, index);
+
+            index += 2 ;
+            GlCreate.createS2D(bs, index) ;
+
+            index += 4 ;
+            bs[index] = 0 ; //鏃跺欢
+
+            bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        }else{
+            throw new Exception("涓嬭鍛戒护鍙傛暟鎹负null") ;
+        }
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_37_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_37_Down.java
new file mode 100644
index 0000000..735b656
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_37_Down.java
@@ -0,0 +1,267 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd35Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd37Vo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.NumUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_37
+})
+public class Cd_37_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = false ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV202404 para) throws Exception {
+        byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode);
+        if(para.param != null){
+            JSONObject obj = (JSONObject)para.param;
+            String json = obj.toJSONString();
+            ComCd37Vo cvo = JSON.parseObject(json, ComCd37Vo.class) ;
+            if(cvo == null){
+                throw new Exception("json杞珻omCd37Vo涓簄ull") ;
+            }
+            if(cvo.waterRemain != null){
+                if(cvo.waterRemain < 0 || cvo.waterRemain > 99999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑姘撮噺蹇呴』鏄�0~99999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.moneyRemain != null){
+                if(cvo.moneyRemain < 0 || cvo.moneyRemain > 999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑閲戦蹇呴』鏄�0~999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.waterPrice != null){
+                if(cvo.waterPrice < 0 || cvo.waterPrice > 99.99){
+                    throw new Exception("姘撮噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.elePrice != null){
+                if(cvo.elePrice < 0 || cvo.elePrice > 99.99){
+                    throw new Exception("鐢甸噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.orderNo.length() != 16){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+
+            if(cvo.year == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉鑳戒负绌�") ;
+            }
+            if(cvo.year < 24 || cvo.year > 9999){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉姝g‘") ;
+            }
+            if(cvo.year > 99 && cvo.year < 2024){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉姝g‘") ;
+            }
+            if(cvo.month == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏈堜笉鑳戒负绌�") ;
+            }
+            if(cvo.month < 1 || cvo.month > 12){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏈堜笉姝g‘") ;
+            }
+            if(cvo.day == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃ヤ笉鑳戒负绌�") ;
+            }
+            if(cvo.day < 1 || cvo.day > 31){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃ヤ笉姝g‘") ;
+            }
+            if(cvo.hour == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉鑳戒负绌�") ;
+            }
+            if(cvo.hour < 0 || cvo.hour > 23){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉姝g‘") ;
+            }
+            if(cvo.minute == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉鑳戒负绌�") ;
+            }
+            if(cvo.minute < 0 || cvo.minute > 59){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鍒嗕笉姝g‘") ;
+            }
+
+            if(cvo.minutes == null || cvo.minutes == 0.0){
+                throw new Exception("鐢ㄦ按鏃堕暱涓嶈兘涓虹┖鎴栦负0") ;
+            }
+            if(cvo.minutes < 0 || cvo.minutes > 9999){
+                throw new Exception("鐢ㄦ按鏃堕暱鍙栧�艰寖鍥存槸0~9999鍒嗛挓") ;
+            }
+
+            byte[] bs = new byte[53] ;
+            int index = 0 ;
+            bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
+
+            index ++ ;
+            bs[index] = cvo.projectNo.byteValue() ;
+
+            index ++ ;
+            GlCreate.createValveOrPump(cvo.controllerType, bs, index) ;
+
+            index ++ ;
+            GlCreate.createIcCardNo(cvo.icCardNo, bs, index);
+
+            index += 8 ;
+            if(cvo.waterRemain == null){
+                cvo.waterRemain = 0.0 ;
+            }
+            String strTemp = "" + Double.valueOf(cvo.waterRemain * 100).intValue() ;
+            byte[] bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            int bTempLen = bTemp.length ;
+            int count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 5){
+                    break ;
+                }
+            }
+            for(; count < 5; count++){
+                bs[index++] = 0 ;
+            }
+
+            if(cvo.moneyRemain == null){
+                cvo.moneyRemain = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.moneyRemain * 10000)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 4){
+                    break ;
+                }
+            }
+            for(; count < 4; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.waterPrice == null){
+                cvo.waterPrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.waterPrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.elePrice == null){
+                cvo.elePrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.elePrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            ByteUtil.string2BCD_BE(bs, cvo.orderNo, index) ;
+
+            index += 8 ;
+            GlCreate.createDt(bs, index);
+
+            index += 6 ;
+            bs[index++] = 0 ;//绉�
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.minute)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.hour)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.day)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.month)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.year)[0] ;
+
+            bTemp = ByteUtil.int2BCD_LE(cvo.minutes) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+            GlCreate.createPw(bs, index);
+
+            index += 2 ;
+            GlCreate.createS2D(bs, index) ;
+
+            index += 4 ;
+            bs[index] = 0 ; //鏃跺欢
+
+            bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        }else{
+            throw new Exception("涓嬭鍛戒护鍙傛暟鎹负null") ;
+        }
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_38_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_38_Down.java
new file mode 100644
index 0000000..56e7852
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_38_Down.java
@@ -0,0 +1,266 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd38Vo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.NumUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_38
+})
+public class Cd_38_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = false ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV202404 para) throws Exception {
+        byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode);
+        if(para.param != null){
+            JSONObject obj = (JSONObject)para.param;
+            String json = obj.toJSONString();
+            ComCd38Vo cvo = JSON.parseObject(json, ComCd38Vo.class) ;
+            if(cvo == null){
+                throw new Exception("json杞珻omCd35Vo涓簄ull") ;
+            }
+            if(cvo.waterRemain != null){
+                if(cvo.waterRemain < 0 || cvo.waterRemain > 99999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑姘撮噺蹇呴』鏄�0~99999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.moneyRemain != null){
+                if(cvo.moneyRemain < 0 || cvo.moneyRemain > 999999.99){
+                    throw new Exception("鐢ㄦ埛鍓╀綑閲戦蹇呴』鏄�0~999999.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.waterPrice != null){
+                if(cvo.waterPrice < 0 || cvo.waterPrice > 99.99){
+                    throw new Exception("姘撮噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(cvo.elePrice != null){
+                if(cvo.elePrice < 0 || cvo.elePrice > 99.99){
+                    throw new Exception("鐢甸噺鍗曚环蹇呴』鏄�0~99.99鑼冨洿鍐呯殑鏁版嵁") ;
+                }
+            }
+            if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.orderNo.length() != 16){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+
+            if(cvo.year == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉鑳戒负绌�") ;
+            }
+            if(cvo.year < 24 || cvo.year > 9999){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉姝g‘") ;
+            }
+            if(cvo.year > 99 && cvo.year < 2024){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---骞翠笉姝g‘") ;
+            }
+            if(cvo.month == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏈堜笉鑳戒负绌�") ;
+            }
+            if(cvo.month < 1 || cvo.month > 12){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏈堜笉姝g‘") ;
+            }
+            if(cvo.day == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃ヤ笉鑳戒负绌�") ;
+            }
+            if(cvo.day < 1 || cvo.day > 31){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃ヤ笉姝g‘") ;
+            }
+            if(cvo.hour == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉鑳戒负绌�") ;
+            }
+            if(cvo.hour < 0 || cvo.hour > 23){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉姝g‘") ;
+            }
+            if(cvo.minute == null){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鏃朵笉鑳戒负绌�") ;
+            }
+            if(cvo.minute < 0 || cvo.minute > 59){
+                throw new Exception("璁″垝寮�闃�鏃堕棿---鍒嗕笉姝g‘") ;
+            }
+
+            if(cvo.waterAmount == null || cvo.waterAmount == 0.0){
+                throw new Exception("棰勭敤姘撮噺涓嶈兘涓虹┖鎴栦负0") ;
+            }
+            if(cvo.waterAmount < 0 || cvo.waterAmount > 9999){
+                throw new Exception("棰勭敤姘撮噺鍙栧�艰寖鍥存槸0~9999m3") ;
+            }
+
+            byte[] bs = new byte[53] ;
+            int index = 0 ;
+            bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
+
+            index ++ ;
+            bs[index] = cvo.projectNo.byteValue() ;
+
+            index ++ ;
+            GlCreate.createValveOrPump(cvo.controllerType, bs, index) ;
+
+            index ++ ;
+            GlCreate.createIcCardNo(cvo.icCardNo, bs, index);
+
+            index += 8 ;
+            if(cvo.waterRemain == null){
+                cvo.waterRemain = 0.0 ;
+            }
+            String strTemp = "" + Double.valueOf(cvo.waterRemain * 100).intValue() ;
+            byte[] bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            int bTempLen = bTemp.length ;
+            int count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 5){
+                    break ;
+                }
+            }
+            for(; count < 5; count++){
+                bs[index++] = 0 ;
+            }
+
+            if(cvo.moneyRemain == null){
+                cvo.moneyRemain = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.moneyRemain * 10000)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 4){
+                    break ;
+                }
+            }
+            for(; count < 4; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.waterPrice == null){
+                cvo.waterPrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.waterPrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            if(cvo.elePrice == null){
+                cvo.elePrice = 0.0 ;
+            }
+            strTemp = "" + (Double.valueOf(cvo.elePrice * 100)).intValue() ;
+            bTemp = ByteUtil.string2BCD_LE(strTemp) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+
+            ByteUtil.string2BCD_BE(bs, cvo.orderNo, index) ;
+
+            index += 8 ;
+            GlCreate.createDt(bs, index);
+
+            index += 6 ;
+            bs[index++] = 0 ;//绉�
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.minute)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.hour)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.day)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.month)[0] ;
+            bs[index++] = ByteUtil.int2BCD_LE(cvo.year)[0] ;
+
+            bTemp = ByteUtil.int2BCD_LE(cvo.waterAmount) ;
+            bTempLen = bTemp.length ;
+            count = 0 ;
+            for(int i = 0 ; i < bTempLen; i++){
+                bs[index++] = bTemp[i] ;
+                count ++ ;
+                if(count >= 2){
+                    break ;
+                }
+            }
+            for(; count < 2; count++){
+                bs[index++] = 0 ;
+            }
+
+            GlCreate.createPw(bs, index);
+
+            index += 2 ;
+            GlCreate.createS2D(bs, index) ;
+
+            index += 4 ;
+            bs[index] = 0 ; //鏃跺欢
+
+            bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        }else{
+            throw new Exception("涓嬭鍛戒护鍙傛暟鎹负null") ;
+        }
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
index ae7d890..66a3ae9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
@@ -4,13 +4,14 @@
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V202404.*;
 import com.dy.common.mw.protocol.p206V202404.parse.global.GlParse;
-import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_9D_A3Vo;
 import com.dy.common.mw.protocol.rtuState.ValveStateInfo;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 @AnnotationCodeUp(ifAny={
         CodeV202404.cd_93,
+        CodeV202404.cd_9D,
         CodeV202404.cd_A3
 })
 @SuppressWarnings("unused")
@@ -46,7 +47,7 @@
 
         callback.callback(midRs.reportOrResponse_trueOrFalse, para.data.subData==null?null:((DataV202404)(para.data.subData)).subData);
         if(para.data != null && para.data.getSubData() != null){
-            DataCd93_A3Vo subData = (DataCd93_A3Vo)((DataV202404)para.data.getSubData()).subData ;
+            DataCd93_9D_A3Vo subData = (DataCd93_9D_A3Vo)((DataV202404)para.data.getSubData()).subData ;
             //opResult ;//鍏虫车/闃�缁撴灉: 0x00:鎴愬姛 0x81:澶辫触
             callback.notify(new ValveStateInfo(subData.clResult.byteValue()==0?false:true));
         }
@@ -63,7 +64,7 @@
      */
     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
         DataV202404 dV202404 = (DataV202404)data.getSubData() ;
-        DataCd93_A3Vo cdData = new DataCd93_A3Vo(CodeV202404.getCodeName(dataCode)) ;
+        DataCd93_9D_A3Vo cdData = new DataCd93_9D_A3Vo(CodeV202404.getCodeName(dataCode)) ;
         dV202404.subData = cdData ;
 
         GlParse.parseCd93A3(bs, cdData) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9D_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9D_Down.java
new file mode 100644
index 0000000..83b1d94
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9D_Down.java
@@ -0,0 +1,120 @@
+package com.dy.common.mw.protocol.p206V202404.parse;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.ParseParamsForDownV202404;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd9DVo;
+import com.dy.common.mw.protocol.p206V202404.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.NumUtil;
+
+@AnnotationCodeDown(ifAny={
+        CodeV202404.cd_9D
+})
+public class Cd_9D_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV202404 para = (ParseParamsForDownV202404) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.protocolVersion = para.protocolVersion ;//鍗忚鐗堟湰鍙�
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//涓嬭鍛戒护鍔熻兘鐮佸悕绉�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        midRs.isSendFirst = false ;//鍛戒护搴旂瓟锛岄鍏堝彂閫侊紝闃叉RTU閲嶆柊涓婃姤
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV202404 para) throws Exception {
+        byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode);
+        if(para.param != null){
+            JSONObject obj = (JSONObject)para.param;
+            String json = obj.toJSONString();
+            ComCd9DVo cvo = JSON.parseObject(json, ComCd9DVo.class) ;
+            if(cvo == null){
+                throw new Exception("json杞珻omCd9DVo涓簄ull") ;
+            }
+            if(cvo.icCardAddr == null || cvo.icCardAddr.trim().equals("")){
+                throw new Exception("鐢ㄦ埛IC鍗″湴鍧�蹇呴』鎻愪緵") ;
+            }
+            if(cvo.icCardNo == null || cvo.icCardNo.trim().equals("")){
+                throw new Exception("鐢ㄦ埛IC鍗″彿蹇呴』鎻愪緵") ;
+            }
+            if(cvo.orderNo == null || cvo.orderNo.trim().equals("")){
+                throw new Exception("璁㈠崟鍙峰繀椤绘彁渚�") ;
+            }
+            if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+            if(cvo.orderNo.length() != 16){
+                throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
+            }
+
+
+            byte[] bs = new byte[29] ;
+            int index = 0 ;
+            bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
+
+            index ++ ;
+            bs[index] = cvo.projectNo.byteValue() ;
+
+            index ++ ;
+            GlCreate.createValveOrPump(cvo.controllerType, bs, index) ;
+
+            index ++ ;
+            GlCreate.createIcCardAddr(cvo.icCardAddr, bs, index) ;
+
+            index += 4 ;
+            GlCreate.createIcCardNo(cvo.icCardNo, bs, index);
+
+            index += 8 ;
+            ByteUtil.string2BCD_BE(bs, cvo.orderNo, index) ;
+
+            index += 8 ;
+            GlCreate.createPw(bs, index);
+
+            index += 2 ;
+            GlCreate.createS2D(bs, index) ;
+
+            index += 4 ;
+            bs[index] = 0 ; //鏃跺欢
+
+            bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        }else{
+            throw new Exception("涓嬭鍛戒护鍙傛暟鎹负null") ;
+        }
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
index df54556..66ca03c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -306,7 +306,7 @@
      * @param cdData
      * @throws Exception
      */
-    public static void parseCd93A3(byte[] bs, DataCd93_A3Vo cdData) throws Exception {
+    public static void parseCd93A3(byte[] bs, DataCd93_9D_A3Vo cdData) throws Exception {
         int index = ProtocolConstantV206V202404.dataIndex ;
         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd35_36Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd35_36Vo.java
new file mode 100644
index 0000000..e9d12f2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd35_36Vo.java
@@ -0,0 +1,114 @@
+package com.dy.common.mw.protocol.p206V202404.upVos;
+
+import com.dy.common.mw.protocol.UpComResVo;
+import com.dy.common.mw.protocol.p206V202404.CodeV202404;
+import com.dy.common.mw.protocol.p206V202404.CommonV202404;
+import lombok.Data;
+
+//APP绔繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�
+@Data
+public class DataCd35_36Vo implements UpComResVo {
+
+	public String controllerType;//鎺у埗鍣ㄧ被鍨�
+	public Integer projectNo ;//椤圭洰缂栧彿
+	public String icCardNo ;//IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
+	public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+	//public String opDt ;//寮�娉�/闃�鏃堕棿锛坹yyy-mm-dd HH:MM:SS锛�
+	public Byte opType ;//寮�闃�绫诲瀷
+	public Byte opResult ;//寮�鍚车/闃�缁撴灉: 0x01:鎴愬姛 0x81:澶辫触
+
+	public String comName ;//鍛戒护鍚嶇О
+
+	//鏃犲弬鏋勯�犲嚱鏁帮紝璁剧疆鍛戒护鍚嶇О
+	public DataCd35_36Vo(){
+		this.comName = CodeV202404.getCodeName(CodeV202404.cd_35) ;
+	}
+	//鏈夊弬鏋勯�犲嚱鏁帮紝璁剧疆鍛戒护鍚嶇О
+	public DataCd35_36Vo(String comName){
+		this.comName = comName ;
+	}
+
+	//閲嶅啓toString鏂规硶锛岃繑鍥濪ataCd35Vo瀵硅薄鐨勫瓧绗︿覆琛ㄧず
+	public String toString(){
+		StringBuffer sb = new StringBuffer() ;
+		sb.append("      " + comName + " : \n") ;
+		sb.append("      鎺у埗鍣ㄧ被鍨� : ") ;
+		sb.append(CommonV202404.ctrlDevType(controllerType)) ;
+		sb.append("\n") ;
+		sb.append("      椤圭洰缂栧彿 : ") ;
+		sb.append(projectNo == null?"鏈煡":projectNo) ;
+		sb.append("\n") ;
+		sb.append("      IC鍗$紪鍙� : ") ;
+		sb.append(icCardNo == null?"鏈煡":icCardNo) ;
+		sb.append("\n") ;
+		sb.append("      璁㈠崟鍙� : ") ;
+		sb.append(orderNo == null?"鏈煡":orderNo) ;
+		sb.append("\n") ;
+
+		/*
+		sb.append("      寮�娉�/闃�鏃堕棿 : ") ;
+		sb.append(opDt == null?"鏈煡":opDt) ;
+		sb.append("\n") ;
+		 */
+
+		sb.append("      寮�鍚车/闃�绫诲瀷 : ") ;
+		sb.append(opType == null?"鏈煡":(opType.byteValue() == 0x02 ? "骞冲彴":"鐢ㄦ埛")) ;
+		sb.append("\n") ;
+		sb.append("      寮�鍚车/闃�缁撴灉 : ") ;
+		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x01 ? "鎴愬姛":"澶辫触")) ;
+		sb.append("\n") ;
+		return sb.toString() ;
+	}
+
+	//閲嶅啓toStr鏂规硶锛岃繑鍥濪ataCd35Vo瀵硅薄鐨勫瓧绗︿覆琛ㄧず锛屾牴鎹畇howBase鍙傛暟鍐冲畾鏄惁鏄剧ず鍩虹淇℃伅
+	public String toStr(boolean showBase){
+		StringBuffer sb = new StringBuffer() ;
+		if(showBase){
+			sb.append(comName + " : \n") ;
+			sb.append("鎺у埗鍣ㄧ被鍨� : ") ;
+			sb.append(CommonV202404.ctrlDevType(controllerType)) ;
+			sb.append("\n") ;
+			sb.append("椤圭洰缂栧彿 : ") ;
+			sb.append(projectNo == null?"鏈煡":projectNo) ;
+			sb.append("\n") ;
+		}
+		sb.append("IC鍗$紪鍙� : ") ;
+		sb.append(icCardNo == null?"鏈煡":icCardNo) ;
+		sb.append("\n") ;
+		sb.append("璁㈠崟鍙� : ") ;
+		sb.append(orderNo == null?"鏈煡":orderNo) ;
+		sb.append("\n") ;
+
+		/*
+		sb.append("寮�娉�/闃�鏃堕棿 : ") ;
+		sb.append(opDt == null?"鏈煡":opDt) ;
+		sb.append("\n") ;
+		 */
+
+		sb.append("寮�鍚车/闃�绫诲瀷 : ") ;
+		sb.append(opType == null?"鏈煡":(opType.byteValue() == 0x02 ? "骞冲彴":"鐢ㄦ埛")) ;
+		sb.append("\n") ;
+		sb.append("寮�鍚车/闃�缁撴灉 : ") ;
+		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x01 ? "鎴愬姛":"澶辫触")) ;
+		sb.append("\n") ;
+		return sb.toString() ;
+	}
+
+
+	//閲嶅啓comLog鏂规硶锛岃繑鍥濪ataCd35Vo瀵硅薄鐨勫瓧绗︿覆琛ㄧず锛岀敤浜庤褰曟棩蹇�
+	public String comLog(){
+		StringBuilder sb = new StringBuilder() ;
+		sb.append("杩滅▼寮�闃�鍛戒护鍥炲:\n");
+		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x01 ? "鎴愬姛":"澶辫触"));
+		sb.append("\n");
+
+		return sb.toString() ;
+	}
+
+	//閲嶅啓comLog鏂规硶锛屾牴鎹甤ode鍙傛暟杩斿洖DataCd35Vo瀵硅薄鐨勫瓧绗︿覆琛ㄧず锛岀敤浜庤褰曟棩蹇�
+	@Override
+	public String comLog(String code) {
+		return null;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_9D_A3Vo.java
similarity index 97%
rename from pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
rename to pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_9D_A3Vo.java
index 5ac8543..0fa457e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_9D_A3Vo.java
@@ -9,7 +9,7 @@
 //骞冲彴/APP杩滅▼鍏抽棴姘存车/闃�闂�   +  鍒峰崱鍏虫车/闃�涓婃姤
 @Data
 @EqualsAndHashCode(callSuper=false)
-public class DataCd93_A3Vo extends AlarmVo implements UpComResVo {
+public class DataCd93_9D_A3Vo extends AlarmVo implements UpComResVo {
 
 	public String controllerType;//鎺у埗鍣ㄧ被鍨�
 	public Integer projectNo ;//椤圭洰缂栧彿
@@ -30,10 +30,10 @@
 	public Integer thisDuration;//鏈浣跨敤鏃堕棿闀�, 鍗曚綅锛氬垎閽�
 
 	public String comName ;//鍛戒护鍚嶇О
-	public DataCd93_A3Vo(){
+	public DataCd93_9D_A3Vo(){
 		this.comName = CodeV202404.getCodeName(CodeV202404.cd_93) ;
 	}
-	public DataCd93_A3Vo(String comName){
+	public DataCd93_9D_A3Vo(String comName){
 		this.comName = comName ;
 	}
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd93/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd93/CdCtrl.java
index 9f00fbe..241f9c1 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd93/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd93/CdCtrl.java
@@ -4,7 +4,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
-import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_9D_A3Vo;
 import com.dy.common.util.Callback;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
@@ -145,7 +145,7 @@
                 msg = RtuSuccessMsg ;
             }else {
                 String json = codeData.toJSONString();
-                DataCd93_A3Vo cvo = JSON.parseObject(json, DataCd93_A3Vo.class) ;
+                DataCd93_9D_A3Vo cvo = JSON.parseObject(json, DataCd93_9D_A3Vo.class) ;
                 if(cvo != null){
                     if(callback != null){
                         if(cvo.clResult != null && cvo.clResult == 0){
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA3/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA3/CdCtrl.java
index c7b5924..a2a4553 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA3/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA3/CdCtrl.java
@@ -4,12 +4,11 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.Command;
-import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_A3Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd93_9D_A3Vo;
 import com.dy.common.util.Callback;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
-import com.dy.pipIrrGlobal.voRm.VoUnclosedParam;
 import com.dy.pipIrrRemote.common.dto.DtoBase;
 import com.dy.pipIrrRemote.monitor.common.ComCtrl;
 import com.dy.pipIrrRemote.monitor.p202404V201.cd93.CdParam;
@@ -147,7 +146,7 @@
                 msg = RtuSuccessMsg ;
             }else {
                 String json = codeData.toJSONString();
-                DataCd93_A3Vo cvo = JSON.parseObject(json, DataCd93_A3Vo.class) ;
+                DataCd93_9D_A3Vo cvo = JSON.parseObject(json, DataCd93_9D_A3Vo.class) ;
                 if(cvo != null){
                     if(callback != null){
                         if(cvo.clResult != null && cvo.clResult == 0){

--
Gitblit v1.8.0