package com.pusong.business.service;

import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.business.domain.vo.PsTaskMainVo;
import com.pusong.business.domain.vo.TaskPlanVo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.multipart.MultipartFile;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 主任务Service接口
 *
 * @author wls
 * @date 2024-08-07
 */
public interface IPsTaskService {



    /**
     * 新增主任务
     *
     * @param bo 主任务
     * @return 是否新增成功
     */
    Boolean insert(PsTaskMain bo);

    Boolean insertBatch(Collection<PsTaskMain> bos);

    /**
     * 分页查询主任务列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 主任务分页列表
     */
    TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery);
    /**
     * 分页查询子任务列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 子任务分页列表
     */
    TableDataInfo<PsTaskMainVo> queryChildPageList(PsTaskQueryBo bo, PageQuery pageQuery);
    /**
     * 分页查询主任务列表
     *
     * @param id 任务主表主键
     * @return 公司及资料信息
     */
    PsTaskMainVo queryInfo(String id);
    /**
     * 根据合同编码查询合同主任务
     *
     * @param contractCode 合同编码
     * @return
     */
    List<PsTaskMain> queryByContractCode(String contractCode);

    PsTaskMain queryByContractCodeAndServiceCompanyId(String contractCode, Long serviceCompanyId);

    /**
     * 根据主任务id查询进度
     *
     * @param id 任务主表主键
     */
    TaskPlanVo plan(Long id);


    /**
     * 上传资料和公司信息
     *
     * @param save 公司及资料信息
     * @return
     */
    void saveInfo(MediaCompanySaveBo save);

    /**
     * 任务委派
     *
     * @param bo 任务委派请求信息
     * @return
     */
    void appoint(AppointBo bo);

    /**
     * 主任务完成
     *
     * @param id 任务主键id
     * @return
     */
    String finishMain(Long id);
    /**
     * 子任务完成
     *
     * @param id 任务主键id
     * @return
     */
    void finishChild(Long id,String desc);

    /**
     * 获取任务执行者列表
     *
     * @param id 主任务主键id
     * @return
     */
    Map<String, PsTaskAppointVo> getExecutors(Long id);
    /**
     * 任务改派
     * @param id 任务委派表id
     * @param executorId 任务新的执行者id
     */
    void taskReset(Long id,Long executorId);
    /**
     * 免费工单任务作废
     * @param id 任务主表id
     * @param desc 作废原因
     */
    void cancel(Long id,String desc);
    /**
     * 上传发票
     * @param id 任务主表id
     * @param file 发票文件
     */
    void invoice(MultipartFile file, @NotNull Long id);

    /**
     * 任务暂停
     * @param id 任务主表id
     */
    void pause( Long id);

    /**
     * 任务恢复
     * @param id 任务主表id
     */
    void recover( Long id);
   /* *//**
     * 查询主任务
     *
     * @param id 主键
     * @return 主任务
     *//*
    PsTaskMainVo queryById(Long id);

    *//**
     * 分页查询主任务列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 主任务分页列表
     *//*
    TableDataInfo<PsTaskMainVo> queryPageList(PsTaskMainBo bo, PageQuery pageQuery);

    *//**
     * 查询符合条件的主任务列表
     *
     * @param bo 查询条件
     * @return 主任务列表
     *//*
    List<PsTaskMainVo> queryList(PsTaskMainBo bo);



    *//**
     * 修改主任务
     *
     * @param bo 主任务
     * @return 是否修改成功
     *//*
    Boolean updateByBo(PsTaskMainBo bo);

    *//**
     * 校验并批量删除主任务信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     *//*
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);*/
}
