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.*; 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 * @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(); } /** * 删除灌溉计划 * @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 */ public Date getToTerminatePlan(Long planId) { return irrigatePlanMapper.getToTerminatePlan(planId); } /** * 根据计划ID获取待终止的取水口ID(已发布开发命令,无论是否成功) * @param planId * @return */ public List getToTerminateIntakeIds(Long planId) { return irIntakeOperateMapper.getToTerminateIntakeIds(planId); } /** * 根据计划ID获取待终止的命令ID列表 * @param planId * @return */ public List getTerminateCommandIds(Long planId) { return irIntakeOperateMapper.getTerminateCommandIds(planId); } /** * 根据计划ID获取待终止的取水口列表(开阀成功的) * @param planId * @return */ public List 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 getNotCompletePlans() { return irrigatePlanMapper.getNotCompletePlans(); } /** * 获取已完成的计划列表,小程序计划列表页使用 * @return */ public List getCompletedPlans() { return irrigatePlanMapper.getCompletedPlans(); } /** * 根据指定的计划ID获取启动模式 * @param planId * @return */ public Byte getStartupMode(Long planId) { return irrigatePlanMapper.getStartupMode(planId); } /** * 根据指定的条件获取计划列表 * @param queryVo * @return */ //public QueryResultVo> getIrrigatePlans(QoIrrigatePlan queryVo) { // Map params = (Map) PojoUtils.generalize(queryVo); // // Long itemTotal = irrigatePlanMapper.getIrrigatePlanCount(params); // // QueryResultVo> 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 getSchedulesByPlanId(Long planId) { return irIrrigateScheduleMapper.getSchedulesByPlanId(planId); } /** * 根据组ID获取取水口ID集合 * @param groupId * @return */ public List 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 groupResults = irIrrigateGroupMapper.getGroupResult(planId); if(groupResults == null || groupResults.size() == 0){ return null; } VoPlanDetails planDetails = irrigatePlanMapper.getPlanDetails(planId); for (VoGroupResult groupResult : groupResults) { List 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 intakeResults = irIntakeOperateMapper.getIntakeResult(planId, groupId); // if(intakeResults != null) { // JSONArray array_intakeResult = (JSONArray) JSON.toJSON(intakeResults); // job_groupResult.put("publishResult", array_intakeResult); // } //} // //List publishResults = array_groupResult.toJavaList(VoGroupResult.class); //return publishResults; } }