pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -131,6 +131,14 @@ Integer hasPlan_OtherProject(Long planId); /** * 判断当前计划与最近终止的计划的轮灌组是否有重叠 * @param planId 当前计划ID * @param terminatedPlanId 最近终止的计划ID * @return */ Integer hasPlanOverlapWithTerminated(@Param("planId") Long planId, @Param("terminatedPlanId") Long terminatedPlanId); /** * 根据计划ID获取计划最新状态 * @param planId * @return pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrPlanOperateMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Date; @@ -33,4 +34,18 @@ * @return */ Date getTerminateTime(Long planId); /** * 获取最近一次计划终止的时间 * @param planTerminateLimitMinutes 计划终止后限制发布新计划的时间间隔(分钟) * @return 最近一次计划终止的时间,如果没有则返回null */ Date getLastTerminateTime(@Param("planTerminateLimitMinutes") Integer planTerminateLimitMinutes); /** * 获取最近一次终止的计划ID * @param planTerminateLimitMinutes 计划终止后限制发布新计划的时间间隔(分钟) * @return 最近一次终止的计划ID,如果没有则返回null */ Long getLastTerminatedPlanId(@Param("planTerminateLimitMinutes") Integer planTerminateLimitMinutes); } pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -438,6 +438,25 @@ ) AS has_intersection </select> <!--判断当前计划与最近终止的计划的轮灌组是否有重叠 --> <select id="hasPlanOverlapWithTerminated" resultType="java.lang.Integer"> SELECT COUNT(1) FROM ( SELECT sche1.group_id FROM ir_plan_schedule ps1 INNER JOIN ir_irrigate_schedule sche1 ON ps1.schedule_id = sche1.id WHERE ps1.plan_id = #{planId} ) AS current_groups INNER JOIN ( SELECT sche2.group_id FROM ir_plan_schedule ps2 INNER JOIN ir_irrigate_schedule sche2 ON ps2.schedule_id = sche2.id WHERE ps2.plan_id = #{terminatedPlanId} ) AS terminated_groups ON current_groups.group_id = terminated_groups.group_id LIMIT 1 </select> <!--根据计划ID获取计划最新状态--> <select id="getPlanLatestState" resultType="java.lang.Integer"> SELECT pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrPlanOperateMapper.xml
@@ -104,4 +104,24 @@ <select id="getTerminateTime" resultType="java.util.Date"> SELECT operate_time AS operateTime FROM ir_plan_operate WHERE operate_type = 5 AND plan_id = #{planId} LIMIT 0,1 </select> <!--获取最近一次计划终止的时间,且终止时间在配置的时间间隔内--> <select id="getLastTerminateTime" resultType="java.util.Date"> SELECT operate_time AS operateTime FROM ir_plan_operate WHERE operate_type = 5 AND operate_time >= DATE_SUB(NOW(), INTERVAL #{planTerminateLimitMinutes} MINUTE) ORDER BY operate_time DESC LIMIT 0,1 </select> <!--获取最近一次终止的计划ID--> <select id="getLastTerminatedPlanId" resultType="java.lang.Long"> SELECT plan_id FROM ir_plan_operate WHERE operate_type = 5 AND operate_time >= DATE_SUB(NOW(), INTERVAL #{planTerminateLimitMinutes} MINUTE) ORDER BY operate_time DESC LIMIT 0,1 </select> </mapper> pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -77,8 +77,12 @@ @Value("${wechat.irr.plan.preOpeningTime:10}") private Integer preOpeningTime; @Value("${wechat.irr.plan.planTerminateLimitMinutes:5}") private Integer planTerminateLimitMinutes; // 计划终止后限制发布新计划的时间间隔(分钟) /** * 添加灌溉计划 * * @param po * @return */ @@ -90,6 +94,7 @@ /** * 删除灌溉计划 * * @param planSimple * @return */ @@ -140,6 +145,7 @@ /** * 发布灌溉计划 * * @param planSimple * @return */ @@ -148,6 +154,7 @@ Long operatorId = planSimple.getOperatorId(); Byte operateType = 1; // 检查当前项目是否存在未完成的灌溉计划 if(irrigatePlanMapper.hasPlan_CurrentProject(planId) > 0) { Map map = new HashMap<>(); map.put("success", false); @@ -156,12 +163,26 @@ return map; } // 检查其他项目中是否存在未完成的灌溉计划 if(irrigatePlanMapper.hasPlan_OtherProject(planId) > 0) { Map map = new HashMap<>(); map.put("success", false); map.put("msg", "待发布计划的轮灌组在其他项目的灌溉计划中,且该计划尚未完成"); map.put("content", null); return map; } // 检查5分钟内是否有终止的计划,且轮灌组有重叠 Long lastTerminatedPlanId = irPlanOperateMapper.getLastTerminatedPlanId(planTerminateLimitMinutes); if (lastTerminatedPlanId != null) { // 检查当前计划与最近终止计划的轮灌组是否有重叠 if (irrigatePlanMapper.hasPlanOverlapWithTerminated(planId, lastTerminatedPlanId) > 0) { Map map = new HashMap<>(); map.put("success", false); map.put("msg", "上一个计划终止后" + planTerminateLimitMinutes + "分钟内不能发布新计划"); map.put("content", null); return map; } } /** @@ -272,6 +293,7 @@ /** * 根据计划ID获取计划最新状态 * * @param planId * @return */ @@ -281,6 +303,7 @@ /** * 根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间 * * @param planId * @return */ @@ -290,6 +313,7 @@ /** * 根据计划ID获取待终止的取水口ID(已发布开发命令,无论是否成功) * * @param planId * @return */ @@ -299,6 +323,7 @@ /** * 根据计划ID获取待终止的命令ID列表 * * @param planId * @return */ @@ -308,6 +333,7 @@ /** * 根据计划ID获取待终止的取水口列表(开阀成功的) * * @param planId * @return */ @@ -317,6 +343,7 @@ /** * 根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀 * * @param commandId * @return */ @@ -326,6 +353,7 @@ /** * 修改灌溉计划 * * @param po * @return */ @@ -336,6 +364,7 @@ /** * 获取未完成的计划列表,小程序计划列表页使用 * * @return */ public List<VoPlans> getNotCompletePlans() { @@ -344,6 +373,7 @@ /** * 获取已完成的计划列表,小程序计划列表页使用 * * @return */ public QueryResultVo<List<VoPlans>> getCompletedPlans(QueryConditionVo queryVo) { @@ -362,6 +392,7 @@ /** * 根据指定的计划ID获取启动模式 * * @param planId * @return */ @@ -390,6 +421,7 @@ /** * 添加灌溉计划操作记录 * * @param po * @return */ @@ -401,6 +433,7 @@ /** * 添加灌溉次序记录 * * @param po * @return */ @@ -412,6 +445,7 @@ /** * 根据计划ID终止灌溉次序,将灌溉次序的当前状态改为已终止 * * @param planId * @return */ @@ -422,6 +456,7 @@ /** * 根据计划ID获取灌溉次序记录 * * @param planId * @return */ @@ -431,6 +466,7 @@ /** * 根据组ID获取取水口ID集合 * * @param groupId * @return */ @@ -440,6 +476,7 @@ /** * 添加计划次序关联记录 * * @param po * @return */ @@ -451,6 +488,7 @@ /** * 根据灌溉次序ID更新次序开始时间 * * @param scheduleId * @param startTime * @return @@ -472,6 +510,7 @@ /** * 根据灌溉单元ID获取取水口ID * * @param unitId * @return */ @@ -481,6 +520,7 @@ /** * 根据计划ID获取计划发布结果 * * @param planId * @return */ @@ -513,6 +553,7 @@ /** * 根据计划ID获取计划终止操作结果 * * @param planId * @return */ pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml
@@ -17,6 +17,7 @@ plan: delay: 5 #轮灌中计划开阀的延迟时长(分钟) preOpeningTime: 10 #提前时间(分钟) planTerminateLimitMinutes: 5 #计划终止后限制发布新计划的时间间隔(分钟) #阿里短信服务 aliyun: sms: