zhubaomin
2025-04-09 80e22bcc7af8aebed7443965655542fbe4966708
灌溉计划删除,所有命令发布都失败依然允许终止
5个文件已修改
153 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/enums/OperateTypeENUM.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -93,4 +93,11 @@
     * @return
     */
    VoPlanDetails getPlanDetails(@Param("planId") Long planId);
    /**
     * 根据计划ID获取计划状态,用于判断是否可以删除计划
     * @param planId
     * @return
     */
    Integer getPlanState(@Param("planId") Long planId);
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -354,4 +354,13 @@
    AND plan.deleted = 0
  </select>
  <!--根据计划ID获取计划状态,用于判断是否可以删除计划-->
  <select id="getPlanState" resultType="java.lang.Integer">
    SELECT
      plan_state
    FROM ir_irrigate_plan
    WHERE id = #{planId}
    AND deleted = 0
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -31,6 +31,7 @@
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@@ -162,6 +163,25 @@
    }
    /**
     * 删除灌溉计划
     * @param planSimple
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "deletePlan")
    public BaseResponse<Boolean> deletePlan(@RequestBody @Valid PlanSimple planSimple, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        Map map_result = irrigatePlanSv.deletePlan(planSimple);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess() ;
    }
    /**
     * 发布灌溉计划
     * 1. 修改灌溉计划状态为发布状态
     * 2. 添加灌溉计划操作记录
@@ -289,39 +309,37 @@
        }
        List<VoToTerminateIntakes> toTerminateIntakes = irrigatePlanSv.getToTerminateIntakes(planId);
        if(toTerminateIntakes == null || toTerminateIntakes.size() == 0){
            return BaseResponseUtils.buildErrorMsg("该计划不存在或已终止");
        }
        if(toTerminateIntakes != null && toTerminateIntakes.size() > 0){
            for(VoToTerminateIntakes toTerminateIntake : toTerminateIntakes){
                Long intakeId = toTerminateIntake.getIntakeId();
                Long commandId = toTerminateIntake.getCommandId();
                Date startTime = toTerminateIntake.getStartTime();
                Date currentTime = new Date();
                if(currentTime.before(startTime)){
                    // 取消(覆盖开阀计划)
                    AutomaticClose automaticClose = new AutomaticClose();
                    automaticClose.setIntakeId(intakeId);
                    automaticClose.setPlannedOpenTime(terminateStartTime);
                    automaticClose.setMinutes(terminateDuration);
                    automaticClose.setOperator(operatorId);
                    automaticClose.setOpenType(Byte.valueOf("1"));
        for(VoToTerminateIntakes toTerminateIntake : toTerminateIntakes){
            Long intakeId = toTerminateIntake.getIntakeId();
            Long commandId = toTerminateIntake.getCommandId();
            Date startTime = toTerminateIntake.getStartTime();
            Date currentTime = new Date();
            if(currentTime.before(startTime)){
                // 取消(覆盖开阀计划)
                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, (byte)2, terminateStartTime, terminateDuration);
                }else {
                    // 终止(远程关阀)
                    VoIntakeVc intakeVc = irrigatePlanSv.getValveOpen(commandId);
                    String rtuAddr = intakeVc.getRtuAddr();
                    String vcNum = intakeVc.getVcNum();
                    String orderNo = intakeVc.getOrderNo();
                commandSv.planedOpenTimedClose(automaticClose, planId, (byte)2, terminateStartTime, terminateDuration);
            }else {
                // 终止(远程关阀)
                VoIntakeVc intakeVc = irrigatePlanSv.getValveOpen(commandId);
                String rtuAddr = intakeVc.getRtuAddr();
                String vcNum = intakeVc.getVcNum();
                String orderNo = intakeVc.getOrderNo();
                ValveClose valveClose = new ValveClose();
                valveClose.setRtuAddr(rtuAddr);
                valveClose.setVcNum(vcNum);
                valveClose.setOrderNo(orderNo);
                valveClose.setOperator(operatorId);
                valveClose.setOpenType(Byte.valueOf("1"));
                commandSv.closeWx(valveClose, planId, (byte)3);
                    ValveClose valveClose = new ValveClose();
                    valveClose.setRtuAddr(rtuAddr);
                    valveClose.setVcNum(vcNum);
                    valveClose.setOrderNo(orderNo);
                    valveClose.setOperator(operatorId);
                    valveClose.setOpenType(Byte.valueOf("1"));
                    commandSv.closeWx(valveClose, planId, (byte)3);
                }
            }
        }
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.daoIr.*;
import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
@@ -11,13 +12,17 @@
import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
import com.dy.pipIrrGlobal.voIr.*;
import com.dy.pipIrrGlobal.voRm.VoIntakeVc;
import com.dy.pipIrrWechat.irrigatePlan.dto.PlanSimple;
import com.dy.pipIrrWechat.irrigatePlan.enums.OperateTypeENUM;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
@@ -70,6 +75,55 @@
    }
    /**
     * 删除灌溉计划
     * @param planSimple
     * @return
     */
    public Map deletePlan(PlanSimple planSimple) {
        Long planId = planSimple.getPlanId();
        Long operatorId = planSimple.getOperatorId();
        Integer planState = irrigatePlanMapper.getPlanState(planId);
        if(planState == null) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "灌溉计划不存在");
            map.put("content", null);
            return map;
        }
        if(planState != 1) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "灌溉计划非草稿状态,不允许删除");
            map.put("content", null);
            return map;
        }
        try {
            irrigatePlanMapper.deleteByPrimaryKey(planId);
            // 添加灌溉计划操作记录
            IrPlanOperate planOperate  = new IrPlanOperate();
            planOperate.setPlanId(planId);
            planOperate.setOperator(operatorId);
            planOperate.setOperateType(OperateTypeENUM.DELETE.getCode());
            planOperate.setOperateTime(new Date());
            addPlanOperate(planOperate);
            Map map = new HashMap<>();
            map.put("success", true);
            map.put("msg", "灌溉项目删除成功");
            map.put("content", null);
            return map;
        } catch (Exception e) {
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "灌溉项目删除失败");
            map.put("content", null);
            return map;
        }
    }
    /**
     * 根据计划ID获取待终止计划的结束时间:未删除、未终止、已发布、当前时间小于计划结束时间
     * @param planId
     * @return
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/enums/OperateTypeENUM.java
@@ -18,7 +18,8 @@
    PUBLISH((byte)2, "发布"),
    EXECUTE((byte)3, "执行"),
    SUSPEND((byte)4, "暂停"),
    TERMINATE((byte)5, "终止");
    TERMINATE((byte)5, "终止"),
    DELETE((byte)6, "删除");
    private final Byte code;
    private final String message;