From 802fc74478ae3f2c4e8ab7cd417f97469c84f157 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 25 三月 2025 21:31:03 +0800
Subject: [PATCH] 轮灌功能

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java                            |   42 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java                       |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/irrigateGroup/IrrigateGroupSv.java |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java         |   36 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java           |    9 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml                                     |  133 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupSimple.java                               |   15 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrPlanScheduleMapper.xml                                      |   91 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java                                |    7 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIrrigateSchedule.java                          |   21 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java               |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateScheduleMapper.java                   |   14 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrPlanSchedule.java                            |   51 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectSimple.java                             |   35 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java             |    7 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoGroup.java             |   26 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml                                     |  445 ++++---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml                                      |   91 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java                       |   37 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupIntakeMapper.xml                                       |   88 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml                                           |  533 +++++---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrCropMapper.java                               |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupIntakeMapper.java                        |   36 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java                      |   36 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateScheduleMapper.xml                                  |   77 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java     |   23 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanSimple.java                                |   35 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java                 |  214 +-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java                        |   14 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProject.java                                 |  100 -
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigateSchedule.java |    7 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupIntake.java                             |   47 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java                 |  211 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java        |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java     |  207 ++-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateGroup.java                           |   67 
 pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/crop/CropCtrl.java                 |    3 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java                            |    7 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java                               |   20 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrPlanScheduleMapper.java                       |   27 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java                      |   36 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIntakeOperate.java                           |   69 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupUnitMapper.java                          |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoProject.java           |   17 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java       |  119 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java           |   56 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml                                       |   24 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrOpeningScheduleMapper.java                    |    1 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml                                      |  213 +-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateSchedule.java                        |   12 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProjectGroup.java                            |   52 
 51 files changed, 2,356 insertions(+), 1,099 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
index 2afc76d..d73733d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -12,6 +12,7 @@
 import com.dy.pipIrrGlobal.command.enums.LastOperateENUM;
 import com.dy.pipIrrGlobal.command.result.CommandResultCode;
 import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
+import com.dy.pipIrrGlobal.daoIr.IrIntakeOperateMapper;
 import com.dy.pipIrrGlobal.daoPr.PrCommonIntakesMapper;
 import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
@@ -34,7 +35,10 @@
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
@@ -83,6 +87,9 @@
 
     @Autowired
     private PrCommonIntakesMapper prCommonIntakesMapper;
+
+    @Autowired
+    private IrIntakeOperateMapper irIntakeOperateMapper;
 
     public static ComSupport comSupport;
 
@@ -279,6 +286,7 @@
         Object param = po.getParam();
         String rtuResultSendWebUrl = po.getRtuResultSendWebUrl();
         Long operator = po.getOperator();
+        Byte openType = po.getOpenType();
 
         // 鏋勯�犲懡浠�
         Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
@@ -306,6 +314,7 @@
             rmCommandHistory.setResult((byte) 0);
             rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
             //return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, response_CallBack.getMsg());
             return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
         }
 
@@ -321,6 +330,7 @@
             rmCommandHistory.setComId(comId);
             rmCommandHistory.setResult((byte) 0);
             rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "鍥炶皟瓒呮椂");
             return BaseResponseUtils.buildErrorMsg(CommandResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
         }
 
@@ -359,6 +369,10 @@
                 rmCommandHistory.setResult((byte) 0);
                 rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
 
+                if(openType == 1 ) {
+                    irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "寮�闃�澶辫触");
+                }
+
                 // 寮�闃�澶辫触鍒欒В闄ゅ崰鐢紝鍏抽榾澶辫触鍒欏崰鐢�
                 if (comType != null) {
                     SeVirtualCard virtualCard = new SeVirtualCard();
@@ -387,6 +401,10 @@
                 rmCommandHistory.setResult((byte) 1);
                 rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
 
+                if(openType == 1) {
+                    irIntakeOperateMapper.updateByCommandId(comId, (byte)1, null);
+                }
+
                 // 寮�闃�鎴愬姛鍒欏崰鐢紝鍏抽榾鎴愬姛涓嶅崰鐢�
                 if (comType != null) {
                     SeVirtualCard virtualCard = new SeVirtualCard();
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
index 9d5bcc7..5bf01bd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
@@ -16,7 +16,7 @@
     private Long comId;
 
     /**
-     * 鍛戒护绫诲瀷锛�1-寮�鍙戯紝2-鍏抽榾
+     * 鍛戒护绫诲瀷锛�1-寮�闃�锛�2-鍏抽榾
      */
     private Byte comType;
 
@@ -41,4 +41,9 @@
 
     private Long operator;
 
+    /**
+     * 寮�闃�绫诲瀷锛�1-杞亴
+     */
+    private Byte openType;
+
 }
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
index 04f654c..9e75b19 100644
--- 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
@@ -2,11 +2,8 @@
 
 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;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java
index 5682430..88c1208 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupClientMapper.java
@@ -29,19 +29,5 @@
 
     int updateByPrimaryKey(IrGroupClient record);
 
-    /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勬暟閲�
-     * @param params
-     * @return
-     */
-    Long getGroupCountByClientId(Map<?, ?> params);
-
-    /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勫垪琛�
-     * @param params
-     * @return
-     */
-    List<VoGroupSimple> getGroupsByClientId(Map<?, ?> params);
-
 
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupIntakeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupIntakeMapper.java
new file mode 100644
index 0000000..319236e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrGroupIntakeMapper.java
@@ -0,0 +1,36 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrGroupIntake;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:45
+ * @LastEditTime 2025-03-18 11:45
+ * @Description 杞亴缁勫彇姘村彛鍏宠仈瀹炰綋绫�
+ */
+
+@Mapper
+public interface IrGroupIntakeMapper extends BaseMapper<IrGroupIntake> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrGroupIntake record);
+
+    int insertSelective(IrGroupIntake record);
+
+    IrGroupIntake selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(IrGroupIntake record);
+
+    int updateByPrimaryKey(IrGroupIntake record);
+
+    /**
+     * 鏍规嵁缁処D鑾峰彇鍙栨按鍙D闆嗗悎
+     * @param groupId
+     * @return
+     */
+    List<Long> getIntakeIdsByGroupId(Long groupId);
+}
\ No newline at end of file
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 f5199fd..d713100 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
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrGroupUnit;
-import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java
new file mode 100644
index 0000000..2241e34
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java
@@ -0,0 +1,36 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-25 20:41
+ * @LastEditTime 2025-03-25 20:41
+ * @Description
+ */
+
+@Mapper
+public interface IrIntakeOperateMapper extends BaseMapper<IrIntakeOperate> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrIntakeOperate record);
+
+    int insertSelective(IrIntakeOperate record);
+
+    IrIntakeOperate selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(IrIntakeOperate record);
+
+    int updateByPrimaryKey(IrIntakeOperate record);
+
+    /**
+     * 鏍规嵁鍛戒护ID鏇存柊鍙栨按鍙f搷浣滆褰�
+     * @param commandId
+     * @param commandResult
+     * @return
+     */
+    int updateByCommandId(@Param("commandId") Long commandId, @Param("commandResult") Byte commandResult, @Param("failureFactors") String failureFactors);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java
index af2b58a..eaa0a00 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java
@@ -4,27 +4,34 @@
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup;
 import com.dy.pipIrrGlobal.voIr.VoGroup;
 import com.dy.pipIrrGlobal.voIr.VoGroupOne;
+import com.dy.pipIrrGlobal.voIr.VoGroupSimple;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 import java.util.Map;
 
 /**
- * @author :WuZeYu
- * @Date :2024/5/21  15:32
- * @LastEditTime :2024/5/21  15:32
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:21
+ * @LastEditTime 2025-03-18 11:21
  * @Description
  */
+
 @Mapper
 public interface IrIrrigateGroupMapper extends BaseMapper<IrIrrigateGroup> {
-    //澧�
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrIrrigateGroup record);
+
     int insertSelective(IrIrrigateGroup record);
 
-    //鍒�
-    int deleteLogicById(Long id);
+    IrIrrigateGroup selectByPrimaryKey(Long id);
 
-    //鏀�
     int updateByPrimaryKeySelective(IrIrrigateGroup record);
+
+    int updateByPrimaryKey(IrIrrigateGroup record);
+
+    int deleteLogicById(Long id);
 
     //鏌ヤ竴涓�
     VoGroupOne selectById(Long id);
@@ -46,9 +53,16 @@
     List<VoGroup> getIrrigateGroups(Map<?, ?> params);
 
     /**
-     * 鏍规嵁杞亴缁勭紪鍙疯幏鍙栧彇姘村彛鍒楄〃
-     * @param groupId
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇杞亴缁勮褰曟暟
+     * @param params
      * @return
      */
-    List<Long> getIntakesByGroupId(Long groupId);
-}
+    Long getSimpleGroupCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇杞亴缁勫垪琛�
+     * @param params
+     * @return
+     */
+    List<VoGroupSimple> getSimpleGroups(Map<?, ?> params);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
index ab4c01e..4d0e363 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -2,11 +2,11 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
-import com.dy.pipIrrGlobal.voIr.VoIrrigatePlan;
+import com.dy.pipIrrGlobal.voIr.VoPlanSimple;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-import java.util.Map;
+import java.util.Date;
 
 /**
  * @author ZhuBaoMin
@@ -37,30 +37,29 @@
     Byte getStartupMode(Long planId);
 
     /**
-     * 鏍规嵁鎸囧畾鐨勮鍒扞D鑾峰彇宸插彂甯冪殑鐏屾簤璁″垝鏁伴噺
-     * @param planId
-     * @return
-     */
-    Integer getPublishedCount(Long planId);
-
-    /**
-     * 鍙戝竷鎸囧畾鐨勭亴婧夎鍒�
-     * @param planId
-     * @return
-     */
-    int publishIrrigatePlan(Long planId);
-
-    /**
      * 鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栬鍒掓暟閲�
      * @param params
      * @return
      */
-    Long getIrrigatePlanCount(Map<?, ?> params);
+    //Long getIrrigatePlanCount(Map<?, ?> params);
 
     /**
      * 鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栬鍒掑垪琛�
      * @param params
      * @return
      */
-    List<VoIrrigatePlan> getIrrigatePlans(Map<?, ?> params);
+    //List<VoIrrigatePlan> getIrrigatePlans(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁璁″垝ID鑾峰彇璁″垝绠�鍗曚俊鎭�
+     * @return
+     */
+    VoPlanSimple getPlanSimple(Long planId);
+
+    /**
+     * 鏍规嵁璁″垝ID鏇存柊璁″垝淇℃伅锛堣捣姝㈡椂闂淬�佽鍒掔姸鎬侊級
+     * @param planId
+     * @return
+     */
+    Integer updatePlanTimes(@Param("planStartTime") Date planStartTime, @Param("planStopTime") Date planEndTime, @Param("planId")  Long planId);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateScheduleMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateScheduleMapper.java
index e92aae7..3c5e6e5 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateScheduleMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateScheduleMapper.java
@@ -6,6 +6,7 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -30,9 +31,18 @@
     int updateByPrimaryKey(IrIrrigateSchedule record);
 
     /**
-     * 鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭
+     * 鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭璁板綍
      * @param planId
      * @return
      */
-    List<VoIrrigateSchedule> getIrrigateSchedules(@Param("startupMode") Byte startupMode, @Param("planId") Long planId);
+    List<VoIrrigateSchedule> getSchedulesByPlanId(Long planId);
+
+    /**
+     * 鏍规嵁鐏屾簤娆″簭ID鏇存柊娆″簭寮�濮嬫椂闂�
+     * @param scheduleId
+     * @param startTime
+     * @return
+     */
+    Integer updateScheduleStartTime(@Param("scheduleId") Long scheduleId, @Param("startTime") Date startTime);
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrOpeningScheduleMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrOpeningScheduleMapper.java
index c097651..ea83eac 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrOpeningScheduleMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrOpeningScheduleMapper.java
@@ -24,4 +24,5 @@
     int updateByPrimaryKeySelective(IrOpeningSchedule record);
 
     int updateByPrimaryKey(IrOpeningSchedule record);
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrPlanScheduleMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrPlanScheduleMapper.java
new file mode 100644
index 0000000..28a8648
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrPlanScheduleMapper.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-20 15:03
+ * @LastEditTime 2025-03-20 15:03
+ * @Description
+ */
+
+@Mapper
+public interface IrPlanScheduleMapper extends BaseMapper<IrPlanSchedule> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrPlanSchedule record);
+
+    int insertSelective(IrPlanSchedule record);
+
+    IrPlanSchedule selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(IrPlanSchedule record);
+
+    int updateByPrimaryKey(IrPlanSchedule record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java
new file mode 100644
index 0000000..adfa010
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectGroupMapper.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrGlobal.daoIr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrProjectGroup;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:36
+ * @LastEditTime 2025-03-18 11:36
+ * @Description
+ */
+
+@Mapper
+public interface IrProjectGroupMapper extends BaseMapper<IrProjectGroup> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrProjectGroup record);
+
+    int insertSelective(IrProjectGroup record);
+
+    IrProjectGroup selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(IrProjectGroup record);
+
+    int updateByPrimaryKey(IrProjectGroup record);
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java
index ddfa487..9b0380b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrProjectMapper.java
@@ -2,36 +2,38 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoIr.IrProject;
-import com.dy.pipIrrGlobal.pojoPr.PrController;
-import com.dy.pipIrrGlobal.pojoPr.PrIntake;
 import com.dy.pipIrrGlobal.voIr.VoProject;
 import com.dy.pipIrrGlobal.voIr.VoProjectOne;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
+import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
 
 /**
- * @author :WuZeYu
- * @Date :2024/5/14  15:04
- * @LastEditTime :2024/5/14  15:04
+ * @author ZhuBaoMin
+ * @date 2025-03-18 10:57
+ * @LastEditTime 2025-03-18 10:57
  * @Description
  */
+
 @Mapper
 public interface IrProjectMapper extends BaseMapper<IrProject> {
-    //澧�
+    int deleteByPrimaryKey(Long id);
+
+    int insert(IrProject record);
+
     int insertSelective(IrProject record);
 
-    //鍒�
-    int deleteLogicById(Long id);
+    IrProject selectByPrimaryKey(Long id);
 
-    //鏀�
     int updateByPrimaryKeySelective(IrProject record);
 
-    //鏌ヤ竴涓�
+    int updateByPrimaryKey(IrProject record);
+
     VoProjectOne selectById(Long id);
+
+    int deleteLogicById(Long id);
 
     /**
      * 淇敼椤圭洰鐘舵��
@@ -63,4 +65,18 @@
      * @return
      */
     List<VoProject> getProjects(Map<?, ?> params);
-}
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍(绮剧畝)鏁伴噺
+     * @param params
+     * @return
+     */
+    Long getSimpleProjectsCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍(绮剧畝)
+     * @param params
+     * @return
+     */
+    List<VoProjectSimple> getSimpleProjects(Map<?, ?> params);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupIntake.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupIntake.java
new file mode 100644
index 0000000..c3ad034
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrGroupIntake.java
@@ -0,0 +1,47 @@
+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 jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:45
+ * @LastEditTime 2025-03-18 11:45
+ * @Description 杞亴缁勫彇姘村彛鍏宠仈瀹炰綋绫�
+ */
+
+@TableName(value="ir_group_intake", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class IrGroupIntake implements BaseEntity {
+    public static final long serialVersionUID = 202503181149001L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    /**
+    * 杞亴缁処D
+    */
+    @NotNull(message = "杞亴缁処D涓嶈兘涓虹┖")
+    private Long groupId;
+
+    /**
+    * 鍙栨按鍙D
+    */
+    @NotNull(message = "鍙栨按鍙D涓嶈兘涓虹┖")
+    private Long intakeId;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIntakeOperate.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIntakeOperate.java
new file mode 100644
index 0000000..d3d39a0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIntakeOperate.java
@@ -0,0 +1,69 @@
+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 jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-24 20:53
+ * @LastEditTime 2025-03-24 20:53
+ * @Description 鍙栨按鍙f搷浣滃疄浣撶被
+ */
+
+@TableName(value="ir_intake_operate", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class IrIntakeOperate implements BaseEntity {
+    public static final long serialVersionUID = 202503242057001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 鍛戒护ID
+     */
+    @NotNull(message = "鍛戒护ID涓嶈兘涓虹┖")
+    private Long commandId;
+
+    /**
+     * 鍙栨按鍙D
+     */
+    @NotNull(message = "鍙栨按鍙D涓嶈兘涓虹┖")
+    private Long intakeId;
+
+    /**
+     * 鐏屾簤寮�濮嬫椂闂�
+     */
+    private Date startTime;
+
+    /**
+     * 鐏屾簤鏃堕暱
+     */
+    private Integer duration;
+
+    /**
+     * 鍛戒护涓嬪彂缁撴灉;1-鎴愬姛锛�2-澶辫触
+     */
+    private Byte commandResult;
+
+    /**
+     * 澶辫触鍥犵礌
+     */
+    private String failureFactors;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateGroup.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateGroup.java
index 9c098d3..c202e78 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateGroup.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateGroup.java
@@ -6,21 +6,17 @@
 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.NotNull;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotBlank;
 import lombok.*;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
 
 import java.util.Date;
 
 /**
- * @author :WuZeYu
- * @Date :2024/5/21  15:34
- * @LastEditTime :2024/5/21  15:34
- * @Description
- */
-/**
- * 杞亴缁勮〃
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:21
+ * @LastEditTime 2025-03-18 11:21
+ * @Description 杞亴缁勫疄浣撶被
  */
 
 @TableName(value="ir_irrigate_group", autoResultMap = true)
@@ -29,56 +25,45 @@
 @ToString
 @NoArgsConstructor
 @AllArgsConstructor
-@Schema(name = "杞亴缁勫疄浣�")
 public class IrIrrigateGroup implements BaseEntity {
-
-    public static final long serialVersionUID = 202405211534001L;
+    public static final long serialVersionUID = 202503181126001L;
 
     /**
-     * 涓婚敭
-     */
+    * 涓婚敭
+    */
     @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 = "杞亴缁勭紪鐮佷笉鑳戒负绌�")
+    * 杞亴缁勫悕绉�
+    */
+    @NotBlank(message = "杞亴缁勫悕绉颁笉鑳戒负绌�")
     private String groupCode;
 
     /**
-     * 椤圭洰ID
-     */
-    @Schema(description = "椤圭洰ID", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "椤圭洰ID涓嶈兘涓虹┖")
-    private Long projectId;
+    * 榛樿鐏屾簤鏃堕暱;绮剧‘鍒板垎閽�
+    */
+    private Integer defaultDuration;
 
     /**
-     * 澶囨敞
-     */
-    @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;
-
+    * 鎿嶄綔鏃堕棿
+    */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date operateTime;
 
     /**
-     * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
-     */
-    @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
+    */
     private Byte deleted;
-}
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java
index 90c7951..ea5f063 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigatePlan.java
@@ -8,7 +8,6 @@
 import com.dy.common.po.BaseEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.*;
 
 import java.util.Date;
@@ -37,11 +36,6 @@
     private Long id;
 
     /**
-     * 椤圭洰ID
-     */
-    private Long projectId;
-
-    /**
      * 璁″垝鍚嶇О
      */
     @NotBlank(message = "璁″垝鍚嶇О涓嶈兘涓虹┖")
@@ -50,7 +44,6 @@
     /**
      * 璁″垝鍚姩妯″紡;1-鎵嬪姩鍚姩锛�2-鑷姩鍚姩
      */
-    @NotNull(message = "璁″垝鍚姩妯″紡涓嶈兘涓虹┖")
     private Byte startupMode;
 
     /**
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateSchedule.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateSchedule.java
index 65b50d0..8047670 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateSchedule.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrIrrigateSchedule.java
@@ -38,8 +38,8 @@
     /**
      * 鐏屾簤璁″垝ID
      */
-    @NotNull(message = "鐏屾簤璁″垝ID涓嶈兘涓虹┖")
-    private Long planId;
+    //@NotNull(message = "鐏屾簤璁″垝ID涓嶈兘涓虹┖")
+    //private Long planId;
 
     /**
      * 杞亴缁処D
@@ -53,11 +53,13 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
 
+
+
     /**
      * 鐏屾簤缁撴潫鏃堕棿
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date stopTime;
+    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    //private Date stopTime;
 
     /**
      * 鐏屾簤鏃堕暱;鍒嗛挓
@@ -67,7 +69,7 @@
     /**
      * 鍙栨按鍙D鍒楄〃
      */
-    private String intakeIds;
+    //private String intakeIds;
 
     /**
      * 褰撳墠鐘舵��;1-姝e父锛�2-鏆傚仠锛�3-缁堟
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrPlanSchedule.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrPlanSchedule.java
new file mode 100644
index 0000000..7ff69c2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrPlanSchedule.java
@@ -0,0 +1,51 @@
+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 jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-20 15:03
+ * @LastEditTime 2025-03-20 15:03
+ * @Description 璁″垝娆″簭鍏宠仈瀹炰綋绫�
+ */
+
+@TableName(value="ir_plan_schedule", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class IrPlanSchedule implements BaseEntity {
+    public static final long serialVersionUID = 202503201521001L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    /**
+    * 鐏屾簤璁″垝ID
+    */
+    @NotNull(message = "鐏屾簤璁″垝ID涓嶈兘涓虹┖")
+    private Long planId;
+
+    /**
+    * 鐏屾簤娆″簭ID
+    */
+    @NotNull(message = "鐏屾簤娆″簭ID涓嶈兘涓虹┖")
+    private Long scheduleId;
+
+    /**
+    * 鎺掑簭
+    */
+    private Integer sort;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProject.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProject.java
index b6e9ae6..43bf84f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProject.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProject.java
@@ -6,23 +6,17 @@
 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 com.fasterxml.jackson.annotation.JsonFormat;
 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/14  13:53
- * @LastEditTime :2024/5/14  13:53
- * @Description
- */
-
-/**
- * 椤圭洰琛�
+ * @author ZhuBaoMin
+ * @date 2025-03-18 10:57
+ * @LastEditTime 2025-03-18 10:57
+ * @Description 椤圭洰瀹炰綋绫�
  */
 
 @TableName(value="ir_project", autoResultMap = true)
@@ -31,81 +25,71 @@
 @ToString
 @NoArgsConstructor
 @AllArgsConstructor
-@Schema(name = "椤圭洰瀹炰綋")
 public class IrProject implements BaseEntity {
-    public static final long serialVersionUID = 202405141427001L;
+    public static final long serialVersionUID = 202503181103001L;
 
     /**
-     * 涓婚敭
-     */
+    * 涓婚敭
+    */
     @JSONField(serializeUsing= ObjectWriterImplToString.class)
     @TableId(type = IdType.INPUT)
-    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     private Long id;
 
     /**
-     * 椤圭洰鍚嶇О
-     */
-    @Schema(description = "椤圭洰鍚嶇О", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 椤圭洰鍚嶇О
+    */
     @NotBlank(message = "椤圭洰鍚嶇О涓嶈兘涓虹┖")
-    @Length(message = "椤圭洰鍚嶇О涓嶅ぇ浜巤max}瀛�",max = 50)
     private String projectName;
 
     /**
-     * 鐪両D
-     */
-    @Schema(description = "鐪両D", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 鐪両D
+    */
     private Long provinceId;
+
     /**
-     * 甯侷D
-     */
-    @Schema(description = "甯侷D", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 甯侷D
+    */
     private Long cityId;
+
     /**
-     * 鍘縄D
-     */
-    @Schema(description = "鍘縄D", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 鍘縄D
+    */
     private Long countyId;
+
     /**
-     * 闀嘔D
-     */
-    @Schema(description = "闀嘔D", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 闀嘔D
+    */
     private Long townId;
+
     /**
-     * 鏉慖D
-     */
-    @Schema(description = "鏉慖D", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 鏉慖D
+    */
     private Long villageId;
 
-
-
     /**
-     * 椤圭洰鐘舵��;1-鍚姩锛�2-鍋滄
-     */
-    @Schema(description = "椤圭洰鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    * 椤圭洰鐘舵��;1-鍚敤锛�2-搴熷純
+    */
     private Byte projectState;
 
     /**
-     * 鎿嶄綔浜篒D
-     */
-    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Long operator;
-
-    /**
-     * 鎿嶄綔鏃堕棿
-     */
-    @Schema(description = "鎿嶄綔鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Date operateDt;
-
-    /**
-     * 澶囨敞
-     */
-    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.REQUIRED)
+    * 澶囨敞淇℃伅
+    */
     private String remarks;
 
     /**
-     * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
-     */
-    @Schema(description = "鍒犻櫎鏍囪瘑", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    * 鎿嶄綔浜�
+    */
+    private Long operator;
+
+    /**
+    * 鎿嶄綔鏃堕棿
+    */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date operateTime;
+
+    /**
+    * 閫昏緫鍒犻櫎鏍囪瘑;0-鏈垹闄わ紝1-鍒犻櫎
+    */
     private Byte deleted;
+
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProjectGroup.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProjectGroup.java
new file mode 100644
index 0000000..6d555ec
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoIr/IrProjectGroup.java
@@ -0,0 +1,52 @@
+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 jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-18 11:36
+ * @LastEditTime 2025-03-18 11:36
+ * @Description 椤圭洰杞亴缁勫叧鑱斿疄浣撶被
+ */
+
+@TableName(value="ir_project_group", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class IrProjectGroup implements BaseEntity {
+    public static final long serialVersionUID = 202503181139001L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    /**
+    * 椤圭洰ID
+    */
+    @NotNull(message = "椤圭洰ID涓嶈兘涓虹┖")
+    private Long projectId;
+
+    /**
+    * 杞亴缁処D
+    */
+    @NotNull(message = "杞亴缁処D涓嶈兘涓虹┖")
+    private Long groupId;
+
+    /**
+    * 鎺掑簭
+    */
+    private Integer sort;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupSimple.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupSimple.java
index c643c0b..19a1c83 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupSimple.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupSimple.java
@@ -28,4 +28,19 @@
      * 杞亴缁勭紪鐮�
      */
     private String groupCode;
+
+    /**
+     * 鐏屾簤鍗曞厓鏁伴噺
+     */
+    private Integer intakeCount;
+
+    /**
+     * 榛樿鐏屾簤鏃堕暱
+     */
+    private Integer defaultDuration;
+
+    /**
+     * 鎺掑簭
+     */
+    private Integer sort;
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIrrigateSchedule.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIrrigateSchedule.java
index 9cd54f5..a416d54 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIrrigateSchedule.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIrrigateSchedule.java
@@ -1,9 +1,5 @@
 package com.dy.pipIrrGlobal.voIr;
 
-import com.alibaba.fastjson2.annotation.JSONField;
-import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
-import com.dy.common.po.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import lombok.Data;
 
@@ -13,24 +9,27 @@
  * @author ZhuBaoMin
  * @date 2025-02-21 14:21
  * @LastEditTime 2025-02-21 14:21
- * @Description 鐏屾簤娆″簭瑙嗗浘瀵硅薄
+ * @Description 鐏屾簤娆″簭瑙嗗浘瀵硅薄锛岀敓鎴愬紑闃�璁″垝浣跨敤锛屼笉浼犵粰鍓嶇
  */
 
 @Data
-@JsonPropertyOrder({ "id", "vcNum", "money", "inUse", "isAlarmValue"})
-public class VoIrrigateSchedule implements BaseEntity {
+@JsonPropertyOrder({ "scheduleId", "groupId", "startTime", "duration"})
+public class VoIrrigateSchedule {
     private static final long serialVersionUID = 202502211423001L;
 
     /**
      * 鐏屾簤娆″簭ID
      */
-    @JSONField(serializeUsing= ObjectWriterImplToString.class)
     private Long scheduleId;
+
+    /**
+     * 杞亴缁処D
+     */
+    private Long groupId;
 
     /**
      * 鐏屾簤寮�濮嬫椂闂�
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date startTime;
 
     /**
@@ -38,8 +37,4 @@
      */
     private Integer duration;
 
-    /**
-     * 鍙栨按鍙D锛屽涓敤閫楀彿闅斿紑
-     */
-    private String intakeIds;
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanSimple.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanSimple.java
new file mode 100644
index 0000000..d69cd7b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanSimple.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-25 17:16
+ * @LastEditTime 2025-03-25 17:16
+ * @Description 鐏屾簤璁″垝绠�鍗曚俊鎭鍥惧璞★紝鍙戝竷鏃舵洿鏂拌鍒掕捣姝㈡椂闂翠娇鐢�
+ */
+
+@Data
+@JsonPropertyOrder({"startupMode", "planStartTime", "duration"})
+public class VoPlanSimple {
+    public static final long serialVersionUID = 202503251718001L;
+
+    /**
+     * 璁″垝鍚姩妯″潡
+     */
+    private Byte startupMode;
+
+    /**
+     * 璁″垝鍚姩鏃堕棿锛岃嚜鍔ㄥ惎鍔ㄦ椂鏈夊��
+     */
+    private Date planStartTime;
+
+    /**
+     * 鐏屾簤鎬绘椂闀�
+     */
+    private Integer duration;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectSimple.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectSimple.java
new file mode 100644
index 0000000..f211365
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoProjectSimple.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrGlobal.voIr;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-20 19:17
+ * @LastEditTime 2025-03-20 19:17
+ * @Description 椤圭洰绠�鍗曡鍥惧璞�
+ */
+
+@Data
+@JsonPropertyOrder({"projectId", "projectName", "groupCount"})
+public class VoProjectSimple {
+    public static final long serialVersionUID = 202503201919001L;
+
+    /**
+     * 椤圭洰ID
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    private Long projectId;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String projectName;
+
+    /**
+     * 杞亴缁勬暟閲�
+     */
+    private Integer groupCount;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml
index 992f079..e4053cd 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupClientMapper.xml
@@ -105,28 +105,4 @@
         where id = #{id,jdbcType=BIGINT}
     </update>
 
-    <!--鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勬暟閲�-->
-    <select id="getGroupCountByClientId" resultType="java.lang.Long">
-        SELECT
-            count(*)
-        FROM ir_irrigate_group grp
-            INNER JOIN ir_group_client gc ON gc.group_id = grp.id
-        WHERE grp.deleted = 0 AND gc.client_id = #{clientId}
-    </select>
-
-    <!--鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勫垪琛�-->
-    <select id="getGroupsByClientId" resultType="com.dy.pipIrrGlobal.voIr.VoGroupSimple">
-        SELECT
-            grp.id  AS groupId,
-            grp.group_code AS groupCode
-        FROM ir_irrigate_group grp
-            INNER JOIN ir_group_client gc ON gc.group_id = grp.id
-        WHERE grp.deleted = 0 AND gc.client_id = #{clientId}
-        ORDER BY grp.group_code
-        <trim prefix="limit ">
-            <if test="start != null and count != null">
-                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-            </if>
-        </trim>
-    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupIntakeMapper.xml
new file mode 100644
index 0000000..57000ab
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrGroupIntakeMapper.xml
@@ -0,0 +1,88 @@
+<?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.IrGroupIntakeMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrGroupIntake">
+    <!--@mbg.generated-->
+    <!--@Table ir_group_intake-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="group_id" jdbcType="BIGINT" property="groupId" />
+    <result column="intake_id" jdbcType="BIGINT" property="intakeId" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, group_id, intake_id
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_group_intake
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_group_intake
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupIntake">
+    <!--@mbg.generated-->
+    insert into ir_group_intake (id, group_id, intake_id
+      )
+    values (#{id,jdbcType=BIGINT}, #{groupId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupIntake">
+    <!--@mbg.generated-->
+    insert into ir_group_intake
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="groupId != null">
+        group_id,
+      </if>
+      <if test="intakeId != null">
+        intake_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="groupId != null">
+        #{groupId,jdbcType=BIGINT},
+      </if>
+      <if test="intakeId != null">
+        #{intakeId,jdbcType=BIGINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupIntake">
+    <!--@mbg.generated-->
+    update ir_group_intake
+    <set>
+      <if test="groupId != null">
+        group_id = #{groupId,jdbcType=BIGINT},
+      </if>
+      <if test="intakeId != null">
+        intake_id = #{intakeId,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrGroupIntake">
+    <!--@mbg.generated-->
+    update ir_group_intake
+    set group_id = #{groupId,jdbcType=BIGINT},
+      intake_id = #{intakeId,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁缁処D鑾峰彇鍙栨按鍙D闆嗗悎-->
+  <select id="getIntakeIdsByGroupId" resultType="java.lang.Long">
+    SELECT
+      intake_id AS intakeId
+    FROM ir_group_intake
+    WHERE group_id = #{groupId}
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml
new file mode 100644
index 0000000..a578e97
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml
@@ -0,0 +1,133 @@
+<?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.IrIntakeOperateMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate">
+    <!--@mbg.generated-->
+    <!--@Table ir_intake_operate-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="command_id" jdbcType="BIGINT" property="commandId" />
+    <result column="intake_id" jdbcType="BIGINT" property="intakeId" />
+    <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
+    <result column="duration" jdbcType="INTEGER" property="duration" />
+    <result column="command_result" jdbcType="TINYINT" property="commandResult" />
+    <result column="failure_factors" jdbcType="VARCHAR" property="failureFactors" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, command_id, intake_id, start_time, duration, command_result, failure_factors
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_intake_operate
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_intake_operate
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate">
+    <!--@mbg.generated-->
+    insert into ir_intake_operate (id, command_id, intake_id, 
+      start_time, duration, command_result, 
+      failure_factors)
+    values (#{id,jdbcType=BIGINT}, #{commandId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, 
+      #{startTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=INTEGER}, #{commandResult,jdbcType=TINYINT}, 
+      #{failureFactors,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate">
+    <!--@mbg.generated-->
+    insert into ir_intake_operate
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="commandId != null">
+        command_id,
+      </if>
+      <if test="intakeId != null">
+        intake_id,
+      </if>
+      <if test="startTime != null">
+        start_time,
+      </if>
+      <if test="duration != null">
+        duration,
+      </if>
+      <if test="commandResult != null">
+        command_result,
+      </if>
+      <if test="failureFactors != null">
+        failure_factors,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="commandId != null">
+        #{commandId,jdbcType=BIGINT},
+      </if>
+      <if test="intakeId != null">
+        #{intakeId,jdbcType=BIGINT},
+      </if>
+      <if test="startTime != null">
+        #{startTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="duration != null">
+        #{duration,jdbcType=INTEGER},
+      </if>
+      <if test="commandResult != null">
+        #{commandResult,jdbcType=TINYINT},
+      </if>
+      <if test="failureFactors != null">
+        #{failureFactors,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate">
+    <!--@mbg.generated-->
+    update ir_intake_operate
+    <set>
+      <if test="commandId != null">
+        command_id = #{commandId,jdbcType=BIGINT},
+      </if>
+      <if test="intakeId != null">
+        intake_id = #{intakeId,jdbcType=BIGINT},
+      </if>
+      <if test="startTime != null">
+        start_time = #{startTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="duration != null">
+        duration = #{duration,jdbcType=INTEGER},
+      </if>
+      <if test="commandResult != null">
+        command_result = #{commandResult,jdbcType=TINYINT},
+      </if>
+      <if test="failureFactors != null">
+        failure_factors = #{failureFactors,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate">
+    <!--@mbg.generated-->
+    update ir_intake_operate
+    set command_id = #{commandId,jdbcType=BIGINT},
+      intake_id = #{intakeId,jdbcType=BIGINT},
+      start_time = #{startTime,jdbcType=TIMESTAMP},
+      duration = #{duration,jdbcType=INTEGER},
+      command_result = #{commandResult,jdbcType=TINYINT},
+      failure_factors = #{failureFactors,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁鍛戒护ID鏇存柊鍙栨按鍙f搷浣滆褰�-->
+  <update id="updateByCommandId" >
+    update ir_intake_operate
+    set command_result = #{commandResult}, failure_factors = #{failureFactors}
+    where command_id = #{commandId}
+  </update>
+</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 242f89b..5a23b4d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml
@@ -1,187 +1,278 @@
 <?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.IrIrrigateGroupMapper">
-    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
-        <!--@mbg.generated-->
-        <!--@Table ir_irrigate_group-->
-        <id column="id" jdbcType="BIGINT" property="id" />
-        <result column="project_id" jdbcType="BIGINT" property="projectId" />
-        <result column="group_code" jdbcType="VARCHAR" property="groupCode" />
-        <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, project_id, group_code, remarks, `operator`,
-        operate_time, deleted
-    </sql>
-    <!--娣诲姞-->
-    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
-        <!--@mbg.generated-->
-        insert into ir_irrigate_group
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                id,
-            </if>
-            <if test="projectId != null">
-                project_id,
-            </if>
-            <if test="groupCode != null">
-                group_code,
-            </if>
-            <if test="remarks != null">
-                remarks,
-            </if>
-            <if test="operator != null">
-                `operator`,
-            </if>
-            <if test="operateDt != null">
-                operate_time,
-            </if>
-            <if test="deleted != null">
-                deleted,
-            </if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=BIGINT},
-            </if>
-            <if test="projectId != null">
-                #{projectId,jdbcType=BIGINT},
-            </if>
-            <if test="groupCode != null">
-                #{groupCode,jdbcType=VARCHAR},
-            </if>
-            <if test="remarks != null">
-                #{remarks,jdbcType=VARCHAR},
-            </if>
-            <if test="operator != null">
-                #{operator,jdbcType=BIGINT},
-            </if>
-            <if test="operateDt != null">
-                #{operateDt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="deleted != null">
-                #{deleted,jdbcType=TINYINT},
-            </if>
-        </trim>
-    </insert>
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    <!--@mbg.generated-->
+    <!--@Table ir_irrigate_group-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="group_code" jdbcType="VARCHAR" property="groupCode" />
+    <result column="default_duration" jdbcType="INTEGER" property="defaultDuration" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operate_time" jdbcType="TIMESTAMP" property="operateTime" />
+    <result column="deleted" jdbcType="TINYINT" property="deleted" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, group_code, default_duration, remarks, `operator`, operate_time, deleted
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_irrigate_group
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_irrigate_group
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    <!--@mbg.generated-->
+    insert into ir_irrigate_group (id, group_code, default_duration, 
+      remarks, `operator`, operate_time, 
+      deleted)
+    values (#{id,jdbcType=BIGINT}, #{groupCode,jdbcType=VARCHAR}, #{defaultDuration,jdbcType=INTEGER}, 
+      #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateTime,jdbcType=TIMESTAMP}, 
+      #{deleted,jdbcType=TINYINT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    <!--@mbg.generated-->
+    insert into ir_irrigate_group
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="groupCode != null">
+        group_code,
+      </if>
+      <if test="defaultDuration != null">
+        default_duration,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operateTime != null">
+        operate_time,
+      </if>
+      <if test="deleted != null">
+        deleted,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="groupCode != null">
+        #{groupCode,jdbcType=VARCHAR},
+      </if>
+      <if test="defaultDuration != null">
+        #{defaultDuration,jdbcType=INTEGER},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateTime != null">
+        #{operateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        #{deleted,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    <!--@mbg.generated-->
+    update ir_irrigate_group
+    <set>
+      <if test="groupCode != null">
+        group_code = #{groupCode,jdbcType=VARCHAR},
+      </if>
+      <if test="defaultDuration != null">
+        default_duration = #{defaultDuration,jdbcType=INTEGER},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateTime != null">
+        operate_time = #{operateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    <!--@mbg.generated-->
+    update ir_irrigate_group
+    set group_code = #{groupCode,jdbcType=VARCHAR},
+      default_duration = #{defaultDuration,jdbcType=INTEGER},
+      remarks = #{remarks,jdbcType=VARCHAR},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operate_time = #{operateTime,jdbcType=TIMESTAMP},
+      deleted = #{deleted,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
 
-    <!--閫昏緫鍒犻櫎-->
-    <delete id="deleteLogicById" parameterType="java.lang.Long">
-        <!--@mbg.generated-->
-        update ir_irrigate_group
-        set deleted = 1
-        where id = #{id,jdbcType=BIGINT}
-    </delete>
+  <!--閫昏緫鍒犻櫎-->
+  <delete id="deleteLogicById" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    update ir_irrigate_group
+    set deleted = 1
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
 
-    <!--淇敼涓�涓疆缃愮粍-->
-    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
-        update ir_irrigate_group
-        <set>
-            <if test="projectId != null">
-                project_id = #{projectId,jdbcType=BIGINT},
-            </if>
-            <if test="groupCode != null">
-                group_code = #{groupCode,jdbcType=VARCHAR},
-            </if>
-            <if test="remarks != null">
-                remarks = #{remarks,jdbcType=VARCHAR},
-            </if>
-            <if test="operator != null">
-                operator = #{operator,jdbcType=BIGINT},
-            </if>
-            <if test="operateDt != null">
-                operate_time = #{operateDt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="deleted != null">
-                deleted = #{deleted,jdbcType=TINYINT},
-            </if>
-        </set>
-        where id = #{id,jdbcType=BIGINT}
-    </update>
+  <!--淇敼涓�涓疆缃愮粍-->
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup">
+    update ir_irrigate_group
+    <set>
+      <if test="groupCode != null">
+        group_code = #{groupCode,jdbcType=VARCHAR},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        operator = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateTime != null">
+        operate_time = #{operateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
 
-    <!--鏌ヤ竴涓疆缃愮粍-->
-    <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoGroupOne">
-        select
-        CAST(pro.id AS char)AS projectId,
-        pro.project_name  AS  projectName,
-        CAST(gro.id AS char)AS id,
-        CAST(gro.operator AS char)AS operator,
-        cli.name         AS operatorName,
-        gro.group_code   AS groupCode,
-        COUNT(gu.group_id)   AS itemCount,
-        gro.remarks,
-        gro.operate_time  AS  operateDt
-        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.id = #{id,jdbcType=BIGINT} and gro.deleted = 0  and pro.deleted != 1
-    </select>
+  <!--鏌ヤ竴涓疆缃愮粍-->
+  <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoGroupOne">
+    select
+    CAST(pro.id AS char)AS projectId,
+    pro.project_name  AS  projectName,
+    CAST(gro.id AS char)AS id,
+    CAST(gro.operator AS char)AS operator,
+    cli.name         AS operatorName,
+    gro.group_code   AS groupCode,
+    COUNT(gu.group_id)   AS itemCount,
+    gro.remarks,
+    gro.operate_time  AS  operateDt
+    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.id = #{id,jdbcType=BIGINT} and gro.deleted = 0  and pro.deleted != 1
+  </select>
 
-    <!--鍒嗛〉鏌ヨ疆鐏岀粍-->
-    <select id="getIrrigateGroups" resultType="com.dy.pipIrrGlobal.voIr.VoGroup">
-        SELECT
-        CAST(pro.id AS char)AS projectId,
-        pro.project_name  AS  projectName,
-        CAST(gro.id AS char)AS id,
-        CAST(gro.operator AS char)AS operator,
-        cli.name         AS operatorName,
-        gro.group_code   AS groupCode,
-        COUNT(gu.group_id)   AS itemCount,
-        gro.remarks,
-        gro.operate_time  AS  operateDt
-        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 pro.deleted != 1
-            <if test="projectName != null and projectName != ''">
-                AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-            </if>
-        <if test="groupCode != null and groupCode != ''">
-            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}
-        </if>
-    </select>
-    <!--鍒嗛〉鏌ヨ疆鐏岀粍璁板綍鏁�-->
-    <select id="getRecordCount" resultType="java.lang.Long">
-     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 pro.deleted != 1
-            <if test="projectName != null and projectName != ''">
-                AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-            </if>
-            <if test="groupCode != null and groupCode != ''">
-                AND gro.group_code = #{groupCode}
-            </if>
-        </where>
-        GROUP BY gro.id
-        ) a
-    </select>
+  <!--鍒嗛〉鏌ヨ疆鐏岀粍-->
+  <select id="getIrrigateGroups" resultType="com.dy.pipIrrGlobal.voIr.VoGroup">
+    SELECT
+    CAST(pro.id AS char)AS projectId,
+    pro.project_name  AS  projectName,
+    CAST(gro.id AS char)AS id,
+    CAST(gro.operator AS char)AS operator,
+    cli.name         AS operatorName,
+    gro.group_code   AS groupCode,
+    COUNT(gu.group_id)   AS itemCount,
+    gro.remarks,
+    gro.operate_time  AS  operateDt
+    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 pro.deleted != 1
+      <if test="projectName != null and projectName != ''">
+        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+      <if test="groupCode != null and groupCode != ''">
+        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}
+    </if>
+  </select>
+  <!--鍒嗛〉鏌ヨ疆鐏岀粍璁板綍鏁�-->
+  <select id="getRecordCount" resultType="java.lang.Long">
+    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 pro.deleted != 1
+      <if test="projectName != null and projectName != ''">
+        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+      <if test="groupCode != null and groupCode != ''">
+        AND gro.group_code = #{groupCode}
+      </if>
+    </where>
+    GROUP BY gro.id
+    ) a
+  </select>
 
-    <!--鏍规嵁杞亴缁勭紪鍙疯幏鍙栧彇姘村彛鍒楄〃-->
-    <select id="getIntakesByGroupId" resultType="java.lang.Long">
-        SELECT
-            uni.intake_id AS intakeId
-        FROM ir_irrigate_group grp
-            INNER JOIN ir_group_unit gu ON gu.group_id = grp.id
-            INNER JOIN ir_irrigate_unit uni ON uni.id = gu.unit_id
-        WHERE grp.deleted = 0 AND grp.id = #{groupId}
 
-    </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇杞亴缁勮褰曟暟-->
+  <select id="getSimpleGroupCount" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM ir_irrigate_group grp
+        INNER JOIN ir_project_group pg ON pg.group_id = grp.id
+        INNER JOIN ir_project pro ON pg.project_id = pro.id
+    <where>
+      AND grp.deleted = 0
+
+      <if test="projectId != null and projectId != ''">
+        AND pro.id = #{projectId}
+      </if>
+
+      <if test="groupCode != null and groupCode != ''">
+        AND grp.group_code LIKE CONCAT('%', #{groupCode}, '%')
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇杞亴缁勫垪琛�-->
+  <select id="getSimpleGroups" resultType="com.dy.pipIrrGlobal.voIr.VoGroupSimple">
+    SELECT
+      grp.id AS groupId,
+      grp.group_code AS groupCode,
+      (SELECT COUNT(*) FROM ir_group_intake WHERE group_id = grp.id) AS intakeCount,
+      grp.default_duration AS defaultDuration,
+      pg.sort
+    FROM ir_irrigate_group grp
+           INNER JOIN ir_project_group pg ON pg.group_id = grp.id
+           INNER JOIN ir_project pro ON pg.project_id = pro.id
+    <where>
+      AND grp.deleted = 0
+
+      <if test="projectId != null and projectId != ''">
+        AND pro.id = #{projectId}
+      </if>
+
+      <if test="groupCode != null and groupCode != ''">
+        AND grp.group_code LIKE CONCAT('%', #{groupCode}, '%')
+      </if>
+    </where>
+    ORDER BY pg.sort
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
index 0d4e9ed..7f5b8fc 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -5,7 +5,6 @@
     <!--@mbg.generated-->
     <!--@Table ir_irrigate_plan-->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="project_id" jdbcType="BIGINT" property="projectId" />
     <result column="plan_name" jdbcType="VARCHAR" property="planName" />
     <result column="startup_mode" jdbcType="TINYINT" property="startupMode" />
     <result column="plan_start_time" jdbcType="TIMESTAMP" property="planStartTime" />
@@ -17,7 +16,7 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, project_id, plan_name, startup_mode, plan_start_time, plan_stop_time, duration, 
+    id, plan_name, startup_mode, plan_start_time, plan_stop_time, duration,
     plan_state, executing_state, deleted
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -34,11 +33,11 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan">
     <!--@mbg.generated-->
-    insert into ir_irrigate_plan (id, project_id, plan_name, 
+    insert into ir_irrigate_plan (id, plan_name,
       startup_mode, plan_start_time, plan_stop_time, 
       duration, plan_state, executing_state, 
       deleted)
-    values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{planName,jdbcType=VARCHAR}, 
+    values (#{id,jdbcType=BIGINT}, #{planName,jdbcType=VARCHAR},
       #{startupMode,jdbcType=TINYINT}, #{planStartTime,jdbcType=TIMESTAMP}, #{planStopTime,jdbcType=TIMESTAMP}, 
       #{duration,jdbcType=INTEGER}, #{planState,jdbcType=TINYINT}, #{executingState,jdbcType=TINYINT}, 
       #{deleted,jdbcType=BIGINT})
@@ -49,9 +48,6 @@
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">
         id,
-      </if>
-      <if test="projectId != null">
-        project_id,
       </if>
       <if test="planName != null">
         plan_name,
@@ -81,9 +77,6 @@
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
         #{id,jdbcType=BIGINT},
-      </if>
-      <if test="projectId != null">
-        #{projectId,jdbcType=BIGINT},
       </if>
       <if test="planName != null">
         #{planName,jdbcType=VARCHAR},
@@ -115,9 +108,6 @@
     <!--@mbg.generated-->
     update ir_irrigate_plan
     <set>
-      <if test="projectId != null">
-        project_id = #{projectId,jdbcType=BIGINT},
-      </if>
       <if test="planName != null">
         plan_name = #{planName,jdbcType=VARCHAR},
       </if>
@@ -148,8 +138,7 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan">
     <!--@mbg.generated-->
     update ir_irrigate_plan
-    set project_id = #{projectId,jdbcType=BIGINT},
-      plan_name = #{planName,jdbcType=VARCHAR},
+    set plan_name = #{planName,jdbcType=VARCHAR},
       startup_mode = #{startupMode,jdbcType=TINYINT},
       plan_start_time = #{planStartTime,jdbcType=TIMESTAMP},
       plan_stop_time = #{planStopTime,jdbcType=TIMESTAMP},
@@ -168,108 +157,114 @@
     WHERE id = #{planId}
   </select>
 
-  <!--鏍规嵁鎸囧畾鐨勮鍒扞D鑾峰彇宸插彂甯冪殑鐏屾簤璁″垝鏁伴噺-->
-  <select id="getPublishedCount" resultType="java.lang.Integer">
-    SELECT COUNT(*)
-    FROM ir_irrigate_plan plan
-    WHERE plan.id = #{planId}
-      AND plan.plan_state = 2
-      AND plan.deleted = 0
-  </select>
-
-  <!--鍙戝竷鎸囧畾鐨勭亴婧夎鍒�-->
-  <update id="publishIrrigatePlan">
-    UPDATE ir_irrigate_plan SET plan_state = 2 WHERE id = #{planId}
-  </update>
-
   <!--鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栬鍒掓暟閲�-->
-  <select id="getIrrigatePlanCount" resultType="java.lang.Long">
-    SELECT COUNT(*)
-    FROM ir_irrigate_plan plan
-    INNER JOIN ir_project pro ON pro.id = plan.project_id
-    <where>
-      AND plan.deleted = 0
-      AND pro.deleted = 0
-      <if test="projectName != null and projectName != ''">
-        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-      </if>
+<!--  <select id="getIrrigatePlanCount" resultType="java.lang.Long">-->
+<!--    SELECT COUNT(*)-->
+<!--    FROM ir_irrigate_plan plan-->
+<!--    INNER JOIN ir_project pro ON pro.id = plan.project_id-->
+<!--    <where>-->
+<!--      AND plan.deleted = 0-->
+<!--      AND pro.deleted = 0-->
+<!--      <if test="projectName != null and projectName != ''">-->
+<!--        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')-->
+<!--      </if>-->
 
-      <if test="planName != null and planName != ''">
-        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')
-      </if>
+<!--      <if test="planName != null and planName != ''">-->
+<!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')-->
+<!--      </if>-->
 
-      <if test="startupMode != null">
-        AND plan.startup_mode = #{startupMode}
-      </if>
+<!--      <if test="startupMode != null">-->
+<!--        AND plan.startup_mode = #{startupMode}-->
+<!--      </if>-->
 
-      <if test="planState != null">
-        AND plan.plan_state = #{planState}
-      </if>
+<!--      <if test="planState != null">-->
+<!--        AND plan.plan_state = #{planState}-->
+<!--      </if>-->
 
-      <if test="executingState != null">
-        AND plan.executing_state = #{executingState}
-      </if>
-    </where>
-  </select>
+<!--      <if test="executingState != null">-->
+<!--        AND plan.executing_state = #{executingState}-->
+<!--      </if>-->
+<!--    </where>-->
+<!--  </select>-->
 
   <!--鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栬鍒掑垪琛�-->
-  <select id="getIrrigatePlans" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigatePlan">
+<!--  <select id="getIrrigatePlans" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigatePlan">-->
+<!--    SELECT-->
+<!--        plan.id AS planId,-->
+<!--        pro.project_name AS projectName,-->
+<!--        plan.plan_name AS planName,-->
+<!--        CASE plan.startup_mode-->
+<!--            WHEN 1 THEN '鎵嬪姩鍚姩'-->
+<!--            WHEN 2 THEN '鑷姩鍚姩'-->
+<!--        END AS startupMode,-->
+<!--        plan.plan_start_time AS startTime,-->
+<!--        plan.plan_stop_time AS stopTime,-->
+<!--        plan.duration AS duration,-->
+<!--        CASE plan.plan_state-->
+<!--            WHEN 1 THEN '鑽夌'-->
+<!--            WHEN 2 THEN '宸插彂甯�'-->
+<!--        END AS planState,-->
+
+<!--        CASE plan.executing_state-->
+<!--            WHEN 1 THEN-->
+<!--            '鏈墽琛�'-->
+<!--            WHEN 2 THEN-->
+<!--            '鎵ц涓�'-->
+<!--            WHEN 3 THEN-->
+<!--            '宸叉殏鍋�'-->
+<!--            WHEN 4 THEN-->
+<!--            '宸茬粓姝�'-->
+<!--        END AS executingState-->
+<!--    FROM ir_irrigate_plan plan-->
+<!--    INNER JOIN ir_project pro ON pro.id = plan.project_id-->
+<!--    <where>-->
+<!--      AND plan.deleted = 0-->
+<!--      AND pro.deleted = 0-->
+<!--      <if test="projectName != null and projectName != ''">-->
+<!--        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')-->
+<!--      </if>-->
+
+<!--      <if test="planName != null and planName != ''">-->
+<!--        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')-->
+<!--      </if>-->
+
+<!--      <if test="startupMode != null">-->
+<!--        AND plan.startup_mode = #{startupMode}-->
+<!--      </if>-->
+
+<!--      <if test="planState != null">-->
+<!--        AND plan.plan_state = #{planState}-->
+<!--      </if>-->
+
+<!--      <if test="executingState != null">-->
+<!--        AND plan.executing_state = #{executingState}-->
+<!--      </if>-->
+<!--    </where>-->
+<!--    ORDER BY plan.plan_state DESC, plan.plan_start_time-->
+<!--    <trim prefix="limit ">-->
+<!--      <if test="start != null and count != null">-->
+<!--        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}-->
+<!--      </if>-->
+<!--    </trim>-->
+<!--  </select>-->
+
+  <!--鏍规嵁璁″垝ID鑾峰彇璁″垝绠�鍗曚俊鎭�-->
+  <select id="getPlanSimple" resultType="com.dy.pipIrrGlobal.voIr.VoPlanSimple">
     SELECT
-        plan.id AS planId,
-        pro.project_name AS projectName,
-        plan.plan_name AS planName,
-        CASE plan.startup_mode
-            WHEN 1 THEN '鎵嬪姩鍚姩'
-            WHEN 2 THEN '鑷姩鍚姩'
-        END AS startupMode,
-        plan.plan_start_time AS startTime,
-        plan.plan_stop_time AS stopTime,
-        plan.duration AS duration,
-        CASE plan.plan_state
-            WHEN 1 THEN '鑽夌'
-            WHEN 2 THEN '宸插彂甯�'
-        END AS planState,
-
-        CASE plan.executing_state
-            WHEN 1 THEN
-            '鏈墽琛�'
-            WHEN 2 THEN
-            '鎵ц涓�'
-            WHEN 3 THEN
-            '宸叉殏鍋�'
-            WHEN 4 THEN
-            '宸茬粓姝�'
-        END AS executingState
+        plan.startup_mode AS startupMode,
+        plan.plan_start_time AS planStartTime,
+        plan.duration AS duration
     FROM ir_irrigate_plan plan
-    INNER JOIN ir_project pro ON pro.id = plan.project_id
-    <where>
-      AND plan.deleted = 0
-      AND pro.deleted = 0
-      <if test="projectName != null and projectName != ''">
-        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-      </if>
-
-      <if test="planName != null and planName != ''">
-        AND plan.plan_name LIKE CONCAT('%', #{planName}, '%')
-      </if>
-
-      <if test="startupMode != null">
-        AND plan.startup_mode = #{startupMode}
-      </if>
-
-      <if test="planState != null">
-        AND plan.plan_state = #{planState}
-      </if>
-
-      <if test="executingState != null">
-        AND plan.executing_state = #{executingState}
-      </if>
-    </where>
-    ORDER BY plan.plan_state DESC, plan.plan_start_time
-    <trim prefix="limit ">
-      <if test="start != null and count != null">
-        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
-      </if>
-    </trim>
+    WHERE plan.id = #{planId}
+      AND plan.deleted = 0 AND plan_state = 1
+    LIMIT 1
   </select>
+
+  <!--鏍规嵁璁″垝ID鏇存柊璁″垝淇℃伅锛堣捣姝㈡椂闂淬�佽鍒掔姸鎬侊級-->
+  <update id="updatePlanTimes">
+    UPDATE ir_irrigate_plan
+    SET plan_start_time = #{planStartTime}, plan_stop_time = #{planStopTime}, plan_state = 2
+    WHERE id = #{planId}
+  </update>
+
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateScheduleMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateScheduleMapper.xml
index f57f2f0..982fe2f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateScheduleMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateScheduleMapper.xml
@@ -5,17 +5,14 @@
     <!--@mbg.generated-->
     <!--@Table ir_irrigate_schedule-->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="plan_id" jdbcType="BIGINT" property="planId" />
     <result column="group_id" jdbcType="BIGINT" property="groupId" />
     <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
-    <result column="stop_time" jdbcType="TIMESTAMP" property="stopTime" />
     <result column="duration" jdbcType="INTEGER" property="duration" />
-    <result column="intake_ids" jdbcType="LONGVARCHAR" property="intakeIds" />
     <result column="current_state" jdbcType="TINYINT" property="currentState" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, plan_id, group_id, start_time, stop_time, duration, intake_ids, current_state
+    id, group_id, start_time, duration, current_state
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -31,12 +28,9 @@
   </delete>
   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule">
     <!--@mbg.generated-->
-    insert into ir_irrigate_schedule (id, plan_id, group_id, 
-      start_time, stop_time, duration, 
-      intake_ids, current_state)
-    values (#{id,jdbcType=BIGINT}, #{planId,jdbcType=BIGINT}, #{groupId,jdbcType=BIGINT}, 
-      #{startTime,jdbcType=TIMESTAMP}, #{stopTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=INTEGER}, 
-      #{intakeIds,jdbcType=LONGVARCHAR}, #{currentState,jdbcType=TINYINT})
+    insert into ir_irrigate_schedule (id, group_id, start_time, duration, current_state)
+    values (#{id,jdbcType=BIGINT}, #{groupId,jdbcType=BIGINT},
+      #{startTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=INTEGER}, #{currentState,jdbcType=TINYINT})
   </insert>
   <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule">
     <!--@mbg.generated-->
@@ -45,23 +39,14 @@
       <if test="id != null">
         id,
       </if>
-      <if test="planId != null">
-        plan_id,
-      </if>
       <if test="groupId != null">
         group_id,
       </if>
       <if test="startTime != null">
         start_time,
       </if>
-      <if test="stopTime != null">
-        stop_time,
-      </if>
       <if test="duration != null">
         duration,
-      </if>
-      <if test="intakeIds != null">
-        intake_ids,
       </if>
       <if test="currentState != null">
         current_state,
@@ -71,23 +56,14 @@
       <if test="id != null">
         #{id,jdbcType=BIGINT},
       </if>
-      <if test="planId != null">
-        #{planId,jdbcType=BIGINT},
-      </if>
       <if test="groupId != null">
         #{groupId,jdbcType=BIGINT},
       </if>
       <if test="startTime != null">
         #{startTime,jdbcType=TIMESTAMP},
       </if>
-      <if test="stopTime != null">
-        #{stopTime,jdbcType=TIMESTAMP},
-      </if>
       <if test="duration != null">
         #{duration,jdbcType=INTEGER},
-      </if>
-      <if test="intakeIds != null">
-        #{intakeIds,jdbcType=LONGVARCHAR},
       </if>
       <if test="currentState != null">
         #{currentState,jdbcType=TINYINT},
@@ -98,23 +74,14 @@
     <!--@mbg.generated-->
     update ir_irrigate_schedule
     <set>
-      <if test="planId != null">
-        plan_id = #{planId,jdbcType=BIGINT},
-      </if>
       <if test="groupId != null">
         group_id = #{groupId,jdbcType=BIGINT},
       </if>
       <if test="startTime != null">
         start_time = #{startTime,jdbcType=TIMESTAMP},
       </if>
-      <if test="stopTime != null">
-        stop_time = #{stopTime,jdbcType=TIMESTAMP},
-      </if>
       <if test="duration != null">
         duration = #{duration,jdbcType=INTEGER},
-      </if>
-      <if test="intakeIds != null">
-        intake_ids = #{intakeIds,jdbcType=LONGVARCHAR},
       </if>
       <if test="currentState != null">
         current_state = #{currentState,jdbcType=TINYINT},
@@ -125,30 +92,30 @@
   <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule">
     <!--@mbg.generated-->
     update ir_irrigate_schedule
-    set plan_id = #{planId,jdbcType=BIGINT},
-      group_id = #{groupId,jdbcType=BIGINT},
+    set group_id = #{groupId,jdbcType=BIGINT},
       start_time = #{startTime,jdbcType=TIMESTAMP},
-      stop_time = #{stopTime,jdbcType=TIMESTAMP},
       duration = #{duration,jdbcType=INTEGER},
-      intake_ids = #{intakeIds,jdbcType=LONGVARCHAR},
       current_state = #{currentState,jdbcType=TINYINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
 
-  <!--鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭_妯″紡2-->
-  <select id="getIrrigateSchedules" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigateSchedule">
+  <!--鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭璁板綍-->
+  <select id="getSchedulesByPlanId" resultType="com.dy.pipIrrGlobal.voIr.VoIrrigateSchedule">
     SELECT
-        id AS scheduleId,
-        <if test="startupMode == 1">
-            null AS startTime,
-            duration,
-        </if>
-        <if test="startupMode == 2">
-          start_time AS startTime,
-          TIMESTAMPDIFF(MINUTE, start_time, stop_time) AS duration,
-        </if>
-        intake_ids AS intakeIds
-    FROM ir_irrigate_schedule
-    WHERE plan_id = #{planId}
+        sch.id AS scheduleId,
+        sch.group_id AS groupId,
+        sch.start_time AS startTime,
+        sch.duration
+    FROM ir_irrigate_schedule sch
+        INNER JOIN ir_plan_schedule ps ON ps.schedule_id = sch.id
+    WHERE current_state = 1 AND ps.plan_id = #{planId}
   </select>
+
+  <!--鏍规嵁鐏屾簤娆″簭ID鏇存柊娆″簭寮�濮嬫椂闂�-->
+  <update id="updateScheduleStartTime">
+    UPDATE ir_irrigate_schedule
+    SET start_time = #{startTime}
+    WHERE id = #{scheduleId}
+  </update>
+
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrPlanScheduleMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrPlanScheduleMapper.xml
new file mode 100644
index 0000000..9df26cd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrPlanScheduleMapper.xml
@@ -0,0 +1,91 @@
+<?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.IrPlanScheduleMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule">
+    <!--@mbg.generated-->
+    <!--@Table ir_plan_schedule-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="plan_id" jdbcType="BIGINT" property="planId" />
+    <result column="schedule_id" jdbcType="BIGINT" property="scheduleId" />
+    <result column="sort" jdbcType="INTEGER" property="sort" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, plan_id, schedule_id, sort
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_plan_schedule
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_plan_schedule
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule">
+    <!--@mbg.generated-->
+    insert into ir_plan_schedule (id, plan_id, schedule_id, 
+      sort)
+    values (#{id,jdbcType=BIGINT}, #{planId,jdbcType=BIGINT}, #{scheduleId,jdbcType=BIGINT}, 
+      #{sort,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule">
+    <!--@mbg.generated-->
+    insert into ir_plan_schedule
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="planId != null">
+        plan_id,
+      </if>
+      <if test="scheduleId != null">
+        schedule_id,
+      </if>
+      <if test="sort != null">
+        sort,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="planId != null">
+        #{planId,jdbcType=BIGINT},
+      </if>
+      <if test="scheduleId != null">
+        #{scheduleId,jdbcType=BIGINT},
+      </if>
+      <if test="sort != null">
+        #{sort,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule">
+    <!--@mbg.generated-->
+    update ir_plan_schedule
+    <set>
+      <if test="planId != null">
+        plan_id = #{planId,jdbcType=BIGINT},
+      </if>
+      <if test="scheduleId != null">
+        schedule_id = #{scheduleId,jdbcType=BIGINT},
+      </if>
+      <if test="sort != null">
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule">
+    <!--@mbg.generated-->
+    update ir_plan_schedule
+    set plan_id = #{planId,jdbcType=BIGINT},
+      schedule_id = #{scheduleId,jdbcType=BIGINT},
+      sort = #{sort,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml
new file mode 100644
index 0000000..d9ab535
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectGroupMapper.xml
@@ -0,0 +1,91 @@
+<?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.IrProjectGroupMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrProjectGroup">
+    <!--@mbg.generated-->
+    <!--@Table ir_project_group-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="project_id" jdbcType="BIGINT" property="projectId" />
+    <result column="group_id" jdbcType="BIGINT" property="groupId" />
+    <result column="sort" jdbcType="INTEGER" property="sort" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, project_id, group_id, sort
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_project_group
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_project_group
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProjectGroup">
+    <!--@mbg.generated-->
+    insert into ir_project_group (id, project_id, group_id, 
+      sort)
+    values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{groupId,jdbcType=BIGINT}, 
+      #{sort,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProjectGroup">
+    <!--@mbg.generated-->
+    insert into ir_project_group
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="projectId != null">
+        project_id,
+      </if>
+      <if test="groupId != null">
+        group_id,
+      </if>
+      <if test="sort != null">
+        sort,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="projectId != null">
+        #{projectId,jdbcType=BIGINT},
+      </if>
+      <if test="groupId != null">
+        #{groupId,jdbcType=BIGINT},
+      </if>
+      <if test="sort != null">
+        #{sort,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProjectGroup">
+    <!--@mbg.generated-->
+    update ir_project_group
+    <set>
+      <if test="projectId != null">
+        project_id = #{projectId,jdbcType=BIGINT},
+      </if>
+      <if test="groupId != null">
+        group_id = #{groupId,jdbcType=BIGINT},
+      </if>
+      <if test="sort != null">
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProjectGroup">
+    <!--@mbg.generated-->
+    update ir_project_group
+    set project_id = #{projectId,jdbcType=BIGINT},
+      group_id = #{groupId,jdbcType=BIGINT},
+      sort = #{sort,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml
index daeda58..050c788 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrProjectMapper.xml
@@ -1,232 +1,311 @@
 <?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.IrProjectMapper">
-    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrProject">
-        <!--@mbg.generated-->
-        <!--@Table ir_project-->
-        <id column="id" jdbcType="BIGINT" property="id" />
-        <result column="project_name" jdbcType="VARCHAR" property="projectName" />
-        <result column="province_id" jdbcType="BIGINT" property="provinceId" />
-        <result column="city_id" jdbcType="BIGINT" property="cityId" />
-        <result column="county_id" jdbcType="BIGINT" property="countyId" />
-        <result column="town_id" jdbcType="BIGINT" property="townId" />
-        <result column="village_id" jdbcType="BIGINT" property="villageId" />
-        <result column="project_state" jdbcType="TINYINT" property="projectState" />
-        <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, project_name, province_id, city_id, county_id, town_id, `village_id`, project_state, remarks, `operator`,
-        operate_time, deleted
-    </sql>
-    <!--娣诲姞-->
-    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
-        <!--@mbg.generated-->
-        insert into ir_project
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                id,
-            </if>
-            <if test="projectName != null">
-                project_name,
-            </if>
-            <if test="provinceId != null">
-                province_id,
-            </if>
-            <if test="cityId != null">
-                city_id,
-            </if>
-            <if test="countyId != null">
-                county_id,
-            </if>
-            <if test="townId != null">
-                town_id,
-            </if>
-            <if test="villageId != null">
-                village_id,
-            </if>
-            <if test="projectState != null">
-                project_state,
-            </if>
-            <if test="remarks != null">
-                remarks,
-            </if>
-            <if test="operator != null">
-                `operator`,
-            </if>
-            <if test="operateDt != null">
-                operate_time,
-            </if>
-            <if test="deleted != null">
-                deleted,
-            </if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=BIGINT},
-            </if>
-            <if test="projectName != null">
-                #{projectName,jdbcType=VARCHAR},
-            </if>
-            <if test="provinceId != null">
-                #{provinceId,jdbcType=BIGINT},
-            </if>
-            <if test="cityId != null">
-                #{cityId,jdbcType=BIGINT},
-            </if>
-            <if test="countyId != null">
-                #{countyId,jdbcType=BIGINT},
-            </if>
-            <if test="townId != null">
-                #{townId,jdbcType=BIGINT},
-            </if>
-            <if test="villageId != null">
-                #{villageId,jdbcType=BIGINT},
-            </if>
-            <if test="projectState != null">
-                #{projectState,jdbcType=TINYINT},
-            </if>
-            <if test="remarks != null">
-                #{remarks,jdbcType=VARCHAR},
-            </if>
-            <if test="operator != null">
-                #{operator,jdbcType=BIGINT},
-            </if>
-            <if test="operateDt != null">
-                #{operateDt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="deleted != null">
-                #{deleted,jdbcType=TINYINT},
-            </if>
-        </trim>
-    </insert>
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoIr.IrProject">
+    <!--@mbg.generated-->
+    <!--@Table ir_project-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="project_name" jdbcType="VARCHAR" property="projectName" />
+    <result column="province_id" jdbcType="BIGINT" property="provinceId" />
+    <result column="city_id" jdbcType="BIGINT" property="cityId" />
+    <result column="county_id" jdbcType="BIGINT" property="countyId" />
+    <result column="town_id" jdbcType="BIGINT" property="townId" />
+    <result column="village_id" jdbcType="BIGINT" property="villageId" />
+    <result column="project_state" jdbcType="TINYINT" property="projectState" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operate_time" jdbcType="TIMESTAMP" property="operateTime" />
+    <result column="deleted" jdbcType="TINYINT" property="deleted" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, project_name, province_id, city_id, county_id, town_id, village_id, project_state, 
+    remarks, `operator`, operate_time, deleted
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from ir_project
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from ir_project
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
+    <!--@mbg.generated-->
+    insert into ir_project (id, project_name, province_id, 
+      city_id, county_id, town_id, 
+      village_id, project_state, remarks, 
+      `operator`, operate_time, deleted
+      )
+    values (#{id,jdbcType=BIGINT}, #{projectName,jdbcType=VARCHAR}, #{provinceId,jdbcType=BIGINT}, 
+      #{cityId,jdbcType=BIGINT}, #{countyId,jdbcType=BIGINT}, #{townId,jdbcType=BIGINT}, 
+      #{villageId,jdbcType=BIGINT}, #{projectState,jdbcType=TINYINT}, #{remarks,jdbcType=VARCHAR}, 
+      #{operator,jdbcType=BIGINT}, #{operateTime,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
+    <!--@mbg.generated-->
+    insert into ir_project
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="projectName != null">
+        project_name,
+      </if>
+      <if test="provinceId != null">
+        province_id,
+      </if>
+      <if test="cityId != null">
+        city_id,
+      </if>
+      <if test="countyId != null">
+        county_id,
+      </if>
+      <if test="townId != null">
+        town_id,
+      </if>
+      <if test="villageId != null">
+        village_id,
+      </if>
+      <if test="projectState != null">
+        project_state,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operateTime != null">
+        operate_time,
+      </if>
+      <if test="deleted != null">
+        deleted,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="projectName != null">
+        #{projectName,jdbcType=VARCHAR},
+      </if>
+      <if test="provinceId != null">
+        #{provinceId,jdbcType=BIGINT},
+      </if>
+      <if test="cityId != null">
+        #{cityId,jdbcType=BIGINT},
+      </if>
+      <if test="countyId != null">
+        #{countyId,jdbcType=BIGINT},
+      </if>
+      <if test="townId != null">
+        #{townId,jdbcType=BIGINT},
+      </if>
+      <if test="villageId != null">
+        #{villageId,jdbcType=BIGINT},
+      </if>
+      <if test="projectState != null">
+        #{projectState,jdbcType=TINYINT},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateTime != null">
+        #{operateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        #{deleted,jdbcType=TINYINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
+    <!--@mbg.generated-->
+    update ir_project
+    <set>
+      <if test="projectName != null">
+        project_name = #{projectName,jdbcType=VARCHAR},
+      </if>
+      <if test="provinceId != null">
+        province_id = #{provinceId,jdbcType=BIGINT},
+      </if>
+      <if test="cityId != null">
+        city_id = #{cityId,jdbcType=BIGINT},
+      </if>
+      <if test="countyId != null">
+        county_id = #{countyId,jdbcType=BIGINT},
+      </if>
+      <if test="townId != null">
+        town_id = #{townId,jdbcType=BIGINT},
+      </if>
+      <if test="villageId != null">
+        village_id = #{villageId,jdbcType=BIGINT},
+      </if>
+      <if test="projectState != null">
+        project_state = #{projectState,jdbcType=TINYINT},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateTime != null">
+        operate_time = #{operateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="deleted != null">
+        deleted = #{deleted,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
+    <!--@mbg.generated-->
+    update ir_project
+    set project_name = #{projectName,jdbcType=VARCHAR},
+      province_id = #{provinceId,jdbcType=BIGINT},
+      city_id = #{cityId,jdbcType=BIGINT},
+      county_id = #{countyId,jdbcType=BIGINT},
+      town_id = #{townId,jdbcType=BIGINT},
+      village_id = #{villageId,jdbcType=BIGINT},
+      project_state = #{projectState,jdbcType=TINYINT},
+      remarks = #{remarks,jdbcType=VARCHAR},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operate_time = #{operateTime,jdbcType=TIMESTAMP},
+      deleted = #{deleted,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
 
-    <!--鏍规嵁涓嬬骇鑾峰彇涓婁竴绾у湴鍧�-->
-    <select id="getSupperByVillageId" parameterType="_long" resultType="java.lang.Long">
-        select dis_tow.*
-        from ba_district dis_vil
-        inner join
-        ba_district dis_tow
-        on dis_vil.supperId = dis_tow.id
-        where dis_vil.id = #{vaId,jdbcType=BIGINT}
-    </select>
-    <!--閫昏緫鍒犻櫎-->
-    <delete id="deleteLogicById" parameterType="java.lang.Long">
-        <!--@mbg.generated-->
-        update ir_project
-        set deleted = 1
-        where id = #{id,jdbcType=BIGINT}
-    </delete>
-    <!--淇敼淇℃伅-->
-    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoIr.IrProject">
-        update ir_project
-        <set>
-            <if test="projectName != null">
-                project_name = #{projectName,jdbcType=VARCHAR},
-            </if>
-            <if test="provinceId != null">
-                province_id = #{provinceId,jdbcType=BIGINT},
-            </if>
-            <if test="cityId != null">
-                city_id = #{cityId,jdbcType=BIGINT},
-            </if>
-            <if test="countyId != null">
-                county_id = #{countyId,jdbcType=BIGINT},
-            </if>
-            <if test="townId != null">
-                town_id = #{townId,jdbcType=BIGINT},
-            </if>
-            <if test="villageId != null">
-                village_id = #{villageId,jdbcType=BIGINT},
-            </if>
-            <if test="projectState != null">
-                project_state = #{projectState,jdbcType=TINYINT},
-            </if>
-            <if test="remarks != null">
-                remarks = #{remarks,jdbcType=VARCHAR},
-            </if>
-            <if test="operator != null">
-                operator = #{operator,jdbcType=BIGINT},
-            </if>
-            <if test="operateDt != null">
-                operate_time = #{operateDt,jdbcType=TIMESTAMP},
-            </if>
-            <if test="deleted != null">
-                deleted = #{deleted,jdbcType=TINYINT},
-            </if>
-        </set>
-        where id = #{id,jdbcType=BIGINT}
-    </update>
-    <!--淇敼鐘舵��-->
-    <update id="updateProjectState">
-        update ir_project
-        set project_state = #{projectState,jdbcType=TINYINT},
-            operator = #{operator,jdbcType=BIGINT},
-            operate_time = #{operateDt,jdbcType=TIMESTAMP}
-        where id = #{id,jdbcType=BIGINT}
-    </update>
-    <!--鏌ヨ涓�涓俊鎭�-->
-    <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoProjectOne">
-        select
-        CAST(pro.id AS char)AS id,
-        CAST(pro.province_id AS char)AS provinceId,
-        CAST(pro.city_id AS char)AS cityId,
-        CAST(pro.county_id AS char)AS countyId,
-        CAST(pro.town_id AS char)AS townId,
-        CAST(pro.village_id AS char)AS villageId,
-        pro.project_name  AS  projectName,
-        pro.project_state  AS  projectState,
-        cli.name         AS operatorName,
-        pro.remarks,
-        pro.operate_time  AS  operateDt
-        from ir_project pro
-        left join se_client cli on cli.id = pro.operator
-        where pro.id = #{id,jdbcType=BIGINT} and pro.deleted = 0
-    </select>
-    <!--鍒嗛〉鏌ヨ鏁伴噺-->
-    <select id="getRecordCount" resultType="java.lang.Long">
-        SELECT COUNT(*) AS recordCount
-        FROM ir_project pro
-        <where>
-            pro.deleted = 0
-            <if test="projectName != null and projectName != ''">
-                AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-            </if>
-            <if test = "projectState != null and projectState != ''">
-                AND pro.project_state = #{projectState}
-            </if>
-        </where>
-    </select>
-    <!--鍒嗛〉鏌ヨ鏁版嵁-->
-    <select id="getProjects" resultType="com.dy.pipIrrGlobal.voIr.VoProject">
-        SELECT
-        CAST(pro.id AS char)AS projectId,
-        pro.project_name  AS  projectName,
-        pro.project_state  AS  projectState,
-        CONCAT(province.`name`,city.`name`,country.`name`, town.`name`, village.`name`) AS address,
-        pro.remarks,
-        pro.operate_time  AS  operateDt
-        FROM ir_project pro
-        LEFT JOIN ba_district province ON pro.province_id = province.id
-        LEFT JOIN ba_district city ON pro.city_id = city.id
-        LEFT JOIN ba_district country ON pro.county_id = country.id
-        LEFT JOIN ba_district town ON pro.town_id = town.id
-        LEFT JOIN ba_district village ON pro.village_id = village.id
-        <where>
-            pro.deleted = 0
-            <if test="projectName != null and projectName != ''">
-                AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
-            </if>
-            <if test = "projectState != null and projectState != ''">
-                AND pro.project_state = #{projectState}
-            </if>
-        </where>
-        ORDER BY pro.operate_time DESC
-        <if test="pageCurr != null and pageSize != null">
-            LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
-        </if>
-    </select>
+  <!--鏍规嵁涓嬬骇鑾峰彇涓婁竴绾у湴鍧�-->
+  <select id="getSupperByVillageId" parameterType="_long" resultType="java.lang.Long">
+    select dis_tow.*
+    from ba_district dis_vil
+    inner join
+    ba_district dis_tow
+    on dis_vil.supperId = dis_tow.id
+    where dis_vil.id = #{vaId,jdbcType=BIGINT}
+  </select>
+  <!--閫昏緫鍒犻櫎-->
+  <delete id="deleteLogicById" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    update ir_project
+    set deleted = 1
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <!--淇敼鐘舵��-->
+  <update id="updateProjectState">
+    update ir_project
+    set project_state = #{projectState,jdbcType=TINYINT},
+    operator = #{operator,jdbcType=BIGINT},
+    operate_time = #{operateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏌ヨ涓�涓俊鎭�-->
+  <select id="selectById" resultType="com.dy.pipIrrGlobal.voIr.VoProjectOne">
+    select
+    CAST(pro.id AS char)AS id,
+    CAST(pro.province_id AS char)AS provinceId,
+    CAST(pro.city_id AS char)AS cityId,
+    CAST(pro.county_id AS char)AS countyId,
+    CAST(pro.town_id AS char)AS townId,
+    CAST(pro.village_id AS char)AS villageId,
+    pro.project_name  AS  projectName,
+    pro.project_state  AS  projectState,
+    cli.name         AS operatorName,
+    pro.remarks,
+    pro.operate_time  AS  operateDt
+    from ir_project pro
+    left join se_client cli on cli.id = pro.operator
+    where pro.id = #{id,jdbcType=BIGINT} and pro.deleted = 0
+  </select>
+
+  <!--鍒嗛〉鏌ヨ鏁伴噺-->
+  <select id="getRecordCount" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM ir_project pro
+    <where>
+      pro.deleted = 0
+      <if test="projectName != null and projectName != ''">
+        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+      <if test = "projectState != null and projectState != ''">
+        AND pro.project_state = #{projectState}
+      </if>
+    </where>
+  </select>
+
+  <!--鍒嗛〉鏌ヨ鏁版嵁-->
+  <select id="getProjects" resultType="com.dy.pipIrrGlobal.voIr.VoProject">
+    SELECT
+    CAST(pro.id AS char)AS projectId,
+    pro.project_name  AS  projectName,
+    pro.project_state  AS  projectState,
+    CONCAT(province.`name`,city.`name`,country.`name`, town.`name`, village.`name`) AS address,
+    pro.remarks,
+    pro.operate_time  AS  operateDt
+    FROM ir_project pro
+    LEFT JOIN ba_district province ON pro.province_id = province.id
+    LEFT JOIN ba_district city ON pro.city_id = city.id
+    LEFT JOIN ba_district country ON pro.county_id = country.id
+    LEFT JOIN ba_district town ON pro.town_id = town.id
+    LEFT JOIN ba_district village ON pro.village_id = village.id
+    <where>
+      pro.deleted = 0
+      <if test="projectName != null and projectName != ''">
+        AND pro.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+      <if test = "projectState != null and projectState != ''">
+        AND pro.project_state = #{projectState}
+      </if>
+    </where>
+    ORDER BY pro.operate_time DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+    </if>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍(绮剧畝)鏁伴噺-->
+  <select id="getSimpleProjectsCount" resultType="java.lang.Long">
+    SELECT COUNT(*) AS recordCount
+    FROM ir_project pr
+    <where>
+      AND pr.project_state = 1
+      AND pr.deleted = 0
+      <if test="projectName != null and projectName != ''">
+        AND pr.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍(绮剧畝)-->
+  <select id="getSimpleProjects" resultType="com.dy.pipIrrGlobal.voIr.VoProjectSimple">
+    SELECT
+        pr.id AS projectId,
+        pr.project_name AS projectName,
+        (SELECT COUNT(*) FROM ir_project_group pg WHERE pg.project_id = pr.id) AS groupCount
+    FROM ir_project pr
+    <where>
+      AND pr.project_state = 1
+      AND pr.deleted = 0
+      <if test="projectName != null and projectName != ''">
+        AND pr.project_name LIKE CONCAT('%', #{projectName}, '%')
+      </if>
+    </where>
+    ORDER BY pr.operate_time DESC
+    <trim prefix="limit ">
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
 </mapper>
\ No newline at end of file
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
index 9bffcda..a3b5ec8 100644
--- 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
@@ -9,10 +9,7 @@
 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;
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 76dd797..90cb545 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
@@ -42,7 +42,7 @@
      * @return
      */
     public Integer addIrrigateGroup(IrIrrigateGroup po) {
-        po.setOperateDt(new Date());
+        po.setOperateTime(new Date());
         po.setDeleted((byte) 0);
         int rows = irIrrigateGroupMapper.insertSelective(po);
         if (rows == 0) {
@@ -71,7 +71,7 @@
      * @return
      */
     public Integer updateIrrigateGroup(IrIrrigateGroup po){
-        po.setOperateDt(new Date());
+        po.setOperateTime(new Date());
         int rows = irIrrigateGroupMapper.updateByPrimaryKeySelective(po);
         if (rows == 0){
             return 0;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java
index 6f46207..973bccf 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectCtrl.java
@@ -6,10 +6,8 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoIr.IrProject;
-import com.dy.pipIrrGlobal.pojoPr.PrIntake;
 import com.dy.pipIrrGlobal.voIr.VoProject;
 import com.dy.pipIrrGlobal.voIr.VoProjectOne;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
 import com.dy.pipIrrIrrigate.result.IrrigateResultCode;
 import io.swagger.v3.oas.annotations.Operation;
@@ -21,14 +19,15 @@
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.lang.reflect.Array;
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author :WuZeYu
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java
index 4683b2d..adad9dc 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/java/com/dy/pipIrrIrrigate/project/ProjectSv.java
@@ -6,7 +6,6 @@
 import com.dy.pipIrrGlobal.pojoIr.IrProject;
 import com.dy.pipIrrGlobal.voIr.VoProject;
 import com.dy.pipIrrGlobal.voIr.VoProjectOne;
-import com.dy.pipIrrGlobal.voPr.VoIntake;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +34,7 @@
      * @return
      */
     public Integer addProject(IrProject po) {
-        po.setOperateDt(new Date());
+        po.setOperateTime(new Date());
         po.setDeleted((byte) 0);
         if (po.getVillageId() != null) {
             po.setTownId(irProjectMapper.getSupperByVillageId(po.getVillageId()));
@@ -81,7 +80,7 @@
      * @return
      */
     public Integer updateProject(IrProject po){
-        po.setOperateDt(new Date());
+        po.setOperateTime(new Date());
         if (po.getVillageId() != null) {
             po.setTownId(irProjectMapper.getSupperByVillageId(po.getVillageId()));
             po.setCountyId(irProjectMapper.getSupperByVillageId(po.getTownId()));
@@ -113,7 +112,7 @@
      * @return
      */
     public Integer updateProjectState(IrProject po){
-        po.setOperateDt(new Date());
+        po.setOperateTime(new Date());
         int rows = irProjectMapper.updateProjectState(po);
         if (rows == 0){
             return 0;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
index 2ce8770..38b60b2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -5,8 +5,17 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.multiDataSource.DataSourceContext;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V1.CodeV1;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
+import com.dy.common.mw.protocol.p206V1.downVos.ComA1Vo;
+import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
+import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
+import com.dy.common.util.IDLongGenerator;
+import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.command.ComSupport;
+import com.dy.pipIrrGlobal.command.dto.Param;
+import com.dy.pipIrrGlobal.daoIr.IrIntakeOperateMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
@@ -15,20 +24,23 @@
 import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveLastMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoIrrigaterProfile;
 import com.dy.pipIrrGlobal.voRm.VoRtuAndVc;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrWechat.command.dto.AutomaticClose;
+import com.dy.pipIrrWechat.result.WechatResultCode;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -50,6 +62,10 @@
     private final RmIrrigateProfileMapper rmIrrigateProfileMapper;
     private final RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper;
     //private final PrCommonIntakesMapper prCommonIntakesMapper;
+    private final IrIntakeOperateMapper irIntakeOperateMapper;
+
+    @Value("${mw.rtuCallbackUrl_wx}")
+    private String rtuCallbackUrl_wx;
 
     /**
      * pro_mw锛氬睘鎬�
@@ -60,7 +76,7 @@
     private String pro_mw = "mw";
     private String key_mw = "comSendUrl";
     @Autowired
-    public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper,RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, RmIrrigateProfileMapper rmIrrigateProfileMapper, Environment env) {
+    public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper,RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, RmIrrigateProfileMapper rmIrrigateProfileMapper, Environment env, IrIntakeOperateMapper irIntakeOperateMapper) {
         this.rmCommandHistoryMapper = rmCommandHistoryMapper;
         this.rmOpenCloseValveLastMapper = rmOpenCloseValveLastMapper;
         //this.prCommonIntakesMapper = prCommonIntakesMapper;
@@ -71,6 +87,7 @@
         this.seClientCardMapper = seClientCardMapper;
         this.rmIrrigateProfileMapper = rmIrrigateProfileMapper;
         this.env = env;
+        this.irIntakeOperateMapper = irIntakeOperateMapper;
     }
     /**
      * 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
@@ -207,4 +224,192 @@
         rsVo.obj = rmIrrigateProfileMapper.getIrrPro(type);
         return rsVo ;
     }
+
+    /**
+     * 娣诲姞鍙栨按鍙f搷浣滆褰曪紝杞亴杩囩▼鍛戒护涓嬪彂鏃朵娇鐢�
+     * @param po
+     * @return
+     */
+    public Long addIntakeOperate(IrIntakeOperate po) {
+        irIntakeOperateMapper.insert(po);
+        return po.getId();
+    }
+
+    ///**
+    // * 鏍规嵁鍛戒护ID鏇存柊鍙栨按鍙f搷浣滆褰�
+    // * @param commandId
+    // * @param commandResult
+    // * @return
+    // */
+    //public Integer updateByCommandId(Long commandId, Byte commandResult) {
+    //    return irIntakeOperateMapper.updateByCommandId(commandId, commandResult);
+    //}
+
+    /**
+     * 瀹氭椂鍏抽榾寮忚鍒掑紑闃�
+     * @param automaticClose
+     * @return
+     */
+    public Map planedOpenTimedClose(AutomaticClose automaticClose, Date startTime, Integer duration) {
+        Long intakeId = automaticClose.getIntakeId();
+        Long vcId = automaticClose.getVcId();
+        Date plannedOpenTime = automaticClose.getPlannedOpenTime();
+        Integer minutes = automaticClose.getMinutes();
+        Long operator = automaticClose.getOperator();
+        Byte openType = automaticClose.getOpenType();
+        Long comId = new IDLongGenerator().generate();
+
+        if(openType == 1) {
+            IrIntakeOperate irIntakeOperate = new IrIntakeOperate();
+            irIntakeOperate.setCommandId(comId);
+            irIntakeOperate.setIntakeId(intakeId);
+            irIntakeOperate.setStartTime(startTime);
+            irIntakeOperate.setDuration(duration);
+
+            Long id = addIntakeOperate(irIntakeOperate);
+            if(id == null) {
+                Map map = new HashMap<>();
+                map.put("success", false);
+                map.put("msg", "娣诲姞鍙栨按鍙f搷浣滆褰曞け璐�");
+                map.put("content", null);
+                return map;
+            }
+        }
+
+        Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime));
+        Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime));
+        Integer day = Integer.parseInt(String.format("%td", plannedOpenTime));
+        Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime));
+        Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime));
+
+        /**
+         * 濡傛灉鍐滄埛閫夋嫨浜嗚櫄鎷熷崱锛屽垯浣跨敤璇ヨ櫄鎷熷崱
+         * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
+         * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
+         */
+        if(vcId == null) {
+            vcId = getVcIdByIntakeId(intakeId);
+            if(vcId == null) {
+                irIntakeOperateMapper.updateByCommandId(comId, (byte)2, WechatResultCode.PLEASE_SELECT_A_VC.getMessage() + "(" + intakeId + ")");
+
+                Map map = new HashMap<>();
+                map.put("success", false);
+                map.put("msg", WechatResultCode.PLEASE_SELECT_A_VC.getMessage() + "(" + intakeId + ")");
+                map.put("content", null);
+                return map;
+            }
+        }
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = getVcById(vcId);
+        if(vc == null) {
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, WechatResultCode.PLEASE_SELECT_A_VC.getMessage() + "(" + intakeId + ")");
+
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.PLEASE_SELECT_A_VC.getMessage() + "(" + intakeId + ")");
+            map.put("content", null);
+            return map;
+        }
+        String vcNum = vc.getVcNum().toString();
+        Double moneyRemain = vc.getMoney();
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = getPrice();
+        if(waterPrice == null) {
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.NO_WATER_PRICE.getMessage());
+            map.put("content", null);
+            return map;
+        }
+
+        // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, WechatResultCode.RTU_NOT_EXIST.getMessage() + "(" + intakeId + ")");
+
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.RTU_NOT_EXIST.getMessage());
+            map.put("content", null);
+            return map;
+        }
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
+
+        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
+
+        // 鐢熸垚璁㈠崟鍙�
+        String orderNo = generateOrderNo();
+        if(orderNo == null) {
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, WechatResultCode.NO_ORDER_NUMBER.getMessage() + "(" + intakeId + ")");
+
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", WechatResultCode.NO_ORDER_NUMBER.getMessage());
+            map.put("content", null);
+            return map;
+        }
+
+        String commandCode = null;
+        if(protocol.equals(ProtocolConstantV206V202404.protocolName)) {
+            Map map = new HashMap<>();
+            map.put("success", true);
+            map.put("msg", "寮�闃�鎴愬姛");
+            map.put("content", null);
+            return map;
+        } else if(protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1.cd_A1;
+
+            // 鍒涘缓瑙嗗浘
+            ComA1Vo param = new ComA1Vo();
+            param.setIcCardNo(vcNum);
+            param.setMoneyRemain(moneyRemain);
+            param.setWaterPrice(waterPrice);
+            param.setMinutes(minutes);
+            param.setYear(year);
+            param.setMonth(month);
+            param.setDay(day);
+            param.setHour(hour);
+            param.setMinute(minute);
+            param.setOrderNo(orderNo);
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)1);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV1.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
+            myParam.setOperator(operator);
+            myParam.setOpenType(openType);
+
+            BaseResponse<Boolean> result = dealWithCommandResult(myParam);
+
+            Map map = new HashMap<>();
+            map.put("success", result.isSuccess());
+            map.put("msg", result.getMsg());
+            map.put("content", result.getContent());
+            return map;
+        } else {
+            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "绯荤粺鏆備笉鏀寔璇ュ崗璁�" + "(" + intakeId + ")");
+
+            Map map = new HashMap<>();
+            map.put("success", false);
+            map.put("msg", "绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+            map.put("content", null);
+            return map;
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
index 4d03330..2dc85c6 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -36,10 +36,7 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -541,106 +538,123 @@
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        Long intakeId = automaticClose.getIntakeId();
-        Long vcId = automaticClose.getVcId();
-        Date plannedOpenTime = automaticClose.getPlannedOpenTime();
-        Integer minutes = automaticClose.getMinutes();
-        Long operator = automaticClose.getOperator();
-        Long comId = new IDLongGenerator().generate();
-
-        Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime));
-        Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime));
-        Integer day = Integer.parseInt(String.format("%td", plannedOpenTime));
-        Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime));
-        Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime));
-
-        /**
-         * 濡傛灉鍐滄埛閫夋嫨浜嗚櫄鎷熷崱锛屽垯浣跨敤璇ヨ櫄鎷熷崱
-         * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
-         * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
-         */
-        if(vcId == null) {
-            vcId = commandSv.getVcIdByIntakeId(intakeId);
-            if(vcId == null) {
-                return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
-            }
+        Map map_result = commandSv.planedOpenTimedClose(automaticClose, null,null);
+        if(map_result.get("success").equals(false)) {
+            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
         }
+        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
 
-        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
-        VoVirtualCard vc = commandSv.getVcById(vcId);
-        if(vc == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
-        }
-        String vcNum = vc.getVcNum().toString();
-        Double moneyRemain = vc.getMoney();
 
-        // 鑾峰彇姘翠环
-        Double waterPrice = commandSv.getPrice();
-        if(waterPrice == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage());
-        }
-
-        // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
-        JSONObject job_rtu = getRtu(intakeId, null);
-        if(job_rtu == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
-        }
-        String rtuAddr = job_rtu.getString("rtuAddr");
-        String protocol = job_rtu.getString("protocol");
-        //String orgTag = job_rtu.getString("orgTag");
-        //if(orgTag == null) {
-        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage());
+        //Long intakeId = automaticClose.getIntakeId();
+        //Long vcId = automaticClose.getVcId();
+        //Date plannedOpenTime = automaticClose.getPlannedOpenTime();
+        //Integer minutes = automaticClose.getMinutes();
+        //Long operator = automaticClose.getOperator();
+        //Long openingId = automaticClose.getOpeningId();
+        //Long comId = new IDLongGenerator().generate();
+        //
+        //if(openingId != null) {
+        //    IrIntakeOperate irIntakeOperate = new IrIntakeOperate();
+        //    irIntakeOperate.setOpeningId(openingId);
+        //    irIntakeOperate.setCommandId(comId);
+        //    System.out.println("------------------------------------------------comId: " + comId);
+        //    irIntakeOperate.setIntakeId(intakeId);
+        //    Long id = commandSv.addIntakeOperate(irIntakeOperate);
+        //    if(id == null) {
+        //        return BaseResponseUtils.buildErrorMsg("娣诲姞鍙栨按鍙f搷浣滆褰曞け璐�");
+        //    }
         //}
-        //comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
-        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
-
-        // 鐢熸垚璁㈠崟鍙�
-        String orderNo = generateOrderNo();
-        if(orderNo == null) {
-            return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage());
-        }
-
-        String commandCode = null;
-        if(protocol.equals(ProtocolConstantV206V202404.protocolName)) {
-            return BaseResponseUtils.buildSuccess();
-        } else if(protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
-            // 鑾峰彇鍔熻兘鐮�
-            commandCode = CodeV1.cd_A1;
-
-            // 鍒涘缓瑙嗗浘
-            ComA1Vo param = new ComA1Vo();
-            param.setIcCardNo(vcNum);
-            param.setMoneyRemain(moneyRemain);
-            param.setWaterPrice(waterPrice);
-            param.setMinutes(minutes);
-            param.setYear(year);
-            param.setMonth(month);
-            param.setDay(day);
-            param.setHour(hour);
-            param.setMinute(minute);
-            param.setOrderNo(orderNo);
-
-            /**
-             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
-             * 1 鍑嗗鍙傛暟
-             * 2 璋冪敤鍏叡鏂规硶
-             */
-            Param myParam = new Param();
-            myParam.setComId(comId);
-            myParam.setComType((byte)1);
-            myParam.setCommandCode(commandCode);
-            myParam.setCommandName(CodeV1.getCodeName(commandCode));
-            myParam.setIntakeId(intakeId);
-            myParam.setRtuAddr(rtuAddr);
-            myParam.setProtocol(protocol);
-            myParam.setVcId(vcId);
-            myParam.setParam(param);
-            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
-            myParam.setOperator(operator);
-            return dealWithCommandResult(myParam);
-        } else {
-            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
-        }
+        //
+        //Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime));
+        //Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime));
+        //Integer day = Integer.parseInt(String.format("%td", plannedOpenTime));
+        //Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime));
+        //Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime));
+        //
+        ///**
+        // * 濡傛灉鍐滄埛閫夋嫨浜嗚櫄鎷熷崱锛屽垯浣跨敤璇ヨ櫄鎷熷崱
+        // * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
+        // * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
+        // */
+        //if(vcId == null) {
+        //    vcId = commandSv.getVcIdByIntakeId(intakeId);
+        //    if(vcId == null) {
+        //        return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+        //    }
+        //}
+        //
+        //// 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        //VoVirtualCard vc = commandSv.getVcById(vcId);
+        //if(vc == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+        //}
+        //String vcNum = vc.getVcNum().toString();
+        //Double moneyRemain = vc.getMoney();
+        //
+        //// 鑾峰彇姘翠环
+        //Double waterPrice = commandSv.getPrice();
+        //if(waterPrice == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage());
+        //}
+        //
+        //// 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
+        //JSONObject job_rtu = getRtu(intakeId, null);
+        //if(job_rtu == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
+        //}
+        //String rtuAddr = job_rtu.getString("rtuAddr");
+        //String protocol = job_rtu.getString("protocol");
+        //
+        //comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
+        //
+        //// 鐢熸垚璁㈠崟鍙�
+        //String orderNo = generateOrderNo();
+        //if(orderNo == null) {
+        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage());
+        //}
+        //
+        //String commandCode = null;
+        //if(protocol.equals(ProtocolConstantV206V202404.protocolName)) {
+        //    return BaseResponseUtils.buildSuccess();
+        //} else if(protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
+        //    // 鑾峰彇鍔熻兘鐮�
+        //    commandCode = CodeV1.cd_A1;
+        //
+        //    // 鍒涘缓瑙嗗浘
+        //    ComA1Vo param = new ComA1Vo();
+        //    param.setIcCardNo(vcNum);
+        //    param.setMoneyRemain(moneyRemain);
+        //    param.setWaterPrice(waterPrice);
+        //    param.setMinutes(minutes);
+        //    param.setYear(year);
+        //    param.setMonth(month);
+        //    param.setDay(day);
+        //    param.setHour(hour);
+        //    param.setMinute(minute);
+        //    param.setOrderNo(orderNo);
+        //
+        //    /**
+        //     * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+        //     * 1 鍑嗗鍙傛暟
+        //     * 2 璋冪敤鍏叡鏂规硶
+        //     */
+        //    Param myParam = new Param();
+        //    myParam.setComId(comId);
+        //    myParam.setComType((byte)1);
+        //    myParam.setCommandCode(commandCode);
+        //    myParam.setCommandName(CodeV1.getCodeName(commandCode));
+        //    myParam.setIntakeId(intakeId);
+        //    myParam.setRtuAddr(rtuAddr);
+        //    myParam.setProtocol(protocol);
+        //    myParam.setVcId(vcId);
+        //    myParam.setParam(param);
+        //    myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
+        //    myParam.setOperator(operator);
+        //    myParam.setOpeningId(openingId);
+        //    return dealWithCommandResult(myParam);
+        //} else {
+        //    return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        //}
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
index e2fa0b1..9ea6ecd 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
@@ -37,4 +37,9 @@
      * 棰勭敤姘撮噺锛屾嫢鏈夊畾閲忓叧闃�
      */
     private Integer waterAmount;
+
+    /**
+     * 寮�闃�绫诲瀷锛�1-杞亴
+     */
+    private Byte openType;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java
index e63cc1c..5692365 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrWechat.command.dto;
 
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 /**
@@ -27,6 +26,6 @@
     /**
      * 鎿嶄綔浜�
      */
-    @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
+    //@NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
     private Long operator;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
index e2ef8ec..4ef7508 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -2,26 +2,28 @@
 
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
-import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
-import com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule;
-import com.dy.pipIrrGlobal.pojoIr.IrOpeningSchedule;
-import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
-import com.dy.pipIrrGlobal.voIr.VoIrrigatePlan;
+import com.dy.pipIrrGlobal.pojoIr.*;
 import com.dy.pipIrrGlobal.voIr.VoIrrigateSchedule;
+import com.dy.pipIrrGlobal.voIr.VoPlanSimple;
+import com.dy.pipIrrWechat.command.CommandSv;
+import com.dy.pipIrrWechat.command.dto.AutomaticClose;
 import com.dy.pipIrrWechat.irrigatePlan.dto.IrrigatePlan;
 import com.dy.pipIrrWechat.irrigatePlan.dto.IrrigateSchedule;
 import com.dy.pipIrrWechat.irrigatePlan.dto.PlanSimple;
 import com.dy.pipIrrWechat.irrigatePlan.enums.OperateTypeENUM;
-import com.dy.pipIrrWechat.irrigatePlan.qo.QoIrrigatePlan;
 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 org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -39,6 +41,7 @@
 @RequiredArgsConstructor
 public class IrrigatePlanCtrl {
     private final IrrigatePlanSv irrigatePlanSv;
+    private final CommandSv commandSv;
 
     /**
      * 鍒涘缓鐏屾簤璁″垝
@@ -57,19 +60,30 @@
         }
 
         Long operatorId = planAndSchedule.getOperatorId();
-
-        // 娣诲姞鐏屾簤璁″垝
-        IrIrrigatePlan plan = new IrIrrigatePlan();
-        plan.setProjectId(planAndSchedule.getProjectId());
-        plan.setPlanName(planAndSchedule.getPlanName());
         Byte startupMode = planAndSchedule.getStartupMode();
-        plan.setStartupMode(startupMode);
-        if(startupMode == 1){
-            plan.setDuration(planAndSchedule.getDuration());
-        }else if(startupMode == 2){
-            plan.setPlanStartTime(planAndSchedule.getPlanStartTime());
-            plan.setPlanStopTime(planAndSchedule.getPlanStopTime());
+        Date planStartTime = planAndSchedule.getPlanStartTime();;
+        Date planStopTime = null;
+
+        Integer duration = 0;
+        for(IrrigateSchedule schedule : planAndSchedule.getSchedules()){
+            duration = duration + schedule.getDuration();
         }
+
+        //if(startupMode == 1){
+        //    planStartTime = new Date();
+        //}
+        //LocalDateTime startTime = planStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
+        //startTime = startTime.plusMinutes(5);
+        //planStartTime = Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant());
+        //LocalDateTime stopTime = startTime.plusMinutes(duration);
+        //planStopTime = Date.from(stopTime.atZone(ZoneId.systemDefault()).toInstant());
+
+        IrIrrigatePlan plan = new IrIrrigatePlan();
+        plan.setPlanName(planAndSchedule.getPlanName());
+        plan.setStartupMode(startupMode);
+        plan.setPlanStartTime(planStartTime);
+        //plan.setPlanStopTime(planStopTime);
+        plan.setDuration(duration);
         plan.setPlanState((byte)1);
         plan.setExecutingState((byte)1);
         plan.setDeleted(0L);
@@ -79,32 +93,38 @@
             return BaseResponseUtils.buildErrorMsg("鍒涘缓鐏屾簤璁″垝澶辫触");
         }
 
-        // 娣诲姞鐏屾簤娆″簭
-        if(planId != null){
-            for(IrrigateSchedule schedule : planAndSchedule.getSchedules()){
-                IrIrrigateSchedule po = new IrIrrigateSchedule();
-                po.setPlanId(planId);
-                po.setGroupId(schedule.getGroupId());
-                if(startupMode == 1){
-                    po.setDuration(schedule.getDuration());
-                }else if(startupMode == 2){
-                    po.setStartTime(schedule.getStartTime());
-                    po.setStopTime(schedule.getStopTime());
-                }
-                po.setCurrentState((byte)1);
-                List<Long> intakesData = irrigatePlanSv.getIntakesByGroupId(schedule.getGroupId());
-                if(intakesData != null && intakesData.size() > 0){
-                    String intakeIds = "";
-                    for(Long intakeId : intakesData){
-                        intakeIds += intakeId + ",";
-                    }
-                    po.setIntakeIds(intakeIds.substring(0, intakeIds.length() - 1));
-                }
-                Long scheduleId = irrigatePlanSv.addIrrigateSchedule(po);
-                if(scheduleId == null) {
-                    return BaseResponseUtils.buildErrorMsg("鍒涘缓鐏屾簤璁″垝澶辫触");
-                }
+        // 娣诲姞鐏屾簤娆″簭鍙婅鍒掓搴忓叧鑱旇〃
+        //Date scheduleStartTime = null;
+        Integer sort = 0;
+        for(IrrigateSchedule schedule : planAndSchedule.getSchedules()){
+            IrIrrigateSchedule po = new IrIrrigateSchedule();
+            po.setGroupId(schedule.getGroupId());
+
+            //if(scheduleStartTime == null) {
+            //    scheduleStartTime = planStartTime;
+            //}
+            //po.setStartTime(scheduleStartTime);
+            //// 璁$畻涓嬩竴缁勭殑寮�濮嬫椂闂�
+            //LocalDateTime LocalscheduleStartTime = scheduleStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
+            //LocalscheduleStartTime = LocalscheduleStartTime.plusMinutes(schedule.getDuration());
+            //scheduleStartTime = Date.from(LocalscheduleStartTime.atZone(ZoneId.systemDefault()).toInstant());
+
+            po.setDuration(schedule.getDuration());
+            po.setCurrentState((byte)1);
+            Long scheduleId = irrigatePlanSv.addIrrigateSchedule(po);
+            if(scheduleId == null) {
+                return BaseResponseUtils.buildErrorMsg("鍒涘缓鐏屾簤璁″垝澶辫触");
             }
+
+            IrPlanSchedule planSchedule = new IrPlanSchedule();
+            planSchedule.setPlanId(planId);
+            planSchedule.setScheduleId(scheduleId);
+            planSchedule.setSort(sort++);
+            Long planScheduleId = irrigatePlanSv.addPlanSchedule(planSchedule);
+            if(planScheduleId == null) {
+                return BaseResponseUtils.buildErrorMsg("鍒涘缓鐏屾簤璁″垝澶辫触");
+            }
+
         }
 
         // 娣诲姞鐏屾簤璁″垝鎿嶄綔璁板綍
@@ -135,16 +155,51 @@
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
+
         Long planId = planSimple.getPlanId();
         Long operatorId = planSimple.getOperatorId();
 
-        if(irrigatePlanSv.getPublishedCount(planId) > 0){
-            return BaseResponseUtils.buildErrorMsg("璇ョ亴婧夎鍒掑凡鍙戝竷");
+        /**
+         * 鑾峰彇鐏屾簤璁″垝淇℃伅
+         * 鏇存柊鐏屾簤璁″垝璧锋鏃堕棿鍙婅鍒掔姸鎬�
+         */
+        VoPlanSimple plan = irrigatePlanSv.getPlanSimple(planId);
+        if(plan == null){
+            return BaseResponseUtils.buildErrorMsg("鎮ㄨ鍙戝竷鐨勮鍒掍笉瀛樺湪锛屾垨璇ヨ鍒掑凡鍙戝竷");
         }
 
-        // 淇敼鐏屾簤璁″垝鐘舵�佷负鍙戝竷鐘舵��
-        if(irrigatePlanSv.publishIrrigatePlan(planId) == 0){
-            return BaseResponseUtils.buildErrorMsg("淇敼鐏屾簤璁″垝鐘舵�佸け璐�");
+        Byte startupMode = plan.getStartupMode();
+        Integer duration = plan.getDuration();
+        Date planStartTime = plan.getPlanStartTime();
+        Date planStopTime = null;
+
+        if(startupMode == 1){
+            planStartTime = new Date();
+        }
+        LocalDateTime startTime = planStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
+        startTime = startTime.plusMinutes(5);
+        planStartTime = Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant());
+        LocalDateTime stopTime = startTime.plusMinutes(duration);
+        planStopTime = Date.from(stopTime.atZone(ZoneId.systemDefault()).toInstant());
+
+        if(irrigatePlanSv.updatePlanTimes(planStartTime, planStopTime, planId) == 0) {
+            return BaseResponseUtils.buildErrorMsg("璁″垝淇℃伅鏇存柊澶辫触");
+        }
+
+        // 鏇存柊姣忎釜鐏屾簤娆″簭鐨勫紑濮嬫椂闂�
+        List<VoIrrigateSchedule> schedules = irrigatePlanSv.getSchedulesByPlanId(planId);
+        Date scheduleStartTime = null;
+        Integer sort = 0;
+        for(VoIrrigateSchedule schedule : schedules){
+            if(scheduleStartTime == null) {
+                scheduleStartTime = planStartTime;
+            }
+            irrigatePlanSv.updateScheduleStartTime(schedule.getScheduleId(), scheduleStartTime);
+
+            // 璁$畻涓嬩竴缁勭殑寮�濮嬫椂闂�
+            LocalDateTime LocalscheduleStartTime = scheduleStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime();
+            LocalscheduleStartTime = LocalscheduleStartTime.plusMinutes(schedule.getDuration());
+            scheduleStartTime = Date.from(LocalscheduleStartTime.atZone(ZoneId.systemDefault()).toInstant());
         }
 
         // 娣诲姞鐏屾簤璁″垝鎿嶄綔璁板綍
@@ -157,30 +212,22 @@
             return BaseResponseUtils.buildErrorMsg("娣诲姞鐏屾簤璁″垝鎿嶄綔璁板綍澶辫触");
         }
 
-        /**
-         * 鐢熸垚寮�闃�璁″垝
-         *     璐ф湡璁″垝鍚姩妯″紡
-         */
-        // 鑾峰彇鐏屾簤璁″垝鍚姩妯″紡
-        Byte startupMode = irrigatePlanSv.getStartupMode(planId);
-        List<VoIrrigateSchedule> schedules = irrigatePlanSv.getIrrigateSchedules(startupMode, planId);
-        if(schedules == null || schedules.size() == 0) {
-            return BaseResponseUtils.buildErrorMsg("鏃犲彇姘村彛锛岀敓鎴愬紑闃�璁″垝澶辫触");
-        }
+        schedules = irrigatePlanSv.getSchedulesByPlanId(planId);
+        for(VoIrrigateSchedule schedule : schedules) {
+            Long groupId = schedule.getGroupId();
+            List<Long> intakeIds = irrigatePlanSv.getIntakeIdsByGroupId(groupId);
+            for(Long intakeId : intakeIds) {
+                AutomaticClose automaticClose = new AutomaticClose();
+                automaticClose.setIntakeId(intakeId);
+                automaticClose.setPlannedOpenTime(schedule.getStartTime());
+                automaticClose.setMinutes(schedule.getDuration());
+                automaticClose.setOperator(operatorId);
+                automaticClose.setOpenType(Byte.valueOf("1"));
 
-        for (VoIrrigateSchedule schedule : schedules) {
-            for(String intakeId : schedule.getIntakeIds().split(",")){
-                // 娣诲姞鐏屾簤璁″垝寮�鍚褰�
-                IrOpeningSchedule openingSchedule = new IrOpeningSchedule();
-                openingSchedule.setScheduleId(schedule.getScheduleId());
-                openingSchedule.setIntakeId(Long.parseLong(intakeId));
-                openingSchedule.setStartTime(schedule.getStartTime());
-                openingSchedule.setDuration(schedule.getDuration());
-                if(irrigatePlanSv.addOpeningSchedule(openingSchedule) == 0){
-                    return BaseResponseUtils.buildErrorMsg("娣诲姞寮�闃�璁″垝澶辫触");
-                }
+                commandSv.planedOpenTimedClose(automaticClose, schedule.getStartTime(), schedule.getDuration());
             }
         }
+
         return BaseResponseUtils.buildSuccess();
     }
 
@@ -189,14 +236,14 @@
      * @param vo
      * @return
      */
-    @GetMapping(path = "/getIrrigatePlans")
-    public BaseResponse<QueryResultVo<List<VoIrrigatePlan>>> getIrrigatePlans(QoIrrigatePlan vo) {
-        try {
-            QueryResultVo<List<VoIrrigatePlan>> res = irrigatePlanSv.getIrrigatePlans(vo);
-            return BaseResponseUtils.buildSuccess(res);
-        } catch (Exception e) {
-            log.error("鑾峰彇杞亴缁勮褰曞紓甯�", e);
-            return BaseResponseUtils.buildException(e.getMessage());
-        }
-    }
+    //@GetMapping(path = "/getIrrigatePlans")
+    //public BaseResponse<QueryResultVo<List<VoIrrigatePlan>>> getIrrigatePlans(QoIrrigatePlan vo) {
+    //    try {
+    //        QueryResultVo<List<VoIrrigatePlan>> res = irrigatePlanSv.getIrrigatePlans(vo);
+    //        return BaseResponseUtils.buildSuccess(res);
+    //    } catch (Exception e) {
+    //        log.error("鑾峰彇杞亴缁勮褰曞紓甯�", e);
+    //        return BaseResponseUtils.buildException(e.getMessage());
+    //    }
+    //}
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
index daa4efb..6367ea5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -1,21 +1,18 @@
 package com.dy.pipIrrWechat.irrigatePlan;
 
-import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoIr.*;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
 import com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule;
-import com.dy.pipIrrGlobal.pojoIr.IrOpeningSchedule;
 import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
-import com.dy.pipIrrGlobal.voIr.VoIrrigatePlan;
+import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
 import com.dy.pipIrrGlobal.voIr.VoIrrigateSchedule;
-import com.dy.pipIrrWechat.irrigatePlan.qo.QoIrrigatePlan;
+import com.dy.pipIrrGlobal.voIr.VoPlanSimple;
 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 ZhuBaoMin
@@ -45,6 +42,12 @@
     @Autowired
     private IrIrrigateUnitMapper irIrrigateUnitMapper;
 
+    @Autowired
+    private IrPlanScheduleMapper irPlanScheduleMapper;
+
+    @Autowired
+    private IrGroupIntakeMapper irGroupIntakeMapper;
+
     /**
      * 娣诲姞鐏屾簤璁″垝
      * @param po
@@ -69,37 +72,19 @@
      * @param queryVo
      * @return
      */
-    public QueryResultVo<List<VoIrrigatePlan>> getIrrigatePlans(QoIrrigatePlan queryVo) {
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
-
-        Long itemTotal = irrigatePlanMapper.getIrrigatePlanCount(params);
-
-        QueryResultVo<List<VoIrrigatePlan>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = queryVo.pageSize;
-        rsVo.pageCurr = queryVo.pageCurr;
-
-        rsVo.calculateAndSet(itemTotal, params);
-        rsVo.obj = irrigatePlanMapper.getIrrigatePlans(params);
-        return rsVo;
-    }
-
-    /**
-     * 鏍规嵁鎸囧畾鐨勮鍒扞D鑾峰彇宸插彂甯冪殑鐏屾簤璁″垝鏁伴噺
-     * @param planId
-     * @return
-     */
-    public Integer getPublishedCount(Long planId) {
-        return irrigatePlanMapper.getPublishedCount(planId);
-    }
-
-    /**
-     * 鍙戝竷鎸囧畾鐨勭亴婧夎鍒�
-     * @param planId
-     * @return
-     */
-    public Integer publishIrrigatePlan(Long planId) {
-        return irrigatePlanMapper.publishIrrigatePlan(planId);
-    }
+    //public QueryResultVo<List<VoIrrigatePlan>> getIrrigatePlans(QoIrrigatePlan queryVo) {
+    //    Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+    //
+    //    Long itemTotal = irrigatePlanMapper.getIrrigatePlanCount(params);
+    //
+    //    QueryResultVo<List<VoIrrigatePlan>> rsVo = new QueryResultVo<>();
+    //    rsVo.pageSize = queryVo.pageSize;
+    //    rsVo.pageCurr = queryVo.pageCurr;
+    //
+    //    rsVo.calculateAndSet(itemTotal, params);
+    //    rsVo.obj = irrigatePlanMapper.getIrrigatePlans(params);
+    //    return rsVo;
+    //}
 
     /**
      * 娣诲姞鐏屾簤璁″垝鎿嶄綔璁板綍
@@ -122,34 +107,74 @@
     }
 
     /**
-     * 鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭
+     * 鏍规嵁璁″垝ID鑾峰彇鐏屾簤娆″簭璁板綍
      * @param planId
      * @return
      */
-    public List<VoIrrigateSchedule> getIrrigateSchedules(Byte startupMode, Long planId) {
-        return irIrrigateScheduleMapper.getIrrigateSchedules(startupMode, planId);
+    public List<VoIrrigateSchedule> getSchedulesByPlanId(Long planId) {
+        return irIrrigateScheduleMapper.getSchedulesByPlanId(planId);
     }
 
     /**
-     * 娣诲姞寮�闃�璁″垝
+     * 鏍规嵁缁処D鑾峰彇鍙栨按鍙D闆嗗悎
+     * @param groupId
+     * @return
+     */
+    public List<Long> getIntakeIdsByGroupId(Long groupId) {
+        return irGroupIntakeMapper.getIntakeIdsByGroupId(groupId);
+    }
+
+    /**
+     * 娣诲姞璁″垝娆″簭鍏宠仈璁板綍
      * @param po
      * @return
      */
-    public Long addOpeningSchedule(IrOpeningSchedule po) {
-        irOpeningScheduleMapper.insert(po);
+    public Long addPlanSchedule(IrPlanSchedule po) {
+        irPlanScheduleMapper.insert(po);
         return po.getId();
     }
 
     /**
-     * 鏍规嵁杞亴缁処D鑾峰彇鍙栨按鍙D鍒楄〃
-     * @param groupId
+     * 鏍规嵁璁″垝ID鑾峰彇璁″垝绠�鍗曚俊鎭垪琛�
+     * @param planId
      * @return
      */
-    public List<Long> getIntakesByGroupId(Long groupId) {
-        return irIrrigateGroupMapper.getIntakesByGroupId(groupId);
+    public VoPlanSimple getPlanSimple(Long planId) {
+        return irrigatePlanMapper.getPlanSimple(planId);
     }
 
     /**
+     * 鏍规嵁璁″垝ID鏇存柊璁″垝淇℃伅锛堣捣姝㈡椂闂淬�佽鍒掔姸鎬侊級
+     * @param planStartTime
+     * @param planEndTime
+     * @param planId
+     * @return
+     */
+    public Integer updatePlanTimes(Date planStartTime, Date planEndTime, Long planId) {
+        return irrigatePlanMapper.updatePlanTimes(planStartTime, planEndTime, planId);
+    }
+
+    /**
+     * 鏍规嵁鐏屾簤娆″簭ID鏇存柊娆″簭寮�濮嬫椂闂�
+     * @param scheduleId
+     * @param startTime
+     * @return
+     */
+    public Integer updateScheduleStartTime(Long scheduleId, Date startTime) {
+        return irIrrigateScheduleMapper.updateScheduleStartTime(scheduleId, startTime);
+    }
+
+    ///**
+    // * 娣诲姞寮�闃�璁″垝
+    // * @param po
+    // * @return
+    // */
+    //public Long addOpeningSchedule(IrOpeningSchedule po) {
+    //    irOpeningScheduleMapper.insert(po);
+    //    return po.getId();
+    //}
+
+    /**
      * 鏍规嵁鐏屾簤鍗曞厓ID鑾峰彇鍙栨按鍙D
      * @param unitId
      * @return
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java
index c24d70d..7327f5b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigatePlan.java
@@ -1,8 +1,6 @@
 package com.dy.pipIrrWechat.irrigatePlan.dto;
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.*;
 import lombok.Data;
 
 import java.util.Date;
@@ -20,11 +18,6 @@
     public static final long serialVersionUID = 202502201511001L;
 
     /**
-     * 椤圭洰ID
-     */
-    private Long projectId;
-
-    /**
      * 璁″垝鍚嶇О
      */
     @NotBlank(message = "璁″垝鍚嶇О涓嶈兘涓虹┖")
@@ -34,22 +27,14 @@
      * 璁″垝鍚姩妯″紡锛�1-鎵嬪伐鍚姩锛�2-鑷姩鍚姩
      */
     @NotNull(message = "璁″垝鍚姩妯″紡涓嶈兘涓虹┖")
+    @Min(value = 1, message = "璁″垝鍚姩妯″紡涓嶈兘灏忎簬1")
+    @Max(value = 2, message = "璁″垝鍚姩妯″紡涓嶈兘澶т簬2")
     private Byte startupMode;
 
     /**
      * 璁″垝鍚姩鏃堕棿
      */
     private Date planStartTime;
-
-    /**
-     * 璁″垝鍋滄鏃堕棿
-     */
-    private Date planStopTime;
-
-    /**
-     * 璁″垝鎸佺画鏃堕棿
-     */
-    private Integer duration;
 
     /**
      * 鎿嶄綔浜篒D
@@ -60,7 +45,7 @@
     /**
      * 鐏屾簤娆″簭
      */
-    @NotEmpty(message = "宸℃杞ㄨ抗涓嶈兘涓虹┖")
+    @NotEmpty(message = "鐏屾簤娆″簭涓嶈兘涓虹┖")
     private List<IrrigateSchedule> schedules;
 
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigateSchedule.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigateSchedule.java
index 775bcaa..a78e57c 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigateSchedule.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/dto/IrrigateSchedule.java
@@ -21,14 +21,9 @@
     private Long groupId;
 
     /**
-     * 璇ヨ疆鐏岀粍寮�濮嬬亴婧夋椂闂�
+     * 鐏屾簤寮�濮嬫椂闂�
      */
     private Date startTime;
-
-    /**
-     * 璇ヨ疆鐏岀粍缁撴潫鐏屾簤鏃堕棿
-     */
-    private Date stopTime;
 
     /**
      * 璇ヨ疆鐏岀粍鐏屾簤鏃堕暱
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java
index e2ffc0d..474bb55 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java
@@ -4,8 +4,9 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.voIr.VoGroupSimple;
-import com.dy.pipIrrGlobal.voIr.VoUnitSimple;
-import com.dy.pipIrrWechat.irrigation.qo.QoClient;
+import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
+import com.dy.pipIrrWechat.irrigation.qo.QoGroup;
+import com.dy.pipIrrWechat.irrigation.qo.QoProject;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -28,34 +29,35 @@
 public class IrrigationCtrl {
     private final IrrigationSv irrigationSv;
 
+
     /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勫垪琛�
-     * @param vo
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鐏屾簤鍗曞厓鍒楄〃
+     * @param qo
      * @return
      */
-    @GetMapping(path = "/getGroups")
-    public BaseResponse<QueryResultVo<List<VoGroupSimple>>> getGroups(QoClient vo) {
+    @GetMapping(path = "/getSimpleProjects")
+    public BaseResponse<QueryResultVo<List<VoProjectSimple>>> getSimpleProjects(QoProject qo) {
         try {
-            QueryResultVo<List<VoGroupSimple>> res = irrigationSv.getGroupsByClientId(vo);
+            QueryResultVo<List<VoProjectSimple>> res = irrigationSv.getSimpleProjects(qo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
-            log.error("鑾峰彇杞亴缁勮褰曞紓甯�", e);
+            log.error("鑾峰彇椤圭洰璁板綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
-    /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鐏屾簤鍗曞厓鍒楄〃
-     * @param vo
-     * @return
-     */
-    @GetMapping(path = "/getUnits")
-    public BaseResponse<QueryResultVo<List<VoUnitSimple>>> getUnits(QoClient vo) {
+    @GetMapping(path = "/getSimpleGroups")
+    public BaseResponse<QueryResultVo<List<VoGroupSimple>>> getSimpleGroups(QoGroup qo) {
+        if(qo.getProjectId() == null) {
+            return BaseResponseUtils.buildErrorMsg("璇烽�夋嫨椤圭洰");
+        }
+
+
         try {
-            QueryResultVo<List<VoUnitSimple>> res = irrigationSv.getUnitsByClientId(vo);
+            QueryResultVo<List<VoGroupSimple>> res = irrigationSv.getSimpleGroups(qo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
-            log.error("鑾峰彇鐏屾簤鍗曞厓璁板綍寮傚父", e);
+            log.error("鑾峰彇杞亴缁勮褰曞紓甯�", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java
index 55c979c..27e1ccc 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java
@@ -1,11 +1,12 @@
 package com.dy.pipIrrWechat.irrigation;
 
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.daoIr.IrGroupClientMapper;
-import com.dy.pipIrrGlobal.daoIr.IrUnitClientMapper;
+import com.dy.pipIrrGlobal.daoIr.IrIrrigateGroupMapper;
+import com.dy.pipIrrGlobal.daoIr.IrProjectMapper;
 import com.dy.pipIrrGlobal.voIr.VoGroupSimple;
-import com.dy.pipIrrGlobal.voIr.VoUnitSimple;
-import com.dy.pipIrrWechat.irrigation.qo.QoClient;
+import com.dy.pipIrrGlobal.voIr.VoProjectSimple;
+import com.dy.pipIrrWechat.irrigation.qo.QoGroup;
+import com.dy.pipIrrWechat.irrigation.qo.QoProject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,46 +26,41 @@
 @Service
 public class IrrigationSv {
     @Autowired
-    private IrGroupClientMapper irGroupClientMapper;
+    private IrProjectMapper irProjectMapper;
 
     @Autowired
-    private IrUnitClientMapper irUnitClientMapper;
+    private IrIrrigateGroupMapper irIrrigateGroupMapper;
 
     /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇杞亴缁勫垪琛�
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇椤圭洰璁板綍(绮剧畝)
      * @param queryVo
      * @return
      */
-    public QueryResultVo<List<VoGroupSimple>> getGroupsByClientId(QoClient queryVo) {
+    public QueryResultVo<List<VoProjectSimple>> getSimpleProjects(QoProject queryVo) {
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = irProjectMapper.getSimpleProjectsCount(params);
 
-        Long itemTotal = irGroupClientMapper.getGroupCountByClientId(params);
+        QueryResultVo<List<VoProjectSimple>> rsVo = new QueryResultVo<>();
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = irProjectMapper.getSimpleProjects(params);
+        return rsVo;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇杞亴缁勫垪琛�
+     * @param queryVo
+     * @return
+     */
+    public QueryResultVo<List<VoGroupSimple>> getSimpleGroups(QoGroup queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+        Long itemTotal = irIrrigateGroupMapper.getSimpleGroupCount(params);
 
         QueryResultVo<List<VoGroupSimple>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = queryVo.pageSize;
-        rsVo.pageCurr = queryVo.pageCurr;
 
         rsVo.calculateAndSet(itemTotal, params);
-        rsVo.obj = irGroupClientMapper.getGroupsByClientId(params);
+        rsVo.obj = irIrrigateGroupMapper.getSimpleGroups(params);
         return rsVo;
     }
 
-    /**
-     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鐏屾簤鍗曞厓鍒楄〃
-     * @param queryVo
-     * @return
-     */
-    public QueryResultVo<List<VoUnitSimple>> getUnitsByClientId(QoClient queryVo) {
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
-
-        Long itemTotal = irUnitClientMapper.getUnitCountByClientId(params);
-
-        QueryResultVo<List<VoUnitSimple>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = queryVo.pageSize;
-        rsVo.pageCurr = queryVo.pageCurr;
-
-        rsVo.calculateAndSet(itemTotal, params);
-        rsVo.obj = irUnitClientMapper.getUnitsByClientId(params);
-        return rsVo;
-    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoGroup.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoGroup.java
new file mode 100644
index 0000000..8f36321
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoGroup.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrWechat.irrigation.qo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-21 9:52
+ * @LastEditTime 2025-03-21 9:52
+ * @Description 杞亴缁勬煡璇㈠璞★紝鑾峰彇杞亴缁勫垪琛ㄤ娇鐢�
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class QoGroup {
+
+    /**
+     * 椤圭洰ID
+     */
+    private Long projectId;
+
+    /**
+     * 杞亴缁勫悕绉�
+     */
+    private String groupCode;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoProject.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoProject.java
new file mode 100644
index 0000000..6d1f026
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/qo/QoProject.java
@@ -0,0 +1,17 @@
+package com.dy.pipIrrWechat.irrigation.qo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-03-20 19:48
+ * @LastEditTime 2025-03-20 19:48
+ * @Description 椤圭洰鏌ヨ瀵硅薄锛岃幏鍙栭」鐩垪琛ㄤ娇鐢�
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class QoProject {
+    private String projectName;
+}

--
Gitblit v1.8.0