package com.ozs.plan.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ozs.common.core.domain.AjaxResult;
import com.ozs.common.core.domain.model.LoginUser;
import com.ozs.plan.doman.PlanQuarter;
import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 季度计划 服务层
 *
 * @author bu
 */
public interface PlanQuarterService extends IService<PlanQuarter> {

    /**
     * 查询季度计划记录集合--导出
     *
     * @param vo 季度计划请求对象
     * @return 季度计划记录集合
     */
    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo, LoginUser loginUser);

    /**
     * 查询季度计划记录集合(审核单位--导出）
     *
     * @param vo 季度计划请求对象
     * @return 季度计划记录集合
     */
    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo, LoginUser loginUser);

    /**
     * 创建季度计划
     *
     * @param quarterStandardVo 季度计划请求对象
     */
    public AjaxResult insertPlanQuarter(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 批量删除季度计划
     *
     * @param planIds 需要删除的季度计划ID
     * @return 结果
     */
    public AjaxResult deletePlanQuarterByIds(Long[] planIds);

    /**
     * 批量删除季度计划
     *
     * @param planYearId 需要删除的季度计划ID
     * @return 结果
     */
    public AjaxResult deletePlanQuarterById(Long planYearId);

    /**
     * 根据id获取季度计划信息
     *
     * @param quarterStandardVo 季度计划请求对象
     * @return 结果
     */
    public AjaxResult view(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 修改季度计划
     *
     * @param quarterStandardVo 修改季度计划请求对象
     * @return 结果
     */
    public AjaxResult update(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 导入季度计划数据
     *
     * @return 结果
     */
    public String importPlanQuarter(List<PlanQuarterStandardVo> planquarter, boolean isUpdateSupport, LoginUser loginUser);

    /**
     * 提交季度计划
     *
     * @param quarterStandardVo 提交季度计划请求对象
     * @return 结果
     */
    public AjaxResult commit(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 审核季度计划
     *
     * @param quarterStandardVo 需要审核的季度计划
     * @return 结果
     */
    public AjaxResult reviewTo(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 审核季度计划退回
     *
     * @param quarterStandardVo 需要审核的季度计划
     * @return 结果
     */
    public AjaxResult reviewReturn(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 上传审核文件
     *
     * @param vo
     */
    public void upExamineFile(PlanQuarterStandardVo vo);

    /**
     * 申请修改季度计划
     *
     * @param quarterStandardVo 需要修改的季度计划
     * @return 结果
     */
    public AjaxResult appUpdate(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 发函催告
     *
     * @param quarterStandardVo 季度计划
     * @return 结果
     */
    AjaxResult sendLetter(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 上传计划关联文件后保存文件信息
     *
     * @param quarterStandardVo 季度计划
     * @return 结果
     */
    AjaxResult upLoadPlanFile(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 查询审核分页
     */
    List<PlanQuarter> queryPage(PlanQuarterStandardVo vo);

    /**
     * 导入年度计划数据
     *
     * @param planYearIds
     * @return
     */
    AjaxResult importPlanYearsData(List<Long> planYearIds);

    /**
     * 申请撤销年度计划
     *
     * @param
     * @return
     */
    AjaxResult appDelete(PlanQuarterStandardVo quarterStandardVo);

    /**
     * 处理申请撤销季度计划
     *
     * @param quarterStandardVo
     * @return
     */
    AjaxResult handleApp(PlanQuarterStandardVo quarterStandardVo);
}
