From 42f5453644c41d3b6ac9e381f931efdfc9da8178 Mon Sep 17 00:00:00 2001
From: Administrator <zhubaomin>
Date: 星期一, 27 五月 2024 16:09:56 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java                        |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml                                               |    9 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateUnitMapper.xml                                                  |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java             |   21 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoScheduling.java                                            |   34 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrCropMapper.xml                                                          |  109 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java                                |    4 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrCrop.java                                                |   57 ++
 pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml                                                      |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java                           |    8 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnit.java                                                  |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCrop.java                                                  |   22 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropSv.java                               |   99 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java                           |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java                             |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnitOne.java                                               |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java                       |    5 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java                        |    6 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateSchedulingMapper.java                             |   48 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml                                                 |   12 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/QueryVo.java                              |   23 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrIrrigateSchedulingSv.java |   97 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java                        |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupUnitMapper.xml                                                     |   37 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java                           |   34 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrCropMapper.java                                           |   49 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/PipIrrMwTestWebApplication.java                 |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml                                                      |   12 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java               |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/QueryVo.java                |   24 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java                          |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java                           |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java                          |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoSchedulingOne.java                                         |   48 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java                        |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java                           |    2 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java                           |   39 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java                        |    3 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateSchedulingMapper.xml                                            |  173 ++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropCtrl.java                             |  202 +++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrrigateSchedulingCtrl.java |  198 +++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java                             |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java                             |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml                                                             |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java                                      |    9 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupUnit.java                                           |    6 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCropOne.java                                               |   25 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java                             |   10 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateScheduling.java                                  |   98 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java           |   73 ++
 50 files changed, 1,552 insertions(+), 104 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
index ed18635..39686a3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
@@ -29,7 +29,7 @@
 	public static final String cd_83 = "83" ; //閬ユ祴缁堢瀹氱偣涓婃姤
 	public static final String cd_84 = "84" ; //鍒峰崱寮�娉�/闃�涓婃姤
 	public static final String cd_85 = "85" ; //鍒峰崱鍏虫车/闃�涓婃姤
-	public static final String cd_9A = "9A" ; //娓呴櫎骞寸敤姘撮噺鍜屽勾鐢ㄧ數閲�
+	public static final String cd_9A = "9A" ; //鏌ヨ骞寸敤姘撮噺
 	public static final String cd_26 = "26" ; //璁剧疆璁惧缁堢骞寸敤姘撮噺
 	public static final String cd_21 = "21" ; //璁剧疆璁惧缁堢IP鍦板潃
 	public static final String cd_86 = "86" ; //鏌ヨ璁惧缁堢IP鍦板潃
@@ -70,7 +70,7 @@
 			(code.equals(cd_83) ? "閬ユ祴缁堢瀹氱偣涓婃姤" :
 			(code.equals(cd_84) ? "鍒峰崱寮�娉�/闃�涓婃姤" :
 			(code.equals(cd_85) ? "鍒峰崱鍏虫车/闃�涓婃姤" :
-			(code.equals(cd_9A) ? "娓呴櫎骞寸敤姘撮噺鍜屽勾鐢ㄧ數閲�" :
+			(code.equals(cd_9A) ? "鏌ヨ骞寸敤姘撮噺" :
 			(code.equals(cd_26) ? "璁剧疆璁惧缁堢骞寸敤姘撮噺" :
 			(code.equals(cd_21) ? "璁剧疆璁惧缁堢IP鍦板潃" :
 			(code.equals(cd_86) ? "鏌ヨ璁惧缁堢IP鍦板潃" :
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java
index 6662a05..36ae567 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java
@@ -6,6 +6,5 @@
 public class ComCd26Vo {
     public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�57(0x57):浜曠數鎺у埗鍣�
     public Integer projectNo ;//鎺у埗鍣ㄧ被鍨� 0x01:娴嬫帶涓�浣撻榾锛�0x57:浜曠數鎺у埗鍣�
-    public Integer ipChannel ;//IP閫氶亾鍙� 0x01:1閫氶亾 0x02:2閫氶亾.
     public Integer maxAmountYear ;//璁惧缁堢骞寸敤姘撮噺 鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java
index 1e23b06..bcacda2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java
@@ -95,7 +95,7 @@
 
 
             byte[] bs1 = new byte[7] ;
-            index ++ ;
+            index = 0;
             GlCreate.createPw(bs1, index);
 
             index += 2 ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java
index 089d4d6..7ccb336 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java
@@ -99,7 +99,7 @@
 
 
             byte[] bs1 = new byte[7] ;
-            index ++ ;
+            index = 0 ;
             GlCreate.createPw(bs1, index);
 
             index += 2 ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java
index 9e3242f..5f46b3d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java
@@ -89,7 +89,7 @@
             bytes = ByteUtil.bytesMerge(bytes, bsRg) ;
 
             byte[] bs1 = new byte[7] ;
-            index ++ ;
+            index = 0 ;
             GlCreate.createPw(bs1, index);
 
             index += 2 ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java
index fa0f86b..41e76da 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java
@@ -55,23 +55,17 @@
             if(cvo == null){
                 throw new Exception("json杞珻omCd22Vo涓簄ull") ;
             }
-            if(cvo.ipChannel != 1 && cvo.ipChannel !=2){
-                throw new Exception("IP閫氶亾鍙峰彧鑳芥槸1鎴�2") ;
-            }
 
             if(cvo.maxAmountYear < 0 || cvo.maxAmountYear > 99999999){
                 throw new Exception("璁惧缁堢骞寸敤姘撮噺蹇呴』鏄�0~99999999鑼冨洿鍐呯殑鏁存暟") ;
             }
 
-            byte[] bs = new byte[15] ;
+            byte[] bs = new byte[14] ;
             int index = 0 ;
             bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16));
 
             index ++ ;
             bs[index] = cvo.projectNo.byteValue() ;
-
-            index ++ ;
-            bs[index] = cvo.ipChannel.byteValue() ;
 
             index ++ ;
             String strTemp = "" + cvo.maxAmountYear ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
index 8427760..1387bb7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
@@ -74,7 +74,7 @@
         cdData.ip = ByteUtil.bytes2String_BE(bs, index, index + ipLen - 1) ;
 
         index += ipLen ;
-        cdData.port = Integer.parseInt(ByteUtil.bytes2String_LE(bs, index, index + portLen - 1)) ;
+        cdData.port = Integer.parseInt(ByteUtil.bytes2String_BE(bs, index, index + portLen - 1)) ;
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
index cbcbfbf..c5c4369 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
@@ -73,10 +73,10 @@
         short portLen = ByteUtilUnsigned.byte2Byte(bs, index) ;
 
         index++ ;
-        cdData.domain = ByteUtil.bytes2String_LE(bs, index, index + domainLen - 1) ;
+        cdData.domain = ByteUtil.bytes2String_BE(bs, index, index + domainLen - 1) ;
 
         index += domainLen ;
-        cdData.port = Integer.parseInt(ByteUtil.bytes2String_LE(bs, index, index + portLen - 1)) ;
+        cdData.port = Integer.parseInt(ByteUtil.bytes2String_BE(bs, index, index + portLen - 1)) ;
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java
index 1193d6b..00cebd7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java
@@ -113,11 +113,11 @@
             for(int i = 0 ; i < bTempLen; i++){
                 bs[index++] = bTemp[i] ;
                 count ++ ;
-                if(count >= 4){
+                if(count >= 5){
                     break ;
                 }
             }
-            for(; count < 4; count++){
+            for(; count < 5; count++){
                 bs[index++] = 0 ;
             }
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
index 512934d..0fbd96e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
@@ -72,6 +72,9 @@
         cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ;
 
         index += 8 ;
+        cdData.opDt = GlParse.parseRtuDt(bs, index) ;
+
+        index += 6 ;
         cdData.opType = bs[index];
 
         index ++ ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java
index f9d9796..1588e7a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java
@@ -60,7 +60,7 @@
             if(!NumUtil.isPlusIntNumber(cvo.orderNo)){
                 throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
             }
-            if(cvo.orderNo.length() != 12){
+            if(cvo.orderNo.length() != 16){
                 throw new Exception("璁㈠崟鍙峰繀椤绘槸16浣嶆暟瀛�") ;
             }
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
index ff4ef59..5bb4d97 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
@@ -2,6 +2,7 @@
 
 import com.dy.common.mw.protocol.*;
 import com.dy.common.mw.protocol.p206V202404.*;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd9AVo;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCdXyVo;
 import com.dy.common.util.ByteUtil;
 import org.apache.logging.log4j.LogManager;
@@ -53,7 +54,7 @@
      */
     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
         DataV202404 dV1 = (DataV202404)data.getSubData() ;
-        DataCdXyVo cdData = new DataCdXyVo(CodeV202404.getCodeName(dataCode)) ;
+        DataCd9AVo cdData = new DataCd9AVo(CodeV202404.getCodeName(dataCode)) ;
         dV1.subData = cdData ;
         int index = ProtocolConstantV206V202404.dataIndex ;
         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ;
@@ -62,12 +63,7 @@
         cdData.projectNo = (int)bs[index];
 
         index++ ;
-        byte result = bs[index];
-        if(result == 1){
-            cdData.success = true ;
-        }else{
-            cdData.success = false ;
-        }
+        cdData.maxAmountYear = ByteUtil.BCD2Int_LE(bs, index, index + 3) ;
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
index 5eced82..d5f5326 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
@@ -109,6 +109,10 @@
             cdData.success = false ;
         }
 
+        if(!cdData.success){
+            return ;
+        }
+
         index++ ;
         GlParse.parseRtuDt(bs, index);
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
index 82e681d..dc2abe8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -312,6 +312,11 @@
         index += 8 ;
         cdData.startDt  = GlParse.parseRtuDt(bs, index) ;
 
+        if(cdData.opResult == (byte)0x81){
+            //澶辫触浜嗭紝涓嬮潰灏辨病鏈夋暟鎹簡
+            return ;
+        }
+
         index += 6 ;
         cdData.endDt  = GlParse.parseRtuDt(bs, index) ;
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java
index 06f782a..8f685cb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java
@@ -143,6 +143,9 @@
 		sb.append("      姘磋〃宸ヤ綔鐢靛帇 : ") ;
 		sb.append(waterMeterWorkVolt == null?"鏈煡":waterMeterWorkVolt) ;
 		sb.append("\n") ;
+		sb.append("      淇″彿寮哄害 : ") ;
+		sb.append(csq == null?"鏈煡":csq) ;
+		sb.append("\n") ;
 		return sb.toString() + super.toString() ;
 	}
 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java
index 954ffc7..928ae12 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java
@@ -10,6 +10,7 @@
 	public Integer projectNo ;//鎺у埗鍣ㄧ被鍨� 0x01:娴嬫帶涓�浣撻榾锛�0x57:浜曠數鎺у埗鍣�
 	public String icCardNo ;//IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
 	public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+	public String opDt ;//寮�娉�/闃�鏃堕棿锛坹yyy-mm-dd HH:MM:SS锛�
 	public Byte opType ;//寮�闃�绫诲瀷: 01:骞冲彴寮�娉�/闃� 02:鐢ㄦ埛寮�娉�/闃�
 	public Byte opResult ;//寮�鍚车/闃�缁撴灉: 0x00:鎴愬姛 0x81:澶辫触
 
@@ -34,11 +35,14 @@
 		sb.append("      璁㈠崟鍙� : ") ;
 		sb.append(orderNo == null?"鏈煡":orderNo) ;
 		sb.append("\n") ;
+		sb.append("      寮�娉�/闃�鏃堕棿 : ") ;
+		sb.append(opDt == null?"鏈煡":opDt) ;
+		sb.append("\n") ;
 		sb.append("      寮�鍚车/闃�绫诲瀷 : ") ;
 		sb.append(opType == null?"鏈煡":(opType.byteValue() == 0x01 ? "骞冲彴":"鐢ㄦ埛")) ;
 		sb.append("\n") ;
 		sb.append("      寮�鍚车/闃�缁撴灉 : ") ;
-		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x00 ? "鎴愬姛":"澶辫触")) ;
+		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x01 ? "鎴愬姛":"澶辫触")) ;
 		sb.append("\n") ;
 		return sb.toString() ;
 	}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
index 0063ee0..fa96d54 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
@@ -43,7 +43,7 @@
 		sb.append(opType == null?"鏈煡":(opType.byteValue() == 0x00 ? "鍒峰崱":(opType.byteValue() == 0x01 ? "骞冲彴":(opType.byteValue() == 0x02 ? "APP":(opType.byteValue() == 0x03 ? "闈炴硶鍗�":(opType.byteValue() == 0x04 ? "姘磋〃寮傚父":(opType.byteValue() == 0x05 ? "鐢佃〃寮傚父":(opType.byteValue() == 0x06 ? "鍓╀綑姘撮噺涓嶈冻":(opType.byteValue() == 0x07 ? "鍓╀綑閲戦涓嶈冻":(opType.byteValue() == 0x08 ? "鏃犳祦閲�":(opType.byteValue() == 0x09 ? "鎺夌數鍐嶄笂鐢�":"鏈煡"))))))))))) ;
 		sb.append("\n") ;
 		sb.append("      鍏冲惎娉�/闃�缁撴灉 : ") ;
-		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x00 ? "鎴愬姛":"澶辫触")) ;
+		sb.append(opResult == null?"鏈煡":(opResult.byteValue() == 0x01 ? "鎴愬姛":"澶辫触")) ;
 		sb.append("\n") ;
 		sb.append("      IC鍗″湴鍧� : ") ;
 		sb.append(icCardAddr == null?"鏈煡":icCardAddr) ;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java
new file mode 100644
index 0000000..c1c590f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java
@@ -0,0 +1,34 @@
+package com.dy.common.mw.protocol.p206V202404.upVos;
+
+import lombok.Data;
+
+//鏌ヨ璁惧骞寸敤姘撮噺
+@Data
+public class DataCd9AVo {
+
+	public String controllerType;//鎺у埗鍣ㄧ被鍨� 01锛�0x01锛�:娴嬫帶涓�浣撻榾锛�57(0x57):浜曠數鎺у埗鍣�
+	public Integer projectNo ;//鎺у埗鍣ㄧ被鍨� 0x01:娴嬫帶涓�浣撻榾锛�0x57:浜曠數鎺у埗鍣�
+	public Integer maxAmountYear ;//璁惧缁堢骞寸敤姘撮噺 鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
+
+	public String comName ;//鍛戒护鍚嶇О
+
+	public DataCd9AVo(String comName){
+		this.comName = comName ;
+	}
+
+	public String toString(){
+		StringBuffer sb = new StringBuffer() ;
+		sb.append("      " + comName + " : \n") ;
+		sb.append("      鎺у埗鍣ㄧ被鍨� : ") ;
+		sb.append(controllerType == null?"鏈煡":(controllerType.equals("01")?"娴嬫帶涓�浣撻榾":(controllerType.equals("57")?"浜曠數鎺у埗鍣�":"鏈煡"))) ;
+		sb.append("\n") ;
+		sb.append("      椤圭洰缂栧彿 : ") ;
+		sb.append(projectNo == null?"鏈煡":projectNo) ;
+		sb.append("\n") ;
+		sb.append("      骞寸敤姘撮噺 : ") ;
+		sb.append(maxAmountYear == null?"鏈煡":maxAmountYear) ;
+		sb.append("\n") ;
+		return sb.toString() ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrCropMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrCropMapper.java
new file mode 100644
index 0000000..04f654c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrCropMapper.java
@@ -0,0 +1,49 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrCrop;
+import com.dy.pipIrrGlobal.pojoIr.IrProject;
+import com.dy.pipIrrGlobal.voIr.VoCrop;
+import com.dy.pipIrrGlobal.voIr.VoCropOne;
+import com.dy.pipIrrGlobal.voIr.VoProject;
+import com.dy.pipIrrGlobal.voIr.VoProjectOne;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/24  13:55
+ * @LastEditTime :2024/5/24  13:55
+ * @Description
+ */
+@Mapper
+public interface IrCropMapper extends BaseMapper<IrCrop> {
+    //澧�
+    int insertSelective(IrCrop record);
+
+    //鍒�
+    int deleteLogicById(Long id);
+
+    //鏀�
+    int updateByPrimaryKeySelective(IrCrop record);
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍鏁�
+     *
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍
+     *
+     * @param params
+     * @return
+     */
+    List<VoCrop> getCrops(Map<?, ?> params);
+
+    //鏌ヤ竴涓�
+    VoCropOne selectById(Long id);
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java
index 5ec4a32..f5199fd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java
@@ -5,6 +5,8 @@
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @author :WuZeYu
  * @Date :2024/5/22  13:41
@@ -16,8 +18,6 @@
     //澧�
     int insertSelective(IrGroupUnit record);
 
-    //鍒�
-    int deleteLogicById(Long id);
 
     //鍒燽y unitId groupId
     int deleteByUnitIdGroupId(IrGroupUnit record);
@@ -25,4 +25,9 @@
     int deleteByUnitId(Long unitId);
     //鍒燽y  groupId
     int deleteByGroupId(Long groupId);
+
+    //鏌ヤ竴涓疆鐏岀粍缁戝畾鐨勭亴婧夊崟鍏僫d
+    List<Long> getGroupBindUnits(Long groupId);
+    //鏌ユ湭缁戝畾杞亴缁勭殑鐏屾簤鍗曞厓id
+    List<Long> getNotBindUnits();
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateSchedulingMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateSchedulingMapper.java
new file mode 100644
index 0000000..2a4c438
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateSchedulingMapper.java
@@ -0,0 +1,48 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrIrrigateScheduling;
+import com.dy.pipIrrGlobal.voIr.VoScheduling;
+import com.dy.pipIrrGlobal.voIr.VoSchedulingOne;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  10:46
+ * @LastEditTime :2024/5/27  10:46
+ * @Description
+ */
+@Mapper
+public interface IrIrrigateSchedulingMapper  extends BaseMapper<IrIrrigateScheduling> {
+
+    //澧�
+    int insertSelective(IrIrrigateScheduling record);
+
+    //鍒�
+    int deleteLogicById(Long id);
+
+    //鏀�
+    int updateByPrimaryKeySelective(IrIrrigateScheduling record);
+
+    //鏌ヤ竴涓�
+    VoSchedulingOne selectById(Long id);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浣滅墿鐏屾簤鍒跺害鏁�
+     *
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇浣滅墿鐏屾簤鍒跺害璁板綍
+     *
+     * @param params
+     * @return
+     */
+    List<VoScheduling> getSchedulings(Map<?, ?> params);
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrCrop.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrCrop.java
new file mode 100644
index 0000000..1626cca
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrCrop.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrGlobal.pojoIr;
+
+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 lombok.*;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/24  9:43
+ * @LastEditTime :2024/5/24  9:43
+ * @Description
+ */
+
+/**
+ * 浣滅墿琛�
+ */
+@TableName(value="ir_crop", autoResultMap = true)
+@Data
+@ToString
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "浣滅墿瀹炰綋")
+public class IrCrop implements BaseEntity {
+    /**
+     * 涓婚敭
+     */
+    @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 = "浣滅墿鍚嶇О涓嶈兘涓虹┖")
+    private String cropName;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String remarks;
+
+    /**
+     * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
+     */
+    @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Byte deleted;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupUnit.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupUnit.java
index 766d3db..8256734 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupUnit.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupUnit.java
@@ -69,9 +69,5 @@
     private Date operateDt;
 
 
-    /**
-     * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
-     */
-    @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Byte deleted;
+
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateScheduling.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateScheduling.java
new file mode 100644
index 0000000..b11142a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateScheduling.java
@@ -0,0 +1,98 @@
+package com.dy.pipIrrGlobal.pojoIr;
+
+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 jakarta.validation.constraints.NotNull;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/25  9:41
+ * @LastEditTime :2024/5/25  9:41
+ * @Description
+ */
+/**
+ * 鐏屾簤鍒跺害琛�
+ */
+
+@TableName(value="ir_irrigate_scheduling", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "椤圭洰瀹炰綋")
+public class IrIrrigateScheduling implements BaseEntity {
+
+    public static final long serialVersionUID = 202405270901001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+     * 浣滅墿id
+     */
+    @Schema(description = "浣滅墿id", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "浣滅墿id涓嶈兘涓虹┖")
+    private Long cropId;
+
+    /**
+     * 浣滅墿鐢熼暱鏈�
+     */
+    @Schema(description = "浣滅墿鐢熼暱鏈�", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "浣滅墿鐢熼暱鏈熶笉澶т簬{max}瀛�",max = 10)
+    private String growthPeriod;
+
+    /**
+     * 鐏屾按鍛ㄦ湡
+     */
+    @Schema(description = "鐏屾按鍛ㄦ湡", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "鐏屾按鍛ㄦ湡涓嶈兘涓虹┖")
+    private Integer irrigateCycle;
+
+    /**
+     * 鐏屾按寤剁画鏃堕棿
+     */
+    @Schema(description = "鐏屾按寤剁画鏃堕棿", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "鐏屾按寤剁画鏃堕棿涓嶈兘涓虹┖")
+    private Integer duration;
+
+    /**
+     * 澶囨敞
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜篒D
+     */
+    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鎿嶄綔浜篒D涓嶈兘涓虹┖")
+    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;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCrop.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCrop.java
new file mode 100644
index 0000000..14f8e45
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCrop.java
@@ -0,0 +1,22 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/25  9:29
+ * @LastEditTime :2024/5/25  9:29
+ * @Description
+ */
+@Data
+@Schema(name = "浣滅墿瑙嗗浘")
+public class VoCrop implements BaseEntity {
+    @Schema(description = "瀹炰綋id")
+    private Long id;
+
+    @Schema(description = "浣滅墿鍚嶇О")
+    private String cropName;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCropOne.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCropOne.java
new file mode 100644
index 0000000..e56e48d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoCropOne.java
@@ -0,0 +1,25 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/25  10:00
+ * @LastEditTime :2024/5/25  10:00
+ * @Description
+ */
+@Data
+@Schema(name = "浣滅墿瑙嗗浘")
+public class VoCropOne implements BaseEntity {
+
+    @Schema(description = "瀹炰綋id")
+    private Long id;
+
+    @Schema(description = "浣滅墿鍚嶇О")
+    private String cropName;
+
+    @Schema(description = "澶囨敞")
+    private String remarks;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoScheduling.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoScheduling.java
new file mode 100644
index 0000000..ee86118
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoScheduling.java
@@ -0,0 +1,34 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  10:34
+ * @LastEditTime :2024/5/27  10:34
+ * @Description
+ */
+@Data
+@Schema(name = "浣滅墿鐏屾簤鍒跺害瑙嗗浘")
+public class VoScheduling implements BaseEntity {
+
+    @Schema(description = "鐏屾簤鍒跺害瀹炰綋id")
+    private String id;
+
+    @Schema(description = "浣滅墿鍚嶇О")
+    private String cropName;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private String growthPeriod;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private int irrigateCycle;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private int duration;
+
+    @Schema(description = "澶囨敞")
+    private String remarks;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoSchedulingOne.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoSchedulingOne.java
new file mode 100644
index 0000000..0bd54e4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoSchedulingOne.java
@@ -0,0 +1,48 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  13:59
+ * @LastEditTime :2024/5/27  13:59
+ * @Description
+ */
+@Data
+@Schema(name = "浣滅墿鐏屾簤鍒跺害瑙嗗浘")
+public class VoSchedulingOne implements BaseEntity {
+
+    @Schema(description = "鐏屾簤鍒跺害瀹炰綋id")
+    private String id;
+
+    @Schema(description = "浣滅墿id")
+    private String cropId;
+
+    @Schema(description = "浣滅墿鍚嶇О")
+    private String cropName;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private String growthPeriod;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private int irrigateCycle;
+
+    @Schema(description = "浣滅墿鐢熼暱鏈�")
+    private int duration;
+
+    @Schema(description = "澶囨敞")
+    private String remarks;
+
+    @Schema(description = "鎿嶄綔浜篒D")
+    private String operator;
+
+    @Schema(description = "鎿嶄綔浜哄悕瀛�")
+    private String operatorName;
+
+    @Schema(description = "鎿嶄綔鏃堕棿")
+    private Date operateDt;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnit.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnit.java
index a6aaed0..dad0e72 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnit.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnit.java
@@ -21,7 +21,7 @@
     public String projectName;
 
     @Schema(description = "杞亴缁勭紪鐮�")
-    private int groupCode;
+    private String groupCode;
 
     @Schema(description = "鐏屾簤鍗曞厓ID")
     private String unitId;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnitOne.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnitOne.java
index 446a101..3ff7458 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnitOne.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoUnitOne.java
@@ -19,7 +19,7 @@
     public String projectName;
 
     @Schema(description = "杞亴缁勭紪鐮�")
-    private int groupCode;
+    private String groupCode;
 
     @Schema(description = "鐏屾簤鍗曞厓ID")
     private String id;
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
index d08d509..22cbe00 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
@@ -9,6 +9,8 @@
             username: root
             password: dysql,;.abc!@#
             druid:
+                # 鏁版嵁婧愬悕绉帮細褰撳瓨鍦ㄥ涓暟鎹簮鏃讹紝璁剧疆鍚嶅瓧鍙互寰堟柟渚跨殑鏉ヨ繘琛屽尯鍒�,榛樿鑷姩鐢熸垚鍚嶇О锛屾牸寮忔槸锛�"DataSource-" + System.identityHashCode(this)
+                name: druid-mysql-pj
                 #閰嶇疆鍒濆鍖栧ぇ灏忋�佹渶灏忋�佹渶澶�
                 initialSize: 1
                 minIdle: 1
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
index 07d84de..2c43ab8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
@@ -9,12 +9,14 @@
             username: root
             password: dysql,;.abc!@#
             druid:
+                # 鏁版嵁婧愬悕绉帮細褰撳瓨鍦ㄥ涓暟鎹簮鏃讹紝璁剧疆鍚嶅瓧鍙互寰堟柟渚跨殑鏉ヨ繘琛屽尯鍒�,榛樿鑷姩鐢熸垚鍚嶇О锛屾牸寮忔槸锛�"DataSource-" + System.identityHashCode(this)
+                name: druid-mysql-ym
                 #閰嶇疆鍒濆鍖栧ぇ灏忋�佹渶灏忋�佹渶澶�
-                initialSize: 1
-                minIdle: 1
-                maxActive: 100
-                #閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂达紝鍗曚綅鏄绉�
-                maxWait: 6000
+                initialSize: 10
+                minIdle: 10
+                maxActive: 200
+                # 鑾峰彇杩炴帴鏃舵渶澶х瓑寰呮椂闂�,鍗曚綅姣銆傞厤缃簡maxWait涔嬪悗,缂虹渷鍚敤鍏钩閿�,骞跺彂鏁堢巼浼氭湁鎵�涓嬮檷,濡傛灉闇�瑕佸彲浠ラ�氳繃閰嶇疆useUnfairLock灞炴�т负true浣跨敤闈炲叕骞抽攣
+                maxWait: 60000
                 #閰嶇疆闂撮殧澶氫箙杩涜涓�娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆绉掋�� 榛樿鏄�60s锛屽お闀垮彲鑳戒細瀵艰嚧鏃犳硶鍙婃椂妫�娴嬪埌杩炴帴涓柇
                 timeBetweenEvictionRunsMillis: 60000
                 #閰嶇疆涓�涓繛鎺ュ湪杩炴帴姹犱腑鐨勬渶灏忕敓瀛樻椂闂淬�佹渶澶х敓瀛樻椂闂达紝瓒呰繃鏈�澶х敓瀛樻椂闂翠細琚Щ闄わ紝鍗曚綅姣銆�
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrCropMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrCropMapper.xml
new file mode 100644
index 0000000..fb1c0b8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrCropMapper.xml
@@ -0,0 +1,109 @@
+<?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.daoIr.IrCropMapper">
+    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrCrop">
+        <!--@mbg.generated-->
+        <!--@Table ir_crop-->
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="crop_name" jdbcType="VARCHAR" property="cropName" />
+        <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+        <result column="deleted" jdbcType="TINYINT" property="deleted" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id, crop_name, remarks, deleted
+    </sql>
+    <!--娣诲姞-->
+    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrCrop">
+        insert into ir_crop
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="cropName != null">
+                crop_name,
+            </if>
+            <if test="remarks != null">
+                remarks,
+            </if>
+            <if test="deleted != null">
+                deleted,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=BIGINT},
+            </if>
+            <if test="cropName != null">
+                #{cropName,jdbcType=VARCHAR},
+            </if>
+            <if test="remarks != null">
+                #{remarks,jdbcType=VARCHAR},
+            </if>
+            <if test="deleted != null">
+                #{deleted,jdbcType=TINYINT},
+            </if>
+        </trim>
+    </insert>
+    <!--閫昏緫鍒犻櫎-->
+    <delete id="deleteLogicById" parameterType="java.lang.Long">
+        <!--@mbg.generated-->
+        update ir_crop
+        set deleted = 1
+        where id = #{id,jdbcType=BIGINT}
+    </delete>
+
+    <!--淇敼淇℃伅-->
+    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrCrop">
+        update ir_crop
+        <set>
+            <if test="cropName != null">
+                crop_name = #{cropName,jdbcType=VARCHAR},
+            </if>
+            <if test="remarks != null">
+                remarks = #{remarks,jdbcType=VARCHAR},
+            </if>
+            <if test="deleted != null">
+                deleted = #{deleted,jdbcType=TINYINT},
+            </if>
+        </set>
+        where id = #{id,jdbcType=BIGINT}
+    </update>
+
+    <select id="getRecordCount" resultType="java.lang.Long">
+        SELECT COUNT(*) AS recordCount
+        FROM ir_crop cro
+        <where>
+            cro.deleted = 0
+            <if test="cropName != null and cropName != ''">
+                AND cro.crop_name LIKE CONCAT('%', #{cropName}, '%')
+            </if>
+        </where>
+    </select>
+
+    <select id="getCrops" resultType="com.dy.pipIrrGlobal.voIr.VoCrop">
+        SELECT
+        CAST(cro.id AS char)AS id,
+        cro.crop_name  AS  cropName
+        FROM ir_crop cro
+        <where>
+            cro.deleted = 0
+            <if test="cropName != null and cropName != ''">
+                AND cro.crop_name LIKE CONCAT('%', #{cropName}, '%')
+            </if>
+        </where>
+        <if test="pageCurr != null and pageSize != null">
+            LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+        </if>
+    </select>
+
+    <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoCropOne">
+        select
+        CAST(cro.id AS char)AS id,
+        cro.crop_name  AS  cropName,
+        cro.remarks
+        from ir_crop cro
+        where cro.id = #{id,jdbcType=BIGINT} and cro.deleted = 0
+
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupUnitMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupUnitMapper.xml
index 4fa6d92..de655c8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupUnitMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupUnitMapper.xml
@@ -9,12 +9,11 @@
         <result column="unit_id" jdbcType="BIGINT" property="unitId" />
         <result column="operator" jdbcType="BIGINT" property="operator" />
         <result column="operate_time" jdbcType="TIMESTAMP" property="operateDt" />
-        <result column="deleted" jdbcType="TINYINT" property="deleted" />
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         id, group_id, unit_id, `operator`,
-        operate_time, deleted
+        operate_time
     </sql>
 
     <!--娣诲姞-->
@@ -37,9 +36,7 @@
             <if test="operateDt != null">
                 operate_time,
             </if>
-            <if test="deleted != null">
-                deleted,
-            </if>
+
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -57,35 +54,33 @@
             <if test="operateDt != null">
                 #{operateDt,jdbcType=TIMESTAMP},
             </if>
-            <if test="deleted != null">
-                #{deleted,jdbcType=TINYINT},
-            </if>
+
         </trim>
     </insert>
 
-    <!--閫昏緫鍒犻櫎-->
-    <delete id="deleteLogicById" parameterType="java.lang.Long">
-        <!--@mbg.generated-->
-        update ir_group_unit
-        set deleted = 1
-        where id = #{id,jdbcType=BIGINT}
-    </delete>
+
 
     <delete id="deleteByUnitIdGroupId" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupUnit">
-        update ir_group_unit
-        set deleted = 1,operator = #{operator,jdbcType=BIGINT},operate_time = #{operateDt,jdbcType=TIMESTAMP}
+        delete from ir_group_unit
         where group_id = #{groupId,jdbcType=BIGINT} and unit_id = #{unitId,jdbcType=BIGINT}
     </delete>
 
     <delete id="deleteByUnitId">
-        update ir_group_unit
-        set deleted = 1
+        delete from ir_group_unit
         where unit_id = #{unitId,jdbcType=BIGINT}
     </delete>
 
     <delete id="deleteByGroupId">
-        update ir_group_unit
-        set deleted = 1
+        delete from ir_group_unit
         where group_id = #{groupId,jdbcType=BIGINT}
     </delete>
+
+<!--    //鏌ヤ竴涓疆鐏岀粍缁戝畾鐨勭亴婧夊崟鍏僫d-->
+    <select id="getGroupBindUnits" parameterType="Long" resultType="java.lang.Long">
+        SELECT unit_id AS unitId FROM `ir_group_unit`WHERE group_id = #{groupId,jdbcType=BIGINT}
+    </select>
+
+    <select id="getNotBindUnits" resultType="java.lang.Long">
+        SELECT id FROM ir_irrigate_unit  WHERE id NOT IN (SELECT unit_id  FROM ir_group_unit)
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml
index fa78683..ae93ff0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml
@@ -119,7 +119,7 @@
         left join ir_project pro on pro.id = gro.project_id
         left join se_client cli on cli.id = gro.operator
         left join ir_group_unit gu on gu.group_id = gro.id
-        where gro.id = #{id,jdbcType=BIGINT} and gro.deleted = 0 and gu.deleted = 0 and pro.deleted = 0
+        where gro.id = #{id,jdbcType=BIGINT} and gro.deleted = 0  and pro.deleted != 1
     </select>
 
     <!--鍒嗛〉鏌ヨ疆鐏岀粍-->
@@ -139,7 +139,7 @@
         left join se_client cli on cli.id = gro.operator
         left join ir_group_unit gu on gu.group_id = gro.id
         <where>
-            gro.deleted = 0 and gu.deleted = 0 and pro.deleted = 0
+             gro.deleted = 0  and pro.deleted != 1
             <if test="projectName != null and projectName != ''">
                 AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
             </if>
@@ -147,6 +147,7 @@
             AND gro.group_code = #{groupCode}
         </if>
         </where>
+        GROUP BY gro.id
         ORDER BY gro.operate_time DESC
         <if test="pageCurr != null and pageSize != null">
             LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
@@ -154,13 +155,14 @@
     </select>
     <!--鍒嗛〉鏌ヨ疆鐏岀粍璁板綍鏁�-->
     <select id="getRecordCount" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
+     SELECT COUNT(*) FROM(
+        SELECT COUNT(*),gro.id AS recordCount
         from ir_irrigate_group gro
         left join ir_project pro on pro.id = gro.project_id
         left join se_client cli on cli.id = gro.operator
         left join ir_group_unit gu on gu.group_id = gro.id
         <where>
-            gro.deleted = 0 and gu.deleted = 0 and pro.deleted = 0
+             gro.deleted = 0  and pro.deleted != 1
             <if test="projectName != null and projectName != ''">
                 AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
             </if>
@@ -168,5 +170,7 @@
                 AND gro.group_code = #{groupCode}
             </if>
         </where>
+        GROUP BY gro.id
+        ) a
     </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateSchedulingMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateSchedulingMapper.xml
new file mode 100644
index 0000000..4346fd1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateSchedulingMapper.xml
@@ -0,0 +1,173 @@
+<?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.daoIr.IrIrrigateSchedulingMapper">
+    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrIrrigateScheduling">
+        <!--@mbg.generated-->
+        <!--@Table ir_irrigate_scheduling-->
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="crop_id" jdbcType="BIGINT" property="cropId" />
+        <result column="growth_period" jdbcType="VARCHAR" property="growthPeriod" />
+        <result column="irrigate_cycle" jdbcType="INTEGER" property="irrigateCycle" />
+        <result column="duration" jdbcType="INTEGER" property="duration" />
+        <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+        <result column="operator" jdbcType="BIGINT" property="operator" />
+        <result column="operate_time" jdbcType="TIMESTAMP" property="operateDt" />
+        <result column="deleted" jdbcType="TINYINT" property="deleted" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id, crop_id,growth_period,irrigate_cycle,duration, remarks,operator,operate_time, deleted
+    </sql>
+    <!--娣诲姞-->
+    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateScheduling">
+        insert into ir_irrigate_scheduling
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="cropId != null">
+                crop_id,
+            </if>
+            <if test="growthPeriod != null">
+                growth_period,
+            </if>
+            <if test="irrigateCycle != null">
+                irrigate_cycle,
+            </if>
+            <if test="duration != null">
+                duration,
+            </if>
+            <if test="operator != null">
+                operator,
+            </if>
+            <if test="operateDt != null">
+                operate_time,
+            </if>
+            <if test="remarks != null">
+                remarks,
+            </if>
+            <if test="deleted != null">
+                deleted,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=BIGINT},
+            </if>
+            <if test="cropId != null">
+                #{cropId,jdbcType=BIGINT},
+            </if>
+            <if test="growthPeriod != null">
+                #{growthPeriod,jdbcType=VARCHAR},
+            </if>
+            <if test="irrigateCycle != null">
+                #{irrigateCycle,jdbcType=INTEGER},
+            </if>
+            <if test="duration != null">
+                #{duration,jdbcType=INTEGER},
+            </if>
+            <if test="operator != null">
+                #{operator,jdbcType=BIGINT},
+            </if>
+            <if test="operateDt != null">
+                #{operateDt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="remarks != null">
+                #{remarks,jdbcType=VARCHAR},
+            </if>
+            <if test="deleted != null">
+                #{deleted,jdbcType=TINYINT},
+            </if>
+        </trim>
+    </insert>
+    <!--閫昏緫鍒犻櫎-->
+    <delete id="deleteLogicById" parameterType="java.lang.Long">
+        <!--@mbg.generated-->
+        update ir_irrigate_scheduling
+        set deleted = 1
+        where id = #{id,jdbcType=BIGINT}
+    </delete>
+
+    <!--淇敼淇℃伅-->
+    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateScheduling">
+        update ir_irrigate_scheduling
+        <set>
+            <if test="cropId != null">
+                crop_id = #{cropId,jdbcType=BIGINT},
+            </if>
+            <if test="growthPeriod != null">
+                growth_period = #{growthPeriod,jdbcType=VARCHAR},
+            </if>
+            <if test="irrigateCycle != null">
+                irrigate_cycle = #{irrigateCycle,jdbcType=INTEGER},
+            </if>
+            <if test="duration != null">
+                duration = #{duration,jdbcType=INTEGER},
+            </if>
+            <if test="operator != null">
+                operator = #{operator,jdbcType=BIGINT},
+            </if>
+            <if test="operateDt != null">
+                operate_time = #{operateDt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="remarks != null">
+                remarks = #{remarks,jdbcType=VARCHAR},
+            </if>
+            <if test="deleted != null">
+                deleted = #{deleted,jdbcType=TINYINT},
+            </if>
+        </set>
+        where id = #{id,jdbcType=BIGINT}
+    </update>
+
+    <select id="getRecordCount" resultType="java.lang.Long">
+        SELECT COUNT(*) AS recordCount
+        from ir_irrigate_scheduling sch
+        left join ir_crop cro on cro.id = sch.crop_id
+        <where>
+            sch.deleted = 0
+            <if test="cropName != null and cropName != ''">
+                AND cro.crop_name LIKE CONCAT('%', #{cropName}, '%')
+            </if>
+        </where>
+    </select>
+
+    <select id="getSchedulings" resultType="com.dy.pipIrrGlobal.voIr.VoScheduling">
+        SELECT
+        CAST(sch.id AS char)AS id,
+        cro.crop_name  AS  cropName,
+        sch.growth_period AS growthPeriod,
+        sch.irrigate_cycle AS irrigateCycle,
+        sch.remarks  AS remarks,
+        sch.duration AS duration
+        from ir_irrigate_scheduling sch
+        left join ir_crop cro on cro.id = sch.crop_id
+        <where>
+            sch.deleted = 0
+            <if test="cropName != null and cropName != ''">
+                AND cro.crop_name LIKE CONCAT('%', #{cropName}, '%')
+            </if>
+        </where>
+        <if test="pageCurr != null and pageSize != null">
+            LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+        </if>
+    </select>
+
+    <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoSchedulingOne">
+        select
+        CAST(sch.id AS char)AS id,
+        CAST(cro.id AS char)AS cropId,
+        cro.crop_name  AS  cropName,
+        sch.growth_period AS growthPeriod,
+        sch.irrigate_cycle AS irrigateCycle,
+        sch.duration AS duration,
+        sch.remarks  AS remarks,
+        CAST(sch.operator AS char)AS operator,
+        cli.name         AS operatorName,
+        sch.operate_time  AS operateDt
+        from ir_irrigate_scheduling sch
+        left join ir_crop cro on cro.id = sch.crop_id
+        left join se_client cli on cli.id = sch.operator
+        where sch.id = #{id,jdbcType=BIGINT} and sch.deleted = 0
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateUnitMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateUnitMapper.xml
index 0c9c37a..b0fdd3c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateUnitMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateUnitMapper.xml
@@ -110,12 +110,15 @@
         CAST(uni.id AS char)AS id,
         CAST(uni.operator AS char)AS operator,
         cli.name         AS operatorName,
+        gru.group_code         AS groupCode,
         uni.area,
         uni.remarks,
         uni.operate_time  AS  operateDt
         from ir_irrigate_unit uni
         left join ir_project pro on pro.id = uni.project_id
         left join se_client cli on cli.id = uni.operator
+        left join ir_group_unit gu on gu.unit_id = uni.id
+        left join ir_irrigate_group gru on gru.id = gu.group_id
         where uni.id = #{id,jdbcType=BIGINT} and uni.deleted = 0
     </select>
     <!--鍒嗛〉鏌ョ亴婧夊崟鍏�-->
@@ -126,20 +129,23 @@
         CAST(uni.id AS char)AS unitId,
         CAST(uni.operator AS char)AS operator,
         cli.name         AS operatorName,
+        gru.group_code         AS groupCode,
         uni.area,
         uni.remarks,
         uni.operate_time  AS  operateDt
         FROM ir_irrigate_unit uni
         left join ir_project pro on pro.id = uni.project_id
         left join se_client cli on cli.id = uni.operator
+        left join ir_group_unit gu on gu.unit_id = uni.id
+        left join ir_irrigate_group gru on gru.id = gu.group_id
         <where>
             uni.deleted = 0
             <if test="projectName != null and projectName != ''">
                 AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
             </if>
-<!--            <if test = "groupCode != null and groupCode != ''">-->
-<!--                AND pro.project_state = #{groupCode}-->
-<!--            </if>-->
+            <if test = "groupCode != null and groupCode != ''">
+                AND gru.group_code = #{groupCode}
+            </if>
         </where>
         ORDER BY uni.operate_time DESC
         <if test="pageCurr != null and pageSize != null">
@@ -152,14 +158,16 @@
         FROM ir_irrigate_unit uni
         left join ir_project pro on pro.id = uni.project_id
         left join se_client cli on cli.id = uni.operator
+        left join ir_group_unit gu on gu.unit_id = uni.id
+        left join ir_irrigate_group gru on gru.id = gu.group_id
         <where>
             uni.deleted = 0
             <if test="projectName != null and projectName != ''">
                 AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
             </if>
-            <!--            <if test = "groupCode != null and groupCode != ''">-->
-            <!--                AND pro.project_state = #{groupCode}-->
-            <!--            </if>-->
+                        <if test = "groupCode != null and groupCode != ''">
+                            AND gru.group_code = #{groupCode}
+                        </if>
         </where>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
index 9a35e83..ccde4de 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -7,4 +7,11 @@
         username: root
         password: dysql,;.abc!@#
         druid:
-        # 璇存槑: 濡傛灉浣犳病鏈夋寚瀹歶seSSL=true ,鍚姩椤圭洰浼氭姤绾㈣鍛�, 鐜鐨勯棶棰橈紝瑕佺伒娲诲鐞�
\ No newline at end of file
+            #鏁版嵁婧愬悕绉帮細褰撳瓨鍦ㄥ涓暟鎹簮鏃讹紝璁剧疆鍚嶅瓧鍙互寰堟柟渚跨殑鏉ヨ繘琛屽尯鍒�,榛樿鑷姩鐢熸垚鍚嶇О锛屾牸寮忔槸锛�"DataSource-" + System.identityHashCode(this)
+            #name: name: druid-mysql-mw-rtu 鍗曟暟鎹簮涓嶈捣浣滅敤锛屾墍浠ユ敞閲婃帀
+            #閰嶇疆鍒濆鍖栧ぇ灏忋�佹渶灏忋�佹渶澶�
+            initialSize: 10
+            minIdle: 10
+            maxActive: 200
+            # 鑾峰彇杩炴帴鏃舵渶澶х瓑寰呮椂闂�,鍗曚綅姣銆傞厤缃簡maxWait涔嬪悗,缂虹渷鍚敤鍏钩閿�,骞跺彂鏁堢巼浼氭湁鎵�涓嬮檷,濡傛灉闇�瑕佸彲浠ラ�氳繃閰嶇疆useUnfairLock灞炴�т负true浣跨敤闈炲叕骞抽攣
+            maxWait: 60000
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml
index c2dcc3f..afbac2b 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml
@@ -62,7 +62,7 @@
             AppenderRef: #Root鐨勫瓙鑺傜偣锛岀敤鏉ユ寚瀹氳鏃ュ織杈撳嚭鍒板摢涓狝ppender.
                 - ref: CONSOLE #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.Console.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
                 - ref: ROLLING_FILE  #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.RollingFile.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
-        # 涓哄寘閰嶇疆鐗规畩鐨凩og绾у埆锛屾柟渚胯皟璇曪紝
+        # 涓虹被鍖呰矾寰勯厤缃壒娈婄殑Log绾у埆锛屾柟渚胯皟璇曪紝
         # 涓嶅彈Loggers.Root.level闄愬埗
         Logger:
             - name: com.dy.pipIrrGlobal.daoBa
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/PipIrrMwTestWebApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/PipIrrMwTestWebApplication.java
index 395a6ad..4fb99e3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/PipIrrMwTestWebApplication.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/PipIrrMwTestWebApplication.java
@@ -1,9 +1,7 @@
 package com.dy.pipIrrMwTestWeb;
 
-import com.dy.common.webUtil.BaseResponse;
 import com.dy.pipIrrMwTestWeb.test.CommandCtrl;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java
index ec70bf2..e121ea3 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java
@@ -21,13 +21,21 @@
     @GetMapping(path = "test")
     public BaseResponse<String> test() {
         //return this.connect() ;//杩炴帴閫氫俊涓棿浠舵祴璇�
-        //return this.cdXY(CodeV202404.cd_30) ;//鍙戦�佸浐瀹氬弬鏁癤Y鐨勫懡浠�
+        //return this.cdXY(CodeV202404.cd_9C) ;//鍙戦�佸浐瀹氬弬鏁癤Y鐨勫懡浠�
         //return this.cd55(1) ;
         //return this.cd15() ;
         //return this.cd16() ;
+        //return this.cd21() ;
         //return this.cd22() ;
+        //return this.cd23() ;
+        //return this.cd24() ;
+        //return this.cd26() ;
         //return this.cd31() ;
-        return this.cd92() ;
+        //return this.cd86() ;
+        //return this.cd87() ;
+        //return this.cd92() ;
+        //return this.cd93() ;
+        return this.cd9C() ;
     }
 
     /**
@@ -80,8 +88,8 @@
         comVo.controllerType = CommandCtrl.controllerType ;
         comVo.projectNo = CommandCtrl.projectNo  ;
         comVo.channel = 1 ;//IP閫氶亾鍙�(鍙栧�艰寖鍥� 1銆�2).
-        comVo.ip = "111.222.123.321" ;//IP锛堜緥濡� 125.235.35.89锛�
-        comVo.port = 60000 ;///绔彛鍙凤紙0~65536锛�
+        comVo.ip = "8.140.180.59" ;//IP锛堜緥濡� 125.235.35.89锛�
+        comVo.port = 6001 ;///绔彛鍙凤紙0~65536锛�
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_21, comVo, null)) ;
     }
@@ -90,8 +98,8 @@
         ComCd22Vo comVo = new ComCd22Vo() ;
         comVo.controllerType = CommandCtrl.controllerType ;
         comVo.projectNo = CommandCtrl.projectNo  ;
-        comVo.maxAmountYear = 12345 ;//鏈轰簳骞存渶澶х敤姘撮噺鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
-        comVo.limitLevel = 123.4; //姘翠綅涓嬮檺 鍗曚綅锛歮 鍙栧�艰寖鍥�:0~9999.99
+        comVo.maxAmountYear = 99998888 ;//鏈轰簳骞存渶澶х敤姘撮噺鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
+        comVo.limitLevel = 9978.60; //姘翠綅涓嬮檺 鍗曚綅锛歮 鍙栧�艰寖鍥�:0~9999.99
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_22, comVo, null)) ;
     }
@@ -101,8 +109,8 @@
         comVo.controllerType = CommandCtrl.controllerType ;
         comVo.projectNo = CommandCtrl.projectNo  ;
         comVo.channel = 1 ;//IP閫氶亾鍙�(鍙栧�艰寖鍥� 1銆�2).
-        comVo.domain = "www.baidu.com" ;//鍩熷悕锛堜緥濡� dayuyanjiuyuan.to锛夛紝鏈�澶ч暱搴�42瀛楃
-        comVo.port = 60000 ;///绔彛鍙凤紙0~65536锛�
+        comVo.domain = "dayuyanjiuyuan.top" ;//鍩熷悕锛堜緥濡� dayuyanjiuyuan.top锛夛紝鏈�澶ч暱搴�42瀛楃
+        comVo.port = 6001 ;///绔彛鍙凤紙0~65536锛�
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_23, comVo, null)) ;
     }
@@ -111,7 +119,7 @@
         ComCd24Vo comVo = new ComCd24Vo() ;
         comVo.controllerType = CommandCtrl.controllerType ;
         comVo.projectNo = CommandCtrl.projectNo  ;
-        comVo.registerNo = "102030405060708090" ;//鍩熷悕锛堜緥濡� dayuyanjiuyuan.to锛夛紝鏈�澶ч暱搴�42瀛楃
+        comVo.registerNo = "10203040506070809000" ;//
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_24, comVo, null)) ;
     }
@@ -120,8 +128,7 @@
         ComCd26Vo comVo = new ComCd26Vo() ;
         comVo.controllerType = CommandCtrl.controllerType ;
         comVo.projectNo = CommandCtrl.projectNo  ;
-        comVo.ipChannel = 1  ;//IP閫氶亾鍙� 0x01:1閫氶亾 0x02:2閫氶亾.
-        comVo.maxAmountYear = 123456  ;//璁惧缁堢骞寸敤姘撮噺 鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
+        comVo.maxAmountYear = 200  ;//璁惧缁堢骞寸敤姘撮噺 鍗曚綅锛歮3 鏁存暟锛屽彇鍊艰寖鍥�0~99999999
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_26, comVo, null)) ;
     }
@@ -208,6 +215,16 @@
 
         return this.sendCom2Mw(this.command(CodeV202404.cd_93, comVo, null)) ;
     }
+
+   //骞冲彴/APP杩滅▼鍏抽棴姘存车/闃�闂�(AFN=0x93H/AFN=0xA3H)
+    private BaseResponse cd9C(){
+        ComCd9CVo comVo = new ComCd9CVo() ;
+        comVo.controllerType = CommandCtrl.controllerType ;
+        comVo.projectNo = CommandCtrl.projectNo  ;
+        comVo.icCardAddr = "04BEA5BB" ;//
+
+        return this.sendCom2Mw(this.command(CodeV202404.cd_9C, comVo, null)) ;
+    }
     //骞冲彴/APP杩滅▼鍏抽棴姘存车/闃�闂�(AFN=0x93H/AFN=0xA3H)
     private BaseResponse cdA3(){
         ComCd93_A3Vo comVo = new ComCd93_A3Vo() ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropCtrl.java
new file mode 100644
index 0000000..544ad1c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropCtrl.java
@@ -0,0 +1,202 @@
+package com.dy.pipIrrIrrigate.crop;
+
+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.pojoIr.IrCrop;
+import com.dy.pipIrrGlobal.pojoIr.IrProject;
+import com.dy.pipIrrGlobal.voIr.VoCrop;
+import com.dy.pipIrrGlobal.voIr.VoCropOne;
+import com.dy.pipIrrGlobal.voIr.VoProject;
+import com.dy.pipIrrGlobal.voIr.VoProjectOne;
+import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import com.dy.pipIrrIrrigate.crop.QueryVo;
+import com.dy.pipIrrIrrigate.result.IrrigateResultCode;
+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.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/24  19:38
+ * @LastEditTime :2024/5/24  19:38
+ * @Description
+ */
+@Slf4j
+@Tag(name = "浣滅墿绠$悊", description = "浣滅墿鎿嶄綔")
+@RestController
+@RequestMapping(path = "crop")
+@RequiredArgsConstructor
+public class CropCtrl {
+
+    private final CropSv cropSv;
+
+    /**
+     * 娣诲姞浣滅墿
+     *
+     * @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 = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid IrCrop po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        try {
+            Integer rec = Optional.ofNullable(cropSv.addCrop(po)).orElse(0);
+            if (rec == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.ADD_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("娣诲姞浣滅墿寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+
+    /**
+     * 閫昏緫鍒犻櫎浣滅墿
+     * @param map
+     * @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 = "delete", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> delete(@RequestBody Map map) {
+        if (map == null || map.size() <= 0) {
+            BaseResponseUtils.buildFail(IrrigateResultCode.PLEASE_INPUT_PROJECT_ID.getMessage());
+        }
+        Long cropId = Long.parseLong(map.get("id").toString());
+        try {
+            Integer rows = cropSv.deleteCrop(cropId);
+            if (rows == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.DELETE_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("鍒犻櫎浣滅墿寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+
+    /**
+     * 淇敼浣滅墿淇℃伅
+     * @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 IrCrop po, BindingResult bindingResult){
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        try {
+            Integer rec = Optional.ofNullable(cropSv.updateCrop(po)).orElse(0);
+            if (rec == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.UPDATE_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("淇敼浣滅墿寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @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 = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoCrop>>> getCrops(QueryVo vo) {
+        try {
+            QueryResultVo<List<VoCrop>> res = cropSv.getCrops(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇浣滅墿璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鑾峰彇涓�涓綔鐗╂暟鎹�
+     *
+     * @return 鑾峰彇涓�涓綔鐗╂暟鎹�
+     */
+    @Operation(summary = "鑾峰彇涓�涓綔鐗╂暟鎹�", description = "鑾峰彇涓�涓綔鐗╂暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鑾峰彇涓�涓綔鐗╂暟鎹紙BaseResponse.content:{}锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = IrProject.class))}
+            )
+    })
+    @GetMapping(path = "one")
+    @SsoAop()
+    public BaseResponse<VoCropOne> one(@RequestParam Long id) {
+        VoCropOne irCrop = this.cropSv.selectById(id);
+
+        return BaseResponseUtils.buildSuccess(irCrop);
+
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropSv.java
new file mode 100644
index 0000000..820d557
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropSv.java
@@ -0,0 +1,99 @@
+package com.dy.pipIrrIrrigate.crop;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoIr.IrCropMapper;
+
+import com.dy.pipIrrGlobal.pojoIr.IrCrop;
+import com.dy.pipIrrGlobal.voIr.VoCrop;
+import com.dy.pipIrrGlobal.voIr.VoCropOne;
+import com.dy.pipIrrGlobal.voIr.VoProjectOne;
+import com.dy.pipIrrIrrigate.crop.QueryVo;
+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.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/24  19:38
+ * @LastEditTime :2024/5/24  19:38
+ * @Description
+ */
+@Slf4j
+@Service
+public class CropSv {
+
+    @Autowired
+    private IrCropMapper irCropMapper;
+
+    /**
+     * 娣诲姞椤圭洰
+     *
+     * @param po
+     * @return
+     */
+    public Integer addCrop(IrCrop po) {
+        po.setDeleted((byte) 0);
+        int rows = irCropMapper.insertSelective(po);
+        if (rows == 0) {
+            return 0;
+        }
+        return 1;
+    }
+    /**
+     * 鍒犻櫎椤圭洰
+     *
+     * @param id
+     */
+    public Integer deleteCrop(Long id) {
+        int rows = irCropMapper.deleteLogicById(id);
+        if (rows == 0) {
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * 淇敼椤圭洰淇℃伅
+     * @param po
+     * @return
+     */
+    public Integer updateCrop(IrCrop po){
+        int rows = irCropMapper.updateByPrimaryKeySelective(po);
+        if (rows == 0){
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ椤圭洰
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoCrop>> getCrops(QueryVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = irCropMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoCrop>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = irCropMapper.getCrops(params);
+        return rsVo;
+    }
+
+    /**
+     * 鑾峰彇涓�涓綔鐗╂暟鎹�
+     * @param id
+     * @return
+     */
+    public VoCropOne selectById(Long id){
+        VoCropOne irCrop = irCropMapper.selectById(id);
+        return irCrop;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/QueryVo.java
new file mode 100644
index 0000000..86217ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/QueryVo.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrIrrigate.crop;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/24  19:53
+ * @LastEditTime :2024/5/24  19:53
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "浣滅墿鏌ヨ鏉′欢")
+public class QueryVo extends QueryConditionVo {
+    @Schema(description = "浣滅墿鍚嶇О")
+    public String cropName;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java
index 092c73d..cb35271 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupCtrl.java
@@ -100,16 +100,16 @@
                             schema = @Schema(implementation = Boolean.class))}
             )
     })
-    @GetMapping(path = "delete")
+    @PostMapping(path = "delete")
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> delete( Long id) {
-        if (id == null ) {
+    public BaseResponse<Boolean> delete(@RequestBody Map map) {
+        if (map == null || map.size() <= 0) {
             BaseResponseUtils.buildFail(IrrigateResultCode.PLEASE_INPUT_PROJECT_ID.getMessage());
         }
-//        Long groupId = Long.parseLong(map.get("id").toString());
+        Long groupId = Long.parseLong(map.get("id").toString());
         try {
-            Integer rows = irrigateGroupSv.deleteIrrigateGroup(id);
+            Integer rows = irrigateGroupSv.deleteIrrigateGroup(groupId);
             if (rows == 0) {
                 return BaseResponseUtils.buildFail(IrrigateResultCode.DELETE_PROJECT_FAIL.getMessage());
             }
@@ -250,14 +250,24 @@
     @PostMapping(path = "add_unit", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> addGroupUnit(@RequestBody @Valid IrGroupUnit po, BindingResult bindingResult) {
+    public BaseResponse<Boolean> addGroupUnit(@RequestBody @Valid Map<String,Object> po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
+        Long groupId = Long.parseLong(po.get("groupId").toString());
+        Long operator = Long.parseLong(po.get("operator").toString());
+        List<Long> unitIds = (List<Long>) po.get("unitIds");
         try {
-            Integer rec = Optional.ofNullable(irrigateGroupSv.addGroupUnit(po)).orElse(0);
-            if (rec == 0) {
-                return BaseResponseUtils.buildFail(IrrigateResultCode.ADD_PROJECT_FAIL.getMessage());
+            for (int i = 0; i < unitIds.size(); i++) {
+                Long unitId = unitIds.get(i);
+                IrGroupUnit irGroupUnit = new IrGroupUnit();
+                irGroupUnit.setGroupId(groupId);
+                irGroupUnit.setUnitId(unitId);
+                irGroupUnit.setOperator(operator);
+                Integer rec = Optional.ofNullable(irrigateGroupSv.addGroupUnit(irGroupUnit)).orElse(0);
+                if (rec == 0) {
+                    return BaseResponseUtils.buildFail(IrrigateResultCode.ADD_PROJECT_FAIL.getMessage());
+                }
             }
         } catch (Exception e) {
             log.error("杞亴缁勬坊鍔犵亴婧夊崟鍏冨紓甯�", e);
@@ -267,7 +277,7 @@
     }
 
     /**
-     * 閫昏緫鍒犻櫎 杞亴缁勭Щ闄ょ亴婧夊崟鍏�
+     *  杞亴缁勭Щ闄ょ亴婧夊崟鍏�
      * @param
      * @return
      */
@@ -283,19 +293,54 @@
     @PostMapping(path = "remove_unit")
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
-    public BaseResponse<Boolean> deleteGroupUnit(@RequestBody @Valid IrGroupUnit po, BindingResult bindingResult) {
+    public BaseResponse<Boolean> deleteGroupUnit(@RequestBody @Valid Map<String,Object> po, BindingResult bindingResult) {
         if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
+        Long groupId = Long.parseLong(po.get("groupId").toString());
+        Long operator = Long.parseLong(po.get("operator").toString());
+        List<Long> unitIds = (List<Long>) po.get("unitIds");
         try {
-            Integer rec = Optional.ofNullable(irrigateGroupSv.deleteGroupUnit(po)).orElse(0);
-            if (rec == 0) {
-                return BaseResponseUtils.buildFail(IrrigateResultCode.DELETE_PROJECT_FAIL.getMessage());
+            for (int i = 0; i < unitIds.size(); i++) {
+                Long unitId = unitIds.get(i);
+                IrGroupUnit irGroupUnit = new IrGroupUnit();
+                irGroupUnit.setGroupId(groupId);
+                irGroupUnit.setUnitId(unitId);
+                irGroupUnit.setOperator(operator);
+                Integer rec = Optional.ofNullable(irrigateGroupSv.deleteGroupUnit(irGroupUnit)).orElse(0);
+                if (rec == 0) {
+                    return BaseResponseUtils.buildFail(IrrigateResultCode.DELETE_PROJECT_FAIL.getMessage());
+                }
             }
+
         } catch (Exception e) {
             log.error("杞亴缁勭Щ闄ょ亴婧夊崟鍏冨紓甯�", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
         return BaseResponseUtils.buildSuccess(true);
     }
+
+    @GetMapping(path = "bind_units")
+    @SsoAop()
+    public BaseResponse<List<Long>> getGroupBindUnits(Long id) {
+        try {
+            List<Long> res = irrigateGroupSv.getGroupBindUnits(id);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇涓�涓疆鐏岀粍缁戝畾鐏屾簤鍗曞厓璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    @GetMapping(path = "notBind_units")
+    @SsoAop()
+    public BaseResponse<List<Long>> getNotBindUnits() {
+        try {
+            List<Long> res = irrigateGroupSv.getNotBindUnits();
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鏈粦瀹氳疆鐏岀粍鐨勭亴婧夊崟鍏僫d璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java
index f776ad5..d1e3e50 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java
@@ -110,7 +110,6 @@
      */
     public Integer addGroupUnit(IrGroupUnit po) {
         po.setOperateDt(new Date());
-        po.setDeleted((byte) 0);
         int rows = irGroupUnitMapper.insertSelective(po);
         if (rows == 0) {
             return 0;
@@ -125,11 +124,29 @@
      * @return
      */
     public Integer deleteGroupUnit(IrGroupUnit po) {
-        po.setOperateDt(new Date());
         int rows = irGroupUnitMapper.deleteByUnitIdGroupId(po);
         if (rows == 0) {
             return 0;
         }
         return 1;
     }
+
+    /**
+     * 鏌ヤ竴涓疆鐏岀粍缁戝畾鐨勭亴婧夊崟鍏僫d
+     * @param groupId
+     * @return
+     */
+    public List<Long> getGroupBindUnits(Long groupId) {
+        List<Long> groupBindUnits = irGroupUnitMapper.getGroupBindUnits(groupId);
+        return groupBindUnits;
+    }
+
+    /**
+     *     //鏌ユ湭缁戝畾杞亴缁勭殑鐏屾簤鍗曞厓id
+     * @return
+     */
+    public List<Long> getNotBindUnits() {
+        List<Long> notBindUnits = irGroupUnitMapper.getNotBindUnits();
+        return notBindUnits;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrIrrigateSchedulingSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrIrrigateSchedulingSv.java
new file mode 100644
index 0000000..cd4dbe7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrIrrigateSchedulingSv.java
@@ -0,0 +1,97 @@
+package com.dy.pipIrrIrrigate.irrigateScheduling;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoIr.IrIrrigateSchedulingMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrIrrigateScheduling;
+import com.dy.pipIrrGlobal.voIr.VoScheduling;
+import com.dy.pipIrrGlobal.voIr.VoSchedulingOne;
+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.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  10:12
+ * @LastEditTime :2024/5/27  10:12
+ * @Description
+ */
+@Slf4j
+@Service
+public class IrIrrigateSchedulingSv {
+
+    @Autowired
+    private IrIrrigateSchedulingMapper irIrrigateSchedulingMapper;
+
+    /**
+     * 娣诲姞浣滅墿鐏屾簤鍒跺害
+     *
+     * @param po
+     * @return
+     */
+    public Integer addScheduling(IrIrrigateScheduling po) {
+        po.setDeleted((byte) 0);
+        po.setOperateDt(new Date());
+        int rows = irIrrigateSchedulingMapper.insertSelective(po);
+        if (rows == 0) {
+            return 0;
+        }
+        return 1;
+    }
+    /**
+     * 鍒犻櫎浣滅墿鐏屾簤鍒跺害
+     *
+     * @param id
+     */
+    public Integer deleteScheduling(Long id) {
+        int rows = irIrrigateSchedulingMapper.deleteLogicById(id);
+        if (rows == 0) {
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * 淇敼浣滅墿鐏屾簤鍒跺害
+     * @param po
+     * @return
+     */
+    public Integer updateScheduling(IrIrrigateScheduling po){
+        int rows = irIrrigateSchedulingMapper.updateByPrimaryKeySelective(po);
+        if (rows == 0){
+            return 0;
+        }
+        return 1;
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ浣滅墿鐏屾簤鍒跺害
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoScheduling>> getSchedulings(QueryVo queryVo){
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = irIrrigateSchedulingMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoScheduling>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = queryVo.pageSize;
+        rsVo.pageCurr = queryVo.pageCurr;
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = irIrrigateSchedulingMapper.getSchedulings(params);
+        return rsVo;
+    }
+
+    /**
+     * 鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹�
+     * @param id
+     * @return
+     */
+    public VoSchedulingOne selectById(Long id){
+        VoSchedulingOne irCrop = irIrrigateSchedulingMapper.selectById(id);
+        return irCrop;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrrigateSchedulingCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrrigateSchedulingCtrl.java
new file mode 100644
index 0000000..8874125
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/IrrigateSchedulingCtrl.java
@@ -0,0 +1,198 @@
+package com.dy.pipIrrIrrigate.irrigateScheduling;
+
+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.pojoIr.IrIrrigateScheduling;
+import com.dy.pipIrrGlobal.pojoIr.IrProject;
+import com.dy.pipIrrGlobal.voIr.VoScheduling;
+import com.dy.pipIrrGlobal.voIr.VoSchedulingOne;
+import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import com.dy.pipIrrIrrigate.result.IrrigateResultCode;
+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.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  10:12
+ * @LastEditTime :2024/5/27  10:12
+ * @Description
+ */
+@Slf4j
+@Tag(name = "浣滅墿鐏屾簤鍒跺害绠$悊", description = "浣滅墿鐏屾簤鍒跺害鎿嶄綔")
+@RestController
+@RequestMapping(path = "scheduling")
+@RequiredArgsConstructor
+public class IrrigateSchedulingCtrl {
+
+    private final IrIrrigateSchedulingSv irIrrigateSchedulingSv;
+
+    /**
+     * 娣诲姞浣滅墿鐏屾簤鍒跺害
+     *
+     * @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 = "add", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid IrIrrigateScheduling po, BindingResult bindingResult) {
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        try {
+            Integer rec = Optional.ofNullable(irIrrigateSchedulingSv.addScheduling(po)).orElse(0);
+            if (rec == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.ADD_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("娣诲姞浣滅墿鐏屾簤鍒跺害寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+    /**
+     * 閫昏緫鍒犻櫎浣滅墿鐏屾簤鍒跺害
+     * @param map
+     * @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 = "delete", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> delete(@RequestBody Map map) {
+        if (map == null || map.size() <= 0) {
+            BaseResponseUtils.buildFail(IrrigateResultCode.PLEASE_INPUT_PROJECT_ID.getMessage());
+        }
+        Long schedulingId = Long.parseLong(map.get("id").toString());
+        try {
+            Integer rows = irIrrigateSchedulingSv.deleteScheduling(schedulingId);
+            if (rows == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.DELETE_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("鍒犻櫎浣滅墿鐏屾簤鍒跺害寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+
+    /**
+     * 淇敼浣滅墿鐏屾簤鍒跺害
+     * @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 IrIrrigateScheduling po, BindingResult bindingResult){
+        if (bindingResult != null && bindingResult.hasErrors()) {
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        try {
+            Integer rec = Optional.ofNullable(irIrrigateSchedulingSv.updateScheduling(po)).orElse(0);
+            if (rec == 0) {
+                return BaseResponseUtils.buildFail(IrrigateResultCode.UPDATE_PROJECT_FAIL.getMessage());
+            }
+        } catch (Exception e) {
+            log.error("淇敼浣滅墿鐏屾簤鍒跺害寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+        return BaseResponseUtils.buildSuccess(true);
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @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 = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "some")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoScheduling>>> getSchedulings(QueryVo vo) {
+        try {
+            QueryResultVo<List<VoScheduling>> res = irIrrigateSchedulingSv.getSchedulings(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇浣滅墿鐏屾簤鍒跺害璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹�
+     *
+     * @return 鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹�
+     */
+    @Operation(summary = "鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹�", description = "鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鑾峰彇涓�涓綔鐗╃亴婧夊埗搴︽暟鎹紙BaseResponse.content:{}锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = IrProject.class))}
+            )
+    })
+    @GetMapping(path = "one")
+    @SsoAop()
+    public BaseResponse<VoSchedulingOne> one(@RequestParam Long id) {
+        VoSchedulingOne irScheduling = this.irIrrigateSchedulingSv.selectById(id);
+
+        return BaseResponseUtils.buildSuccess(irScheduling);
+
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/QueryVo.java
new file mode 100644
index 0000000..dc2ec64
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateScheduling/QueryVo.java
@@ -0,0 +1,24 @@
+package com.dy.pipIrrIrrigate.irrigateScheduling;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/5/27  10:29
+ * @LastEditTime :2024/5/27  10:29
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "浣滅墿鐏屾簤鍒跺害鏌ヨ鏉′欢")
+public class QueryVo extends QueryConditionVo {
+
+    @Schema(description = "浣滅墿鍚嶇О")
+    public String cropName;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java
index 620ae40..195f8cb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateUnit/IrrigateUnitSv.java
@@ -1,6 +1,7 @@
 package com.dy.pipIrrIrrigate.irrigateUnit;
 
 import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoIr.IrGroupUnitMapper;
 import com.dy.pipIrrGlobal.daoIr.IrIrrigateUnitMapper;
 import com.dy.pipIrrGlobal.daoIr.IrProjectMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigateUnit;
@@ -31,6 +32,8 @@
 
     @Autowired
     private IrIrrigateUnitMapper irIrrigateUnitMapper;
+    @Autowired
+    private IrGroupUnitMapper irGroupUnitMapper;
 
     /**
      * 鍒涘缓鐏屾簤鍗曞厓
@@ -55,6 +58,7 @@
      */
     public Integer deleteUnit(Long id) {
         int rows = irIrrigateUnitMapper.deleteLogicById(id);
+        irGroupUnitMapper.deleteByUnitId(id);
         if (rows == 0) {
             return 0;
         }

--
Gitblit v1.8.0