package jnpf.personnels.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.model.personnels.dto.base.PersonnelsQueryDTO;
import jnpf.model.personnels.dto.regular.FtbPersonnelsForAppQueryDTO;
import jnpf.model.personnels.po.FtbPersonnelsTurnoverManagement;
import jnpf.model.personnels.vo.turnover.FtbPersonnelsTurnoverManagementVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FtbPersonnelsTurnoverManagementMapper extends BaseMapper<FtbPersonnelsTurnoverManagement> {
    /**
     * 获取人事异动列表
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param dto 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的人事异动列表
     */
    Page<FtbPersonnelsTurnoverManagementVO> getTurnoverList(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("dto") PersonnelsQueryDTO dto);

    /**
     * 获取用于APP端的人事异动列表
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param dto 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的、用于APP端的人事异动列表
     */
    Page<FtbPersonnelsTurnoverManagementVO> getListForApp(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("dto") FtbPersonnelsForAppQueryDTO dto);

    /**
     * 获取单个人员的人事异动列表
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param dto 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的、单个人员的人事异动列表
     */
    Page<FtbPersonnelsTurnoverManagementVO> getTurnoverListForOnePersonnels(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("dto") FtbPersonnelsForAppQueryDTO dto);

    /**
     * 获取待审批的人事异动列表
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param covert 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的、待审批的人事异动列表
     */
    Page<FtbPersonnelsTurnoverManagementVO> getThePendingApprovalList(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("covert") FtbPersonnelsForAppQueryDTO covert);

    /**
     * 获取已审批的人事异动数据
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param covert 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的、已审批的人事异动数据
     */
    Page<FtbPersonnelsTurnoverManagementVO> getApprovedData(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("covert") FtbPersonnelsForAppQueryDTO covert);

    /**
     * 获取用于CC（Cross Check）的人事异动列表
     *
     * @param page 分页对象，包含了分页查询的信息
     * @param covert 查询参数对象，用于传递查询条件
     * @return 返回一个分页对象，其中包含符合查询条件的、用于CC的人事异动列表
     */
    Page<FtbPersonnelsTurnoverManagementVO> getListForCC(Page<FtbPersonnelsTurnoverManagementVO> page, @Param("covert") FtbPersonnelsForAppQueryDTO covert);

    /**
     * 查询所有的人事异动管理用户列表
     *
     * @return 返回一个包含所有人事异动管理用户的数据列表
     */
    List<FtbPersonnelsTurnoverManagement> queryTurnOverManagementUserList();

    List<FtbPersonnelsTurnoverManagementVO> queryTurnoverList(@Param("userIds") List<String> userIds);

    List<FtbPersonnelsTurnoverManagementVO> queryUserInfoForTurnover(@Param("date") String date,@Param("userIds") List<String> userIds);

    List<FtbPersonnelsTurnoverManagementVO> queryTurnoverListWithStatics();

    /**
     * 人事异动管理用户列表
     * @param ids
     * @return
     */
    Long getTurnoverRateAndHeadcount(@Param("ids") List<String> ids);

    Long getLeaveAllPeople(@Param("userIds") List<String> userIds);
}