zhubaomin
2025-04-08 5f54ba90abcc0ccf1b578472eac54fc98056767c
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -10,9 +10,11 @@
import com.dy.pipIrrGlobal.voIr.VoIrrigateSchedule;
import com.dy.pipIrrGlobal.voIr.VoPlanSimple;
import com.dy.pipIrrGlobal.voIr.VoPlans;
import com.dy.pipIrrGlobal.voIr.VoToTerminateIntakes;
import com.dy.pipIrrGlobal.voRm.VoIntakeVc;
import com.dy.pipIrrWechat.command.CommandSv;
import com.dy.pipIrrWechat.command.dto.AutomaticClose;
import com.dy.pipIrrWechat.command.dto.ValveClose;
import com.dy.pipIrrWechat.command.dto.ValveOpen;
import com.dy.pipIrrWechat.irrigatePlan.dto.IrrigatePlan;
import com.dy.pipIrrWechat.irrigatePlan.dto.IrrigateSchedule;
@@ -26,6 +28,7 @@
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -305,18 +308,54 @@
        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";
        String terminateStartTimeStr = LocalDate.now().getYear() + "-01-01 00:00:00";
        Date terminateStartTime = Date.from(LocalDateTime.parse(terminateStartTimeStr, formatter).atZone(ZoneId.systemDefault()).toInstant());
        Integer terminateDuration = 9999;
        // 获取可终止操作计划的灌溉开始时间
        // 判断该计划是否可执行终止操作:未删除、未终止、已发布、当前时间小于计划结束时间
        Date planStartTime = irrigatePlanSv.getToTerminatePlan(planId);
        if(planStartTime == null){
            return BaseResponseUtils.buildErrorMsg("该计划不存在或不支持终止操作");
        }
        List<VoToTerminateIntakes> toTerminateIntakes = irrigatePlanSv.getToTerminateIntakes(planId);
        if(toTerminateIntakes == null || toTerminateIntakes.size() == 0){
            return BaseResponseUtils.buildErrorMsg("该计划不存在或已终止");
        }
        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();
                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);
            }
        }
        // 终止计划
@@ -341,42 +380,6 @@
        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 {
            // 执行远程关阀
            List<Long> commandIds = irrigatePlanSv.getTerminateCommandIds(planId);
            for(Long commandId : commandIds) {
                VoIntakeVc intakeVc = irrigatePlanSv.getIntakeVc(commandId);
                Long intakeId = intakeVc.getIntakeId();
                Long vdId = intakeVc.getVcId();
                ValveOpen valve = new ValveOpen();
                valve.setIntakeId(intakeId);
                valve.setVcId(vdId);
                valve.setForceOpen(true);
                valve.setOperator(operatorId);
                valve.setOpenType(Byte.valueOf("1"));
                commandSv.openWx(valve, planId, operateType);
            }
        }
        return BaseResponseUtils.buildSuccess();
    }
}