13个文件已修改
1个文件已添加
525 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoToTerminateIntakes.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoIntakeVc.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java 164 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate;
import com.dy.pipIrrGlobal.voIr.VoToTerminateIntakes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -49,4 +50,11 @@
     * @return
     */
    List<Long> getTerminateCommandIds(Long planId);
    /**
     * 根据计划ID获取待终止的取水口列表(开阀成功的)
     * @param planId
     * @return
     */
    List<VoToTerminateIntakes> getToTerminateIntakes(Long planId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java
@@ -83,9 +83,9 @@
    String getTimeByCommId(Long commId);
    /**
     * 根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀
     * 根据命令日志ID获取开阀信息,终止灌溉计划时使用,用来执行远程关阀
     * @param commandId
     * @return
     */
    VoIntakeVc getIntakeVc(Long commandId);
    VoIntakeVc getValveOpen(Long commandId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoToTerminateIntakes.java
New file
@@ -0,0 +1,33 @@
package com.dy.pipIrrGlobal.voIr;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
import java.util.Date;
/**
 * @author ZhuBaoMin
 * @date 2025-04-08 11:32
 * @LastEditTime 2025-04-08 11:32
 * @Description 待终止的取水口视图对象
 */
@Data
public class VoToTerminateIntakes {
    public static final long serialVersionUID = 202504081135001L;
    /**
     * 命令ID
     */
    private Long commandId;
    /**
     * 取水口ID
     */
    private Long intakeId;
    /**
     * 开始时间
     */
    private Date startTime;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoIntakeVc.java
@@ -7,21 +7,26 @@
 * @author ZhuBaoMin
 * @date 2025-04-07 21:08
 * @LastEditTime 2025-04-07 21:08
 * @Description 取水口、虚拟卡视图对象,终止灌溉计划时使用,用来执行远程关阀
 * @Description 开阀信息视图对象,终止灌溉计划时使用,用来执行远程关阀
 */
@Data
@JsonPropertyOrder({"intakeId", "vcId"})
@JsonPropertyOrder({"rtuAddr", "vcNum", "orderNo"})
public class VoIntakeVc {
    public static final long serialVersionUID = 202411281712001L;
    /**
     * 取水口ID
     * 阀控器地址
     */
    private Long intakeId;
    private String rtuAddr;
    /**
     * 虚拟卡ID
     * 虚拟卡编号
     */
    private Long vcId;
    private String vcNum;
    /**
     * 订单号
     */
    private String orderNo;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml
@@ -168,4 +168,14 @@
  <select id="getTerminateCommandIds" resultType="java.lang.Long">
    SELECT command_id AS commandId FROM ir_intake_operate WHERE operate_type = 1 AND plan_id = #{planId}
  </select>
  <!--根据计划ID获取待终止的取水口列表(开阀成功的)-->
  <select id="getToTerminateIntakes" resultType="com.dy.pipIrrGlobal.voIr.VoToTerminateIntakes">
    SELECT
      command_id AS commandId,
      intake_id AS intakeId,
      start_time AS startTime
    FROM ir_intake_operate
    WHERE operate_type = 1 AND command_result = 1 AND plan_id = #{planId}
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -295,7 +295,11 @@
        ) AS planState
    FROM ir_irrigate_plan plan
        INNER JOIN ir_project pro ON pro.id = plan.project_id
    WHERE plan.deleted = 0 AND (plan.plan_state = 1 OR NOW() &lt; plan.plan_stop_time)
    <where>
      AND plan.deleted = 0
      AND (plan.plan_state = 1 OR NOW() &lt; plan.plan_stop_time)
      AND plan.executing_state != 3
    </where>
    ORDER BY plan.plan_state DESC
  </select>
@@ -309,14 +313,10 @@
      plan.plan_start_time AS planStartTime,
      plan.plan_stop_time AS planStopTime,
      plan.duration,
      IF(plan.plan_state = 1, 1,
         IF(NOW() &lt; plan.plan_start_time, 2,
            IF(NOW() &gt;= plan.plan_start_time AND NOW() &lt; plan.plan_stop_time, 3, 4)
           )
        ) AS planState
      IF(plan.executing_state = 3, 5, 4) AS planState
    FROM ir_irrigate_plan plan
        INNER JOIN ir_project pro ON pro.id = plan.project_id
    WHERE plan.deleted = 0 AND (plan.plan_state = 2 AND NOW() &gt;= plan.plan_stop_time)
    WHERE plan.deleted = 0 AND ((plan.plan_state = 2 AND NOW() &gt;= plan.plan_stop_time) OR (plan.executing_state = 3))
    ORDER BY plan.plan_state DESC
  </select>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -394,12 +394,14 @@
        WHERE com_id = #{commId}
    </select>
    <!--根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀-->
    <select id="getIntakeVc" resultType="com.dy.pipIrrGlobal.voRm.VoIntakeVc">
    <!--根据命令日志ID获取开阀信息,终止灌溉计划时使用,用来执行远程关阀-->
    <select id="getValveOpen" resultType="com.dy.pipIrrGlobal.voRm.VoIntakeVc">
        SELECT
            intake_id AS intakeId,
            (SELECT id FROM se_virtual_card WHERE vc_num = param ->> '$.icCardNo') AS vcId
        FROM rm_command_history WHERE com_id = #{commandId}
            LIMIT 0, 1
            rtu_addr AS rtuAddr,
            param ->> '$.icCardNo' AS vcNum,
            param ->> '$.orderNo' AS orderNo
        FROM rm_command_history
        WHERE com_id = #{commandId}
        LIMIT 0, 1
    </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -8,11 +8,13 @@
import com.dy.common.mw.protocol.p206V1.CodeV1;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.mw.protocol.p206V1.downVos.Com97Vo;
import com.dy.common.mw.protocol.p206V1.downVos.Com98Vo;
import com.dy.common.mw.protocol.p206V1.downVos.ComA1Vo;
import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
import com.dy.common.mw.protocol.p206V202404.CodeV202404;
import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo;
import com.dy.common.util.IDLongGenerator;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
@@ -36,6 +38,7 @@
import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
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.result.WechatResultCode;
import lombok.RequiredArgsConstructor;
@@ -429,6 +432,13 @@
        }
    }
    /**
     * 小程序远程开阀
     * @param valve
     * @param planId
     * @param operatetype
     * @return
     */
    public Map openWx(ValveOpen valve, Long planId, Byte operatetype) {
        Long intakeId = valve.getIntakeId();
        String intakeName = valve.getIntakeName();
@@ -657,4 +667,140 @@
            return map;
        }
    }
    /**
     * 小程序远程关阀
     * @param valve
     * @param planId
     * @param operatetype
     * @return
     */
    public Map closeWx(ValveClose valve, Long planId, Byte operatetype) {
        String rtuAddr = valve.getRtuAddr();
        String vcNum = valve.getVcNum();
        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
        String orderNo = valve.getOrderNo();
        Long operator = valve.getOperator();
        Byte openType = valve.getOpenType();
        Long comId = new IDLongGenerator().generate();
        // 阀控器地址换取水口ID和通讯协议
        JSONObject job_rtu = getRtu(null, rtuAddr);
        if (job_rtu == null) {
            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, WechatResultCode.RTU_NOT_EXIST.getMessage());
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", WechatResultCode.RTU_NOT_EXIST.getMessage());
            map.put("content", null);
            return map;
            //return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
        }
        Long intakeId = job_rtu.getLong("intakeId");
        String protocol = job_rtu.getString("protocol");
        // 如果是轮灌
        if(openType != null && openType == 1) {
            IrIntakeOperate irIntakeOperate = new IrIntakeOperate();
            irIntakeOperate.setPlanId(planId);
            irIntakeOperate.setOperateType(operatetype);
            irIntakeOperate.setCommandId(comId);
            irIntakeOperate.setIntakeId(intakeId);
            Long id = addIntakeOperate(irIntakeOperate);
            if(id == null) {
                Map map = new HashMap<>();
                map.put("success", false);
                map.put("msg", "添加取水口操作记录失败");
                map.put("content", null);
                return map;
            }
        }
        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
        String commandCode = null;
        if (protocol.equals(ProtocolConstantV206V202404.protocolName)) {
            // 获取功能码
            commandCode = CodeV202404.cd_A3;
            // 创建视图
            ComCd93_A3Vo param = new ComCd93_A3Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.icCardNo = vcNum;
            param.orderNo = orderNo;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setComType((byte)2);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setVcId(vcId);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
            myParam.setOperator(operator);
            //return dealWithCommandResult(myParam);
            BaseResponse<Boolean> result = dealWithCommandResult(myParam);
            Map map = new HashMap<>();
            map.put("success", result.isSuccess());
            map.put("msg", result.getMsg());
            map.put("content", result.getContent());
            return map;
        } else if (protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
            // 获取功能码
            commandCode = CodeV1.cd_98;
            // 创建视图
            Com98Vo param = new Com98Vo();
            param.icCardNo = vcNum;
            param.orderNo = orderNo;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setComType((byte)2);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV1.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setVcId(vcId);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
            myParam.setOperator(operator);
            //return dealWithCommandResult(myParam);
            BaseResponse<Boolean> result = dealWithCommandResult(myParam);
            Map map = new HashMap<>();
            map.put("success", result.isSuccess());
            map.put("msg", result.getMsg());
            map.put("content", result.getContent());
            return map;
        } else {
            irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "系统暂不支持该协议" + "(" + intakeId + ")");
            Map map = new HashMap<>();
            map.put("success", false);
            map.put("msg", "系统暂不支持该协议");
            map.put("content", null);
            return map;
            //return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议");
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -238,87 +238,93 @@
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String rtuAddr = valve.getRtuAddr();
        String vcNum = valve.getVcNum();
        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
        String orderNo = valve.getOrderNo();
        Long operator = valve.getOperator();
        Long comId = new IDLongGenerator().generate();
        // 阀控器地址换取水口ID和通讯协议
        JSONObject job_rtu = getRtu(null, rtuAddr);
        if (job_rtu == null) {
            return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
        Map map_result = commandSv.closeWx(valve, null, null);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        Long intakeId = job_rtu.getLong("intakeId");
        String protocol = job_rtu.getString("protocol");
        //String orgTag = job_rtu.getString("orgTag");
        //if(orgTag == null) {
        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage());
        return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
        //String rtuAddr = valve.getRtuAddr();
        //String vcNum = valve.getVcNum();
        //Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
        //String orderNo = valve.getOrderNo();
        //Long operator = valve.getOperator();
        //Long comId = new IDLongGenerator().generate();
        //
        //// 阀控器地址换取水口ID和通讯协议
        //JSONObject job_rtu = getRtu(null, rtuAddr);
        //if (job_rtu == null) {
        //    return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
        //}
        //comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
        String commandCode = null;
        if (protocol.equals(ProtocolConstantV206V202404.protocolName)) {
            // 获取功能码
            commandCode = CodeV202404.cd_A3;
            // 创建视图
            ComCd93_A3Vo param = new ComCd93_A3Vo();
            param.controllerType = controllerType;
            param.projectNo = projectNo;
            param.icCardNo = vcNum;
            param.orderNo = orderNo;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setComType((byte)2);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setVcId(vcId);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else if (protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
            // 获取功能码
            commandCode = CodeV1.cd_98;
            // 创建视图
            Com98Vo param = new Com98Vo();
            param.icCardNo = vcNum;
            param.orderNo = orderNo;
            /**
             * 构造命令、发送命令并处理请求结果及执行结果
             * 1 准备参数
             * 2 调用公共方法
             */
            Param myParam = new Param();
            myParam.setComId(comId);
            myParam.setComType((byte)2);
            myParam.setCommandCode(commandCode);
            myParam.setCommandName(CodeV1.getCodeName(commandCode));
            myParam.setIntakeId(intakeId);
            myParam.setRtuAddr(rtuAddr);
            myParam.setProtocol(protocol);
            myParam.setVcId(vcId);
            myParam.setParam(param);
            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
            myParam.setOperator(operator);
            return dealWithCommandResult(myParam);
        } else {
            return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议");
        }
        //Long intakeId = job_rtu.getLong("intakeId");
        //String protocol = job_rtu.getString("protocol");
        ////String orgTag = job_rtu.getString("orgTag");
        ////if(orgTag == null) {
        ////    return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage());
        ////}
        ////comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
        //comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
        //
        //String commandCode = null;
        //if (protocol.equals(ProtocolConstantV206V202404.protocolName)) {
        //    // 获取功能码
        //    commandCode = CodeV202404.cd_A3;
        //
        //    // 创建视图
        //    ComCd93_A3Vo param = new ComCd93_A3Vo();
        //    param.controllerType = controllerType;
        //    param.projectNo = projectNo;
        //    param.icCardNo = vcNum;
        //    param.orderNo = orderNo;
        //
        //    /**
        //     * 构造命令、发送命令并处理请求结果及执行结果
        //     * 1 准备参数
        //     * 2 调用公共方法
        //     */
        //    Param myParam = new Param();
        //    myParam.setComId(comId);
        //    myParam.setComType((byte)2);
        //    myParam.setCommandCode(commandCode);
        //    myParam.setCommandName(CodeV202404.getCodeName(commandCode));
        //    myParam.setIntakeId(intakeId);
        //    myParam.setRtuAddr(rtuAddr);
        //    myParam.setProtocol(protocol);
        //    myParam.setVcId(vcId);
        //    myParam.setParam(param);
        //    myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
        //    myParam.setOperator(operator);
        //    return dealWithCommandResult(myParam);
        //} else if (protocol.equals(ProtocolConstantV206V1.protocolName) || protocol.equals(ProtocolConstantV206V2.protocolName)) {
        //    // 获取功能码
        //    commandCode = CodeV1.cd_98;
        //
        //    // 创建视图
        //    Com98Vo param = new Com98Vo();
        //    param.icCardNo = vcNum;
        //    param.orderNo = orderNo;
        //
        //    /**
        //     * 构造命令、发送命令并处理请求结果及执行结果
        //     * 1 准备参数
        //     * 2 调用公共方法
        //     */
        //    Param myParam = new Param();
        //    myParam.setComId(comId);
        //    myParam.setComType((byte)2);
        //    myParam.setCommandCode(commandCode);
        //    myParam.setCommandName(CodeV1.getCodeName(commandCode));
        //    myParam.setIntakeId(intakeId);
        //    myParam.setRtuAddr(rtuAddr);
        //    myParam.setProtocol(protocol);
        //    myParam.setVcId(vcId);
        //    myParam.setParam(param);
        //    myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
        //    myParam.setOperator(operator);
        //    return dealWithCommandResult(myParam);
        //} else {
        //    return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议");
        //}
    }
    /**
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java
@@ -45,4 +45,9 @@
     */
    @NotNull(message = "操作人不能为空")
    private Long operator;
    /**
     * 开阀类型;1-轮灌
     */
    private Byte openType;
}
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();
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -9,6 +9,7 @@
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -95,12 +96,21 @@
    }
    /**
     * 根据计划ID获取待终止的取水口列表(开阀成功的)
     * @param planId
     * @return
     */
    public List<VoToTerminateIntakes> getToTerminateIntakes(Long planId) {
        return irIntakeOperateMapper.getToTerminateIntakes(planId);
    }
    /**
     * 根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀
     * @param commandId
     * @return
     */
    public VoIntakeVc getIntakeVc(Long commandId) {
        return rmdCommandHistoryMapper.getIntakeVc(commandId);
    public VoIntakeVc getValveOpen(Long commandId) {
        return rmdCommandHistoryMapper.getValveOpen(commandId);
    }
    /**
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationCtrl.java
@@ -36,10 +36,9 @@
     * @return
     */
    @GetMapping(path = "/getSimpleProjects")
    public BaseResponse<QueryResultVo<List<VoProjectSimple>>> getSimpleProjects(QoProject qo) {
    public BaseResponse<List<VoProjectSimple>> getSimpleProjects(QoProject qo) {
        try {
            QueryResultVo<List<VoProjectSimple>> res = irrigationSv.getSimpleProjects(qo);
            return BaseResponseUtils.buildSuccess(res);
            return BaseResponseUtils.buildSuccess(irrigationSv.getSimpleProjects(qo));
        } catch (Exception e) {
            log.error("获取项目记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java
@@ -36,15 +36,9 @@
     * @param queryVo
     * @return
     */
    public QueryResultVo<List<VoProjectSimple>> getSimpleProjects(QoProject queryVo) {
    public List<VoProjectSimple> getSimpleProjects(QoProject queryVo) {
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
        Long itemTotal = irProjectMapper.getSimpleProjectsCount(params);
        QueryResultVo<List<VoProjectSimple>> rsVo = new QueryResultVo<>();
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = irProjectMapper.getSimpleProjects(params);
        return rsVo;
        return irProjectMapper.getSimpleProjects(params);
    }
    /**