package jnpf.attendance.mapper;

import jnpf.attendance.dto.AttendanceUserGroupVo;
import jnpf.attendance.dto.AttendanceUserListGroupVO;
import jnpf.base.mapper.SuperMapper;
import jnpf.entity.AttendanceGroup;
import jnpf.model.attendance.dto.AttendanceGroupOrgDto;
import jnpf.model.attendance.dto.GroupQueryDto;
import jnpf.model.attendance.vo.AttendanceGroupVo;
import jnpf.model.attendance.vo.GroupNodeVo;
import jnpf.model.attendance.vo.attendance.GroupMiniVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 考勤组mapper
 *
 * @author yanwenfu
 * @create 2023-11-21
 */
public interface AttendanceGroupMapper extends SuperMapper<AttendanceGroup> {
    /**
     * 查询用户管理的考勤组列表（考勤组名称模糊搜索）
     */
    List<AttendanceGroup> queryManagerGroupList(@Param("userId") String userId, @Param("keyword") String keyword);
    /**
     * 查询用户管理的考勤组列表
     */
    List<AttendanceGroupVo> queryGroupList(@Param("userId") String userId);

    /**
     * 查询考勤组名称
     *
     * @param groupId 考勤组id
     * @return java.lang.String
     */
    String getGroupName(String groupId);

    /**
     * 获取指定考勤组信息
     *
     * @param groupId 考勤组id
     * @return jnpf.entity.AttendanceGroup
     * @author hlp
     */
    AttendanceGroup getGroupDetail(String groupId);

    /**
     * 批量获取考勤组信息
     *
     * @param list 考勤组ids
     * @return java.util.List<jnpf.entity.AttendanceGroup>
     * @author hlp
     */
    List<AttendanceGroup> getGroupDetailList(@Param("list") List<String> list);

    /**
     * 查询被删除的考勤组
     *
     * @param groupIdList 考勤组列表
     * @return java.util.List<java.lang.String>
     */
    List<String> selectDelIds(@Param("list") List<String> groupIdList);

    /**
     * 获取所有考勤组
     *
     * @param groupQueryDto 考勤组查询条件
     * @return java.util.List<jnpf.entity.AttendanceGroup>
     */
    List<AttendanceGroupVo> getAllGroupList(@Param("groupQueryDto") GroupQueryDto groupQueryDto, @Param("userId") String userId, @Param("permissionType") Integer permissionType);

    /**
     * 通过组织Id找到组织下的考勤组
     *
     * @param orgId 组织Id
     */
    List<AttendanceGroupVo> groupListByOrgId(@Param("orgId") String orgId);

    /**
     * 通过考勤组Id获取绑定的组织
     *
     * @param groupId 组织Id
     */
    AttendanceGroupVo getGroupBindingOrg(@Param("groupId") String groupId);

    /**
     * 绑定考勤组的组织
     *
     * @param attendanceGroupOrgDto 考勤组和组织信息
     */
    void updateGroupOrg(@Param("attendanceGroupOrgDto") AttendanceGroupOrgDto attendanceGroupOrgDto);

    /**
     * 获取用户考勤组
     *
     * @param userIds 用户ids
     */
    List<AttendanceUserGroupVo> getAttendanceUserGroup(@Param("userIds") List<String> userIds);

    /**
     * 查询考勤组锁定日期
     * @param groupId 考勤组id
     * @return java.util.Date
     */
    Date getGroupLockDate(String groupId);

    /**
     * 查询父级考勤组id
     * @param groupId 考勤组id
     * @return java.lang.String
     */
    String getParentGroupId(String groupId);

    /**
     * 查询本级及子级考勤组
     * @param groupId 考勤组id
     * @return java.util.List<jnpf.model.attendance.vo.GroupNodeVo>
     */
    List<GroupNodeVo> getSelfAndChildrenGroup(String groupId);

    /**
     * 获取多用户的考勤组信息,包含多级考勤组名称
     * @param userIds 用户ids
     * @return 包含多级考勤组名称的考勤信息
     */
    List<AttendanceUserListGroupVO> getAttendanceUserListGroupVO(@Param("userIds") List<String> userIds);

    /**
     * 查询所有考勤组(层级排序)
     * @return java.util.List<jnpf.model.attendance.vo.attendance.GroupMiniVo>
     */
    List<GroupMiniVo> getAllGroupByLevel(@Param("list") List<String> groupIds);

    /**
     * 查询用户是否拥有指定考勤组的指定权限
     * @param userId 用户
     * @param groupId 考勤组
     * @param permissionCode 指定权限
     */
    Integer appointPermissionByGroupId(@Param("userId") String userId, @Param("groupId") String groupId, @Param("permissionCode") String permissionCode, @Param("type") Integer type);

    /**
     * 获取组织下的考勤组
     * @param groupQueryDto 考勤组查询条件
     * @return List<AttendanceGroupVo>
     */
    List<AttendanceGroupVo> getGroupListByOrgId(@Param("groupQueryDto") GroupQueryDto groupQueryDto, @Param("orgIds") List<String> orgIds);

    /**
     * 根据考勤组ID列表查询考勤组信息
     *
     * @param groupIds 考勤组ID列表
     * @return 考勤组信息列表
     */
    List<AttendanceGroupVo> getGroupListByIds(@Param("groupIds") List<String> groupIds);

    /**
     * 查询组织id
     * @param groupId 考勤组id
     * @return java.lang.String
     */
    String getOrgId(String groupId);
}
