package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.entity.cultivate.CultivateIdentifyTable;
import jnpf.model.cultivate.dto.identify.FtbIdentityOrgWisdomStatisticDTO;
import jnpf.model.cultivate.dto.identify.FtbIdentityPersonWisdomStatisticDTO;
import jnpf.model.cultivate.dto.identify.IdentifyTableListDto;
import jnpf.model.cultivate.v2.identify.req.V2IdentifyTableListReq;
import jnpf.model.cultivate.v2.identify.vo.V2IdentifyTableListVo;
import jnpf.model.cultivate.vo.identify.FtbCultivateIdentityOrgWisdomStatisticVO;
import jnpf.model.cultivate.vo.identify.FtbCultivateIdentityPersonWisdomStatisticVO;
import jnpf.model.cultivate.vo.identify.IdentifyTableListVo;
import jnpf.model.cultivate.vo.position.web.FtbCultivatePositionIdentifyPersonVO;
import jnpf.model.cultivate.vo.position.web.FtbCultivatePositionIdentifyVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 实操鉴定表
 * 
 * @author shitou
 * @email shitou@niujiekeji.com
 * @date 2023-12-19 11:10:53
 */
@Mapper
@Component
public interface CultivateIdentifyTableMapper extends BaseMapper<CultivateIdentifyTable> {
    /**
     * 鉴定表/列表
     * @param req
     * @return
     */
    List<IdentifyTableListVo> getPageList(@Param("req") IdentifyTableListDto req);
    /**
     * 组织列表统计
     *
     * @param statisticDTO 统计DTO对象，包含查询条件
     * @param page 分页对象，用于分页查询
     * @return 返回组织列表统计结果
     */
    Page<FtbCultivateIdentityOrgWisdomStatisticVO> organizationListStatistics(@Param("dto") FtbIdentityOrgWisdomStatisticDTO statisticDTO,
                                                                              @Param("page")   Page<FtbCultivateIdentityOrgWisdomStatisticVO> page);

    /**
     * 个人列表统计
     *
     * @param personWisdomStatisticDTO 统计DTO对象，包含查询条件
     * @param page 分页对象，用于分页查询
     * @return 返回个人列表统计结果
     */
    Page<FtbCultivateIdentityPersonWisdomStatisticVO> personListStatistics(@Param("dto") FtbIdentityPersonWisdomStatisticDTO personWisdomStatisticDTO,
                                                                           @Param("page")  Page<FtbCultivateIdentityPersonWisdomStatisticVO> page);

    /**
     * 获取评估人数量
     *
     * @param postionIds 职位ID列表
     * @param tableId 表ID
     * @return 返回评估人数量列表
     */
    List<String> numberOfAppraisers(@Param("postionIds") List<String> postionIds, @Param("tableId") String tableId);

    /**
     * 用户相关组织列表统计
     *
     * @param statisticDTO 统计DTO对象，包含查询条件
     * @return 返回用户相关组织列表统计结果
     */
    List<FtbCultivateIdentityOrgWisdomStatisticVO> organizationListStatisticsForUser(@Param("dto")FtbIdentityOrgWisdomStatisticDTO statisticDTO);

    /**
     * 查询资格信息
     *
     * @param userIdsByGradesId 按等级分组的用户ID列表
     * @param dbPostId 职位ID
     * @return 返回资格信息
     */
    FtbCultivatePositionIdentifyVO queryQualificationInformation(@Param("userIdsByGradesId") List<String> userIdsByGradesId,@Param("postId") String dbPostId);

    /**
     * 查询合格人员列表
     *
     * @param userIds 用户ID列表
     * @param positionId 职位ID
     * @return 返回合格人员列表
     */
    List<FtbCultivatePositionIdentifyPersonVO> queryTheListOfQualifiedPersons(@Param("userIds") List<String> userIds,@Param("positionId") String positionId);

    /**
     * 查询当前人员的评估信息
     *
     * @param userId 用户ID
     * @param applyIds 申请ID列表
     * @return 返回当前人员的评估信息
     */
    FtbCultivatePositionIdentifyPersonVO currentPersonSAssessmentInformation(@Param("userId")String userId,@Param("applyIds") List<String> applyIds);

    Page<V2IdentifyTableListVo> getPageListV2(@Param("page") Page<V2IdentifyTableListVo> page, @Param("params") V2IdentifyTableListReq params);
}
