<?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.roadm.mapper.UserMapper">
    <sql id="userColumns">id,username,password,name,user_rights,status,role_id,mdn,email,last_login_time,last_login_ip
    </sql>

    <resultMap type="UserInfo" id="userAndRoleResultMap">
        <id column="id" property="user_id" />
        <id column="sa_id" property="sa_id" />
        <result column="username" property="userName" />
        <result column="name" property="name" />
        <result column="mdn" property="mdn" />
        <result column="password" property="password" />
        <result column="pawd" property="pawd" />
        <result column="user_rights" property="user_rights" />
        <result column="status" property="status" />
        <result column="last_login_time" property="lastlogin_time" />
        <result column="last_login_ip" property="lastlogin_ip" />
        <result column="billing_mode" property="billing_mode" />
         <result column="role_id" property="role_id" />
        <result column="disable_login" property="disableLogin" />
        <association property="roleInfo" column="role_id"
            javaType="RoleInfo">
            <id column="role_id" property="role_id" />
            <result column="role_name" property="roleName" />
            <result column="role_rights" property="rights" />
            <result column="description" property="description" />
        </association>
    </resultMap>
    <resultMap type="UserInfo" id="userResultMap">
        <id column="id" property="user_id" />
        <result column="username" property="userName" />
        <result column="password" property="password" />
        <result column="status" property="status" />
        <result column="role_id" property="role_id" />
        <result column="user_rights" property="user_rights" />
        <result column="name" property="name" />
        <result column="mdn" property="mdn" />
    </resultMap>

    <select id="listAllUser" resultMap="userAndRoleResultMap">
        select
        u.id,u.name,u.username,u.password,u.role_id,r.role_name
        ,u.last_login_time
        from sms_user_info u
        left join sms_user_role r on u.role_id=r.id
        where u.status=1
    </select>

    <select id="listPageUser" parameterType="UserInfo" resultMap="userAndRoleResultMap">
        select
        u.id,u.name,u.username,u.password,u.mdn,u.last_login_time,u.last_login_ip,u.user_rights,r.id
        as role_id,r.role_name
        from sms_agent_user_info u
        left join sms_agent_role r on u.role_id=r.id
        where u.status=1 and u.sa_id=#{sa_id}
        <if test="userName!=null and userName!=''">
            and u.username  like CONCAT('%',#{userName},'%') 
        </if>
            <if test="name!=null and name!=''">
            and u.name  like CONCAT('%',#{name},'%') 
        </if>
        <if test="role_id!=null and role_id!=0">
            and u.role_id=#{role_id}
        </if>
        <if test="Session_role_id!=null and Session_role_id!=0">
            and u.role_id &gt;= #{Session_role_id}
        </if>

        <if test="lastlogin_time!=null">
            and u.last_login_time&lt;=#{lastlogin_time}
        </if>
    </select>

    <select id="getUserInfo" parameterType="UserInfo" resultMap="userAndRoleResultMap">
        select u.*,r.id as role_id ,r.role_name,r.rights as
        role_rights,r.description,sa.billing_mode,u.disable_login
        from sms_agent_user_info u
        left join sms_agent_role r on u.role_id=r.id
        left join sms_agent_info sa on u.sa_id=sa.id
        where 1=1
        <if test="userName!=null ">
            and u.username = #{userName}
        </if>
        <if test="user_id!=null and user_id>0">
            and u.id = #{user_id}
        </if>
    </select>
    <select id="getUserById" parameterType="int" resultMap="userResultMap">
        select *
        from sms_agent_user_info u where u.id=#{id,jdbcType=INTEGER}
    </select>
    <select id="getUserAndRoleById" parameterType="int"
        resultMap="userAndRoleResultMap">
        select u.id,u.username,user_rights,u.name,u.password,r.id
        as role_id ,r.role_name,
        from sms_user_info u
        left join sms_user_role r on u.role_id=r.id
        where u.status=1 and u.id=#{user_id}
    </select>
    <select id="getCountByName" parameterType="UserInfo" resultType="int">
        select count(1) from sms_agent_user_info where username=#{userName} and status=1
    </select>
    <select id="getCount" parameterType="UserInfo" resultType="int">
        select count(1) from sms_user_info where status=1
        <if test="userName!=null and userName!=''">
            and username like CONCAT('%',#{userName},'%') 
        </if>
        <if test="role_id!=null and role_id!=0">
            and role_id=#{role_id}
        </if>
        <if test="lastLoginStart!=null">
            and last_login_time&gt;=#{lastLoginStart}
        </if>
        <if test="lastLoginEnd!=null">
            and last_login_time&lt;=#{lastLoginEnd}
        </if>
    </select>
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="user_id" parameterType="UserInfo">
        
        insert into sms_agent_user_info
        (username,sa_id,password,pawd,name,user_rights,status,role_id,mdn,CREATETIME)
        values
        (#{userName},#{sa_id},#{password},#{pawd},#{name,jdbcType=VARCHAR},#{user_rights,jdbcType=VARCHAR},1,#{role_id},#{mdn,jdbcType=VARCHAR},sysdate())
    </insert>

    <insert id="insertOperateLog" useGeneratedKeys="true" keyProperty="id" parameterType="Map">
        insert into sms_operate_log
        (sp_id,username,opearte_type,opearte_result,opearte_content,createtime,ip)
        values
        (#{sp_id},#{username},#{opearte_type},#{opearte_result},#{opearte_content,jdbcType=VARCHAR},sysdate(),#{ip,jdbcType=VARCHAR})
    </insert>


    <update id="updateUser" parameterType="UserInfo">
        update sms_user_info set
        username=#{userName},
        name=#{name},password=#{password},
        user_rights=#{user_rights},
        status=#{status},
        role_id=#{role_id},
        last_login_time=sysdate
        where id=#{user_id}
    </update>
    <update id="updateLastLogin" parameterType="UserInfo">
        update sms_agent_user_info
        set last_login_time=#{lastlogin_time} ,last_login_ip=#{lastlogin_ip}
        where id=#{user_id}
    </update>
    <update id="updateUserBaseInfo" parameterType="UserInfo">
        update sms_agent_user_info set
        username=#{userName},
        name=#{name},
        mdn=#{mdn},
        role_id=#{role_id}
        <if test="password!=null and password!=''">,password=#{password},pawd=#{pawd} </if>
        where id=#{user_id}
    </update>

    <update id="updateUserPwd" parameterType="UserInfo">
        update sms_agent_user_info
        set
        password=#{password,jdbcType=VARCHAR},
        pawd=#{pawd}
        where id=#{user_id}
    </update>

    <update id="updateUserRights" parameterType="UserInfo">
        update sms_agent_user_info
        set user_rights=#{user_rights} where id=#{user_id}
    </update>
    <update id="deleteUser" parameterType="int">
        update sms_agent_user_info set
        status=2,droptime=sysdate() where id=#{user_id}
    </update>
</mapper>