package ink.wgink.module.activiti.service.oa;

import ink.wgink.module.activiti.pojo.dtos.oa.OaOnFileDTO;
import ink.wgink.module.activiti.pojo.pos.oa.OaOnFilePO;
import ink.wgink.module.activiti.pojo.vos.oa.OaOnFileVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;

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

/**
 * @ClassName: IOaOnFileService
 * @Description: oa归档
 * @Author: wanggeng
 * @Date: 2022/5/13 09:58
 * @Version: 1.0
 */
public interface IOaOnFileService {
    /**
     * 已完成
     */
    String KEY_FINISHED = "finished";
    /**
     * 未完成
     */
    String KEY_UN_FINISHED = "unFinished";

    /**
     * 新增
     *
     * @param oaOnFileVO
     */
    void save(OaOnFileVO oaOnFileVO);

    /**
     * 新增
     *
     * @param oaOnFileVO
     * @return
     */
    String saveAndReturnId(OaOnFileVO oaOnFileVO);

    /**
     * 删除
     *
     * @param ids
     */
    void remove(List<String> ids);

    /**
     * 删除（物理）
     *
     * @param ids
     */
    void delete(List<String> ids);

    /**
     * 详情
     *
     * @param params
     * @return
     */
    OaOnFileDTO get(Map<String, Object> params);

    /**
     * 详情
     *
     * @param onFileId
     * @return
     */
    OaOnFileDTO getById(String onFileId);

    /**
     * 详情
     *
     * @param processInstanceId
     * @return
     */
    OaOnFileDTO getByProcessInstanceId(String processInstanceId);

    /**
     * 详情
     *
     * @param reportUid
     * @return
     */
    OaOnFileDTO getByReportUid(String reportUid);

    /**
     * 详情
     *
     * @param params
     * @return
     */
    OaOnFilePO getPO(Map<String, Object> params);

    /**
     * 详情
     *
     * @param onFileId
     * @return
     */
    OaOnFilePO getPOById(String onFileId);

    /**
     * 详情
     *
     * @param processInstanceId
     * @return
     */
    OaOnFilePO getPOByProcessInstanceId(String processInstanceId);

    /**
     * 详情
     *
     * @param reportUid
     * @return
     */
    OaOnFilePO getPOByReportUid(String reportUid);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<OaOnFilePO> listPO(Map<String, Object> params);

    /**
     * 列表
     *
     * @param onFileIds
     * @return
     */
    List<OaOnFilePO> listPOByIds(List<String> onFileIds);

    /**
     * 列表
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    List<OaOnFilePO> listPOByFormCodeAndFormVersion(String formCode, Integer formVersion);

    /**
     * 列表
     *
     * @param processInstanceIds
     * @return
     */
    List<OaOnFilePO> listPOByProcessInstanceIds(List<String> processInstanceIds);

    /**
     * 列表
     *
     * @param reportUids
     * @return
     */
    List<OaOnFilePO> listPOByReportUids(List<String> reportUids);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<OaOnFileDTO> list(Map<String, Object> params);

    /**
     * 列表
     *
     * @param onFileIds
     * @return
     */
    List<OaOnFileDTO> listByIds(List<String> onFileIds);

    /**
     * 列表
     *
     * @param formCode
     * @param formVersion
     * @return
     */
    List<OaOnFileDTO> listByFormCodeAndFormVersion(String formCode, Integer formVersion);

    /**
     * 列表
     *
     * @param processInstanceIds
     * @return
     */
    List<OaOnFileDTO> listByProcessInstanceIds(List<String> processInstanceIds);

    /**
     * 列表
     *
     * @param reportUids
     * @return
     */
    List<OaOnFileDTO> listByReportUids(List<String> reportUids);

    /**
     * 未归档
     *
     * @return
     */
    List<OaOnFileDTO> listUnOnFile();

    /**
     * 未完成且未归档
     *
     * @return
     */
    List<OaOnFileDTO> listUnFinishedUnOnFile();

    /**
     * 已完成且未归档
     *
     * @return
     */
    List<OaOnFileDTO> listFinishedUnOnFile();

    /**
     * 已完成未归档列表
     *
     * @param modelCategories 模型目录
     * @return
     */
    List<OaOnFileDTO> listFinishedUnOnFileByModelCategories(List<String> modelCategories);

    /**
     * 分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPage(ListPage page);

    /**
     * 分页列表
     *
     * @param onFileIds
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageByIds(List<String> onFileIds, ListPage page);

    /**
     * 分页列表
     *
     * @param formCode
     * @param formVersion
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageByFormCodeAndFormVersion(String formCode, Integer formVersion, ListPage page);

    /**
     * 分页列表
     *
     * @param processInstanceIds
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageByProcessInstanceIds(List<String> processInstanceIds, ListPage page);

    /**
     * 分页列表
     *
     * @param reportUids
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageByReportUids(List<String> reportUids, ListPage page);

    /**
     * 未归档分页
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageUnOnFile(ListPage page);


    /**
     * 未完成且未归档分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageUnFinishedUnOnFile(ListPage page);


    /**
     * 已完成且未归档分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageFinishedUnOnFile(ListPage page);

    /**
     * 已完成未归档分页列表
     *
     * @param modelCategories 模型目录
     * @param page
     * @return
     */
    SuccessResultList<List<OaOnFileDTO>> listPageFinishedUnOnFileByModelCategories(List<String> modelCategories, ListPage page);


}
