/*
 * Author: Zev
 * 生成Service
 */
package com.tofly.gpsboot.service.paln.task;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.pojo.plan.PlanFactory;
import com.tofly.pojo.plan.dto.PlanDto;
import com.tofly.pojo.plan.vo.PlanDetailVo;
import com.tofly.pojo.plan.vo.PlanVo;
import com.tofly.gpsboot.exception.BusinessException;
import com.tofly.pojo.plan.Plan;
import com.tofly.gpsboot.service.IBaseService;
import com.tofly.pojo.plan.Plancancle;
import com.tofly.pojo.plan.Planstop;

import java.util.List;


/**
 * 巡检计划详细信息表：TF_YWPN__PLAN_W
 *
 * @author admin
 * @date Thu Mar 18 00:00:00 CST 2021
 */
public interface PlanService extends IBaseService<Plan, PlanVo> {


    /**
     * 巡检计划分页查询
     * @return
     */
    Page<PlanVo> getPlanPage(Page page,PlanDto dto);

    /**
     * 获取
     * @param page
     * @param dto
     * @return
     */
    Page<PlanVo> getPlanTimeIntervalPage(Page page, PlanDto dto);
    /**
     * 新增基本和详情信息
     *
     * @param parDto
     * @throws BusinessException 抛出新增的详情为空
     */
    List<Plan> savaPlanInfo(PlanDto parDto) throws BusinessException;

    /**
     * 根据id 获取任务信息
     * @param id
     * @return
     * @throws BusinessException
     */
    PlanVo getPlanInfo(Long id)throws BusinessException;

    /**
     * 修改基本和详情信息
     *
     * @param parDto
     * @throws BusinessException 抛出更新当前数据不存在
     */
    void updatePlanInfo(PlanDto parDto) throws BusinessException;

    /**
     * 单个删除或批量删除信息
     *
     * @param idList
     * @throws BusinessException 抛出删除对象不存在
     */
    void deletePlanInfo(List<Long> idList) throws BusinessException;

    /**
     * 修改当前计划状态
     * @param planId
     * @param planState
     * @param userId
     * @return
     */
    void updatePlanState(Long planId,String planState,Long userId);


    /**
     * 暂停任务
     * @param plan
     * @param planStop
     * @return
     */
    Plan stopPlan(Plan plan, Planstop planStop);

    /**
     * 计划作废
     * @param plan
     * @param plancancle
     * @return
     */
    Plan disusePlan(Plan plan, Plancancle plancancle);

    /**
     * 根据计划id获取计划详情
     * @param id
     * @param flag
     * @return
     */
    List<PlanDetailVo> getPlanDetail(Long id, String flag);
}
