zhubaomin
2025-04-03 c6beb89b7170115eada78526f87406381c931229
灌溉计划发布时仅发布灌溉时长大于0的
9个文件已修改
193 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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() &lt; 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