From 5683c6a1ee9839ce3d87265865ca9b284730b9f4 Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期二, 02 一月 2024 20:23:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java                        |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java              |   18 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd92Vo.java                |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd93Vo.java                |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java          |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java          |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Up.java            |   70 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java          |   97 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java                  |   22 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java                 |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java               |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClient.java                            |   13 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml                                      |   22 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java           |   70 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java               |  120 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockCtrl.java               |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java        |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java  |   11 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCardInfo.java                            |   31 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java                       |   60 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java       |  116 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/client/ClientCtrl.java               |   11 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java           |   66 +
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java             |   19 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java             |   15 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java |   71 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java          |   94 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java       |   28 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java                          |   56 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java          |  106 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java                |   16 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java                   |   36 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java                   |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java             |   32 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java            |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/clientType/ClientTypeCtrl.java       |   11 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/PipIrrProjectApplication.java  |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/QueryVo.java            |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeCtrl.java           |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                         |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossCtrl.java                   |    6 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Up.java            |   74 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java          |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideCtrl.java         |  147 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaDistrictMapper.xml                                    |   16 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java            |   61 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClient.java                |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java             |   34 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java                        |   84 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java                 |  156 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java                             |   66 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Up.java            |   70 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelCtrl.java               |   14 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java                |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java                     |   15 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java          |   98 +
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java   |   30 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                  |   51 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java          |   98 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Up.java            |   64 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java         |   33 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java         |   44 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd21Vo.java                |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java           |   33 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java                          |   42 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java               |   11 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java                 |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockCtrl.java                 |   11 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrDivideMapper.java                       |   20 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java      |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd10Vo.java                |   24 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaDistrictMapper.java                     |   13 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml                                      |  306 ++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java                              |   43 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/QueryVo.java                  |    6 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                  |  128 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java                   |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java                   |   23 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java                                    |   60 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java          |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java     |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClientToSeClient.java      |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalCtrl.java           |    4 
 83 files changed, 3,067 insertions(+), 297 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
index 32c3863..b633bba 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
@@ -3,18 +3,30 @@
 public class CodeV1_0_1 {
 	//鍔熻兘鐮佷负瀛楃涓诧紝鍗佸叚杩涘埗鏁版嵁
 	public static final String cd_02 = "02" ;//閬ユ祴绔欓摼璺娴�
+	public static final String cd_10 = "10" ;//璁剧疆閬ユ祴绔欑粓绔湴鍧�
+	public static final String cd_21 = "21" ;//璁剧疆鏈嶅姟绔疘P鍜岀鍙�
+	public static final String cd_50 = "50" ;//鏌ヨ閬ユ祴绔欑粓绔湴鍧�
+	public static final String cd_66 = "66" ;//鏌ヨ闃�闂ㄧ姸鎬�(闈虫�绘妸璇ュ懡浠よ璁℃垚鍙祴83鍔熻兘鐮佹暟鎹殑鍛戒护浜嗭紝鍥犱负杩欎釜鍛戒护鍥炴墽娌℃湁闃�闂ㄧ姸鎬佹暟鎹煙锛屾墍浠ヨ繖涓懡浠ゅ彧鑳戒綔涓哄彫娴嬪懡浠ょ敤浜�)
 	public static final String cd_71 = "71" ;//璁剧疆宸ヤ綔妯″紡锛堟潕澶╄祼鍒跺畾鐨勫崗璁紝褰撳墠鏈疄鐜帮級
 	public static final String cd_83 = "83" ;//閬ユ祴绔欏紑鍏抽榾鑷姤
 	public static final String cd_84 = "84" ;//寮�闃�宸ヤ綔鎶�
+	public static final String cd_92 = "92" ;//閬ユ帶鍚姩闃�闂�
+	public static final String cd_93 = "93" ;//閬ユ帶鍏抽棴闃�闂�
 	public static final String cd_C0 = "C0" ;//閬ユ祴绔欒嚜鎶ュ疄鏃舵暟鎹�
 
 	public static String getCodeName(String code) {
 		String name = (code.equals(cd_02) ? "閾捐矾妫�娴�" :
-			(code.equals(cd_71) ? "鏌ヨ闃�闂ㄧ姸鎬�" :
+			(code.equals(cd_10) ? "璁剧疆閬ユ祴绔欑粓绔湴鍧�" :
+			(code.equals(cd_21) ? "璁剧疆IP鍜岀鍙�" :
+			(code.equals(cd_50) ? "鏌ヨ閬ユ祴绔欑粓绔湴鍧�" :
+			(code.equals(cd_66) ? "鏌ヨ闃�闂ㄧ姸鎬�" :
+			(code.equals(cd_71) ? "璁剧疆宸ヤ綔妯″紡" :
 			(code.equals(cd_83) ? "寮�鍏抽榾鑷姤" :
 			(code.equals(cd_84) ? "寮�闃�宸ヤ綔鎶�" :
+			(code.equals(cd_92) ? "閬ユ帶鍚姩闃�闂�" :
+			(code.equals(cd_93) ? "閬ユ帶鍏抽棴闃�闂�" :
 			(code.equals(cd_C0) ? "鑷姤瀹炴椂鏁版嵁" :
-			""))))) ;
+			""))))))))))) ;
 		return name ;
 	}
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
index 1538331..a80528a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CommonV1_0_1.java
@@ -88,6 +88,24 @@
 		return rtuAddrBCD + rtuAddrStr ;
 	}
 
+
+	/**
+	 * 鍒嗘瀽Rtu鍦板潃
+	 * @param bs 涓婅瀛楄妭鏁扮粍
+	 * @param index 鍚浣�
+	 * @return 鎺у埗鍣ㄥ湴鍧�
+	 * @throws Exception 寮傚父
+	 */
+	public String parseRtuAddr(byte[] bs, int index)throws Exception{
+		String rtuAddrBCD = "" + ByteUtil.BCD2Long_BE(bs, index, index + 2) ;
+		String rtuAddrStr = "" + ByteUtilUnsigned.bytes2Short_BE(bs, index + 3) ;
+		while(rtuAddrStr.length() < 4){
+			rtuAddrStr = "0" + rtuAddrStr ;
+		}
+		return rtuAddrBCD + rtuAddrStr ;
+	}
+
+
 	/**
 	 * 鍒嗘瀽鍔熻兘鐮�
 	 * @param bs 涓婅瀛楄妭鏁扮粍
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd10Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd10Vo.java
new file mode 100644
index 0000000..8209317
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd10Vo.java
@@ -0,0 +1,24 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 11:28
+ * @LastEditTime 2023/12/25 11:28
+ * @Description
+ */
+@Data
+public class DataCd10Vo {
+    public String newRtuAddr ;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   璁惧RTU鍦板潃搴旂瓟:\n");
+        sb.append("      鏂板湴鍧�锛�");
+        sb.append(newRtuAddr);
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd21Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd21Vo.java
new file mode 100644
index 0000000..a3026fa
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd21Vo.java
@@ -0,0 +1,27 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 21:14
+ * @LastEditTime 2023/12/25 21:14
+ * @Description
+ */
+@Data
+public class DataCd21Vo {
+    public String ip ;
+    public Integer port ;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   璁剧疆IP搴旂瓟:\n");
+        sb.append("      IP锛�");
+        sb.append(ip);
+        sb.append("      绔彛锛�");
+        sb.append(port);
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd92Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd92Vo.java
new file mode 100644
index 0000000..fb2ee24
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd92Vo.java
@@ -0,0 +1,24 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 21:14
+ * @LastEditTime 2023/12/25 21:14
+ * @Description
+ */
+@Data
+public class DataCd92Vo {
+    public boolean success;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   寮�闃�搴旂瓟:\n");
+        sb.append("      缁撴灉锛�");
+        sb.append(success?"鎵ц":"澶辫触");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd93Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd93Vo.java
new file mode 100644
index 0000000..1365ee6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataCd93Vo.java
@@ -0,0 +1,24 @@
+package com.dy.common.mw.protocol.p206V1_0_0;
+
+import lombok.Data;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 21:14
+ * @LastEditTime 2023/12/25 21:14
+ * @Description
+ */
+@Data
+public class DataCd93Vo {
+    public boolean success;
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder() ;
+        sb.append("   鍏抽榾搴旂瓟:\n");
+        sb.append("      缁撴灉锛�");
+        sb.append(success?"鎵ц":"澶辫触");
+        sb.append("\n");
+
+        return sb.toString() ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java
index c8c3116..05e5b1c 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DataV1_0_1.java
@@ -10,11 +10,15 @@
 	public String rtuAddr ;//RtuAddr
 
 	public DataCd02Vo dataCd02Vo;//閾捐矾妫�娴�
-	public DataCdC0Vo dataCdC0Vo;//缁堢鑷姤瀹炴椂鏁版嵁
+	public DataCd10Vo dataCd10Vo;//璁剧疆RTU鍦板潃
+	public DataCd21Vo dataCd21Vo;//璁剧疆IP鍦板潃
+	public DataCd71Vo dataCd71Vo;//鏌ヨ闃�闂ㄧ姸鎬�
 	public DataCd83OpenVo dataCd83OpenVo;//寮�闃�鑷姤
 	public DataCd83CloseVo dataCd83CloseVo;//鍏抽榾鑷姤
 	public DataCd84Vo dataCd84Vo;//寮�闃�宸ヤ綔鎶�
-	public DataCd71Vo dataCd71Vo;//鏌ヨ闃�闂ㄧ姸鎬�
+	public DataCd92Vo dataCd92Vo;//寮�闃�搴旂瓟
+	public DataCd93Vo dataCd93Vo;//鍏抽榾搴旂瓟
+	public DataCdC0Vo dataCdC0Vo;//缁堢鑷姤瀹炴椂鏁版嵁
 
 	public String dt ;//閫氫俊涓棿浠朵骇鐢熷彂鎶ユ椂闂�(yyyy-MM-dd hh:mm:ss)
 
@@ -25,8 +29,14 @@
 		if(dataCd02Vo != null){
 			sb.append(dataCd02Vo.toString()) ;
 		}
-		if(dataCdC0Vo != null){
-			sb.append(dataCdC0Vo.toString()) ;
+		if(dataCd10Vo != null){
+			sb.append(dataCd10Vo.toString()) ;
+		}
+		if(dataCd21Vo != null){
+			sb.append(dataCd21Vo.toString()) ;
+		}
+		if(dataCd71Vo != null){
+			sb.append(dataCd71Vo.toString()) ;
 		}
 		if(dataCd83OpenVo != null){
 			sb.append(dataCd83OpenVo.toString()) ;
@@ -37,8 +47,14 @@
 		if(dataCd84Vo != null){
 			sb.append(dataCd84Vo.toString()) ;
 		}
-		if(dataCd71Vo != null){
-			sb.append(dataCd71Vo.toString()) ;
+		if(dataCd92Vo != null){
+			sb.append(dataCd92Vo.toString()) ;
+		}
+		if(dataCd93Vo != null){
+			sb.append(dataCd93Vo.toString()) ;
+		}
+		if(dataCdC0Vo != null){
+			sb.append(dataCdC0Vo.toString()) ;
 		}
 		return sb.toString() ;
 	}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java
new file mode 100644
index 0000000..e8eceb9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java
@@ -0,0 +1,98 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 11:11
+ * @LastEditTime 2023/12/25 11:11
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_10
+})
+public class Cd_10_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        if(para.param == null){
+            throw new Exception("鏈彁渚涘懡浠ゅ弬鏁版暟鎹紝涓嶈兘鏋勯�犲姛鑳界爜涓�" + CodeV1_0_1.cd_10 + "鐨勪笅琛屽懡浠�") ;
+        }else{
+            index = 0 ;
+            byte[] bs = new byte[12] ;
+            String newRtuAddr = (String)para.param ;
+            GlCreate.createRtuAddr(newRtuAddr, bs, index);
+            index += 5 ;
+            GlCreate.createPw(bs, index);
+            index += 2 ;
+            GlCreate.createTp(bs, index);
+            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+        }
+
+        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/p206V1_0_0/parse/Cd_10_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Up.java
new file mode 100644
index 0000000..30989c7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Up.java
@@ -0,0 +1,64 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 11:27
+ * @LastEditTime 2023/12/25 11:27
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1_0_1.cd_10
+})
+public class Cd_10_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_10_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1_0_1 para = (ParseParamsForUpV1_0_1)params ;
+        int bsLen = new CommonV1_0_1().parseDataLen(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        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);
+        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 {
+        DataV1_0_1 dV1 = (DataV1_0_1)data.getSubData() ;
+        DataCd10Vo cdData = new DataCd10Vo() ;
+        dV1.dataCd10Vo = cdData ;
+        cdData.newRtuAddr = new CommonV1_0_1().parseRtuAddr(bs, ProtocolConstantV206V1_0_0.dataIndex) ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java
new file mode 100644
index 0000000..6abb786
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java
@@ -0,0 +1,106 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 11:37
+ * @LastEditTime 2023/12/25 11:37
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_21
+})
+public class Cd_21_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        if(para.param == null){
+            throw new Exception("鏈彁渚涘懡浠ゅ弬鏁版暟鎹紝涓嶈兘鏋勯�犲姛鑳界爜涓�" + CodeV1_0_1.cd_21 + "鐨勪笅琛屽懡浠�") ;
+        }else{
+            index = 0 ;
+            byte[] bs = new byte[14] ;
+            String ipPort = (String)para.param ;
+            String[] ipPorts = ipPort.split(",") ;
+            ByteUtilUnsigned.short2Bytes_LE(bs, (byte) Integer.parseInt(ipPorts[0]), index++);
+            ByteUtilUnsigned.short2Bytes_LE(bs, (byte) Integer.parseInt(ipPorts[1]), index++);
+            ByteUtilUnsigned.short2Bytes_LE(bs, (byte) Integer.parseInt(ipPorts[2]), index++);
+            ByteUtilUnsigned.short2Bytes_LE(bs, (byte) Integer.parseInt(ipPorts[3]), index++);
+            ByteUtilUnsigned.short2Bytes_LE(bs, Integer.parseInt(ipPorts[4]), index);
+            index += 2 ;
+            GlCreate.createPw(bs, index);
+            index += 2 ;
+            GlCreate.createTp(bs, index);
+
+            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+        }
+
+        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/p206V1_0_0/parse/Cd_21_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Up.java
new file mode 100644
index 0000000..7a7948d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Up.java
@@ -0,0 +1,74 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import com.dy.common.util.ByteUtilUnsigned;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/25 13:40
+ * @LastEditTime 2023/12/25 13:40
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1_0_1.cd_21
+})
+@SuppressWarnings("unused")
+public class Cd_21_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_21_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1_0_1 para = (ParseParamsForUpV1_0_1)params ;
+        int bsLen = new CommonV1_0_1().parseDataLen(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        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);
+        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 {
+        DataV1_0_1 dV1 = (DataV1_0_1)data.getSubData() ;
+        DataCd21Vo cdData = new DataCd21Vo() ;
+        dV1.dataCd21Vo = cdData ;
+        short index = ProtocolConstantV206V1_0_0.dataIndex ;
+        String ip1 = "" +ByteUtilUnsigned.byte2Byte(bs, index++) ;
+        String ip2 = "" +ByteUtilUnsigned.byte2Byte(bs, index++) ;
+        String ip3 = "" +ByteUtilUnsigned.byte2Byte(bs, index++) ;
+        String ip4 = "" +ByteUtilUnsigned.byte2Byte(bs, index++) ;
+
+        cdData.ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4 ;
+
+        String port = "" +ByteUtilUnsigned.bytes2Short_LE(bs, index++) ;
+        cdData.port = Integer.parseInt(port) ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java
new file mode 100644
index 0000000..420acb8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java
@@ -0,0 +1,94 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/23 9:35
+ * @LastEditTime 2023/12/23 9:35
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_66
+})
+public class Cd_66_Down implements CodeParse {
+
+    //private static Logger log = LogManager.getLogger(Cd_66_Down.class);
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        if(para.param == null){
+            throw new Exception("鏈彁渚涘懡浠ゅ弬鏁版暟鎹紝涓嶈兘鏋勯�犲姛鑳界爜涓�" + CodeV1_0_1.cd_66 + "鐨勪笅琛屽懡浠�") ;
+        }else{
+            byte flag = ((Integer)para.param).byteValue() ;
+            byte[] bs = new byte[]{flag} ;
+            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+        }
+
+        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/p206V1_0_0/parse/Cd_66_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
new file mode 100644
index 0000000..d30dc83
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
@@ -0,0 +1,61 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/23 9:48
+ * @LastEditTime 2023/12/23 9:48
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1_0_1.cd_66
+})
+@SuppressWarnings("unused")
+public class Cd_66_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_66_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1_0_1 para = (ParseParamsForUpV1_0_1)params ;
+        int bsLen = new CommonV1_0_1().parseDataLen(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("鍒嗘瀽鍛戒护搴旂瓟鏁版嵁<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        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);
+        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 {
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
index d7a57f8..29289ca 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
@@ -21,7 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
-        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
index d99d3f9..459107a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
@@ -21,7 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
-        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
index 8326fb0..59b9b98 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
@@ -82,7 +82,6 @@
      * @throws Exception 寮傚父
      */
     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
-        short index = ProtocolConstantV206V1_0_0.dataIndex ;
         byte opType = bs[ProtocolConstantV206V1_0_0.dataIndex];
         if(opType == 1 || opType == 3 || opType == 8){
             this.doParseOpen(opType, bs, bsLen, dataCode, data);
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
index a90316a..1541de3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
@@ -21,7 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
-        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java
new file mode 100644
index 0000000..73b0961
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java
@@ -0,0 +1,97 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/26 8:49
+ * @LastEditTime 2023/12/26 8:49
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_92
+})
+public class Cd_92_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        if(para.param == null){
+            throw new Exception("鏈彁渚涘懡浠ゅ弬鏁版暟鎹紝涓嶈兘鏋勯�犲姛鑳界爜涓�" + CodeV1_0_1.cd_92 + "鐨勪笅琛屽懡浠�") ;
+        }else{
+            index = 0 ;
+            byte[] bs = new byte[9] ;
+            bs[index++] = (byte)0xF0 ;
+            GlCreate.createPw(bs, index);
+            index += 2 ;
+            GlCreate.createTp(bs, index);
+
+            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+        }
+
+        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/p206V1_0_0/parse/Cd_92_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Up.java
new file mode 100644
index 0000000..cb5ea08
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Up.java
@@ -0,0 +1,70 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/26 8:49
+ * @LastEditTime 2023/12/26 8:49
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1_0_1.cd_92
+})
+@SuppressWarnings("unused")
+public class Cd_92_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_92_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1_0_1 para = (ParseParamsForUpV1_0_1)params ;
+        int bsLen = new CommonV1_0_1().parseDataLen(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("鍒嗘瀽涓婅鏁版嵁<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        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);
+        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 {
+        DataV1_0_1 dV1 = (DataV1_0_1)data.getSubData() ;
+        DataCd92Vo cdData = new DataCd92Vo() ;
+        dV1.dataCd92Vo = cdData ;
+        String bin = ByteUtil.byte2Binary(bs[ProtocolConstantV206V1_0_0.dataIndex]);
+        if(bin.startsWith("1010")){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java
new file mode 100644
index 0000000..40dbd6c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java
@@ -0,0 +1,98 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/26 8:50
+ * @LastEditTime 2023/12/26 8:50
+ * @Description
+ */
+@AnnotationCodeDown(ifAny={
+        CodeV1_0_1.cd_93
+})
+public class Cd_93_Down implements CodeParse {
+
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback) throws Exception {
+        ParseParamsForDownV1_0_1 para = (ParseParamsForDownV1_0_1) params ;
+        byte[] bs = this.doParse(para) ;
+
+        MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
+        midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
+        midRs.downCode = para.commandCode ;//涓嬭鍛戒护鍔熻兘鐮�;
+        midRs.downBuffer = bs ;//涓嬭鍛戒护鏁版嵁
+        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//涓嬭鍛戒护鏁版嵁鍗佸叚杩涘埗褰㈠紡
+        midRs.hasResponse = true ;//鏄惁鏈夊簲绛�
+        midRs.maxSendTimes = null ;//鍛戒护鏈�澶у彂閫佹鏁�(褰撴敹涓嶅埌搴旂瓟鏃讹紝灏嗛噸鍙�)锛屽鏋滀笉璁剧疆锛屽懡浠ょ紦瀛樺櫒杩涜琛ュ厖璁剧疆
+        midRs.isCachForOffLine = false ;//RTU涓嶅湪绾匡紝鍛戒护鏄惁缂撳瓨锛屼綆鍔熻�楁椂涓簍rue
+
+        if(isLowPower != null && isLowPower.booleanValue()){
+            //浣庡姛鑰楁椂锛屽敖蹇彂閫�
+            midRs.isQuickSend = true ;
+        }
+
+        return new MidResult[]{midRs} ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @param para 鍙傛暟
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
+
+        if(para.param == null){
+            throw new Exception("鏈彁渚涘懡浠ゅ弬鏁版暟鎹紝涓嶈兘鏋勯�犲姛鑳界爜涓�" + CodeV1_0_1.cd_93 + "鐨勪笅琛屽懡浠�") ;
+        }else{
+            index = 0 ;
+            byte[] bs = new byte[9] ;
+            bs[index++] = (byte)0xF0 ;
+            GlCreate.createPw(bs, index);
+            index += 2 ;
+            GlCreate.createTp(bs, index);
+
+            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+        }
+
+        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/p206V1_0_0/parse/Cd_93_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Up.java
new file mode 100644
index 0000000..8b21185
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Up.java
@@ -0,0 +1,70 @@
+package com.dy.common.mw.protocol.p206V1_0_0.parse;
+
+import com.dy.common.mw.protocol.*;
+import com.dy.common.mw.protocol.p206V1_0_0.*;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/26 8:49
+ * @LastEditTime 2023/12/26 8:49
+ * @Description
+ */
+@AnnotationCodeUp(ifAny={
+        CodeV1_0_1.cd_93
+})
+@SuppressWarnings("unused")
+public class Cd_93_Up implements CodeParse {
+
+    private static final Logger log = LogManager.getLogger(Cd_93_Up.class);
+
+    /**
+     * 鍒嗘瀽涓婅鏁版嵁
+     */
+    @Override
+    public MidResult[] parse(Boolean isLowPower, CodeParseParams params, CodeParseCallback callback)throws Exception {
+        ParseParamsForUpV1_0_1 para = (ParseParamsForUpV1_0_1)params ;
+        int bsLen = new CommonV1_0_1().parseDataLen(para.upBuffer) ;
+        if(bsLen > 0){
+            this.doParse(para.upBuffer,
+                    bsLen,
+                    para.upCode,
+                    para.data) ;
+        }
+        log.info("鍒嗘瀽涓婅鏁版嵁<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU鍦板潃=" + para.rtuAddr + ">:\n" + para.data.toString());
+
+        MidResultFromRtu midRs = new MidResultFromRtu() ;
+        midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
+        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);
+        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 {
+        DataV1_0_1 dV1 = (DataV1_0_1)data.getSubData() ;
+        DataCd93Vo cdData = new DataCd93Vo() ;
+        dV1.dataCd93Vo = cdData ;
+        String bin = ByteUtil.byte2Binary(bs[ProtocolConstantV206V1_0_0.dataIndex]);
+        if(bin.startsWith("1010")){
+            cdData.success = true ;
+        }else{
+            cdData.success = false ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
index 28ab71f..cba13dd 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
@@ -21,7 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
-        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java
index 2567d99..b830c19 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/global/GlCreate.java
@@ -19,6 +19,11 @@
         ByteUtilUnsigned.short2Bytes_BE(bs, rtuAddr2Int.shortValue(), index);
     }
 
+    public static void createPw(byte[] bs, int index) throws Exception {
+        bs[index] = 0;
+        bs[index + 1] = 0;
+    }
+
     public static void createTp(byte[] bs, int index) throws Exception {
         ByteUtil.string2BCD_LE(bs, DateTime.yyMMddhhmmss(), index) ;
     }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
index ce00ba0..7fe22e9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
@@ -33,9 +33,8 @@
 	 * @param index 涓嬫爣浣�
 	 * @param len 闀垮害
 	 * @return 杩斿洖 杩斿洖
-	 * @throws Exception 寮傚父
 	 */
-	public static boolean bytesIsAll0xFF(byte[] bs, int index, int len)throws Exception {
+	public static boolean bytesIsAll0xFF(byte[] bs, int index, int len){
 		int count = 0 ;
 		for(int i = index; i < index + len; i++){
 			if(bs[i] == (byte)0xFF){
@@ -47,26 +46,11 @@
 
 	/**
 	 * 浜岃繘鍒惰浆鍗佽繘鍒舵暟
-	 * @param str
+	 * @param str 浜岃繘鍒跺瓧绗︿覆
 	 * @return 杩斿洖
-	 * @throws Exception 寮傚父
 	 */
-	public static int binary2Int(String str) throws Exception {
-        int cnt=0;
-        int sum=0;
-        str=new StringBuilder(str).reverse().toString();//鍙嶈浆瀛楃涓�
-        for(int i=0;i<str.length();i++){
-            cnt++;
-            if (str.charAt(i)=='1'){
-                int mul=1;
-                for (int j=1;j<cnt;j++){
-                    mul*=2;
-                }
-                sum+=mul;
-            }
-            else continue;
-        }
-        return sum;
+	public static int binary2Int(String str) {
+		return Integer.parseInt(str, 2);
     }
 
 
@@ -74,26 +58,18 @@
 	 * 瀛楄妭杞瓨浜岃繘鍒�
 	 *
 	 * @param b byte
-	 * @throws Exception 寮傚父
 	 * @return 杩斿洖 String
 	 */
-	public static String byte2Binary(byte b) throws Exception {
-		int n = (b + 256) % 256 + 256;
-		try {
-			return Integer.toBinaryString(n).substring(1);
-		} catch (Exception e) {
-			throw new Exception("瀛楄妭杞崲鎴愪簩杩涘埗鐨勫瓧绗︿覆鍑洪敊锛�", null);
-		}
+	public static String byte2Binary(byte b) {
+		return Integer.toBinaryString(b & 0xFF) ;
 	}
 	/**
 	 * 瀛楄妭杞瓨8浣嶄簩杩涘埗
 	 *
-	 * @param b
-	 *            byte
-	 * @throws Exception 寮傚父
+	 * @param b  byte
 	 * @return 杩斿洖 String
 	 */
-	public static String byte2bit8Binary(byte b) throws Exception {
+	public static String byte2bit8Binary(byte b) {
 		String s = byte2Binary(b);
 		int len = s.length();
 		for (int i = 0; i < 8 - len; i++) {
@@ -103,13 +79,11 @@
 	}
 
 	/**
-	 * 瀛楄妭鍙朾it
-	 * @param b
-	 * @param b
-	 * @throws Exception 寮傚父
+	 * 瀛楄妭鏁� 鍙栧嚭8涓猙it
+	 * @param b 瀛楄妭鏁�
 	 * @return 杩斿洖 String
 	 */
-	public static byte[] getBit(byte b) throws Exception {
+	public static byte[] getBit(byte b) {
 		byte[] bs = new byte[8] ;
 		bs[0] = (byte)(b & 1) ;
 		bs[1] = (byte)((b & 2) >> 1) ;
@@ -123,8 +97,8 @@
 	}
 
 	/**
-	 * 瀛楄妭鍙朾it
-	 * @param b
+	 * 瀛楄妭鏁� 鍙栧嚭bit
+	 * @param b 瀛楄妭鏁�
 	 * @param index 涓嬫爣浣�
 	 * @throws Exception 寮傚父
 	 * @return 杩斿洖 String
@@ -178,8 +152,7 @@
 	public static void double2Bytes_BE(byte[] bs, double value, int from)throws Exception {
 		boolean b = isOutOfArrLength(bs.length, (from - 1) + 8);
 		if (b) {
-			Long l = Double.doubleToLongBits(value);
-			long2Bytes_BE(bs, l, from);
+			long2Bytes_BE(bs, Double.doubleToLongBits(value), from);
 		} else {
 			throw new Exception("double2Bytes鏃舵暟缁勮秺鐣�");
 		}
@@ -195,8 +168,7 @@
 	public static void double2Bytes_LE(byte[] bs, double value, int from)throws Exception {
 		boolean b = isOutOfArrLength(bs.length, (from - 1) + 8);
 		if (b) {
-			Long l = Double.doubleToLongBits(value);
-			long2Bytes_LE(bs, l, from);
+			long2Bytes_LE(bs, Double.doubleToLongBits(value), from);
 		} else {
 			throw new Exception("double2Bytes鏃舵暟缁勮秺鐣�");
 		}
@@ -452,7 +424,7 @@
 		boolean b = isOutOfArrLength(bs.length, (from - 1) + 8);
 		if (b) {
 			long s = 0;
-			long s0 = bs[from + 0] ;// 鏈�浣庝綅
+			long s0 = bs[from] ;// 鏈�浣庝綅
 			long s1 = bs[from + 1] ;
 			long s2 = bs[from + 2] ;
 			long s3 = bs[from + 3] ;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaDistrictMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaDistrictMapper.java
index b941586..bf05ee2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaDistrictMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaDistrictMapper.java
@@ -82,4 +82,17 @@
      */
     Map getDistrictsByVillageId(@Param("villageId") Long villageId);
 
+    /**
+     * 鏍规嵁绾у埆鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param level 琛屾斂鍖哄垝灞傜骇
+     * @return 琛屾斂鍖哄垝鍒楄〃
+     */
+    List<Map<String, Object>> getDistrictgsByLevel(@Param("level") Integer level);
+
+    /**
+     * 鏍规嵁鐖禝D鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param supperId 琛屾斂鍖哄垝鐖剁骇ID
+     * @return 琛屾斂鍖哄垝鍒楄〃
+     */
+    List<Map<String, Object>> getDistrictsBySupperId(@Param("supperId") Long supperId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
new file mode 100644
index 0000000..bf30cae
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.daoPr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 9:59
+ * @LastEditTime 2023-12-29 9:59
+ * @Description
+ */
+
+@Mapper
+public interface PrControllerMapper extends BaseMapper<PrController> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(PrController record);
+
+    int insertSelective(PrController record);
+
+    PrController selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(PrController record);
+
+    int updateByPrimaryKey(PrController record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrDivideMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrDivideMapper.java
index 5eb7697..c267e59 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrDivideMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrDivideMapper.java
@@ -1,7 +1,10 @@
 package com.dy.pipIrrGlobal.daoPr;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrDivide;
 import com.dy.pipIrrGlobal.voPr.VoDivide;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -12,7 +15,8 @@
  * @LastEditTime 2023/12/21 9:16
  * @Description
  */
-public interface PrDivideMapper {
+@Mapper
+public interface PrDivideMapper extends BaseMapper<PrDivide> {
     int deleteByPrimaryKey(Long id);
 
     int insert(PrDivide record);
@@ -38,4 +42,18 @@
      * @return
      */
     List<VoDivide> getDivides(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鍒嗘按鎴縄D閫昏緫鍒犻櫎鍒嗘按鎴�
+     * @param id
+     * @return
+     */
+    Integer deleteDivideById(@Param("id") Long id);
+
+    /**
+     * 鏍规嵁鍒嗘按鎴跨紪鍙疯幏鍙栨墍灞炵墖鍖虹紪鍙�
+     * @param divideId
+     * @return
+     */
+    Long getBlockIdById(@Param("divideId") Long divideId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
index fdd551b..946c184 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -2,9 +2,11 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.voSe.VoCardInfo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -56,4 +58,38 @@
      */
     Map getCardIdAndClientNum(@Param("cardNum") String cardNum);
 
+    /**
+     * 鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃
+     * @param clientId
+     * @return
+     */
+    List<VoCardInfo> getCardInfoByClientId(@Param("clientId") Long clientId);
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍒楄〃
+     * @param cardNum 姘村崱缂栧彿
+     * @return 姘村崱鎿嶄綔璁板綍鍒楄〃
+     */
+    List<Map<String, Object>> getOperateRecordsByCardNum(@Param("cardNum") Long cardNum);
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇浣欓
+     * @param cardNum 姘村崱缂栧彿
+     * @return 浣欓
+     */
+    Float getMoneyByCardNum(@Param("cardNum") Long cardNum);
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍏呭�兼�婚
+     * @param cardNum
+     * @return
+     */
+    Float sumRechargeByCardNum(@Param("cardNum") Long cardNum);
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��
+     * @param cardNum
+     * @return
+     */
+    String getCardStateByCardNum(@Param("cardNum") Long cardNum);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
index 304af36..44e1e11 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientMapper.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
 import com.dy.pipIrrGlobal.voSe.VoClient;
+import com.dy.pipIrrGlobal.voSe.VoOperate;
+import com.dy.pipIrrGlobal.voSe.VoStatistics;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -11,8 +13,8 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2023/12/22 9:50
- * @LastEditTime 2023/12/22 9:50
+ * @date 2023-12-26 10:32
+ * @LastEditTime 2023-12-26 10:32
  * @Description
  */
 
@@ -78,4 +80,58 @@
      * @return 鏉戜富閿�
      */
     Long getVillageIdById(@Param("id") Long id);
+
+    /**
+     * 鑾峰彇铏氭嫙鍗″彿鏈�澶у��
+     * @return
+     */
+    Long getMa1xVirtualId();
+
+    /**
+     * 鑾峰彇鐢ㄦ按鏂瑰紡鍒楄〃
+     * @return
+     */
+    List<Map<String, Object>> getWaterTypes();
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨��
+     * @param params 缁熻鏉′欢
+     * @return 璐按閲戦銆佽喘鍗¢噾棰�
+     */
+    Map getSums(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎿嶄綔璁板綍鏁�
+     * @param params 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勮褰曟暟
+     */
+    Long getOperateRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎿嶄綔璁板綍
+     * @param params 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勪氦鏄撹褰�
+     */
+    List<VoOperate> getOperates(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗绗旀暟姹囨�诲拰浜ゆ槗閲戦姹囨��
+     * @param params
+     * @return
+     */
+    Map getStatisticSums(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姹囨�昏褰曟暟
+     * @param params
+     * @return
+     */
+    Long getStatisticRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍
+     * @param params
+     * @return
+     */
+    List<VoStatistics> getStatistics(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java
new file mode 100644
index 0000000..481982a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrController.java
@@ -0,0 +1,84 @@
+package com.dy.pipIrrGlobal.pojoPr;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 9:59
+ * @LastEditTime 2023-12-29 9:59
+ * @Description
+ */
+
+/**
+ * 鎺у埗鍣ㄨ〃
+ */
+
+@TableName(value="pr_controller", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎺у埗鍣ㄥ疄浣�")
+public class PrController implements BaseEntity {
+    public static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+    * 缂栧彿
+    */
+    @Schema(description = "缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "鎺у埗鍣ㄧ紪鍙蜂笉鑳戒负绌�")
+    @Length(message = "鎺у埗鍣ㄧ紪鍙蜂笉澶т簬{max}瀛�",max = 25)
+    private String code;
+
+    /**
+    * 閫氳鍗忚
+    */
+    @Schema(description = "閫氳鍗忚", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "閫氳鍗忚涓嶈兘涓虹┖")
+    @Length(message = "閫氳鍗忚涓嶅ぇ浜巤max}瀛�",max = 25)
+    private String protocol;
+
+    /**
+    * 娣诲姞鏂瑰紡;1-绯荤粺鑷姩锛�2-鎵嬪姩
+    */
+    @Schema(description = "娣诲姞鏂瑰紡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Byte addways;
+
+    /**
+    * 鎿嶄綔浜虹紪鍙�
+    */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long operator;
+
+    /**
+    * 鎿嶄綔鏃堕棿
+    */
+    @Schema(description = "鎿嶄綔鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date operatedt;
+
+    /**
+    * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
+    */
+    @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Byte deleted;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClient.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClient.java
index 250d9d4..e61a205 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClient.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClient.java
@@ -89,6 +89,13 @@
     private String name;
 
     /**
+     * 铏氭嫙鍗″彿;10浣嶏紝浠�1000000000寮�濮�
+     */
+    @Schema(description = "铏氭嫙鍗″彿", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "铏氭嫙鍗″彿涓嶈兘涓虹┖")
+    private Long virtualid;
+
+    /**
      * 鍐滄埛缂栧彿;6浣嶅尯鍒� + 4涓洪『搴忓彿
      */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
@@ -134,6 +141,12 @@
     private Double area;
 
     /**
+     * 鐢ㄦ按绫诲瀷ID
+     */
+    @Schema(description = "鐢ㄦ按绫诲瀷ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long typeid;
+
+    /**
      * 琛楅亾鍙婇棬鐗屽彿
      */
     @Schema(description = "琛楅亾+闂ㄧ墝鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
index 304f837..6eaa503 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeClientCard.java
@@ -69,7 +69,7 @@
      * 浣欓
      */
     @Schema(description = "浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Double money;
+    private Float money;
 
     /**
      * 鍗$墖鐘舵��;1-姝e父锛�2-宸叉敞閿�锛�3-宸叉寕澶�
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
new file mode 100644
index 0000000..1d632e8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
@@ -0,0 +1,56 @@
+package com.dy.pipIrrGlobal.voPr;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 10:27
+ * @LastEditTime 2023-12-29 10:27
+ * @Description
+ */
+
+@Data
+@Schema(title = "鎺у埗鍣ㄨ鍥惧璞�")
+public class VoController implements BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(title = "ID")
+    @ExcelProperty("ID")
+    @ColumnWidth(10)
+    private Long id;
+
+    @Schema(title = "鎺у埗鍣ㄧ紪鍙�")
+    @ExcelProperty("鎺у埗鍣ㄧ紪鍙�")
+    @ColumnWidth(15)
+    private String code;
+
+    @Schema(title = "鍦ㄧ嚎鐘舵��")
+    @ExcelProperty("鍦ㄧ嚎鐘舵��")
+    @ColumnWidth(15)
+    private String state;
+
+    @Schema(title = "缁戝畾鍙栨按鍙�")
+    @ExcelProperty("缁戝畾鍙栨按鍙�")
+    @ColumnWidth(10)
+    private String intakeName;
+
+    @Schema(title = "缁戝畾娆℃暟")
+    @ExcelProperty("缁戝畾娆℃暟")
+    @ColumnWidth(10)
+    private Integer bindings;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(title = "鏈�杩戜笂鎶ユ椂闂�")
+    @ExcelProperty("鏈�杩戜笂鎶ユ椂闂�")
+    @ColumnWidth(30)
+    private Date operateDt;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCardInfo.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCardInfo.java
new file mode 100644
index 0000000..509eb17
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoCardInfo.java
@@ -0,0 +1,31 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-27 19:22
+ * @LastEditTime 2023-12-27 19:22
+ * @Description
+ */
+
+@Data
+@Schema(title = "IC鍗¤鍥惧璞�")
+public class VoCardInfo implements BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private Long cardNum;
+
+    @Schema(title = "鍗$墖绫诲瀷")
+    private String cardType;
+
+    @Schema(title = "浣欓")
+    private Float money;
+
+    @Schema(title = "姘村崱鐘舵��")
+    private String state;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java
index 2a1cf2d..76fe8c1 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoClient.java
@@ -23,6 +23,39 @@
     @Schema(title = "ID")
     private Long id;
 
+    @Schema(title = "鍘縄D")
+    private String countyId;
+    @Schema(title = "鍘垮悕绉�")
+    private String countryName;
+
+    @Schema(title = "闀嘔D")
+    private String townId;
+    @Schema(title = "闀囧悕绉�")
+    private String townName;
+
+    @Schema(title = "鏉慖D")
+    private String villageId;
+    @Schema(title = "鏉戝悕绉�")
+    private String villageName;
+
+    @Schema(title = "鐗囧尯ID")
+    private String blockId;
+    @Schema(title = "鐗囧尯鍚嶇О")
+    private String bolckName;
+
+    @Schema(title = "鍒嗘按鎴縄D")
+    private String divideId;
+    @Schema(title = "鍒嗘按鎴垮悕绉�")
+    private String divideName;
+
+    @Schema(title = "鐢ㄦ埛绫诲瀷ID")
+    private String waterTypeId;
+    @Schema(title = "鐢ㄦ埛绫诲瀷鍚嶇О")
+    private String waterTypeName;
+
+    @Schema(title = "鍐滄埛ID")
+    private String clientId;
+
     @Schema(title = "鍐滄埛濮撳悕")
     private String name;
 
@@ -33,7 +66,10 @@
     private String phone;
 
     @Schema(title = "韬唤璇佸彿")
-    private String idCard;
+    private String idcard;
+
+    @Schema(title = "绉嶆闈㈢Н")
+    private Double area;
 
     @Schema(title = "鍗$墖鏁伴噺")
     private Integer cardCount;
@@ -41,10 +77,11 @@
     @Schema(title = "鍦板潃")
     private String address;
 
+    @Schema(title = "澶囨敞")
+    private String remarks;
+
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @Schema(title = "娉ㄥ唽鏃堕棿")
     private Date operateDt;
-
-
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java
new file mode 100644
index 0000000..711ea95
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoOperate.java
@@ -0,0 +1,66 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-26 20:44
+ * @LastEditTime 2023-12-26 20:44
+ * @Description
+ */
+
+@Data
+@Schema(title = "鎿嶄綔璁板綍瑙嗗浘瀵硅薄")
+public class VoOperate implements BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(title = "鏉慖D")
+    private Long villageId;
+
+    @Schema(title = "鍖哄垝鍚嶇О涓�")
+    private String districtTitle;
+
+    @Schema(title = "鍐滄埛缂栧彿")
+    private String clientNum;
+
+    @Schema(title = "鍐滄埛濮撳悕")
+    private String name;
+
+    @Schema(title = "姘村崱缂栧彿")
+    private Long cardNum;
+
+    @Schema(title = "韬唤璇佸彿")
+    private String idCard;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鍏呭�奸噾棰�")
+    private Float money;
+
+    @Schema(title = "璐崱閲戦")
+    private Integer cardCost;
+
+    @Schema(title = "鏀粯鏂瑰紡缂栧彿")
+    private Long paymentId;
+
+    @Schema(title = "鏀粯鏂瑰紡鍚嶇О")
+    private String paymentMethod;
+
+    @Schema(title = "涓氬姟绫诲瀷")
+    private String operateType;
+
+    @Schema(title = "浜ゆ槗鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date operateDt;
+
+    @Schema(title = "鎿嶄綔鍛�")
+    private String operatorName;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java
new file mode 100644
index 0000000..a003b59
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoStatistics.java
@@ -0,0 +1,42 @@
+package com.dy.pipIrrGlobal.voSe;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-27 15:01
+ * @LastEditTime 2023-12-27 15:01
+ * @Description
+ */
+
+@Data
+@Schema(title = "浜ゆ槗姹囨�昏鍥惧璞�")
+public class VoStatistics implements BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(title = "鏉戝簞ID")
+    private Long villageId;
+
+    @Schema(title = "鏉戝簞")
+    private String districtTitle;
+
+    @Schema(title = "涓氬姟绫诲瀷")
+    private String operateType;
+
+    @Schema(title = "浜ゆ槗鏃ユ湡")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date operateDt;
+
+    @Schema(title = "浜ゆ槗绗旀暟")
+    private Integer count;
+
+    @Schema(title = "浜ゆ槗閲戦")
+    private Float money;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 7e13709..b1b3f1f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -110,4 +110,12 @@
     project:
         webPort: 8085
         actutorPort: 9085
-        idSuffix: 7
\ No newline at end of file
+        idSuffix: 7
+
+#椤圭洰缂栧彿
+projectCode:
+    ym: 100
+    pj: 101
+
+#閫氳鍗忚
+protocol: DYJS_2023,DYJS_2024
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaDistrictMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaDistrictMapper.xml
index 23dd4ce..c011351 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaDistrictMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaDistrictMapper.xml
@@ -165,4 +165,20 @@
         INNER JOIN ba_district pro ON cit.supperId = pro.id
     WHERE vil.id = ${villageId}
   </select>
+
+    <!--鏍规嵁绾у埆鑾峰彇琛屾斂鍖哄垝鍒楄〃-->
+    <select id="getDistrictgsByLevel" resultType="java.util.Map">
+        SELECT
+            CAST(id AS char) AS id,
+            name
+        FROM ba_district WHERE `level` = ${level}
+    </select>
+
+    <!--鏍规嵁鐖禝D鑾峰彇琛屾斂鍖哄垝鍒楄〃-->
+    <select id="getDistrictsBySupperId" resultType="java.util.Map">
+        SELECT
+            CAST(id AS char) AS id,
+            name
+        FROM ba_district WHERE supperId = ${supperId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
new file mode 100644
index 0000000..9781e59
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoPr.PrControllerMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrController">
+    <!--@mbg.generated-->
+    <!--@Table pr_controller-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="code" jdbcType="VARCHAR" property="code" />
+    <result column="protocol" jdbcType="VARCHAR" property="protocol" />
+    <result column="addWays" jdbcType="TINYINT" property="addways" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operateDt" jdbcType="TIMESTAMP" property="operatedt" />
+    <result column="deleted" jdbcType="TINYINT" property="deleted" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, code, protocol, addWays, `operator`, operateDt, deleted
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from pr_controller
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from pr_controller
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    <!--@mbg.generated-->
+    insert into pr_controller (id, code, protocol, 
+      addWays, `operator`, operateDt, 
+      deleted)
+    values (#{id,jdbcType=BIGINT}, #{code,jdbcType=VARCHAR}, #{protocol,jdbcType=VARCHAR}, 
+      #{addways,jdbcType=TINYINT}, #{operator,jdbcType=BIGINT}, #{operatedt,jdbcType=TIMESTAMP}, 
+      #{deleted,jdbcType=TINYINT})
+  </insert>
+
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    <!--@mbg.generated-->
+    insert into pr_controller
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="code != null">
+        code,
+      </if>
+      <if test="protocol != null">
+        protocol,
+      </if>
+      <if test="addways != null">
+        addWays,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operatedt != null">
+        operateDt,
+      </if>
+      <if test="deleted != null">
+        deleted,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="code != null">
+        #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="protocol != null">
+        #{protocol,jdbcType=VARCHAR},
+      </if>
+      <if test="addways != null">
+        #{addways,jdbcType=TINYINT},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operatedt != null">
+        #{operatedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        #{deleted,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    <!--@mbg.generated-->
+    update pr_controller
+    <set>
+      <if test="code != null">
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="protocol != null">
+        protocol = #{protocol,jdbcType=VARCHAR},
+      </if>
+      <if test="addways != null">
+        addWays = #{addways,jdbcType=TINYINT},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operatedt != null">
+        operateDt = #{operatedt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    <!--@mbg.generated-->
+    update pr_controller
+    set code = #{code,jdbcType=VARCHAR},
+      protocol = #{protocol,jdbcType=VARCHAR},
+      addWays = #{addways,jdbcType=TINYINT},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operateDt = #{operatedt,jdbcType=TIMESTAMP},
+      deleted = #{deleted,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
index d9b4ac4..d3d19f3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrDivideMapper.xml
@@ -227,8 +227,9 @@
       lat = #{lat,jdbcType=DOUBLE},
       remarks = #{remarks,jdbcType=VARCHAR},
       `operator` = #{operator,jdbcType=BIGINT},
-      operateDt = #{operatedt,jdbcType=TIMESTAMP},
-      deleted = #{deleted,jdbcType=TINYINT}
+      operateDt = #{operatedt,jdbcType=TIMESTAMP}
+<!--    ,-->
+<!--      deleted = #{deleted,jdbcType=TINYINT}-->
     where id = #{id,jdbcType=BIGINT}
   </update>
 
@@ -243,6 +244,7 @@
         INNER JOIN ba_district village ON divi.villageid = village.id
         , (SELECT @i:=0) AS itable
     <where>
+      AND divi. deleted = 0
       <if test = "divideName != null and divideName !=''">
         AND divi.name LIKE CONCAT('%',#{divideName},'%')
       </if>
@@ -270,6 +272,7 @@
         INNER JOIN ba_district village ON divi.villageid = village.id
         , (SELECT @i:=0) AS itable
     <where>
+      AND divi. deleted = 0
       <if test = "divideName != null and divideName !=''">
         AND divi.name LIKE CONCAT('%',#{divideName},'%')
       </if>
@@ -284,4 +287,19 @@
     </if>
   </select>
 
+  <!--鏍规嵁鍒嗘按鎴縄D閫昏緫鍒犻櫎鍒嗘按鎴�-->
+  <update id="deleteDivideById" parameterType="java.lang.Long">
+    update pr_divide set deleted = 1
+    <where>
+      <if test = "id != null and id > 0">
+        AND id = ${id}
+      </if>
+    </where>
+  </update>
+
+  <!--鏍规嵁鍒嗘按鎴跨紪鍙疯幏鍙栨墍灞炵墖鍖虹紪鍙�-->
+  <select id="getBlockIdById" resultType="java.lang.Long">
+    SELECT blockId FROM pr_divide WHERE id = ${divideId}}
+  </select>
+
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
index 4bf5062..e5bb9af 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -257,4 +257,55 @@
       remarks = #{remarks,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <!--鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃-->
+  <select id="getCardInfoByClientId" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo">
+    SELECT
+        cardNum,
+        '鐢ㄦ埛鍗�' AS cardType,
+        money,
+        (CASE
+            WHEN state = 1 THEN "姝e父"
+            WHEN state = 2 THEN "宸叉敞閿�"
+            ELSE "宸叉寕澶�"
+        END) AS state
+    FROM se_client_card
+    WHERE clientId = ${clientId}
+  </select>
+
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍒楄〃-->
+  <select id="getOperateRecordsByCardNum" resultType="java.util.HashMap">
+    SELECT * FROM v_operate WHERE cardNum = ${cardNum}
+  </select>
+
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇浣欓-->
+  <select id="getMoneyByCardNum" resultType="java.lang.Float">
+    SELECT money FROM se_client_card WHERE cardNum = ${cardNum}
+  </select>
+
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍏呭�兼�婚-->
+  <select id="sumRechargeByCardNum" resultType="java.lang.Float">
+    SELECT
+      SUM(his.amount) AS amount
+    FROM se_recharge_history his
+        INNER JOIN se_client_card card ON his.cardId = card.id
+    WHERE card.cardNum = ${cardNum}
+  </select>
+
+  <!--鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵�侊細1-寮�鍗★紝2-琛ュ崱锛�3-鍏呭�硷紝4-鎸傚け锛�5-娉ㄩ攢锛�6-瑙i攣锛�7-鍐叉锛�8-娑堣垂-->
+  <select id="getCardStateByCardNum" resultType="java.lang.String">
+    SELECT
+      (CASE
+         WHEN lastOper = 1 THEN "寮�鍗�"
+         WHEN lastOper = 2 THEN "琛ュ崱"
+         WHEN lastOper = 3 THEN "鍏呭��"
+         WHEN lastOper = 4 THEN "鎸傚け"
+         WHEN lastOper = 5 THEN "娉ㄩ攢"
+         WHEN lastOper = 6 THEN "瑙i攣"
+         WHEN lastOper = 7 THEN "鍐叉"
+         WHEN lastOper = 8 THEN "娑堣垂"
+        END) AS stateName
+    FROM se_client_card
+    WHERE cardNum = ${cardNum}
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
index ce8f63e..c41166f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientMapper.xml
@@ -11,12 +11,14 @@
     <result column="blockId" jdbcType="BIGINT" property="blockid" />
     <result column="divideId" jdbcType="BIGINT" property="divideid" />
     <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="virtualId" jdbcType="BIGINT" property="virtualid" />
     <result column="clientNum" jdbcType="VARCHAR" property="clientnum" />
     <result column="districtNum" jdbcType="BIGINT" property="districtnum" />
     <result column="districtTitle" jdbcType="VARCHAR" property="districttitle" />
     <result column="phone" jdbcType="VARCHAR" property="phone" />
     <result column="idCard" jdbcType="VARCHAR" property="idcard" />
     <result column="area" jdbcType="DOUBLE" property="area" />
+    <result column="typeId" jdbcType="BIGINT" property="typeid" />
     <result column="address" jdbcType="VARCHAR" property="address" />
     <result column="remarks" jdbcType="VARCHAR" property="remarks" />
     <result column="operator" jdbcType="BIGINT" property="operator" />
@@ -26,9 +28,9 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, countyId, townId, villageId, blockId, divideId, `name`, clientNum, districtNum, 
-    districtTitle, phone, idCard, area, address, remarks, `operator`, operateDt, disabled, 
-    deleted
+    id, countyId, townId, villageId, blockId, divideId, `name`, virtualId, clientNum, 
+    districtNum, districtTitle, phone, idCard, area, typeId, address, remarks, `operator`, 
+    operateDt, disabled, deleted
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -42,23 +44,27 @@
     delete from se_client
     where id = #{id,jdbcType=BIGINT}
   </delete>
+
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClient">
     <!--@mbg.generated-->
     insert into se_client (id, countyId, townId, 
       villageId, blockId, divideId, 
-      `name`, clientNum, districtNum, 
-      districtTitle, phone, idCard, 
-      area, address, remarks, 
-      `operator`, operateDt, disabled, 
-      deleted)
+      `name`, virtualId, clientNum, 
+      districtNum, districtTitle, phone, 
+      idCard, area, typeId, 
+      address, remarks, `operator`, 
+      operateDt, disabled, deleted
+      )
     values (#{id,jdbcType=BIGINT}, #{countyid,jdbcType=BIGINT}, #{townid,jdbcType=BIGINT}, 
       #{villageid,jdbcType=BIGINT}, #{blockid,jdbcType=BIGINT}, #{divideid,jdbcType=BIGINT}, 
-      #{name,jdbcType=VARCHAR}, #{clientnum,jdbcType=VARCHAR}, #{districtnum,jdbcType=BIGINT}, 
-      #{districttitle,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{idcard,jdbcType=VARCHAR}, 
-      #{area,jdbcType=DOUBLE}, #{address,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR}, 
-      #{operator,jdbcType=BIGINT}, #{operatedt,jdbcType=TIMESTAMP}, #{disabled,jdbcType=TINYINT}, 
-      #{deleted,jdbcType=TINYINT})
+      #{name,jdbcType=VARCHAR}, #{virtualid,jdbcType=BIGINT}, #{clientnum,jdbcType=VARCHAR}, 
+      #{districtnum,jdbcType=BIGINT}, #{districttitle,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, 
+      #{idcard,jdbcType=VARCHAR}, #{area,jdbcType=DOUBLE}, #{typeid,jdbcType=BIGINT}, 
+      #{address,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, 
+      #{operatedt,jdbcType=TIMESTAMP}, #{disabled,jdbcType=TINYINT}, #{deleted,jdbcType=TINYINT}
+      )
   </insert>
+
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClient">
     <!--@mbg.generated-->
     insert into se_client
@@ -84,6 +90,9 @@
       <if test="name != null">
         `name`,
       </if>
+      <if test="virtualid != null">
+        virtualId,
+      </if>
       <if test="clientnum != null">
         clientNum,
       </if>
@@ -101,6 +110,9 @@
       </if>
       <if test="area != null">
         area,
+      </if>
+      <if test="typeid != null">
+        typeId,
       </if>
       <if test="address != null">
         address,
@@ -143,6 +155,9 @@
       <if test="name != null">
         #{name,jdbcType=VARCHAR},
       </if>
+      <if test="virtualid != null">
+        #{virtualid,jdbcType=BIGINT},
+      </if>
       <if test="clientnum != null">
         #{clientnum,jdbcType=VARCHAR},
       </if>
@@ -160,6 +175,9 @@
       </if>
       <if test="area != null">
         #{area,jdbcType=DOUBLE},
+      </if>
+      <if test="typeid != null">
+        #{typeid,jdbcType=BIGINT},
       </if>
       <if test="address != null">
         #{address,jdbcType=VARCHAR},
@@ -203,6 +221,9 @@
       <if test="name != null">
         `name` = #{name,jdbcType=VARCHAR},
       </if>
+      <if test="virtualid != null">
+        virtualId = #{virtualid,jdbcType=BIGINT},
+      </if>
       <if test="clientnum != null">
         clientNum = #{clientnum,jdbcType=VARCHAR},
       </if>
@@ -220,6 +241,9 @@
       </if>
       <if test="area != null">
         area = #{area,jdbcType=DOUBLE},
+      </if>
+      <if test="typeid != null">
+        typeId = #{typeid,jdbcType=BIGINT},
       </if>
       <if test="address != null">
         address = #{address,jdbcType=VARCHAR},
@@ -251,17 +275,18 @@
       blockId = #{blockid,jdbcType=BIGINT},
       divideId = #{divideid,jdbcType=BIGINT},
       `name` = #{name,jdbcType=VARCHAR},
+<!--      virtualId = #{virtualid,jdbcType=BIGINT},-->
       clientNum = #{clientnum,jdbcType=VARCHAR},
       districtNum = #{districtnum,jdbcType=BIGINT},
       districtTitle = #{districttitle,jdbcType=VARCHAR},
       phone = #{phone,jdbcType=VARCHAR},
       idCard = #{idcard,jdbcType=VARCHAR},
       area = #{area,jdbcType=DOUBLE},
+      typeId = #{typeid,jdbcType=BIGINT},
       address = #{address,jdbcType=VARCHAR},
       remarks = #{remarks,jdbcType=VARCHAR},
       `operator` = #{operator,jdbcType=BIGINT},
-      operateDt = #{operatedt,jdbcType=TIMESTAMP}
-<!--    ,-->
+      operateDt = #{operatedt,jdbcType=TIMESTAMP},
 <!--      disabled = #{disabled,jdbcType=TINYINT},-->
 <!--      deleted = #{deleted,jdbcType=TINYINT}-->
     where id = #{id,jdbcType=BIGINT}
@@ -283,18 +308,22 @@
     FROM se_client cli
     , (SELECT @i:=0) AS itable
     <where>
-      AND disabled = 0
-      AND deleted = 0
+      AND cli.disabled = 0
+      AND cli.deleted = 0
       <if test = "name != null and name !=''">
-        AND name like CONCAT('%',#{name},'%')
+        AND cli.name like CONCAT('%',#{name},'%')
       </if>
 
-      <if test = "num != null and num !=''">
-        AND clientNum like CONCAT('%',#{num},'%')
+      <if test = "clientNum != null and clientNum !=''">
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
       </if>
 
       <if test = "phone != null and phone !=''">
-        AND phone like CONCAT('%',#{phone},'%')
+        AND cli.phone like CONCAT('%',#{phone},'%')
+      </if>
+
+      <if test = "address != null and address !=''">
+        AND cli.address like CONCAT('%',#{address},'%')
       </if>
     </where>
 
@@ -305,35 +334,56 @@
   <select id="getClients" resultType="com.dy.pipIrrGlobal.voSe.VoClient">
     SELECT
         (@i:=@i+1) AS id,
-        name,
-        clientNum,
-        phone,
-        idCard,
-        (SELECT COUNT(*) FROM se_client_card WHERE clientNum = cli.clientNum) AS cardCount,
-        address,
-        operateDt
+        CAST(cli.countyId AS char) AS countyId,
+        dis_con.name AS countryName,
+        CAST(cli.townId AS char) AS townId,
+        dis_town.name AS townName,
+        CAST(cli.villageId AS char) AS villageId,
+        dis_village.name AS villageName,
+        CAST(cli.blockId AS char) AS blockId,
+        blo.name AS bolckName,
+        CAST(cli.divideId AS char) AS divideId,
+        divi.name AS divideName,
+        CAST(cli.typeId AS char) AS waterTypeId,
+        wat.typeName AS waterTypeName,
+        CAST(cli.id AS char) AS clientId,
+        cli.name,
+        cli.clientNum,
+        cli.phone,
+        cli.idCard,
+        cli.area,
+        (SELECT COUNT(*) FROM se_client_card WHERE clientId = cli.id) AS cardCount,
+        cli.address,
+        cli.remarks,
+        cli.operateDt
     FROM se_client cli
-        , (SELECT @i:=0) AS itable
+    LEFT JOIN ba_district dis_con ON cli.countyId = dis_con.id
+    LEFT JOIN ba_district dis_town ON cli.townId = dis_town.id
+    LEFT JOIN ba_district dis_village ON cli.villageId = dis_village.id
+    LEFT JOIN ba_block blo ON cli.blockId = blo.id
+    LEFT JOIN pr_divide divi ON cli.divideId = divi.id
+    LEFT JOIN se_water_type wat ON cli.typeId = wat.id
+    , (SELECT @i:=0) AS itable
     <where>
-      AND disabled = 0
-      AND deleted = 0
+      AND cli.disabled = 0
+      AND cli.deleted = 0
       <if test = "name != null and name !=''">
-        AND name like CONCAT('%',#{name},'%')
+        AND cli.name like CONCAT('%',#{name},'%')
       </if>
 
       <if test = "clientNum != null and clientNum !=''">
-        AND clientNum like CONCAT('%',#{clientNum},'%')
+        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
       </if>
 
       <if test = "phone != null and phone !=''">
-        AND phone like CONCAT('%',#{phone},'%')
+        AND cli.phone like CONCAT('%',#{phone},'%')
       </if>
 
       <if test = "address != null and address !=''">
-        AND address like CONCAT('%',#{address},'%')
+        AND cli.address like CONCAT('%',#{address},'%')
       </if>
     </where>
-    ORDER BY operateDt DESC
+    ORDER BY cli.operateDt DESC
     <if test="pageCurr != null and pageSize != null">
       LIMIT ${pageCurr}, ${pageSize}
     </if>
@@ -363,4 +413,188 @@
   <select id="getVillageIdById" parameterType="java.lang.Long" resultType="java.lang.Long">
     SELECT villageId FROM se_client WHERE id = ${id}
   </select>
+
+  <!--鑾峰彇铏氭嫙鍗″彿鏈�澶у��-->
+  <select id="getMa1xVirtualId" resultType="java.lang.Long">
+    SELECT virtualId FROM se_client ORDER BY id DESC LIMIT 0,1
+  </select>
+
+  <!--鑾峰彇鐢ㄦ按鏂瑰紡鍒楄〃-->
+  <select id="getWaterTypes" resultType="java.util.Map">
+    SELECT id, typeName from se_water_type
+  </select>
+
+  <!-- 涓嬪垪鍐呭涓轰氦鏄撴槑缁嗘煡璇� -->
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璐按姹囨�诲拰璐崱姹囨��-->
+  <select id="getSums" resultType="java.util.Map">
+    SELECT
+        SUM(money) AS money,
+        SUM(cardCost) AS cardCost
+    FROM v_operate
+    <where>
+      <if test = "villageId != null and villageId > 0">
+        AND villageId = ${villageId}
+      </if>
+
+      <if test = "paymentId != null and paymentId >0">
+        AND paymentId = ${paymentId}
+      </if>
+
+      <if test = "operateTimeStart != null and operateTimeStop != null">
+        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍鏁�-->
+  <select id="getOperateRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM v_operate
+    <where>
+      <if test = "villageId != null and villageId > 0">
+        AND villageId = ${villageId}
+      </if>
+
+      <if test = "paymentId != null and paymentId >0">
+        AND paymentId = ${paymentId}
+      </if>
+
+      <if test = "operateTimeStart != null and operateTimeStop != null">
+        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍-->
+  <select id="getOperates" resultType="com.dy.pipIrrGlobal.voSe.VoOperate">
+    SELECT
+        villageId,
+        districtTitle,
+        clientNum,
+        `name`,
+        cardNum,
+        idCard,
+        phone,
+        money,
+        cardCost,
+        paymentId,
+        paymentMethod,
+        operateType,
+        operateDt,
+        operatorName
+    FROM v_operate
+    <where>
+      <if test = "villageId != null and villageId > 0">
+        AND villageId = ${villageId}
+      </if>
+
+      <if test = "paymentId != null and paymentId >0">
+        AND paymentId = ${paymentId}
+      </if>
+
+      <if test = "operateTimeStart != null and operateTimeStop != null">
+        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+      </if>
+    </where>
+    ORDER BY operateDt
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </select>
+
+  <!-- 涓嬪垪鍐呭涓轰氦鏄撶粺璁℃煡璇� -->
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗绗旀暟姹囨�诲拰浜ゆ槗閲戦姹囨��-->
+  <select id="getStatisticSums" resultType="java.util.Map">
+    SELECT
+    SUM(count) AS count,
+    SUM(money) AS money
+    FROM
+    (
+      SELECT
+      villageId,
+      districtTitle,
+      operateType,
+      operateDt,
+      count(*) AS count,
+      (sum(money) + sum(cardCost)) AS money
+      FROM v_operate
+      <where>
+        <if test = "villageId != null and villageId > 0">
+          AND villageId = ${villageId}
+        </if>
+
+<!--        <if test = "paymentId != null and paymentId >0">-->
+<!--          AND paymentId = ${paymentId}-->
+<!--        </if>-->
+
+        <if test = "operateTimeStart != null and operateTimeStop != null">
+          AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+        </if>
+      </where>
+      GROUP BY villageId, districtTitle, operateType, operateDt
+    ) temp
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇姹囨�昏褰曟暟-->
+  <select id="getStatisticRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    FROM
+    (
+        SELECT
+          villageId,
+          districtTitle,
+          operateType,
+          operateDt,
+          count(*) AS count,
+          (sum(money) + sum(cardCost)) AS money
+        FROM v_operate
+        <where>
+          <if test = "villageId != null and villageId > 0">
+            AND villageId = ${villageId}
+          </if>
+
+<!--          <if test = "paymentId != null and paymentId >0">-->
+<!--            AND paymentId = ${paymentId}-->
+<!--          </if>-->
+
+          <if test = "operateTimeStart != null and operateTimeStop != null">
+            AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+          </if>
+        </where>
+        GROUP BY villageId, districtTitle, operateType, operateDt
+    ) temp
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍-->
+  <select id="getStatistics" resultType="com.dy.pipIrrGlobal.voSe.VoStatistics">
+    SELECT
+        villageId,
+        districtTitle,
+        operateType,
+        operateDt,
+        count(*) AS count,
+        (sum(money) + sum(cardCost)) AS money
+    FROM v_operate
+    <where>
+      <if test = "villageId != null and villageId > 0">
+        AND villageId = ${villageId}
+      </if>
+
+<!--      <if test = "paymentId != null and paymentId >0">-->
+<!--        AND paymentId = ${paymentId}-->
+<!--      </if>-->
+
+      <if test = "operateTimeStart != null and operateTimeStop != null">
+        AND operateDt BETWEEN #{operateTimeStart} AND #{operateTimeStop}
+      </if>
+    </where>
+    GROUP BY villageId, districtTitle, operateType, operateDt
+    ORDER BY operateDt
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${pageCurr}, ${pageSize}
+    </if>
+  </select>
+
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
index ddfb760..aa5f651 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
@@ -1,5 +1,6 @@
 package com.dy.aceMw.web.com;
 
+import com.dy.aceMw.server.ServerProperties;
 import com.dy.aceMw.server.forTcp.TcpSessionCache;
 import com.dy.aceMw.server.local.CommandInnerDeaLer;
 import com.dy.aceMw.server.local.ReturnCommand;
@@ -97,7 +98,9 @@
         if(onLine == null){
             return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夋湭涓婄嚎锛�", command.getId(), command.getCode())) ;
         }else if(!onLine.booleanValue()){
-            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夌绾匡紒", command.getId(), command.getCode())) ;
+            if(!ServerProperties.isLowPower){
+                return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夌绾匡紒", command.getId(), command.getCode())) ;
+            }
         }
 
         //鐢熸垚寮傛浠诲姟
@@ -114,21 +117,4 @@
         return BaseResponseUtils.buildSuccess(ReturnCommand.successed("鍛戒护宸叉帴鍙楋紝鍗冲皢鏋勯�犲苟涓嬪彂鍛戒护銆�", command.getId(), command.getCode()));
     }
 
-    /**
-     * 鏀跺埌鍛戒护缁撴灉
-     * @param command
-    private void dealCommandResult(String jgSenderName, Command command){
-        Object obj = command.getParam() ;
-        if(obj != null){
-            CommandBackParam p = (CommandBackParam)obj ;
-            if(p.getSuccess()){
-                log.info("鍛戒护" + (command.getId().equals(Command.defaultId)?"":("(id=" + command.getId() + ")")) + "鎵ц鎴愬姛"
-                        + (p.getMessage() == null?"":(p.getMessage().equals("")?"":("锛�" + p.getMessage()))));
-            }else{
-                log.error("鍛戒护" + (command.getId().equals(Command.defaultId)?"":("(id=" + command.getId() + ")")) + "鎵ц澶辫触"
-                        + (p.getMessage() == null?"":(p.getMessage().equals("")?"":("锛�" + p.getMessage()))));
-            }
-        }
-    }
-    */
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java
index 4a7bbb6..a162640 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java
@@ -28,7 +28,6 @@
         this.restTemplate = restTemplate ;
     }
 
-
     public void deal(Data data) {
         if (data.rtuResultSendWebUrl != null && data.rtuResultSendWebUrl.trim().equals("")) {
             String url = UriComponentsBuilder.fromUriString(data.rtuResultSendWebUrl)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockCtrl.java
index 942eba6..341e897 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/block/BlockCtrl.java
@@ -7,7 +7,6 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaBlock;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -77,7 +76,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaBlock>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) QueryVo vo){
+    public BaseResponse<QueryResultVo<List<BaBlock>>> some(@RequestBody QueryVo vo){
         try {
             QueryResultVo<List<BaBlock>> res = this.sv.selectSome(vo) ;
             return BaseResponseUtils.buildSuccess(res);
@@ -102,7 +101,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaBlock> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaBlock> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
 
@@ -122,7 +121,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaBlock po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaBlock po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -157,7 +156,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaBlock po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaBlock po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -195,7 +194,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/client/ClientCtrl.java
index b3967ff..0979aad 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/client/ClientCtrl.java
@@ -8,7 +8,6 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -53,7 +52,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaClient>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) QueryVo vo){
+    public BaseResponse<QueryResultVo<List<BaClient>>> some(@RequestBody QueryVo vo){
         try {
             QueryResultVo<List<BaClient>> res = this.sv.selectSome(vo) ;
             return BaseResponseUtils.buildSuccess(res);
@@ -78,7 +77,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaClient> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaClient> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
 
@@ -98,7 +97,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaClient po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaClient po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -133,7 +132,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaClient po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaClient po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -171,7 +170,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/clientType/ClientTypeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/clientType/ClientTypeCtrl.java
index 74829e8..01a550a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/clientType/ClientTypeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/clientType/ClientTypeCtrl.java
@@ -9,7 +9,6 @@
 import com.dy.pipIrrBase.user.QueryVo;
 import com.dy.pipIrrGlobal.pojoBa.BaClientType;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -79,7 +78,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaClientType>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) @Valid QueryVo vo){
+    public BaseResponse<QueryResultVo<List<BaClientType>>> some(@RequestBody @Valid QueryVo vo){
         try {
             QueryResultVo<List<BaClientType>> res = this.sv.selectSome(vo) ;
             return BaseResponseUtils.buildSuccess(res);
@@ -104,7 +103,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaClientType> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaClientType> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
 
@@ -124,7 +123,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaClientType po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaClientType po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -159,7 +158,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaClientType po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaClientType po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -197,7 +196,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java
index 68d6bf0..dbec7d5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictCtrl.java
@@ -4,11 +4,12 @@
 import com.dy.common.mybatis.envm.Deleted;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.pojoBa.BaDistrict;
 import com.dy.pipIrrGlobal.util.DistrictLevel;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -21,8 +22,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 @Slf4j
 @Tag(name = "琛屾斂鍖哄垝绠$悊", description = "琛屾斂鍖哄垝澧炲垹鏀规煡绛夋搷浣�")
@@ -92,7 +92,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaDistrict> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaDistrict> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
 
@@ -112,7 +112,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DistrictVo vo, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid DistrictVo vo, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -154,7 +154,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DistrictVo vo, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid DistrictVo vo, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -190,7 +190,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
@@ -207,4 +207,60 @@
             return BaseResponseUtils.buildSuccess(true) ;
         }
     }
+
+    /**
+     * 鏍规嵁绾у埆鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param id
+     * @return
+     */
+    @Operation(summary = "鑾峰緱琛屾斂鍖哄垝鍒楄〃", description = "杩斿洖琛屾斂鍖哄垝鍒楄〃")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/level/{id}")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getDistrictgsByLevel(@PathVariable("id") Integer id){
+        if(id == null || id <= 0){
+            return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
+        }
+
+        List<Map<String, Object>> map_Districts = Optional.ofNullable(sv.getDistrictgsByLevel(id)).orElse(new ArrayList<>());
+        if(map_Districts == null || map_Districts.size() == 0) {
+            return BaseResponseUtils.buildFail("鎮ㄨ緭鍏ョ殑灞傜骇鏈夎") ;
+        }
+        return BaseResponseUtils.buildSuccess(map_Districts);
+    }
+
+    /**
+     * 鏍规嵁鐖禝D鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param supperId
+     * @return
+     */
+    @Operation(summary = "鑾峰緱琛屾斂鍖哄垝鍒楄〃", description = "杩斿洖琛屾斂鍖哄垝鍒楄〃")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/supperid/{supperId}")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getDistrictsBySupperId(@PathVariable("supperId") Long supperId){
+        if(supperId == null || supperId <= 0){
+            return BaseResponseUtils.buildFail("鐖禝D涓嶈兘涓虹┖") ;
+        }
+
+        List<Map<String, Object>> map_Districts = Optional.ofNullable(sv.getDistrictsBySupperId(supperId)).orElse(new ArrayList<>());
+        if(map_Districts == null || map_Districts.size() == 0) {
+            return BaseResponseUtils.buildFail("鎮ㄨ緭鍏ョ殑鐖剁骇ID鏈夎") ;
+        }
+        return BaseResponseUtils.buildSuccess(map_Districts);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
index 73c23fc..33f880e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
@@ -9,6 +9,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Service
@@ -98,4 +99,22 @@
             }
         }
     }
+
+    /**
+     * 鏍规嵁绾у埆鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param level
+     * @return
+     */
+    public List<Map<String, Object>> getDistrictgsByLevel(Integer level) {
+        return dao.getDistrictgsByLevel(level);
+    }
+
+    /**
+     * 鏍规嵁鐖禝D鑾峰彇琛屾斂鍖哄垝鍒楄〃
+     * @param supperId
+     * @return
+     */
+    public List<Map<String, Object>> getDistrictsBySupperId(Long supperId) {
+        return dao.getDistrictsBySupperId(supperId);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
index 8256285..4ad3396 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/divide/DivideCtrl.java
@@ -7,7 +7,6 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaDivide;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -76,7 +75,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaDivide> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaDivide> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
     /**
@@ -94,7 +93,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaDivide>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) DivideVo vo){
+    public BaseResponse<QueryResultVo<List<BaDivide>>> some(@RequestBody DivideVo vo){
         try {
             QueryResultVo<List<BaDivide>> res = this.sv.selectSome(vo) ;
             return BaseResponseUtils.buildSuccess(res);
@@ -120,7 +119,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaDivide po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaDivide po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -154,7 +153,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaDivide po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaDivide po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -192,7 +191,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
index 67f1606..23dd172 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/role/RoleCtrl.java
@@ -11,7 +11,6 @@
 import com.dy.pipIrrGlobal.pojoBa.BaRole;
 import com.dy.pipIrrGlobal.pojoBa.BaRolePermissions;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -26,7 +25,9 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 @Slf4j
 @Tag(name = "瑙掕壊绠$悊", description = "瑙掕壊澧炲垹鏀规煡绛夋搷浣�")
@@ -84,7 +85,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaRole>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) @Valid QueryVo vo){
+    public BaseResponse<QueryResultVo<List<BaRole>>> some(@RequestBody @Valid QueryVo vo){
         try {
             QueryResultVo<List<BaRole>> res = this.sv.selectSome(vo) ;
             return BaseResponseUtils.buildSuccess(res);
@@ -109,7 +110,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaRole> one(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<BaRole> one(Long id){
         return BaseResponseUtils.buildSuccess(this.sv.selectById(id));
     }
 
@@ -129,7 +130,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaRole po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaRole po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -165,7 +166,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaRole po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaRole po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -205,8 +206,7 @@
     })
     @GetMapping(path = "setPrivs", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> setPrivileges(@Parameter(description = "瀹炰綋id", required = true) Long id,
-                                          @Parameter(description = "鏉冮檺id鏁扮粍") Long[] privIds){
+    public BaseResponse<Boolean> setPrivileges(Long id, Long[] privIds){
         Long[] privIds_lg = null ;
         if(privIds != null && privIds.length > 0){
             privIds_lg = new Long[privIds.length] ;
@@ -239,7 +239,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) Long id){
+    public BaseResponse<Boolean> delete(Long id){
         if(id == null){
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖") ;
         }
@@ -269,7 +269,7 @@
     @PostMapping(path = "addPermissions", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> permission(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaRolePermissions po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> permission(@RequestBody  @Valid BaRolePermissions po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
index 01659c6..1d7f0ab 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
@@ -14,7 +14,6 @@
 import com.dy.pipIrrGlobal.voBa.VoUserInfo;
 import com.mysql.cj.util.StringUtils;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -90,7 +89,7 @@
     })
     @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaUser>>> some(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) @Valid QueryVo vo) {
+    public BaseResponse<QueryResultVo<List<BaUser>>> some(@RequestBody @Valid QueryVo vo) {
         try {
             QueryResultVo<List<BaUser>> res = this.sv.selectSome(vo);
             return BaseResponseUtils.buildSuccess(res);
@@ -116,7 +115,7 @@
     })
     @GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<BaUser> one(@Parameter(description = "瀹炰綋id", required = true) String id) {
+    public BaseResponse<BaUser> one(String id) {
         return BaseResponseUtils.buildSuccess(this.sv.selectById(Long.parseLong(id)));
     }
 
@@ -137,7 +136,7 @@
     })
     @PostMapping(path = "save", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> save(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaUser po, @Parameter(hidden = true) BindingResult bindingResult) {
+    public BaseResponse<Boolean> save(@RequestBody @Valid BaUser po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -187,7 +186,7 @@
     })
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid BaUser po, @Parameter(hidden = true) BindingResult bindingResult) {
+    public BaseResponse<Boolean> update(@RequestBody @Valid BaUser po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -230,9 +229,7 @@
     })
     @GetMapping(path = "changePassword", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> changePassword(@Parameter(description = "瀹炰綋id", required = true) String id,
-                                                @Parameter(description = "鏃у瘑鐮�", required = true) String oldPassword,
-                                                @Parameter(description = "鏂板瘑鐮�", required = true) String newPassword) throws Exception {
+    public BaseResponse<Boolean> changePassword(String id, String oldPassword, String newPassword) throws Exception {
         if (id == null) {
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖");
         }
@@ -290,7 +287,7 @@
     })
     @PostMapping(path = "resetPassword", consumes = MediaType.APPLICATION_JSON_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> resetPassword(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) ResetPasswordVo vo) throws Exception {
+    public BaseResponse<Boolean> resetPassword(@RequestBody  ResetPasswordVo vo) throws Exception {
         if (vo.id == null) {
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖");
         }
@@ -332,7 +329,7 @@
     })
     @GetMapping(path = "resetPasswordByDefault", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> resetPasswordByDefault(@Parameter(description = "瀹炰綋id", required = true) String id) throws Exception {
+    public BaseResponse<Boolean> resetPasswordByDefault(String id) throws Exception {
         if (id == null) {
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖");
         }
@@ -375,7 +372,7 @@
     })
     @GetMapping(path = "resetPasswordByRandom", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<String> resetPasswordByRandom(@Parameter(description = "瀹炰綋id", required = true) String id) throws Exception {
+    public BaseResponse<String> resetPasswordByRandom(String id) throws Exception {
         if (id == null) {
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖");
         }
@@ -420,7 +417,7 @@
     })
     @GetMapping(path = "setRoles", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> setRoles(@Parameter(description = "瀹炰綋id", required = true) String id,
+    public BaseResponse<Boolean> setRoles(String id,
                                           @Parameter(description = "瑙掕壊id鏁扮粍") String[] roleIds) {
         Long[] roleId_lg = null;
         if (roleIds != null && roleIds.length > 0) {
@@ -457,7 +454,7 @@
     })
     @GetMapping(path = "delete", consumes = MediaType.TEXT_PLAIN_VALUE)
     @SsoAop()
-    public BaseResponse<Boolean> delete(@Parameter(description = "瀹炰綋id", required = true) String id) {
+    public BaseResponse<Boolean> delete(String id) {
         if (id == null) {
             return BaseResponseUtils.buildFail("id涓嶈兘涓虹┖");
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/PipIrrProjectApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/PipIrrProjectApplication.java
index f46ea6a..f73cd42 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/PipIrrProjectApplication.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/PipIrrProjectApplication.java
@@ -18,7 +18,7 @@
 @EnableAspectJAutoProxy
 @EnableMultiDataSource
 @ComponentScan(basePackages = {"com.dy.common", "com.dy.pipIrrGlobal", "com.dy.pipIrrProject"})
-@MapperScan({"com.dy.pipIrrGlobal.daoPr"})
+@MapperScan({"com.dy.pipIrrGlobal.daoPr", "com.dy.pipIrrGlobal.daoBa"})
 public class PipIrrProjectApplication {
 
     public static void main(String[] args) {
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
new file mode 100644
index 0000000..fe5f6b9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
@@ -0,0 +1,71 @@
+package com.dy.pipIrrProject.controller;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrProject.result.ProjectResultCode;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.transaction.annotation.Transactional;
+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;
+
+import java.util.Date;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 10:06
+ * @LastEditTime 2023-12-29 10:06
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "鎺у埗鍣ㄧ鐞�", description = "鎺у埗鍣ㄦ搷浣�")
+@RestController
+@RequestMapping(path="controller")
+@RequiredArgsConstructor
+public class ControllerCtrl {
+    private final ControllerSv controllerSv;
+
+    @Operation(summary = "娣诲姞鎺у埗鍣ㄨ褰�", description = "娣诲姞鎺у埗鍣ㄨ褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid PrController po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Date operateTime = new Date();
+        po.setOperatedt(operateTime);
+        po.setDeleted((byte)0);
+        Integer rec = Optional.ofNullable(controllerSv.addController(po)).orElse(0);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(ProjectResultCode.CONTROLLER_FAIL.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
new file mode 100644
index 0000000..717429e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -0,0 +1,30 @@
+package com.dy.pipIrrProject.controller;
+
+import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 10:06
+ * @LastEditTime 2023-12-29 10:06
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class ControllerSv {
+    @Autowired
+    private PrControllerMapper prControllerMapper;
+
+    /**
+     * 娣诲姞鎺у埗鍣�
+     * @param po
+     * @return
+     */
+    public Integer addController(PrController po) {
+        return prControllerMapper.insert(po);
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java
new file mode 100644
index 0000000..d52f49c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java
@@ -0,0 +1,10 @@
+package com.dy.pipIrrProject.controller;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-29 10:07
+ * @LastEditTime 2023-12-29 10:07
+ * @Description
+ */
+public class QueryVo {
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideCtrl.java
index f6d2a12..9f07908 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideCtrl.java
@@ -7,12 +7,12 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.pojoPr.PrDivide;
 import com.dy.pipIrrGlobal.voPr.VoDivide;
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
 import com.dy.pipIrrProject.result.ProjectResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -32,11 +32,7 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -53,6 +49,11 @@
 public class DivideCtrl {
     private final DivideSv divideSv;
 
+    /**
+     * 鍒嗛〉鑾峰彇鍒嗘按鎴胯褰�
+     * @param vo
+     * @return
+     */
     @Operation(summary = "鑾峰緱涓�椤靛垎姘存埧璁板綍", description = "杩斿洖涓�椤靛垎姘存埧鏁版嵁")
     @ApiResponses(value = {
             @ApiResponse(
@@ -62,9 +63,9 @@
                             schema = @Schema(implementation = VoActiveCard.class))}
             )
     })
-    @GetMapping(path = "/getDivides", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(path = "/getDivides")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoDivide>>> getDivides(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) QueryVo vo){
+    public BaseResponse<QueryResultVo<List<VoDivide>>> getDivides(QueryVo vo){
         try {
             QueryResultVo<List<VoDivide>> res = divideSv.getDivides(vo);
             return BaseResponseUtils.buildSuccess(res);
@@ -74,6 +75,38 @@
         }
     }
 
+    /**
+     * 鏍规嵁鍒嗘按鎴夸富閿幏鍙栧垎姘存埧瀵硅薄
+     * @param id
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�涓垎姘存埧", description = "杩斿洖涓�涓垎姘存埧鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/getone/{id}")
+    @SsoAop()
+    public BaseResponse<PrDivide> getOneDivide(@PathVariable("id") Long id){
+        try {
+            PrDivide res = divideSv.getOneDivide(id);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍐滄埛寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 娣诲姞鍒嗘按鎴胯褰�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
     @Operation(summary = "娣诲姞鍒嗘按鎴胯褰�", description = "娣诲姞鍒嗘按鎴胯褰�")
     @ApiResponses(value = {
             @ApiResponse(
@@ -86,14 +119,29 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid PrDivide po, @Parameter(hidden = true) BindingResult bindingResult){
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    public BaseResponse<Boolean> add(@RequestBody @Valid PrDivide po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
+        // 鎺ユ敹鏉戠紪鍙凤紙涓婚敭锛�
+        Long villageId = po.getVillageid();
+
+        /**
+         * 鑾峰彇5绾ц鏀垮尯鍒掍俊鎭�
+         */
+        Map map_districts = Optional.ofNullable(divideSv.getDistrictsByVillageId(villageId)).orElse(new HashMap());
+        if(map_districts.size() <= 0) {
+            return BaseResponseUtils.buildFail("鍖哄垝淇℃伅鏈夎");
+        }
+
+        Long countryId = Long.parseLong(map_districts.get("countryId").toString());
+        Long townId = Long.parseLong(map_districts.get("townId").toString());
+        po.setCountyid(countryId);
+        po.setTownid(townId);
 
         Date operateTime = new Date();
         po.setOperatedt(operateTime);
+        po.setDeleted((byte)0);
         Integer rec = Optional.ofNullable(divideSv.addDivide(po)).orElse(0);
         if(rec == 0) {
             return BaseResponseUtils.buildFail(ProjectResultCode.DIVIDE_FAIL.getMessage());
@@ -101,6 +149,85 @@
         return BaseResponseUtils.buildSuccess(true) ;
     }
 
+    /**
+     * 鏍规嵁鍒嗘按鎴縄D閫昏緫鍒犻櫎鍒嗘按鎴�
+     * @param id
+     * @return
+     */
+    @Operation(summary = "鍒犻櫎涓�涓垎姘存埧", description = "鍒犻櫎涓�涓垎姘存埧鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+
+    @GetMapping(path = "/delone/{id}")
+    @SsoAop()
+    public BaseResponse<Boolean> deleteDivideById(@PathVariable("id") Long id){
+        try {
+            Integer res = Optional.ofNullable(divideSv.deleteDivideById(id)).orElse(0);
+            if(res == 0) {
+                return BaseResponseUtils.buildFail("鍒嗘按鎴垮垹闄ゅけ璐�");
+            }
+            return BaseResponseUtils.buildSuccess(true);
+        } catch (Exception e) {
+            log.error("鍒犻櫎鍒嗘按鎴垮紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 淇敼鍒嗘按鎴�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "淇敼鍒嗘按鎴胯褰�", description = "淇敼鍒嗘按鎴胯褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> update(@RequestBody @Valid PrDivide po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        // 鎺ユ敹鏉戠紪鍙凤紙涓婚敭锛�
+        Long villageId = po.getVillageid();
+
+        /**
+         * 鑾峰彇5绾ц鏀垮尯鍒掍俊鎭�
+         */
+        Map map_districts = Optional.ofNullable(divideSv.getDistrictsByVillageId(villageId)).orElse(new HashMap());
+        if(map_districts.size() <= 0) {
+            return BaseResponseUtils.buildFail("鍖哄垝淇℃伅鏈夎");
+        }
+
+        Long countryId = Long.parseLong(map_districts.get("countryId").toString());
+        Long townId = Long.parseLong(map_districts.get("townId").toString());
+
+        po.setCountyid(countryId);
+        po.setTownid(townId);
+
+        Date operateTime = new Date();
+        po.setOperatedt(operateTime);
+
+        Integer rec = Optional.ofNullable(divideSv.updateByPrimaryKey(po)).orElse(0);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail("鍒嗘按鎴夸慨鏀瑰け璐�");
+        }
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
 
     /**
      * 瀵煎嚭鍒嗘按鎴垮垪琛�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
index 5180d7a..ed8e8be 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/DivideSv.java
@@ -1,6 +1,7 @@
 package com.dy.pipIrrProject.divide;
 
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoBa.BaDistrictMapper;
 import com.dy.pipIrrGlobal.daoPr.PrDivideMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrDivide;
 import com.dy.pipIrrGlobal.voPr.VoDivide;
@@ -26,6 +27,9 @@
     @Autowired
     private PrDivideMapper prDivideMapper;
 
+    @Autowired
+    private BaDistrictMapper baDistrictMapper;
+
     /**
      * 娣诲姞鍒嗘按鎴�
      * @param po
@@ -43,11 +47,24 @@
     public QueryResultVo<List<VoDivide>> getDivides(QueryVo queryVo) {
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
+        // 璁$畻绗﹀悎鏉′欢鐨勮褰曟暟
         Long itemTotal = prDivideMapper.getRecordCount(params);
 
         QueryResultVo<List<VoDivide>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = prDivideMapper.getDivides(params);
         return rsVo ;
@@ -64,4 +81,49 @@
         rsVo = prDivideMapper.getDivides(params);
         return rsVo ;
     }
+
+    /**
+     * 鏍规嵁鍒嗘按鎴夸富閿幏鍙栧垎姘存埧瀵硅薄
+     * @param id
+     * @return
+     */
+    public PrDivide getOneDivide(Long id) {
+        return prDivideMapper.selectByPrimaryKey(id);
+    }
+
+    /**
+     * 鏍规嵁涓婚敭閫昏緫鍒犻櫎涓�涓垎姘存埧
+     * @param id
+     * @return
+     */
+    public Integer deleteDivideById(Long id) {
+        return prDivideMapper.deleteDivideById(id);
+    }
+
+    /**
+     * 鏍规嵁鏉戠紪鍙疯幏鍙�5绾у尯鍒掍俊鎭�
+     * @param villageId 鏉戠紪鍙凤紙涓婚敭锛�
+     * @return 5绾ц鏀垮尯鍒掍俊鎭�
+     */
+    public Map getDistrictsByVillageId(Long villageId) {
+        return baDistrictMapper.getDistrictsByVillageId(villageId);
+    }
+
+    /**
+     * 淇敼鍒嗘按鎴垮璞�
+     * @param po 鍐滄埛瀵硅薄
+     * @return 淇敼璁板綍鏉℃暟
+     */
+    public Integer updateByPrimaryKey(PrDivide po) {
+        return prDivideMapper.updateByPrimaryKey(po);
+    }
+
+    /**
+     * 鏍规嵁鍒嗘按鎴跨紪鍙疯幏鍙栨墍灞炵墖鍖虹紪鍙�
+     * @param divideId 鍒嗘按鎴縄D
+     * @return 鎵�灞炵墖鍖篒D
+     */
+    public Long getBlockIdById(Long divideId) {
+        return prDivideMapper.getBlockIdById(divideId);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/QueryVo.java
index 3e488ce..6ae085f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/QueryVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/divide/QueryVo.java
@@ -22,6 +22,6 @@
     @Schema(description = "鍐滄埛濮撳悕")
     public String divideName;
 
-    @Schema(description = "IC鍗″彿")
+    @Schema(description = "鐗囧尯鍚嶇О")
     public String blockName;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
index 2ebe707..30cfe28 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/result/ProjectResultCode.java
@@ -16,7 +16,16 @@
     /**
      * 鍒嗘按鎴�
      */
-    DIVIDE_FAIL(10001, "鍒嗘按鎴挎坊鍔犲け璐�");
+    DIVIDE_FAIL(10001, "鍒嗘按鎴挎坊鍔犲け璐�"),
+
+    /**
+     * 鍙栨按鍙�
+     */
+
+    /**
+     * 鎺у埗鍣�
+     */
+    CONTROLLER_FAIL(30001, "鎺у埗鍣ㄦ坊鍔犲け璐�");
 
     private final Integer code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
index 9fc0d4f..99e7eae 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
@@ -15,7 +15,6 @@
 import com.dy.pipIrrSell.recharge.RechargeCtrl;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -24,6 +23,7 @@
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
@@ -48,6 +48,14 @@
     private final ClientCardSv clientCardSv;
     private final RechargeCtrl rechargeCtrl;
 
+    @Value("${projectCode.ym}")
+    private Integer projectCode;
+
+    /**
+     * 鑾峰彇寮�鍗¤褰�
+     * @param vo
+     * @return
+     */
     @Operation(summary = "鑾峰緱涓�椤靛紑鍗¤褰�", description = "杩斿洖涓�椤靛紑鍗℃暟鎹�")
     @ApiResponses(value = {
             @ApiResponse(
@@ -57,7 +65,6 @@
                             schema = @Schema(implementation = VoActiveCard.class))}
             )
     })
-    //@GetMapping(path = "/getActiveCards", consumes = MediaType.APPLICATION_JSON_VALUE)
     @GetMapping(path = "/getActiveCards")
     @SsoAop()
     public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QueryVo vo){
@@ -70,6 +77,12 @@
         }
     }
 
+    /**
+     * 寮�鍗℃搷浣�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
     @Operation(summary = "寮�鍗�", description = "鏂板紑鍐滄埛鍗�")
     @ApiResponses(value = {
             @ApiResponse(
@@ -82,7 +95,7 @@
     @PostMapping(path = "add_active", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add_active(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoActiveCard po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -162,7 +175,7 @@
         seClientCard.setCardnum(cardNum);
         //seClientCard.setClientnum(clientNum);
         seClientCard.setClientid(clientId);
-        seClientCard.setMoney(0.0);
+        seClientCard.setMoney(0f);
         seClientCard.setState(CardStateENUM.NORMAL.getCode());
         seClientCard.setCreatedt(createTime);
         seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
@@ -208,7 +221,10 @@
             }
         }
 
-        return BaseResponseUtils.buildSuccess(cardNum) ;
+        Map map = new HashMap();
+        map.put("projectCode", projectCode);
+        map.put("cardNum", cardNum);
+        return BaseResponseUtils.buildSuccess(map) ;
     }
 
     @Operation(summary = "琛ュ崱", description = "琛ュ崱")
@@ -223,7 +239,7 @@
     @PostMapping(path = "add_reissue", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add_reissue(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoActiveCard po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
index df53049..2d55567 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardSv.java
@@ -11,7 +11,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 
@@ -39,29 +38,12 @@
 
     public QueryResultVo<List<VoActiveCard>> getActiveCards(QueryVo queryVo) {
         //瀹屽杽鏌ヨ寮�鍗¤褰曠殑璧锋鏃堕棿
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
-        //LocalDateTime activeTimeStart = queryVo.activeTimeStart;
-        //LocalDateTime activeTimeStop = queryVo.activeTimeStop;
-
-        //if(activeTimeStart != null) {
-        //    activeTimeStart = LocalDateTime.parse(df.format(activeTimeStart) + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setActiveTimeStart(activeTimeStart);
-        //}
-
-        //if(activeTimeStop != null) {
-        //    activeTimeStop = LocalDateTime.parse(df.format(activeTimeStop) + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setActiveTimeStop(activeTimeStop);
-        //}
-
         String activeTimeStart = queryVo.activeTimeStart;
         String activeTimeStop = queryVo.activeTimeStop;
-
         if(activeTimeStart != null) {
             activeTimeStart = activeTimeStart + " 00:00:00";
             queryVo.setActiveTimeStart(activeTimeStart);
         }
-
         if(activeTimeStop != null) {
             activeTimeStop = activeTimeStop + " 23:59:59";
             queryVo.setActiveTimeStop(activeTimeStop);
@@ -72,8 +54,19 @@
         Long itemTotal = seActiveCardMapper.getRecordCount(params);
 
         QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seActiveCardMapper.getActiveCards(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelCtrl.java
index 7edd28a..ce46b37 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelCtrl.java
@@ -8,11 +8,11 @@
 import com.dy.pipIrrGlobal.pojoSe.SeCancel;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voSe.VoCancel;
+import com.dy.pipIrrSell.clientCard.CardStateENUM;
 import com.dy.pipIrrSell.clientCard.ClientCardSv;
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -54,9 +54,9 @@
                             schema = @Schema(implementation = VoCancel.class))}
             )
     })
-    @GetMapping(path = "/getCancels", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(path = "/getCancels")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoCancel>>> getCancels(@RequestBody @Parameter(description = "鏌ヨform琛ㄥ崟json鏁版嵁", required = true) QueryVo vo){
+    public BaseResponse<QueryResultVo<List<VoCancel>>> getCancels(QueryVo vo){
         try {
             QueryResultVo<List<VoCancel>> res = cancelSv.getCancels(vo);
             return BaseResponseUtils.buildSuccess(res);
@@ -78,7 +78,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoCancel po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
@@ -115,12 +115,14 @@
 
         /**
          * 淇敼鍐滄埛鍗′俊鎭細
-         *      鎸傚け鏃堕棿
+         *      娉ㄩ攢鏃堕棿
          *      鏈�鍚庢搷浣滅被鍨�-4
          */
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
         seClientCard.setCanceldt(cancelTime);
+        seClientCard.setMoney(0f);
+        seClientCard.setState(CardStateENUM.CANCELLED.getCode());
         seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
         if(rec_updateClientCard == 0) {
@@ -128,7 +130,7 @@
         }
 
         /**
-         * 娣诲姞鎸傚け璁板綍
+         * 娣诲姞娉ㄩ攢璁板綍
          */
         SeCancel seCancel = new SeCancel();
         //seCancel.setCardnum(cardNum);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
index e7474bf..1c83f8a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/CancelSv.java
@@ -9,8 +9,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 
@@ -29,17 +27,14 @@
 
     public QueryResultVo<List<VoCancel>> getCancels(QueryVo queryVo) {
         //瀹屽杽鏌ヨ娉ㄩ攢璁板綍鐨勮捣姝㈡椂闂�
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
-        LocalDateTime cancelTimeStart = queryVo.cancelTimeStart;
-        LocalDateTime cancelTimeStop = queryVo.cancelTimeStop;
+        String cancelTimeStart = queryVo.cancelTimeStart;
+        String cancelTimeStop = queryVo.cancelTimeStop;
         if(cancelTimeStart != null) {
-            cancelTimeStart = LocalDateTime.parse(df.format(cancelTimeStart) + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            cancelTimeStart = cancelTimeStart + " 00:00:00";
             queryVo.setCancelTimeStart(cancelTimeStart);
         }
-
         if(cancelTimeStop != null) {
-            cancelTimeStop = LocalDateTime.parse(df.format(cancelTimeStop) + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            cancelTimeStop = cancelTimeStop + " 23:59:59";
             queryVo.setCancelTimeStop(cancelTimeStop);
         }
 
@@ -48,8 +43,19 @@
         Long itemTotal = seCancelMapper.getRecordCount(params);
 
         QueryResultVo<List<VoCancel>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seCancelMapper.getCancels(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/QueryVo.java
index b8714a2..a421efa 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/QueryVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cancel/QueryVo.java
@@ -4,8 +4,6 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
-import java.time.LocalDateTime;
-
 /**
  * @author ZhuBaoMin
  * @date 2023/12/6 14:18
@@ -29,8 +27,8 @@
 
 
     @Schema(description = "娉ㄩ攢鏃堕棿_寮�濮�")
-    public LocalDateTime cancelTimeStart;
+    public String cancelTimeStart;
 
     @Schema(description = "娉ㄩ攢鏃堕棿_缁撴潫")
-    public LocalDateTime cancelTimeStop;
+    public String cancelTimeStop;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
index 1dce9cb..ae5d363 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
@@ -9,7 +9,6 @@
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
 import com.dy.pipIrrGlobal.voSe.VoClient;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -40,6 +39,11 @@
 public class ClientCtrl {
     private final ClientSv clientSv;
 
+    /**
+     * 鑾峰彇鍐滄埛鍒楄〃
+     * @param vo
+     * @return
+     */
     @Operation(summary = "鑾峰緱涓�椤靛啘鎴�", description = "杩斿洖涓�椤靛啘鎴锋暟鎹�")
     @ApiResponses(value = {
             @ApiResponse(
@@ -61,6 +65,63 @@
         }
     }
 
+    /**
+     * 鑾峰彇浜ゆ槗璁板綍
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�椤典氦鏄撹褰�", description = "杩斿洖涓�椤典氦鏄撹褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "getOperates")
+    @SsoAop()
+    public BaseResponse<Map> getOperates(QueryOperate vo){
+        try {
+           Map res = clientSv.getOperates(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鑾峰彇浜ゆ槗姹囨�昏褰�
+     * @param vo
+     * @return
+     */
+    @Operation(summary = "鑾峰緱涓�椤典氦鏄撴眹鎬昏褰�", description = "杩斿洖涓�椤典氦鏄撴眹鎬昏褰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "getStatistics")
+    @SsoAop()
+    public BaseResponse<Map> getStatistics(QueryStatistic vo){
+        try {
+            Map res = clientSv.getStatistics(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ浜ゆ槗姹囨�昏褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁涓婚敭鑾峰彇涓�涓啘鎴峰璞�
+     * @param id
+     * @return
+     */
     @Operation(summary = "鑾峰緱涓�涓啘鎴�", description = "杩斿洖涓�涓啘鎴锋暟鎹�")
     @ApiResponses(value = {
             @ApiResponse(
@@ -83,6 +144,12 @@
     }
 
 
+    /**
+     * 娣诲姞涓�涓啘鎴峰璞�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
     @Operation(summary = "娣诲姞鍐滄埛璁板綍", description = "娣诲姞鍐滄埛璁板綍")
     @ApiResponses(value = {
             @ApiResponse(
@@ -95,13 +162,13 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoClient po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoClient po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         // 鎺ユ敹鏉戠紪鍙凤紙涓婚敭锛�
-        Long villageId = po.getVillageid();
+        Long villageId = po.getVillageId();
 
         /**
          * 鑾峰彇5绾ц鏀垮尯鍒掍俊鎭�
@@ -130,9 +197,21 @@
         Long districtNum = Long.parseLong(provinceNum + cityNum + district8);
         String districtTitle = countryName + townName + villageName;
 
+        // 鐢熸垚铏氭嫙鍗″彿
+        Long virtualId = Optional.ofNullable(clientSv.getMa1xVirtualId()).orElse(0L);
+        if(virtualId == 0) {
+            virtualId = 1000000000L;
+        }else {
+            virtualId = virtualId + 1;
+            if(virtualId > 10000000000L) {
+                return BaseResponseUtils.buildFail("铏氭嫙鍗″彿瓒呴檺");
+            }
+        }
+
         SeClient seClient = DtoClientToSeClient.INSTANCT.po2vo(po);
         seClient.setCountyid(countryId);
         seClient.setTownid(townId);
+        seClient.setVirtualid(virtualId);
         seClient.setClientnum(clientNum);
         seClient.setDistrictnum(districtNum);
         seClient.setDistricttitle(districtTitle);
@@ -176,7 +255,7 @@
     }
 
     /**
-     * 淇敼鍐滄埛瀵硅薄
+     * 淇敼鍐滄埛瀵硅薄锛堣櫄鎷熷崱鍙枫�佺姝㈡爣蹇椼�侀�昏緫鍒犻櫎鏍囪瘑涓嶅弬涓庝慨鏀癸級
      * @param po 鍐滄埛瀵硅薄
      * @param bindingResult
      * @return
@@ -193,13 +272,13 @@
     @PostMapping(path = "update", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> update(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoClient po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> update(@RequestBody @Valid DtoClient po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         // 鎺ユ敹鏉戠紪鍙凤紙涓婚敭锛�
-        Long villageId = po.getVillageid();
+        Long villageId = po.getVillageId();
 
         /**
          * 鑾峰彇5绾ц鏀垮尯鍒掍俊鎭�
@@ -236,13 +315,10 @@
         seClient.setDistricttitle(districtTitle);
         Date operateTime = new Date();
         seClient.setOperatedt(operateTime);
-        //
-        //seClient.setDisabled((byte)0);
-        //seClient.setDeleted((byte)0);
 
         Integer rec = Optional.ofNullable(clientSv.updateByPrimaryKey(seClient)).orElse(0);
         if(rec == 0) {
-            return BaseResponseUtils.buildFail("娣诲姞鍐滄埛澶辫触");
+            return BaseResponseUtils.buildFail("鍐滄埛淇敼澶辫触");
         }
         return BaseResponseUtils.buildSuccess(true) ;
     }
@@ -276,4 +352,28 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 鑾峰彇鐢ㄦ按鏂瑰紡鍒楄〃
+     * @param
+     * @return
+     */
+    @Operation(summary = "鑾峰緱鐢ㄦ按鏂瑰紡鍒楄〃", description = "杩斿洖鐢ㄦ按鏂瑰紡鍒楄〃")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/watertypes")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<Map<String, Object>>>> getWaterTypes(){
+        List<Map<String, Object>> map_WaterTypes = Optional.ofNullable(clientSv.getWaterTypes()).orElse(new ArrayList<>());
+        if(map_WaterTypes == null || map_WaterTypes.size() == 0) {
+            return BaseResponseUtils.buildFail("娌℃湁鐢ㄦ按鏂瑰紡") ;
+        }
+        return BaseResponseUtils.buildSuccess(map_WaterTypes);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
index 21811c8..a3f631b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
@@ -5,13 +5,17 @@
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
 import com.dy.pipIrrGlobal.voSe.VoClient;
+import com.dy.pipIrrGlobal.voSe.VoOperate;
+import com.dy.pipIrrGlobal.voSe.VoStatistics;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -31,20 +35,147 @@
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍐滄埛鏁版嵁
-     * @param vo
+     * @param queryVo
      * @return
      */
-    public QueryResultVo<List<VoClient>> getClients(QueryVo vo){
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
+    public QueryResultVo<List<VoClient>> getClients(QueryVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
         Long itemTotal = seClientMapper.getRecordCount(params);
 
         QueryResultVo<List<VoClient>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = vo.pageSize ;
-        rsVo.pageCurr = vo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seClientMapper.getClients(params);
 
         return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浜ゆ槗璁板綍
+     * @param vo
+     * @return
+     */
+    public Map getOperates(QueryOperate vo){
+        // 琛ラ綈鏌ヨ鏃堕棿
+        String operateTimeStart = vo.operateTimeStart;
+        String operateTimeStop = vo.operateTimeStop;
+        if(operateTimeStart != null) {
+            operateTimeStart = operateTimeStart + " 00:00:00";
+            vo.setOperateTimeStart(operateTimeStart);
+        }
+        if(operateTimeStop != null) {
+            operateTimeStop = operateTimeStop + " 23:59:59";
+            vo.setOperateTimeStop(operateTimeStop);
+        }
+
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
+
+        // 鑾峰彇姹囨�荤殑璐按閲戦銆佽喘鍗¢噾棰�
+        Float money = 0f;
+        Float cardCost = 0f;
+        Map map_sum = Optional.ofNullable(seClientMapper.getSums(params)).orElse(new HashMap());
+        if(map_sum.size() > 0) {
+            money = Float.parseFloat(map_sum.get("money").toString());
+            cardCost = Float.parseFloat(map_sum.get("cardCost").toString());
+        }
+
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = seClientMapper.getOperateRecordCount(params);
+
+        Integer pageSize = vo.getPageSize();
+        // 璁$畻鎬婚〉鏁�
+        Integer pageTotal ;
+        pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize);
+
+        // 鏍规嵁褰撳墠椤电爜鍙婃瘡椤垫暟閲忚绠楀亸绉婚噺
+        Integer pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        params.put("pageCurr", pageCurr);
+
+        List<VoOperate> lit = seClientMapper.getOperates(params);
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", itemTotal);
+        map_record.put("pageCurr", vo.pageCurr);
+        map_record.put("pageSize", pageSize);
+        map_record.put("pageTotal", pageTotal);
+        map_record.put("list", lit);
+
+        Map map_result = new HashMap();
+        map_result.put("money", money);
+        map_result.put("cardCost", cardCost);
+        map_result.put("records", map_record);
+
+        return map_result;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇缁熻璁板綍
+     * @param vo 浜ゆ槗姹囨�绘煡璇㈡潯浠�
+     * @return 浜ゆ槗姹囨�昏褰�
+     */
+    public Map getStatistics(QueryStatistic vo){
+        // 琛ラ綈鏌ヨ鏃堕棿
+        String operateTimeStart = vo.operateTimeStart;
+        String operateTimeStop = vo.operateTimeStop;
+        if(operateTimeStart != null) {
+            operateTimeStart = operateTimeStart + " 00:00:00";
+            vo.setOperateTimeStart(operateTimeStart);
+        }
+        if(operateTimeStop != null) {
+            operateTimeStop = operateTimeStop + " 23:59:59";
+            vo.setOperateTimeStop(operateTimeStop);
+        }
+
+        // 鐢熸垚鏌ヨ鍙傛暟
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
+
+        // 鑾峰彇姹囨�荤殑浜ゆ槗绗旀暟銆佷氦鏄撻噾棰�
+        Integer count = 0;
+        Float money = 0f;
+        Map map_sum = Optional.ofNullable(seClientMapper.getStatisticSums(params)).orElse(new HashMap());
+        if(map_sum.size() > 0) {
+            count = Integer.parseInt(map_sum.get("count").toString());
+            money = Float.parseFloat(map_sum.get("money").toString());
+        }
+
+        // 鑾峰彇绗﹀悎鏉′欢鐨勮褰曟暟
+        Long itemTotal = seClientMapper.getStatisticRecordCount(params);
+
+        Integer pageSize = vo.getPageSize();
+        // 璁$畻鎬婚〉鏁�
+        Integer pageTotal ;
+        pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize);
+
+        // 鏍规嵁褰撳墠椤电爜鍙婃瘡椤垫暟閲忚绠楀亸绉婚噺
+        Integer pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        params.put("pageCurr", pageCurr);
+
+        List<VoStatistics> lit = seClientMapper.getStatistics(params);
+        Map map_record = new HashMap();
+        map_record.put("itemTotal", itemTotal);
+        map_record.put("pageCurr", vo.pageCurr);
+        map_record.put("pageSize", pageSize);
+        map_record.put("pageTotal", pageTotal);
+        map_record.put("list", lit);
+
+        Map map_result = new HashMap();
+        map_result.put("count", count);
+        map_result.put("money", money);
+        map_result.put("records", map_record);
+
+        return map_result;
     }
 
     /**
@@ -109,4 +240,19 @@
         return seClientMapper.getVillageIdById(id);
     }
 
+    /**
+     * 鑾峰彇铏氭嫙鍗″彿鏈�澶у��
+     * @return
+     */
+    public Long getMa1xVirtualId() {
+        return seClientMapper.getMa1xVirtualId();
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ按鏂瑰紡鍒楄〃
+     * @return
+     */
+    public List<Map<String, Object>> getWaterTypes() {
+        return seClientMapper.getWaterTypes();
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClient.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClient.java
index 350925d..fc3ce80 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClient.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClient.java
@@ -32,21 +32,21 @@
      */
     @Schema(description = "鎵�鍦ㄦ潙ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鎵�鍦ㄦ潙涓嶈兘涓虹┖")
-    private Long villageid;
+    private Long villageId;
 
     /**
      * 鐗囧尯ID
      */
     @Schema(description = "鎵�鍦ㄧ墖鍖篒D", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鎵�鍦ㄧ墖鍖轰笉鑳戒负绌�")
-    private Long blockid;
+    private Long blockId;
 
     /**
      * 鍒嗘按鎴縄D
      */
     @Schema(description = "鎵�鍦ㄥ垎姘存埧ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鎵�鍦ㄥ垎姘存埧涓嶈兘涓虹┖")
-    private Long divideid;
+    private Long divideId;
 
     /**
      * 鍐滄埛濮撳悕
@@ -70,7 +70,7 @@
     @Schema(description = "鍐滄埛韬唤璇佸彿", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "鍐滄埛韬唤璇佸彿涓嶈兘涓虹┖") //涓嶈兘涓虹┖涔熶笉鑳戒负null
     @Length(message = "鍐滄埛韬唤璇佸彿蹇呴』{max}浣嶆暟鎹�", min = 18, max = 18)
-    private String idcard;
+    private String idCard;
 
     /**
      * 绉嶆闈㈢Н
@@ -79,6 +79,12 @@
     private Double area;
 
     /**
+     * 鐢ㄦ按鏂瑰紡
+     */
+    @Schema(description = "鐢ㄦ按鏂瑰紡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long typeId;
+
+    /**
      * 琛楅亾鍙婇棬鐗屽彿
      */
     @Schema(description = "琛楅亾+闂ㄧ墝鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClientToSeClient.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClientToSeClient.java
index 8dbabb5..3ec4561 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClientToSeClient.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/DtoClientToSeClient.java
@@ -16,17 +16,17 @@
 public interface DtoClientToSeClient {
     DtoClientToSeClient INSTANCT = Mappers.getMapper(DtoClientToSeClient.class);
 
-    @Mapping(target = "villageid", source = "villageid")
-    @Mapping(target = "blockid", source = "blockid")
-    @Mapping(target = "divideid", source = "divideid")
+    @Mapping(target = "villageid", source = "villageId")
+    @Mapping(target = "blockid", source = "blockId")
+    @Mapping(target = "divideid", source = "divideId")
     @Mapping(target = "name", source = "name")
     @Mapping(target = "phone", source = "phone")
-    @Mapping(target = "idcard", source = "idcard")
+    @Mapping(target = "idcard", source = "idCard")
     @Mapping(target = "area", source = "area")
+    @Mapping(target = "typeid", source = "typeId")
     @Mapping(target = "address", source = "address")
     @Mapping(target = "remarks", source = "remarks")
     @Mapping(target = "operator", source = "operator")
-
     @Mapping(target = "disabled", ignore=true)
     @Mapping(target = "deleted", ignore=true)
     SeClient po2vo(DtoClient po);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java
new file mode 100644
index 0000000..628bcd6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryOperate.java
@@ -0,0 +1,34 @@
+package com.dy.pipIrrSell.client;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-26 21:00
+ * @LastEditTime 2023-12-26 21:00
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "浜ゆ槗鏌ヨ鏉′欢")
+public class QueryOperate extends QueryConditionVo {
+
+    @Schema(description = "鏉慖D")
+    public Long villageId;
+
+    @Schema(description = "鏀粯鏂瑰紡缂栧彿")
+    public Long paymentId;
+
+    @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃堕棿")
+    public String operateTimeStart;
+
+    @Schema(description = "浜ゆ槗鏌ヨ鎴鏃堕棿")
+    public String operateTimeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java
new file mode 100644
index 0000000..5ac6c22
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/QueryStatistic.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrSell.client;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-27 15:33
+ * @LastEditTime 2023-12-27 15:33
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "浜ゆ槗姹囨�绘煡璇㈡潯浠�")
+public class QueryStatistic extends QueryConditionVo {
+    @Schema(description = "鏉慖D")
+    public Long villageId;
+
+    //@Schema(description = "鏀粯鏂瑰紡缂栧彿")
+    //public Long paymentId;
+
+    @Schema(description = "浜ゆ槗鏌ヨ璧峰鏃堕棿")
+    public String operateTimeStart;
+
+    @Schema(description = "浜ゆ槗鏌ヨ鎴鏃堕棿")
+    public String operateTimeStop;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
new file mode 100644
index 0000000..d0abec4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
@@ -0,0 +1,116 @@
+package com.dy.pipIrrSell.clientCard;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoBa.BaClient;
+import com.dy.pipIrrGlobal.voSe.VoCardInfo;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023-12-27 19:36
+ * @LastEditTime 2023-12-27 19:36
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "鍐滄埛姘村崱", description = "鍐滄埛姘村崱")
+@RestController
+@RequestMapping(path="clientcard")
+@RequiredArgsConstructor
+public class ClientCardCtrl {
+    private final ClientCardSv clientCardSv;
+
+    /**
+     * 鑾峰彇鎸囧畾鐢ㄦ埛鍚嶄笅鍏ㄩ儴姘村崱
+     * @param clientId
+     * @return
+     */
+    @Operation(summary = "鑾峰緱鍏ㄩ儴姘村崱", description = "杩斿洖鍏ㄩ儴姘村崱鏁版嵁")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "clientcard/{clientId}")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoCardInfo>>> get(@PathVariable("clientId") Long clientId){
+        try {
+            List<VoCardInfo> list = clientCardSv.getCardInfoByClientId(clientId);
+            return BaseResponseUtils.buildSuccess(list);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍐滄埛寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍙婁綑棰�
+     * @param cardNum 姘村崱缂栧彿
+     * @return 姘村崱鎿嶄綔璁板綍鍙婁綑棰�
+     */
+    @Operation(summary = "鑾峰緱姘村崱鎿嶄綔璁板綍鍙婁綑棰�", description = "杩斿洖姘村崱鎿嶄綔璁板綍鍙婁綑棰�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/getoperaterecords")
+    @SsoAop()
+    public BaseResponse<List<Map<String, Object>>> getOperateRecordsAndMoney(@RequestParam("cardNum") Long cardNum){
+        try {
+            Map map = clientCardSv.getOperateRecordsAndMoney(cardNum);
+            return BaseResponseUtils.buildSuccess(map);
+        } catch (Exception e) {
+            log.error("鏌ヨ鎿嶄綔璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��
+     * @param cardNum
+     * @return
+     */
+    @Operation(summary = "鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��", description = "鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = BaClient.class))}
+            )
+    })
+    @GetMapping(path = "/cardstate")
+    @SsoAop()
+    public BaseResponse<String> getCardStateByCardNum(@RequestParam("cardNum") Long cardNum){
+        try {
+            String stateName = clientCardSv.getCardStateByCardNum(cardNum);
+            return BaseResponseUtils.buildSuccess(stateName);
+        } catch (Exception e) {
+            log.error("鏌ヨ鎿嶄綔璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
index 12437b7..8517231 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
@@ -2,11 +2,12 @@
 
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.voSe.VoCardInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -65,4 +66,45 @@
     public Integer UpdateClientCard(SeClientCard po) {
         return seClientCardMapper.updateByPrimaryKeySelective(po);
     }
+
+    /**
+     * 鏍规嵁鍐滄埛涓婚敭鑾峰彇姘村崱鍒楄〃
+     * @param clientId
+     * @return
+     */
+    public List<VoCardInfo> getCardInfoByClientId(Long clientId){
+        List<VoCardInfo> list = Optional.ofNullable(seClientCardMapper.getCardInfoByClientId(clientId)).orElse(new ArrayList<>());
+        if(list.size() > 0) {
+            return list;
+        }else {
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鎿嶄綔璁板綍鍙婁綑棰�
+     * @param cardNum
+     * @return
+     */
+    public Map getOperateRecordsAndMoney(Long cardNum) {
+        List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum)).orElse(new ArrayList<>());
+        Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f);
+        Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum)).orElse(0f);
+
+        Map map = new HashMap();
+        map.put("mondy", mondy);
+        map.put("amount", amount);
+        map.put("list", list);
+        return map;
+    }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵��
+     * @param cardNum
+     * @return
+     */
+    public String getCardStateByCardNum(Long cardNum) {
+        String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(cardNum)).orElse("");
+        return stateName;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossCtrl.java
index ab59e5b..2c4df3c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossCtrl.java
@@ -8,11 +8,11 @@
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.pojoSe.SeLoss;
 import com.dy.pipIrrGlobal.voSe.VoLoss;
+import com.dy.pipIrrSell.clientCard.CardStateENUM;
 import com.dy.pipIrrSell.clientCard.ClientCardSv;
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -77,7 +77,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoLoss po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -118,7 +118,9 @@
          */
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
+        seClientCard.setMoney(money);
         seClientCard.setLossdtdt(lossTime);
+        seClientCard.setState(CardStateENUM.LOSS.getCode());
         seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
         if(rec_updateClientCard == 0) {
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
index 2d951ad..df6dc20 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/loss/LossSv.java
@@ -59,8 +59,19 @@
         Long itemTotal = seLossMapper.getRecordCount(params);
 
         QueryResultVo<List<VoLoss>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seLossMapper.getLosses(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeCtrl.java
index 7268f34..449dc2d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeCtrl.java
@@ -13,7 +13,6 @@
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -72,7 +71,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoRecharge po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -132,6 +131,7 @@
          */
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
+        seClientCard.setMoney(afterRecharge);
         seClientCard.setRechargedt(rechargeTime);
         seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
index d30e913..10baa78 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/recharge/RechargeSv.java
@@ -11,7 +11,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 
@@ -33,40 +32,35 @@
 
     public QueryResultVo<List<VoRecharge>> getRecharges(QueryVo queryVo) {
         //瀹屽杽鏌ヨ鍏呭�艰褰曠殑璧锋鏃堕棿
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
-        //LocalDateTime rechargeTimeStart = queryVo.rechargeTimeStart;
-        //LocalDateTime rechargeTimeStop = queryVo.rechargeTimeStop;
-        //if(rechargeTimeStart != null) {
-        //    rechargeTimeStart = LocalDateTime.parse(df.format(rechargeTimeStart) + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setRechargeTimeStart(rechargeTimeStart);
-        //}
-        //
-        //if(rechargeTimeStop != null) {
-        //    rechargeTimeStop = LocalDateTime.parse(df.format(rechargeTimeStop) + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        //    queryVo.setRechargeTimeStop(rechargeTimeStop);
-        //}
-
         String rechargeTimeStart = queryVo.rechargeTimeStart;
         String rechargeTimeStop = queryVo.rechargeTimeStop;
         if(rechargeTimeStart != null) {
             rechargeTimeStart = rechargeTimeStart + " 00:00:00";
             queryVo.setRechargeTimeStart(rechargeTimeStart);
         }
-
         if(rechargeTimeStop != null) {
             rechargeTimeStop = rechargeTimeStop + " 23:59:59";
             queryVo.setRechargeTimeStop(rechargeTimeStop);
         }
-
 
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
         Long itemTotal = seRechargeMapper.getRecordCount(params);
 
         QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seRechargeMapper.getRecharges(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalCtrl.java
index 7b783f6..e27c0f5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalCtrl.java
@@ -12,7 +12,6 @@
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -77,7 +76,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoReversal po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -119,6 +118,7 @@
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
         seClientCard.setReversaldt(reversalTime);
+        seClientCard.setMoney(cardBalance);
         seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
         if(rec_updateClientCard == 0) {
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
index 1b3e8b1..ad5362a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/reversal/ReversalSv.java
@@ -47,8 +47,19 @@
         Long itemTotal = seReversalMapper.getRecordCount(params);
 
         QueryResultVo<List<VoReversal>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seReversalMapper.getReversals(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockCtrl.java
index 1a8b80a..51956dd 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockCtrl.java
@@ -12,7 +12,6 @@
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
 import com.dy.pipIrrSell.result.SellResultCode;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -78,7 +77,7 @@
     @PostMapping(path = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> add(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoUnlock po, @Parameter(hidden = true) BindingResult bindingResult){
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
@@ -119,6 +118,7 @@
         SeClientCard seClientCard = new SeClientCard();
         seClientCard.setId(cardId);
         seClientCard.setUnlockdt(unlockTime);
+        seClientCard.setMoney(money);
         seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
         if(rec_updateClientCard == 0) {
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
index 21a3824..4e42110 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/unlock/UnlockSv.java
@@ -47,8 +47,19 @@
         Long itemTotal = seUnlockMapper.getRecordCount(params);
 
         QueryResultVo<List<VoUnlock>> rsVo = new QueryResultVo<>() ;
-        rsVo.pageSize = queryVo.pageSize ;
-        rsVo.pageCurr = queryVo.pageCurr ;
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
         rsVo.obj = seUnlockMapper.getUnlocks(params);
         return rsVo ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
index d45bf72..8eecd2c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/wallet/WalletCtrl.java
@@ -83,7 +83,7 @@
     //@PostMapping(path = "addRecharge")
     //@Transactional(rollbackFor = Exception.class)
     //@SsoAop()
-    //public BaseResponse<Boolean> addRecharge(@RequestBody @Parameter(description = "form琛ㄥ崟json鏁版嵁", required = true) @Valid DtoWalletRecharge po, @Parameter(hidden = true) BindingResult bindingResult){
+    //public BaseResponse<Boolean> addRecharge(@RequestBody  @Valid DtoWalletRecharge po, @Parameter(hidden = true) BindingResult bindingResult){
     //    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     //    if(bindingResult != null && bindingResult.hasErrors()){
     //        return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());

--
Gitblit v1.8.0