pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java
@@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @author ZhuBaoMin * @date 2025-04-02 10:54 @@ -33,4 +35,11 @@ * @return */ int updateByCommandId(@Param("commandId") Long commandId, @Param("commandResult") Byte commandResult, @Param("failureFactors") String failureFactors); /** * 根据计划ID获取待终止的取水口ID(已发布开发命令,无论是否成功) * @param planId * @return */ List<Long> getToTerminateIntakeIds(Long planId); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -78,4 +78,11 @@ * @return */ List<VoPlans> getCompletedPlans(); /** * 根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间 * @param planId * @return */ Date getToTerminatePlan(@Param("planId") Long planId); } pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml
@@ -155,4 +155,12 @@ set command_result = #{commandResult}, failure_factors = #{failureFactors} where command_id = #{commandId} </update> <!--根据计划ID获取待终止的取水口ID(已发布开发命令,无论是否成功)--> <select id="getToTerminateIntakeIds" resultType="java.lang.Long"> SELECT intake_id AS intakeId FROM ir_intake_operate WHERE operate_type = 1 AND plan_id = #{planId} </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -320,4 +320,21 @@ ORDER BY plan.plan_state DESC </select> <!--根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间--> <select id="getToTerminatePlan" resultType="java.util.Date"> SELECT plan_start_time AS planStartTime FROM ir_irrigate_plan <where> AND deleted = 0 AND executing_state != 3 AND plan_state = 2 AND NOW() < plan_stop_time <if test = "planId != null"> AND id = #{planId} </if> </where> </select> </mapper> pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -250,7 +250,7 @@ * @param automaticClose * @return */ public Map planedOpenTimedClose(AutomaticClose automaticClose, Long planId, Date startTime, Integer duration) { public Map planedOpenTimedClose(AutomaticClose automaticClose, Long planId, Byte operatetype, Date startTime, Integer duration) { Long intakeId = automaticClose.getIntakeId(); Long vcId = automaticClose.getVcId(); Date plannedOpenTime = automaticClose.getPlannedOpenTime(); @@ -259,10 +259,11 @@ Byte openType = automaticClose.getOpenType(); Long comId = new IDLongGenerator().generate(); // 如果是轮灌 if(openType != null && openType == 1) { IrIntakeOperate irIntakeOperate = new IrIntakeOperate(); irIntakeOperate.setPlanId(planId); irIntakeOperate.setOperateType((byte)1); irIntakeOperate.setOperateType(operatetype); irIntakeOperate.setCommandId(comId); irIntakeOperate.setIntakeId(intakeId); irIntakeOperate.setStartTime(startTime); pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -538,7 +538,7 @@ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Map map_result = commandSv.planedOpenTimedClose(automaticClose, null, null,null); Map map_result = commandSv.planedOpenTimedClose(automaticClose, null, null, null,null); if(map_result.get("success").equals(false)) { return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString()); } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -25,6 +25,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Objects; @@ -112,7 +113,7 @@ // 添加灌溉次序及计划次序关联表 //Date scheduleStartTime = null; Integer sort = 0; Integer sort = 1; for(IrrigateSchedule schedule : planAndSchedule.getSchedules()){ IrIrrigateSchedule po = new IrIrrigateSchedule(); po.setGroupId(schedule.getGroupId()); @@ -205,6 +206,7 @@ Long planId = planSimple.getPlanId(); Long operatorId = planSimple.getOperatorId(); Byte operateType = 1; /** * 获取灌溉计划信息 @@ -266,14 +268,17 @@ 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")); if(schedule.getDuration() > 0) { // 今发布灌溉时长大于0的 AutomaticClose automaticClose = new AutomaticClose(); automaticClose.setIntakeId(intakeId); automaticClose.setPlannedOpenTime(schedule.getStartTime()); automaticClose.setMinutes(schedule.getDuration()); automaticClose.setOperator(operatorId); automaticClose.setOpenType(Byte.valueOf("1")); commandSv.planedOpenTimedClose(automaticClose, planId, schedule.getStartTime(), schedule.getDuration()); commandSv.planedOpenTimedClose(automaticClose, planId, operateType, schedule.getStartTime(), schedule.getDuration()); } } } @@ -286,24 +291,71 @@ * @param bindingResult * @return */ //@PostMapping(path = "terminatePlan", consumes = MediaType.APPLICATION_JSON_VALUE) //@Transactional(rollbackFor = Exception.class) //public BaseResponse<Boolean> terminatePlan(@RequestBody @Valid PlanSimple planSimple, BindingResult bindingResult){ // if(bindingResult != null && bindingResult.hasErrors()){ // return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); // } // // Long planId = planSimple.getPlanId(); // Long operatorId = planSimple.getOperatorId(); // // IrIrrigatePlan iIrrigatePlan = new IrIrrigatePlan(); // iIrrigatePlan.setId(planId); // iIrrigatePlan.setExecutingState((byte)3); // if(irrigatePlanSv.updatePlan(iIrrigatePlan) == 0){ // return BaseResponseUtils.buildErrorMsg("终止计划状态失败"); // } // // // //} @PostMapping(path = "terminatePlan", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) public BaseResponse<Boolean> terminatePlan(@RequestBody @Valid PlanSimple planSimple, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long planId = planSimple.getPlanId(); Long operatorId = planSimple.getOperatorId(); Byte operateType = 2; // 生成终止开始时间、终止灌溉时长 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String terminateStartTimeStr = "2000-01-01 00:00:00"; Date terminateStartTime = Date.from(LocalDateTime.parse(terminateStartTimeStr, formatter).atZone(ZoneId.systemDefault()).toInstant()); Integer terminateDuration = 100000; // 获取可终止操作计划的灌溉开始时间 Date planStartTime = irrigatePlanSv.getToTerminatePlan(planId); if(planStartTime == null){ return BaseResponseUtils.buildErrorMsg("该计划不存在或不支持终止操作"); } // 终止计划 IrIrrigatePlan iIrrigatePlan = new IrIrrigatePlan(); iIrrigatePlan.setId(planId); iIrrigatePlan.setExecutingState((byte)3); if(irrigatePlanSv.updatePlan(iIrrigatePlan) == 0){ return BaseResponseUtils.buildErrorMsg("终止计划失败"); } // 终止灌溉次序 if(irrigatePlanSv.terminateSchedule(planId) == 0){ return BaseResponseUtils.buildErrorMsg("终止灌溉次序失败"); } // 添加终止操作记录 IrPlanOperate planOperate = new IrPlanOperate(); planOperate.setPlanId(planId); planOperate.setOperator(operatorId); planOperate.setOperateType(OperateTypeENUM.TERMINATE.getCode()); planOperate.setOperateTime(new Date()); if(irrigatePlanSv.addPlanOperate(planOperate) == 0){ return BaseResponseUtils.buildErrorMsg("添加终止操作记录失败"); } Date currentTime = new Date(); if(currentTime.before(planStartTime)){ // 取消开阀计划 List<Long> intakeIds = irrigatePlanSv.getToTerminateIntakeIds(planId); for(Long intakeId : intakeIds) { AutomaticClose automaticClose = new AutomaticClose(); automaticClose.setIntakeId(intakeId); automaticClose.setPlannedOpenTime(terminateStartTime); automaticClose.setMinutes(terminateDuration); automaticClose.setOperator(operatorId); automaticClose.setOpenType(Byte.valueOf("1")); commandSv.planedOpenTimedClose(automaticClose, planId, operateType, terminateStartTime, terminateDuration); } } else { // 执行远程关阀 } return BaseResponseUtils.buildSuccess(); } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -49,6 +49,9 @@ @Autowired private IrGroupIntakeMapper irGroupIntakeMapper; @Autowired private IrIntakeOperateMapper irIntakeOperateMapper; /** * 添加灌溉计划 * @param po @@ -57,6 +60,24 @@ public Long addIrrigatePlan(IrIrrigatePlan po) { irrigatePlanMapper.insert(po); return po.getId(); } /** * 根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间 * @param planId * @return */ public Date getToTerminatePlan(Long planId) { return irrigatePlanMapper.getToTerminatePlan(planId); } /** * 根据计划ID获取待终止的取水口ID(已发布开发命令,无论是否成功) * @param planId * @return */ public List<Long> getToTerminateIntakeIds(Long planId) { return irIntakeOperateMapper.getToTerminateIntakeIds(planId); } /** @@ -133,6 +154,15 @@ } /** * 根据计划ID终止灌溉次序,将灌溉次序的当前状态改为已终止 * @param planId * @return */ public Integer terminateSchedule(Long planId) { return irIrrigateScheduleMapper.terminateSchedule(planId); } /** * 根据计划ID获取灌溉次序记录 * @param planId * @return pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml
@@ -20,3 +20,10 @@ sms-access-key-secret: sU2CoLdNgcjnf5uPPU2dY7NNGNvOIX sms-template-code: SMS_460776024 sms-sign-name: 大禹节水 logging: level: com: dy: pipIrrGlobal: daoIr: trace