9个文件已修改
3个文件已添加
506 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIntakeOperateMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupResult.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIntakeResult.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanDetails.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigateGroupMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java 95 ●●●●● 补丁 | 查看 | 原始文档 | 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/IrIntakeOperateMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoIr.IrIntakeOperate;
import com.dy.pipIrrGlobal.voIr.VoIntakeResult;
import com.dy.pipIrrGlobal.voIr.VoToTerminateIntakes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -57,4 +58,19 @@
     * @return
     */
    List<VoToTerminateIntakes> getToTerminateIntakes(Long planId);
    /**
     * 根据计划ID及管轮组ID获取取水口发布发布结果
     * @param planId
     * @param groupId
     * @return
     */
    List<VoIntakeResult> getIntakeResult(@Param("planId") Long planId, @Param("groupId") Long groupId);
    /**
     * 根据计划ID获取取水口命令发布失败数量,灌溉计划详情页使用
     * @param planId
     * @return
     */
    Integer getFailureCount(Long planId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigateGroupMapper.java
@@ -2,10 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoIr.IrIrrigateGroup;
import com.dy.pipIrrGlobal.voIr.VoGroup;
import com.dy.pipIrrGlobal.voIr.VoGroupDetail;
import com.dy.pipIrrGlobal.voIr.VoGroupOne;
import com.dy.pipIrrGlobal.voIr.VoGroupSimple;
import com.dy.pipIrrGlobal.voIr.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -73,4 +70,11 @@
     * @return
     */
    VoGroupDetail getGroupDetail(Long groupId);
    /**
     * 根据灌溉计划ID获取计划发布结果
     * @param planId
     * @return
     */
    List<VoGroupResult> getGroupResult(Long planId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoIr/IrIrrigatePlanMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoIr.IrIrrigatePlan;
import com.dy.pipIrrGlobal.voIr.VoPlanDetails;
import com.dy.pipIrrGlobal.voIr.VoPlanSimple;
import com.dy.pipIrrGlobal.voIr.VoPlans;
import org.apache.ibatis.annotations.Mapper;
@@ -85,4 +86,18 @@
     * @return
     */
    Date getToTerminatePlan(@Param("planId") Long planId);
    /**
     * 根据计划ID获取计划详情,包括计划名称,项目名,计划开始时间,计划结束时间,计划详情页使用
     * @param planId
     * @return
     */
    VoPlanDetails getPlanDetails(@Param("planId") Long planId);
    /**
     * 根据计划ID获取计划状态,用于判断是否可以删除计划
     * @param planId
     * @return
     */
    Integer getPlanState(@Param("planId") Long planId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoGroupResult.java
New file
@@ -0,0 +1,61 @@
package com.dy.pipIrrGlobal.voIr;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * @author ZhuBaoMin
 * @date 2025-04-09 9:00
 * @LastEditTime 2025-04-09 9:00
 * @Description 灌溉计划发布结果(轮灌组)视图对象,VoIntakeResult的父列表
 */
@Data
@JsonPropertyOrder({"groupId", "groupCode", "state", "startTime", "stopTime", "duration", "publishResult"})
public class VoGroupResult {
    private static final long serialVersionUID = 202504090902001L;
    /**
     * 灌溉组id
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long groupId;
    /**
     * 灌溉组编码
     */
    private String groupCode;
    /**
     * 轮灌组状态:2-未执行,3-执行中,4-已结束
     */
    private Integer state;
    /**
     * 轮灌组开始灌溉时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date startTime;
    /**
     * 轮灌组结束灌溉时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date stopTime;
    /**
     * 轮灌组持续时间
     */
    private Integer duration;
    /**
     * 灌溉组发布结果,包含取水口发布结果
     */
    private List<VoIntakeResult> publishResult;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoIntakeResult.java
New file
@@ -0,0 +1,34 @@
package com.dy.pipIrrGlobal.voIr;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2025-04-09 8:55
 * @LastEditTime 2025-04-09 8:55
 * @Description 灌溉计划发布结果(取水口)视图对象,用于灌溉计划发布结果(VoGroupResult)子列表
 */
@Data
@JsonPropertyOrder({"code", "intakeName", "result"})
public class VoIntakeResult {
    private static final long serialVersionUID = 202504090857001L;
    /**
     * 发布结果标识
     */
    private Integer code;
    /**
     * 取水口名称
     */
    private String intakeName;
    /**
     * 发布结果
     */
    private String result;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voIr/VoPlanDetails.java
New file
@@ -0,0 +1,59 @@
package com.dy.pipIrrGlobal.voIr;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * @author ZhuBaoMin
 * @date 2025-04-09 11:22
 * @LastEditTime 2025-04-09 11:22
 * @Description 灌溉计划详情,拥有灌溉计划详情页
 */
@Data
@JsonPropertyOrder({"planName", "projectName", "state", "planStartTime", "planStopTime", "failureCount", "groups"})
public class VoPlanDetails {
    private static final long serialVersionUID = 202504091125001L;
    /**
     * 灌溉计划名称
     */
    private String planName;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 灌溉计划状态
     */
    private Integer state;
    /**
     * 灌溉计划开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date planStartTime;
    /**
     * 灌溉计划结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date planStopTime;
    /**
     * 命令发布失败数量
     */
    private Integer failureCount;
    /**
     * 轮灌组列表
     */
    private List<VoGroupResult> groups;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIntakeOperateMapper.xml
@@ -178,4 +178,23 @@
    FROM ir_intake_operate
    WHERE operate_type = 1 AND command_result = 1 AND plan_id = #{planId}
  </select>
  <!--根据计划ID及管轮组ID获取取水口发布发布结果-->
  <select id="getIntakeResult" resultType="com.dy.pipIrrGlobal.voIr.VoIntakeResult">
    SELECT
        IF(io.command_result = 1, 0, 1) AS code,
        (SELECT name FROM pr_intake WHERE id = io.intake_id) AS intakeName,
        io.failure_factors AS result
    FROM ir_intake_operate io
        inner JOIN ir_group_intake gi ON gi.intake_id = io.intake_id
    WHERE io.plan_id = #{planId} AND gi.group_id = #{groupId};
  </select>
  <!--根据计划ID获取取水口命令发布失败数量,灌溉计划详情页使用-->
  <select id="getFailureCount" resultType="java.lang.Integer">
    SELECT
      COUNT(1) AS failureCount
    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/IrIrrigateGroupMapper.xml
@@ -304,4 +304,20 @@
      ) irrigateGroup
    GROUP BY groupCode,defaultDuration
  </select>
  <select id="getGroupResult" resultType="com.dy.pipIrrGlobal.voIr.VoGroupResult">
    SELECT
        grp.id AS groupId,
        grp.group_code AS groupCode,
        IF(NOW() &lt; sche.start_time, 2,
        IF(NOW() > sche.start_time AND NOW() &lt; DATE_ADD(sche.start_time, INTERVAL sche.duration MINUTE), 3, 4)) AS state,
        sche.start_time AS startTime,
        DATE_ADD(sche.start_time, INTERVAL sche.duration MINUTE) AS stopTime,
        sche.duration,
        NULL AS publishResult
    FROM ir_irrigate_group  grp
        INNER JOIN ir_irrigate_schedule sche ON sche.group_id = grp.id
        INNER JOIN ir_plan_schedule ps ON ps.schedule_id = sche.id
    WHERE ps.plan_id = #{planId};
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/IrIrrigatePlanMapper.xml
@@ -337,4 +337,31 @@
  </select>
  <!--根据计划ID获取计划详情,包括计划名称,项目名,计划开始时间,计划结束时间,计划详情页使用-->
  <select id="getPlanDetails" resultType="com.dy.pipIrrGlobal.voIr.VoPlanDetails">
    SELECT
      plan.plan_name AS planName,
      pro.project_name AS projectName,
      IF(plan.executing_state = 3, '5',
         IF(NOW() &lt; plan.plan_start_time,'2',
            IF(NOW() &lt; plan.plan_stop_time, '3', '4'))) AS state,
      plan.plan_start_time AS planStartTime,
      plan.plan_stop_time AS planStopTime,
      NULL AS groupDetails,
      NULL AS failureCount
    FROM ir_irrigate_plan plan
        INNER JOIN ir_project pro ON pro.id = plan.project_id
    WHERE plan.id = #{planId}
    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
@@ -7,10 +7,7 @@
import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
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.voIr.*;
import com.dy.pipIrrGlobal.voRm.VoIntakeVc;
import com.dy.pipIrrWechat.command.CommandSv;
import com.dy.pipIrrWechat.command.dto.AutomaticClose;
@@ -34,6 +31,7 @@
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@@ -165,33 +163,22 @@
    }
    /**
     * 获取未完成的计划列表,小程序计划列表页使用
     * 删除灌溉计划
     * @param planSimple
     * @param bindingResult
     * @return
     */
    @GetMapping(path = "/getNotCompletePlans")
    public BaseResponse<List<VoPlans>> getNotCompletePlans() {
        try {
            List<VoPlans> res = irrigatePlanSv.getNotCompletePlans();
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取未完的计划异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
    @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());
        }
    }
    /**
     * 获取已完成的计划列表,小程序计划列表页使用
     * @return
     */
    @GetMapping(path = "/getCompletedPlans")
    public BaseResponse<List<VoPlans>> getCompletedPlans() {
        try {
            List<VoPlans> res = irrigatePlanSv.getCompletedPlans();
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取项目记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        Map map_result = irrigatePlanSv.deletePlan(planSimple);
        if(map_result.get("success").equals(false)) {
            return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
        }
        return BaseResponseUtils.buildSuccess() ;
    }
    /**
@@ -322,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);
                }
            }
        }
@@ -382,4 +367,54 @@
        }
        return BaseResponseUtils.buildSuccess();
    }
    /**
     * 获取未完成的计划列表,小程序计划列表页使用
     * @return
     */
    @GetMapping(path = "/getNotCompletePlans")
    public BaseResponse<List<VoPlans>> getNotCompletePlans() {
        try {
            List<VoPlans> res = irrigatePlanSv.getNotCompletePlans();
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取未完的计划异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 获取已完成的计划列表,小程序计划列表页使用
     * @return
     */
    @GetMapping(path = "/getCompletedPlans")
    public BaseResponse<List<VoPlans>> getCompletedPlans() {
        try {
            List<VoPlans> res = irrigatePlanSv.getCompletedPlans();
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取项目记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 根据计划ID获取计划发布结果
     * @param planId
     * @return
     */
    @GetMapping(path = "/getPublishResults")
    public BaseResponse<VoPlanDetails> getPublishResults(@RequestParam Long planId) {
        if(planId == null) {
            return BaseResponseUtils.buildErrorMsg("计划ID不能为空");
        }
        try {
            VoPlanDetails res = irrigatePlanSv.getPublishResults(planId);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取计划发布结果异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -1,22 +1,25 @@
package com.dy.pipIrrWechat.irrigatePlan;
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;
import com.dy.pipIrrGlobal.pojoIr.IrIrrigateSchedule;
import com.dy.pipIrrGlobal.pojoIr.IrPlanOperate;
import com.dy.pipIrrGlobal.pojoIr.IrPlanSchedule;
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.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.List;
import java.util.*;
/**
 * @author ZhuBaoMin
@@ -66,6 +69,55 @@
    public Long addIrrigatePlan(IrIrrigatePlan po) {
        irrigatePlanMapper.insert(po);
        return po.getId();
    }
    /**
     * 删除灌溉计划
     * @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;
        }
    }
    /**
@@ -271,4 +323,35 @@
    public Long getIntakeIdByUnitId(Long unitId) {
        return irIrrigateUnitMapper.getIntakeIdByUnitId(unitId);
    }
    /**
     * 根据计划ID获取计划发布结果
     * @param planId
     * @return
     */
    public VoPlanDetails getPublishResults(Long planId) {
        VoPlanDetails planDetails = irrigatePlanMapper.getPlanDetails(planId);
        if(planDetails == null){
            return null;
        }
        Integer failureCount = Optional.ofNullable(irIntakeOperateMapper.getFailureCount(planId)).orElse(0);
        planDetails.setFailureCount(failureCount);
        List<VoGroupResult> groupResults = irIrrigateGroupMapper.getGroupResult(planId);
        if(groupResults == null || groupResults.size() == 0){
            return null;
        }
        for (VoGroupResult groupResult : groupResults) {
            List<VoIntakeResult> intakeResults = irIntakeOperateMapper.getIntakeResult(planId, groupResult.getGroupId());
            if(intakeResults != null) {
                groupResult.setPublishResult(intakeResults);
            }
        }
        planDetails.setGroups(groupResults);
        return planDetails;
    }
}
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;