package io.gisbi.application.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.gisbi.application.system.domain.User;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

@Mapper
public interface UserMapper extends BaseMapper<User> {


    /***********************************
     * 用途说明：新增系统角色用户对照表 对用户分配角色
     * 参数说明
     * roleid   角色id
     * userid   用户id
     * 返回值说明:
     ************************************/
    @Insert("INSERT INTO app_role_users(id, app_id, roleid, userid) VALUES (#{id}, #{appid}, #{roleid}, #{userid})")
    boolean addUserRoles(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid, @Param("userid") String userid);

    /***********************************
     * 用途说明：根据用户表id查询角色表所有角色id
     * 参数说明
     * userid     用户id
     * 返回值说明:
     ************************************/
    @Select("      SELECT roleid  FROM app_role_users WHERE userid = #{userid} ")
    List<String> getRoleid(@Param("userid") String id);


    /***********************************
     * 用途说明：根据用户id删除所分配的角色
     * 参数说明
     * userid     用户id
     * 返回值说明:
     ************************************/
    @Delete("delete from app_role_users where userid=#{userid}")
    boolean delRoleUsersByUserid( @Param("userid")  String id);

    /***********************************
     * 用途说明：根据条件分页查询用户信息
     * 参数说明
     * orgid     所属组织ID
     * nickname   用户昵称
     * page      分页条件
     * 返回值说明:
     ************************************/
    @Select("<script>" +
            "SELECT DISTINCT\n" +
            "    u.id, u.usertype, u.username, u.nickname,\n" +
            "    u.email, u.phone, u.avatar, u.orgid,\n" +
            "    u.status, u.lastmodifier, u.lastmodifydate\n" +
            "FROM app_user u\n" +
            "WHERE u.usertype != 0\n" +
            "<if test='orgid != null and orgid != \"\"'>\n" +
            "    AND u.orgid = #{orgid}\n" +
            "</if>\n" +
            "<if test='appId != null and appId != \"\"'>\n" +
            "    AND u.app_id = #{appId}\n" +
            "</if>\n" +
            "<if test='nickname != null and nickname != \"\"'>\n" +
            "    AND u.nickname LIKE CONCAT('%', #{nickname}, '%')\n" +
            "</if>\n" +
            "ORDER BY u.lastmodifydate DESC" +
            "</script>")
    Page<Map<String, Object>> queryUsers(
            @Param("orgid") String orgid,
            @Param("appId") String appId,
            @Param("nickname") String nickname,
            Page<?> page
    );


    /***********************************
     * 用途说明：根据ID删除用户与角色的关联信息
     * 参数说明
     * idList     用户id集合
     * 返回值说明:
     ************************************/
    @Delete("<script>" +
            "DELETE FROM app_role_users WHERE userid IN " +
            "<foreach collection='idList' item='id' open='(' separator=',' close=')'>#{id}</foreach>" +
            "</script>")
    void delRoleUsersByUserIds(List<String> idList);

    /***********************************
     * 用途说明：根据用户id 和角色id 查询  系统角色用户对照表
     * 参数说明
     * userid   用户id
     * roleid   角色id
     * 返回值说明:
     ************************************/
     @Select(" select id, app_id, roleid, userid from app_role_users   where roleid = #{roleid}  and userid = #{userid} ")
    List<Map> getRoleUsersByid(@Param("roleid") String roleid,@Param("userid") String userid);
}
