<?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="cn.wisenergy.mapper.WorkUserMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="cn.wisenergy.model.app.WorkUser">
        <id column="id" property="id" />
        <result column="oa_user_id" property="oaUserId" />
        <result column="dept_id" property="deptId" />
        <result column="name" property="name" />
        <result column="login_name" property="loginName" />
        <result column="password" property="password" />
        <result column="phone" property="phone" />
        <result column="email" property="email" />
        <result column="role" property="role" />
        <result column="type" property="type" />
        <result column="status" property="status" />
        <result column="wx_id" property="wxId" />
        <result column="create_time" property="createTime" />
        <result column="modify_time" property="modifyTime" />
    </resultMap>



    <sql id="table">
        work_user
    </sql>

    <sql id="cols_all">
        id,
        <include refid="cols_exclude_id"/>
    </sql>

    <sql id="cols_exclude_id">
        name, oa_user_id, login_name, phone, dept_id, email, role ,type,status,wx_id,create_time,modify_time
    </sql>

    <sql id="values">
        #{name},#{oaUserId},#{loginName},#{phone},#{deptId},#{email},#{role},#{type},#{status},#{wxId},now(),now()
    </sql>

    <sql id="updateCondition">
        <if test="name != null">name = #{name},</if>
        <if test="oaUserId != null">oa_user_id = #{oaUserId},</if>
        <if test="loginName != null">login_name = #{loginName},</if>
        <if test="password != null">password = #{password},</if>
        <if test="phone != null">phone =#{phone},</if>
        <if test="deptId != null">dept_id = #{deptId},</if>
        <if test="email != null">email = #{email},</if>
        <if test="role != null">role = #{role},</if>
        <if test="type != null">type =#{type},</if>
        <if test="status != null">status = #{status},</if>
        <if test="wxId != null">wx_id =#{wxId},</if>
        modify_time =now()
    </sql>

    <sql id="criteria">
        <if test="id != null">and id = #{id}</if>
        <if test="oaUserId != null">and oa_user_id = #{oaUserId}</if>
        <if test="name != null">and name = #{name}</if>
        <if test="loginName != null">and login_name = #{loginName}</if>
        <if test="password != null">and password = #{password}</if>
        <if test="phone != null">and phone =#{phone}</if>
        <if test="deptId != null">and dept_id = #{deptId}</if>
        <if test="email != null">and email = #{email}</if>
        <if test="role != null">and role = #{role}</if>
        <if test="type != null">and type =#{type}</if>
        <if test="status != null">and status = #{status}</if>
        <if test="wxId != null">and wx_id =#{wxId},</if>
        <if test="createTime != null">and create_time &gt;= #{createTime}</if>
        <if test="modifyTime != null">and #{modifyTime} &gt;= modify_time</if>
    </sql>

    <select id="getUserInfo" resultMap="BaseResultMap" parameterType="map" >
        select <include refid="cols_all"/>
        from <include refid="table"/>
        <where>
            <include refid="criteria"/>
        </where>
    </select>

    <select id="getUserById" resultMap="BaseResultMap" parameterType="integer" >
        select <include refid="cols_all"/>
        from <include refid="table"/>
        where id = #{userId}
    </select>
    <select id="getStatisticsTableDtos" resultType="cn.wisenergy.model.dto.StatisticsTableDto">
        select u.id AS user_id, u.name AS user_name, d.dept_name
        from work_user u join work_dept d on u.dept_id=d.id
        where u.id in
        <foreach collection="list" open="(" close=")" separator="," item="id">
            #{id}
        </foreach>
    </select>


    <update id="updateUserInfo" parameterType="cn.wisenergy.model.app.WorkUser">
        update <include refid="table"/>
        set <include refid="updateCondition"/>
        where id = #{id}
    </update>
    <update id="updateStatusById">
        update <include refid="table"/>
        set status = #{status}
        where id = #{userId}
    </update>


    <resultMap id="UserRoleMap" type="cn.wisenergy.model.dto.UserRoleDto">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="status" property="status"/>
        <collection property="workRoles" column="id" javaType="List" select="getUserRole" ofType="cn.wisenergy.model.app.WorkRole"/>

    </resultMap>

    <select id="getUserRoleDto" resultMap="UserRoleMap">

      select u.id as 'id',u.name as 'name',u.status as 'status',r.id as 'role_id',r.name as 'role_name'
from work_user u LEFT JOIN (select role_id,user_id FROM work_user_role GROUP BY user_id) ur ON u.id = ur.user_id
LEFT JOIN work_role r on ur.role_id = r.id
        <where>
            <if test="null !=status">
            AND  u.status = #{status}
            </if>
            <if test="null !=key">
            AND  u.name like concat('%',#{key},'%')
            </if>
        </where>
    </select>

    <select id="getUserRole" resultType="cn.wisenergy.model.app.WorkRole">
      SELECT r.id ,r.name
      FROM  work_user_role ur LEFT JOIN work_role r
      ON ur.role_id = r.id
      WHERE ur.user_id = #{id}
    </select>

</mapper>