package jnpf.attendance.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import jnpf.entity.AttendanceManagerPermission;
import jnpf.entity.PermissionDict;
import jnpf.model.attendance.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 考勤管理员权限设置 Mapper 接口
 * </p>
 *
 * @author Auto-generator
 * @since 2023-11-21
 */
public interface AttendanceManagerPermissionMapper extends BaseMapper<AttendanceManagerPermission> {
    /**
     * 获取指定考勤组用户的权限结合（含子权限）
     */
    List<AttendanceGroupAdminVo> queryGroupUser(@Param("groupId") String groupId);
    /**
     * 批量获取指定考勤组列表用户的权限结合（含子权限）
     */
    List<AttendanceGroupAdminVo> queryGroupUsers(@Param("groupIds") List<String> groupIds);
    /**
     * 批量获取指定考勤组列表及以上用户的超级管理员权限
     */
    List<AttendancePermissionVo> queryUserForCurrAndUpChildAndSuper(@Param("groupIdList") List<String> groupIdList);    /**
     * 批量获取指定权限指定考勤组列表及以上用户的超级管理员权限
     */
    List<AttendancePermissionVo> queryPermissionBySpecify(@Param("groupIdList") List<String> groupIdList,@Param("parentCodes") List<String> parentCodes,@Param("childCodes") List<String> childCodes);

    /**
     * 获取用户管理员权限类型
     */
    List<PermissionDict> getByUserId(@Param("userId") String userId, @Param("type") Integer type, @Param("moduleType") Integer moduleType, @Param("groupId") String groupId);
    /**
     * 获取考勤组管理员权限类型
     */
    List<AttendancePermissionVo> queryMyPermissions(@Param("type") Integer type, @Param("groupId") String groupId, @Param("userId") String userId);

    /**
     * 批量保存考勤组管理员信息
     * @param groupAdminList
     */
    void batchSaveGroupAdmin(@Param("curGroupAdminList") List<AttendanceManagerPermission> groupAdminList);
    /**
     * 获取用户在考勤组列表里面的管理员权限集合
     */
    List<CurUserPermissionVo> queryInGroupIds(@Param("groupIdList") List<String> groupIdList, @Param("userId") String userId);
    /**
     * 获取考勤组权限列表里面包含指定编码层级的考勤组列表
     */
    List<AttendanceGroupVo> queryGroupVoInGroupIds(@Param("levelCodeList") List<String> levelCodeList);
    /**
     * 获取用户在指定考勤组的权限列表
     */
    CurUserPermissionVo queryByGroupId(@Param("groupId") String groupId, @Param("userId") String userId, @Param("permissionName") String permissionName);
    /**
     * 获取考勤组的指定类型管理员及权限集合
     */
    List<QueryGroupAdminVo> queryManagerByGroupIds(@Param("groupIds") List<String> groupIds, @Param("type") Integer type);

    /**
     * 获取用户在指定考勤组的权限列表
     * @param userId 用户Id
     * @param groupId 考勤组Id
     */
    AttendanceGroupAdminVo queryGroupUserPermissionByUserId(@Param("userId") String userId, @Param("groupId") String groupId);

    /**
     * 更新用户考勤组管理员权限
     * @param userId 用户Id
     * @param groupId 考勤组Id
     * @param groupId1 修改后的考勤组Id
     */
    void updateUserGroupManagerPermission(@Param("userId") String userId, @Param("groupId") String groupId, @Param("groupId1") String groupId1);

    /**
     * 更新用户考勤组管理员权限
     * @param userIds 用户Id集合
     * @param oldGroupId 原来的考勤组Id
     * @param groupId 修改后的考勤组Id
     */
    void updateBatchUserGroupManagerPermission(@Param("userIds") List<String> userIds, @Param("oldGroupId") String oldGroupId, @Param("groupId") String groupId);

    /**
     * 获取用户在指定考勤组的权限列表
     * @param userId 用户Id
     * @param groupId 考勤组
     */
    List<AttendanceManagerPermission> getGroupManagerPermission(@Param("userId") String userId, @Param("groupId") String groupId);


    /**
     * 获取用户集合在指定考勤组的权限信息
     * @param userIds 用户Ids
     * @param groupId 考勤组
     */
    List<AttendanceManagerPermission> getGroupManagerPermissionByUserIds(@Param("userIds") List<String> userIds, @Param("groupId") String groupId);

    /**
     * 批量添加
     * @param list 用户权限信息
     */
    void addBatch(@Param("list") List<AttendanceManagerPermission> list);

    /**
     * 根据用户Id和考勤组Id删除对应的权限记录
     * @param userId 用户Id
     * @param groupId 考勤组Id
     */
    void deleteByGroupUserId(@Param("userId") String userId, @Param("groupId") String groupId);
}
