package io.gisbi.application.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.gisbi.application.system.domain.Role;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface RoleMapper extends BaseMapper<Role> {
    /**********************************
     * 用途说明: 根据用户id获取角色信息
     * 参数说明 id 角色id
     * 返回值说明: void
     ***********************************/
    @Select("SELECT r.id,r.rolename,r.rolecode FROM app_role_users ru INNER JOIN app_role r ON ru.roleid = r.id WHERE ru.userid = #{id}")
    List<Role> getRoleByUserId( @Param("id")  String id);

    /**********************************
     * 用途说明: 根据用户id获取角色id
     * 参数说明 userid 用户id
     * 返回值说明: void
     ***********************************/
    @Select("SELECT roleid FROM app_role_users WHERE userid = #{userid} AND app_id = #{appId}")
    List<String> getRoleUsers(@Param("userid") String userid, @Param("appId") String appId);

    /***********************************
     * 用途说明：根据角色id删除角色菜单关联
     * 参数说明
     *id        角色id
     * 返回值说明:  是否删除成功
     ***********************************/
    @Delete("DELETE FROM app_role_menu WHERE roleid= #{id}")
    void deleteRoleMenus( @Param("id") String id);

    /***********************************
     * 用途说明：根据角色id删除角色用户关联
     * 参数说明
     *id        角色id
     * 返回值说明:  是否删除成功
     ***********************************/
    @Delete(" DELETE FROM app_role_users WHERE roleid= #{id}")
    void deleteRoleUser( @Param("id")String id);

    /***********************************
     * 用途说明：根据 角色id和用户id 删除 （admin除外）
     * 参数说明
     *roleid        角色id
     * urserid      用户id
     * 返回值说明:  是否删除成功
     ***********************************/
    @Delete("delete from app_role_users where userid !=(select u.id from app_user u where u.account=\"admin\") and  roleid=#{roleid} and userid=#{urserid}\n")
    boolean deleteRoleUsers(String roleid, String urserid);

    @Insert("<script>" +
            "INSERT INTO app_role_menu " +
            "<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">" +
            "    <if test=\"id != null and id != ''\">id,</if>" +
            "    <if test=\"appid != null and appid != ''\">app_id,</if>" + // 字段名 app_id 对应参数 appid
            "    <if test=\"roleid != null and roleid != ''\">roleid,</if>" +
            "    <if test=\"menuid != null and menuid != ''\">menuid</if>" +
            "</trim>" +
            " VALUES " +
            "<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">" +
            "    <if test=\"id != null and id != ''\">#{id},</if>" +
            "    <if test=\"appid != null and appid != ''\">#{appid},</if>" +
            "    <if test=\"roleid != null and roleid != ''\">#{roleid},</if>" +
            "    <if test=\"menuid != null and menuid != ''\">#{menuid}</if>" +
            "</trim>" +
            "</script>")
    void addRoleMenu(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid, @Param("menuid") String menuid);

    /***********************************
     * 用途说明：根据菜单id删除角色菜单关联
     * 参数说明
     *id           菜单id
     * 返回值说明:  是否删除成功
     ***********************************/
    @Delete("DELETE FROM app_role_menu WHERE menuid= #{id}")
    void deleteRoleMenusByMenuId(@Param("id") String id);
}
