package jnpf.attendance.mapper;

import jnpf.model.attendance.model.*;
import jnpf.model.attendance.vo.attendance.UserRuleListVo;
import jnpf.model.common.DateRangeDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 统计服务mapper
 *
 * @author shitou
 * @date 2023/11/21
 */
@Mapper
public interface StatisticsMapper {
    /**
     * 查询用户关联的考勤组信息
     *
     * @param groupIds 考勤组ID集合
     * @param userIds  用户ID集合
     */
    List<UserAssociationGroupData> getUserAssociationGroupDataList(@Param("groupIds") List<String> groupIds,
                                                                   @Param("userIds") List<String> userIds);

    /**
     * 查询被借调记录
     *
     * @param userIds   用户id集合
     * @param groupIds 考勤组d集合
     */
    List<UserSecondRecord> getUserSecondRecordList(@Param("userIds") List<String> userIds, @Param("groupIds") List<String> groupIds);

    /**
     * 获取用户打卡结果数据
     *
     * @param userIds         用户ID集合
     * @param dateRangeDto   时间范围
     * @param groupIds    考勤组ID集合
     * @param clockInStatus  打卡结果类型
     * @param absenceStatus  缺勤状态
     * @param repairedStatus 是否补卡
     * @param clockInKind    打卡类型
     */
    List<ClockInResultRecord> getUserClockInResultList(@Param("attendanceTypeList") List<Integer> attendanceTypeList,
                                                       @Param("userIds") List<String> userIds, @Param("dateRangeDto") DateRangeDto dateRangeDto,
                                                       @Param("groupIds") List<String> groupIds, @Param("clockInStatus") Integer clockInStatus,
                                                       @Param("absenceStatus") Integer absenceStatus, @Param("repairedStatus") Integer repairedStatus,
                                                       @Param("clockInKind") Integer clockInKind);

    /**
     * 获取用户排班数据
     *
     * @param userIds             用户ID集合
     * @param dateRangeDto        时间范围
     * @param groupIdList         考勤组ID集合
     * @param attendanceTypeList  排班类型集合
     */
    List<UserRuleRecord> getUserRuleRecordList(@Param("userIds") List<String> userIds, @Param("dateRangeDto") DateRangeDto dateRangeDto,
                                               @Param("groupIdList") List<String> groupIdList, @Param("attendanceTypeList") List<Integer> attendanceTypeList);


    /**
     * 获取用户指定考勤组时间范围内的排班数据
     * @param userIds             用户ID集合
     * @param dateRangeDto        时间范围
     * @param groupId             群ID
     * @param code  排班类型集合
     */
    List<UserRuleListVo> getUserRuleList(@Param("userIds") List<String> userIds, @Param("dateRangeDto") DateRangeDto dateRangeDto, @Param("groupId") String groupId, @Param("code") List<Integer> code);
}
