package org.xyzh.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.role.TbSysRole;
import org.xyzh.common.vo.DeptRoleVO;

import java.util.List;

/**
 * @description RoleMapper.java文件描述 角色数据访问层
 * @filename RoleMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-09-28
 */
@Mapper
public interface RoleMapper extends BaseMapper<TbSysRole> {

    /**
     * @description 查询所有角色
     * @return List<TbSysRole> 角色列表
     * @author yslg
     * @since 2025-10-09
     */
    List<TbSysRole> selectAllRoles();

    /**
     * @description 根据过滤条件查询角色列表
     * @param filter 过滤条件
     * @return List<TbSysRole> 角色列表
     * @author yslg
     * @since 2025-10-09
     */
    List<TbSysRole> selectRole(TbSysRole filter);

    /**
     * @description 插入角色
     * @param role 角色
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-09
     */
    int insertRole(TbSysRole role);

    /**
     * @description 更新角色
     * @param role 角色
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-09
     */
    int updateRole(TbSysRole role);

    /**
     * @description 删除角色
     * @param role 角色
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-09
     */
    int deleteRole(TbSysRole role);

    /**
     * @description 根据用户ID查询角色列表
     * @param userId 用户ID
     * @return List<DeptRoleVO> 部门角色列表
     * @author yslg
     * @since 2025-09-28
     */
    List<DeptRoleVO> selectDeptRolesByUserId(@Param("userId") String userId);

    /**
     * @description 根据角色编码查询角色
     * @param roleCode 角色编码
     * @return TbSysRole 角色信息
     * @author yslg
     * @since 2025-09-28
     */
    TbSysRole selectByRoleCode(@Param("roleCode") String roleCode);

    /**
     * @description 检查角色名称是否存在
     * @param roleName 角色名称
     * @param excludeId 排除的角色ID
     * @return int 存在数量
     * @author yslg
     * @since 2025-09-28
     */
    int countByRoleName(@Param("roleName") String roleName, @Param("excludeId") String excludeId);

    /**
     * @description 检查角色编码是否存在
     * @param roleCode 角色编码
     * @param excludeId 排除的角色ID
     * @return int 存在数量
     * @author yslg
     * @since 2025-09-28
     */
    int countByRoleCode(@Param("roleCode") String roleCode, @Param("excludeId") String excludeId);

    /**
     * @description 批量删除角色（逻辑删除）
     * @param roleIds 角色ID列表
     * @param updater 更新人
     * @return int 影响行数
     * @author yslg
     * @since 2025-09-28
     */
    int batchDeleteByIds(@Param("roleIds") List<String> roleIds, @Param("updater") String updater);

    /**
     * @description 检查角色是否存在
     * @param roleIds 角色ID列表
     * @return List<TbSysRole> 角色列表
     * @author yslg
     * @since 2025-10-07
     */
    List<TbSysRole> checkRoleExists(@Param("roleIds") List<String> roleIds);
}
