package com.dy.pipIrrWechat.irrigatePlan; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.alibaba.fastjson2.JSONArray; 
 | 
import com.alibaba.fastjson2.JSONObject; 
 | 
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.*; 
 | 
import com.dy.pipIrrGlobal.voRm.VoIntakeVc; 
 | 
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; 
 | 
  
 | 
/** 
 | 
 * @author ZhuBaoMin 
 | 
 * @date 2025-02-20 15:27 
 | 
 * @LastEditTime 2025-02-20 15:27 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class IrrigatePlanSv { 
 | 
    @Autowired 
 | 
    private IrIrrigatePlanMapper irrigatePlanMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrPlanOperateMapper irPlanOperateMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrIrrigateScheduleMapper irIrrigateScheduleMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrOpeningScheduleMapper irOpeningScheduleMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrIrrigateGroupMapper irIrrigateGroupMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrIrrigateUnitMapper irIrrigateUnitMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrPlanScheduleMapper irPlanScheduleMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrGroupIntakeMapper irGroupIntakeMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IrIntakeOperateMapper irIntakeOperateMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RmCommandHistoryMapper rmdCommandHistoryMapper; 
 | 
  
 | 
    /** 
 | 
     * 添加灌溉计划 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    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); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID获取待终止的命令ID列表 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<Long> getTerminateCommandIds(Long planId) { 
 | 
        return irIntakeOperateMapper.getTerminateCommandIds(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID获取待终止的取水口列表(开阀成功的) 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoToTerminateIntakes> getToTerminateIntakes(Long planId) { 
 | 
        return irIntakeOperateMapper.getToTerminateIntakes(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀 
 | 
     * @param commandId 
 | 
     * @return 
 | 
     */ 
 | 
    public VoIntakeVc getValveOpen(Long commandId) { 
 | 
        return rmdCommandHistoryMapper.getValveOpen(commandId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 修改灌溉计划 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer updatePlan(IrIrrigatePlan po) { 
 | 
        return irrigatePlanMapper.updateByPrimaryKeySelective(po); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取未完成的计划列表,小程序计划列表页使用 
 | 
      * @return 
 | 
     */ 
 | 
    public List<VoPlans> getNotCompletePlans() { 
 | 
        return irrigatePlanMapper.getNotCompletePlans(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取已完成的计划列表,小程序计划列表页使用 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoPlans> getCompletedPlans() { 
 | 
        return irrigatePlanMapper.getCompletedPlans(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据指定的计划ID获取启动模式 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public Byte getStartupMode(Long planId) { 
 | 
        return irrigatePlanMapper.getStartupMode(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据指定的条件获取计划列表 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    //public QueryResultVo<List<VoIrrigatePlan>> getIrrigatePlans(QoIrrigatePlan queryVo) { 
 | 
    //    Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
    // 
 | 
    //    Long itemTotal = irrigatePlanMapper.getIrrigatePlanCount(params); 
 | 
    // 
 | 
    //    QueryResultVo<List<VoIrrigatePlan>> rsVo = new QueryResultVo<>(); 
 | 
    //    rsVo.pageSize = queryVo.pageSize; 
 | 
    //    rsVo.pageCurr = queryVo.pageCurr; 
 | 
    // 
 | 
    //    rsVo.calculateAndSet(itemTotal, params); 
 | 
    //    rsVo.obj = irrigatePlanMapper.getIrrigatePlans(params); 
 | 
    //    return rsVo; 
 | 
    //} 
 | 
  
 | 
    /** 
 | 
     * 添加灌溉计划操作记录 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    public Long addPlanOperate(IrPlanOperate po) { 
 | 
        irPlanOperateMapper.insert(po); 
 | 
        return po.getId(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加灌溉次序记录 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    public Long addIrrigateSchedule(IrIrrigateSchedule po) { 
 | 
        irIrrigateScheduleMapper.insert(po); 
 | 
        return po.getId(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID终止灌溉次序,将灌溉次序的当前状态改为已终止 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer terminateSchedule(Long planId) { 
 | 
        return irIrrigateScheduleMapper.terminateSchedule(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID获取灌溉次序记录 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoIrrigateSchedule> getSchedulesByPlanId(Long planId) { 
 | 
        return irIrrigateScheduleMapper.getSchedulesByPlanId(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据组ID获取取水口ID集合 
 | 
     * @param groupId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<Long> getIntakeIdsByGroupId(Long groupId) { 
 | 
        return irGroupIntakeMapper.getIntakeIdsByGroupId(groupId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加计划次序关联记录 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    public Long addPlanSchedule(IrPlanSchedule po) { 
 | 
        irPlanScheduleMapper.insert(po); 
 | 
        return po.getId(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID获取计划简单信息列表 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public VoPlanSimple getPlanSimple(Long planId) { 
 | 
        return irrigatePlanMapper.getPlanSimple(planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID更新计划信息(起止时间、计划状态) 
 | 
     * @param planStartTime 
 | 
     * @param planEndTime 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer updatePlanTimes(Date planStartTime, Date planEndTime, Long planId) { 
 | 
        return irrigatePlanMapper.updatePlanTimes(planStartTime, planEndTime, planId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据灌溉次序ID更新次序开始时间 
 | 
     * @param scheduleId 
 | 
     * @param startTime 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer updateScheduleStartTime(Long scheduleId, Date startTime) { 
 | 
        return irIrrigateScheduleMapper.updateScheduleStartTime(scheduleId, startTime); 
 | 
    } 
 | 
  
 | 
    ///** 
 | 
    // * 添加开阀计划 
 | 
    // * @param po 
 | 
    // * @return 
 | 
    // */ 
 | 
    //public Long addOpeningSchedule(IrOpeningSchedule po) { 
 | 
    //    irOpeningScheduleMapper.insert(po); 
 | 
    //    return po.getId(); 
 | 
    //} 
 | 
  
 | 
    /** 
 | 
     * 根据灌溉单元ID获取取水口ID 
 | 
     * @param unitId 
 | 
     * @return 
 | 
     */ 
 | 
    public Long getIntakeIdByUnitId(Long unitId) { 
 | 
        return irIrrigateUnitMapper.getIntakeIdByUnitId(unitId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据计划ID获取计划发布结果 
 | 
     * @param planId 
 | 
     * @return 
 | 
     */ 
 | 
    public VoPlanDetails getPublishResults(Long planId) { 
 | 
        List<VoGroupResult> groupResults = irIrrigateGroupMapper.getGroupResult(planId); 
 | 
        if(groupResults == null || groupResults.size() == 0){ 
 | 
            return null; 
 | 
        } 
 | 
  
 | 
        VoPlanDetails planDetails = irrigatePlanMapper.getPlanDetails(planId); 
 | 
  
 | 
        for (VoGroupResult groupResult : groupResults) { 
 | 
            List<VoIntakeResult> intakeResults = irIntakeOperateMapper.getIntakeResult(planId, groupResult.getGroupId()); 
 | 
            if(intakeResults != null) { 
 | 
                groupResult.setPublishResult(intakeResults); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        planDetails.setGroups(groupResults); 
 | 
        return planDetails; 
 | 
  
 | 
  
 | 
        //JSONArray array_groupResult = (JSONArray) JSON.toJSON(groupResults); 
 | 
        //for(int i = 0; i < array_groupResult.size(); i++){ 
 | 
        //    JSONObject job_groupResult = array_groupResult.getJSONObject(i); 
 | 
        //    Long groupId = job_groupResult.getLong("groupId"); 
 | 
        // 
 | 
        //    List<VoIntakeResult> intakeResults = irIntakeOperateMapper.getIntakeResult(planId, groupId); 
 | 
        //    if(intakeResults != null) { 
 | 
        //        JSONArray array_intakeResult = (JSONArray) JSON.toJSON(intakeResults); 
 | 
        //        job_groupResult.put("publishResult", array_intakeResult); 
 | 
        //    } 
 | 
        //} 
 | 
        // 
 | 
        //List<VoGroupResult> publishResults = array_groupResult.toJavaList(VoGroupResult.class); 
 | 
        //return publishResults; 
 | 
  
 | 
    } 
 | 
} 
 |