<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.manage.mapper.LibraryLibrarianMapper">
    <!--
      模块：数字图书馆-图书管理员
      说明：
        - 列表可按用户名/状态过滤（上层传参）；删除按用户ID批量。
    -->

    <resultMap id="LibraryLibrarianResult" type="com.ruoyi.manage.domain.LibraryLibrarian">
        <result property="id" column="id"/>
        <result property="userId" column="user_id"/>
        <result property="username" column="username"/>
        <result property="nickname" column="nickname"/>
        <result property="remark" column="remark"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="delFlag" column="del_flag"/>
    </resultMap>

    <!--
      列表联动说明：
      - 需求：在“系统管理→用户管理”为用户分配“图书管理员(librarian)”角色后，应自动体现在“数字图书馆→图书管理员”列表。
      - 实现：以 sys_user × sys_user_role × sys_role 为主表，左连接 tb_library_librarian（保留 remark/创建信息等），
              若映射不存在也能列出当前拥有 librarian 角色的用户；用户名/昵称采用 COALESCE(l.xxx, u.xxx)。
    -->
    <select id="selectList" parameterType="com.ruoyi.manage.domain.LibraryLibrarian" resultMap="LibraryLibrarianResult">
        select
        l.id as id,
        u.user_id as user_id,
        coalesce(l.username, u.user_name) as username,
        coalesce(l.nickname, u.nick_name) as nickname,
        l.remark as remark,
        l.create_by as create_by,
        l.create_time as create_time,
        l.update_by as update_by,
        l.update_time as update_time,
        l.del_flag as del_flag
        from sys_user u
        inner join sys_user_role ur on u.user_id = ur.user_id
        inner join sys_role r on r.role_id = ur.role_id and (r.role_key = 'librarian' or r.role_name = '图书管理员')
        left join tb_library_librarian l on l.user_id = u.user_id and l.del_flag = '0'
        <where>
            u.del_flag = '0'
            <if test="userId != null">and u.user_id = #{userId}</if>
            <if test="username != null and username != ''">
                and (
                u.user_name like concat('%', #{username}, '%')
                or (l.username is not null and l.username like concat('%', #{username}, '%'))
                )
            </if>
            <if test="nickname != null and nickname != ''">
                and (
                u.nick_name like concat('%', #{nickname}, '%')
                or (l.nickname is not null and l.nickname like concat('%', #{nickname}, '%'))
                )
            </if>
        </where>
        order by coalesce(l.id, u.user_id) desc
    </select>

    <insert id="insert" parameterType="com.ruoyi.manage.domain.LibraryLibrarian" useGeneratedKeys="true"
            keyProperty="id">
        insert into tb_library_librarian(user_id, username, nickname, remark, create_by, create_time, del_flag)
        values (#{userId}, #{username}, #{nickname}, #{remark}, #{createBy}, #{createTime}, '0')
    </insert>

    <delete id="deleteByUserIds">
        delete from tb_library_librarian where user_id in
        <foreach collection="userIds" item="uid" open="(" separator="," close=")">#{uid}</foreach>
    </delete>

    <select id="countByUserId" parameterType="long" resultType="int">
        select count(1)
        from tb_library_librarian
        where user_id = #{userId}
    </select>

    <!-- moved under mapper/manage for consistency -->
</mapper>
