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

import ink.wgink.module.activiti.pojo.dtos.oa.OaCcDTO;
import ink.wgink.module.activiti.pojo.dtos.oa.OaStartedInstanceDTO;
import ink.wgink.module.activiti.pojo.pos.oa.OaCcPO;
import ink.wgink.module.activiti.pojo.vos.oa.OaCcVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;

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

/**
 * @ClassName: IFormCcService
 * @Description: 表单抄送
 * @Author: wanggeng
 * @Date: 2022/5/9 11:28
 * @Version: 1.0
 */
public interface IOaCcService {

    /**
     * 保存
     *
     * @param oaCcVO
     */
    void save(OaCcVO oaCcVO);

    /**
     * 保存
     *
     * @param token
     * @param oaCcVO
     */
    void save(String token, OaCcVO oaCcVO);

    /**
     * 保存
     *
     * @param userId
     * @param oaCcVO
     */
    void saveByUserId(String userId, OaCcVO oaCcVO);

    /**
     * 保存
     *
     * @param userId
     * @param formCode
     * @param formVersion
     * @param processInstanceId
     * @param reportUid
     * @param userIds
     */
    void saveByUserId(String userId, String formCode, Integer formVersion, String processInstanceId, String reportUid, List<String> userIds);

    /**
     * 更新阅读状态
     *
     * @param ccId
     * @param isRead
     */
    void updateRead(String ccId, int isRead);

    /**
     * 更新阅读状态
     *
     * @param token
     * @param ccId
     * @param isRead
     */
    void updateRead(String token, String ccId, int isRead);

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

    /**
     * 抄送列表
     *
     * @param reportUid
     * @return
     */
    List<OaCcPO> listPOByReportUid(String reportUid);

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

    /**
     * 抄送列表
     *
     * @param reportUid
     * @return
     */
    List<OaCcDTO> listByReportUid(String reportUid);

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

    /**
     * 抄送分页列表
     *
     * @param reportUid
     * @param page
     * @return
     */
    SuccessResultList<List<OaCcDTO>> listPageByReportUid(String reportUid, ListPage page);

    /**
     * 我的抄送列表
     *
     * @param isRead
     * @param page
     * @return
     */
    SuccessResultList<List<OaCcDTO>> listPageOfMineByIsRead(Integer isRead, ListPage page);

    /**
     * 我的抄送列表
     *
     * @param token
     * @param isRead
     * @param page
     * @return
     */
    SuccessResultList<List<OaCcDTO>> listPageOfMineByIsRead(String token, Integer isRead, ListPage page);

    /**
     * 用户抄送列表
     *
     * @param userId
     * @param isRead
     * @param page
     * @return
     */
    SuccessResultList<List<OaCcDTO>> listPageByUserIdAndIsRead(String userId, Integer isRead, ListPage page);

    /**
     * 我的已读未读总量
     *
     * @param isRead
     * @return
     */
    Integer countReadOfMine(int isRead);

    /**
     * 我的已读未读总量
     *
     * @param token
     * @param isRead
     * @return
     */
    Integer countReadOfMine(String token, int isRead);

    /**
     * 用户已读未读列表
     *
     * @param userId
     * @param isRead
     * @return
     */
    Integer countReadByUserId(String userId, int isRead);

    /**
     * 用户的发起列表
     *
     * @return
     */
    List<OaStartedInstanceDTO> listStartByUserId(String userId);

    /**
     * 用户的发起分页列表
     *
     * @param userId\
     * @param page
     * @return
     */
    SuccessResultList<List<OaStartedInstanceDTO>> listPageStartByUserId(String userId, ListPage page);

    /**
     * 我的发起分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OaStartedInstanceDTO>> listPageStartOfMine(ListPage page);

}
