<?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,user_name,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" />
        <result column="user_name" property="userName" />
        <result column="name" property="name" />
        <result column="mdn" property="mdn" />
        <result column="e_mail" property="email" />
        <result column="password" property="password" />
        <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="detachment" property="detachment" />
        <result column="password_update_time" property="passwordUpdateTime"/>
        <result column="disable_login" property="disableLogin"/>
        <result column="scope" property="scope"/>
        <result column="audit_level" property="auditLevel"/>
        <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="user_name" 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" />
        <result column="e_mail" property="email" />
        <result column="disable_login" property="disableLogin"/>
        <result column="scope" property="scope"/>
        <result column="audit_level" property="auditLevel"/>
    </resultMap>


    <select id="listPageUser" parameterType="UserInfo" resultMap="userAndRoleResultMap">
        select
        u.id,u.name,u.user_name,u.password,u.mdn,u.e_mail,u.last_login_time,u.last_login_ip,u.user_rights,r.id
        as role_id,r.role_name, u.status
        from sms_user_info u
        left join sms_user_role r on u.role_id=r.id
        where u.status in (1,3)
        <if test="isShowAdmin != 1">
            and u.id != 1
        </if>
        <if test="userName!=null and userName!=''">
            and u.user_name  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.size() > 0">
            and u.role_id in
            <foreach collection="Session_role_id" item="item" open="(" close=")" separator=",">
                  ${item}
            </foreach>
        </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,u.disable_login,u.scope, u.audit_level
        from sms_user_info u
        left join sms_user_role r on u.role_id=r.id
        where 1=1
        <if test="userName!=null ">
            and u.user_name = #{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_user_info u where u.id=#{id,jdbcType=INTEGER}
    </select>
    <select id="getUserAndRoleById" parameterType="int"
        resultMap="userAndRoleResultMap">
        select u.id,u.user_name,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" resultMap="userResultMap">
        select * from sms_user_info where user_name=#{userName}
    </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 user_name 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_user_info
        (user_name,password,name,user_rights,status,role_id,mdn,e_mail,CREATE_TIME, detachment, password_update_time,disable_login, scope, audit_level)
        values
        (#{userName},#{password},#{name,jdbcType=VARCHAR},#{user_rights,jdbcType=VARCHAR},1,#{role_id},#{mdn,jdbcType=VARCHAR},
        #{email,jdbcType=VARCHAR},sysdate(), detachment,adddate(now(), #{invalidDays}),#{disableLogin,jdbcType=VARCHAR},#{scope}, #{auditLevel})
    </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>

    <select id="getUserAreaList" resultType="UaerArea">
        SELECT log.USERNAME ,area.province ,count(1) count FROM sms_operate_log log LEFT JOIN ip_area_login area ON log.ip = area.ip WHERE log.OPEARTE_TYPE =1 and log.SP_ID=0 AND area.province IS NOT NULL AND area.province != '' GROUP BY log.USERNAME ,area.province
    </select>

    <update id="updateUser" parameterType="UserInfo">
        update sms_user_info set
        user_name=#{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_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_user_info set
        user_name=#{userName},
        name=#{name},
        e_mail=#{email},
        mdn=#{mdn},
        role_id=#{role_id},
        detachment=#{detachment},
        disable_login=#{disableLogin},
        scope=#{scope},
        audit_level = #{auditLevel}
        <if test="password!=null and password!=''">,password=#{password} </if>
        where id=#{user_id}
    </update>

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

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

    <delete id="removeSeller">
        delete from sale_manager where seller = (select user_name from sms_user_info where id = #{userId})
        or managerId =  (select user_name from sms_user_info where id = #{userId})
    </delete>

    <delete id="removeBusiness">
        delete from business_manager where business = (select user_name from sms_user_info where id = #{userId})
        or managerId =  (select user_name from sms_user_info where id = #{userId})
    </delete>

    <update id="removeSpSeller">
        UPDATE sms_sp_info SET sp_saler = null where sp_saler = (select name from sms_user_info where id = #{userId})
    </update>

    <update id="removeChannelBusiness">
        UPDATE sms_send_channel_info SET business_manager = null where business_manager = (select USER_NAME from sms_user_info where id = #{userId})
    </update>

    <update id="updatePasswordUpdateTime">
        update sms_user_info set STATUS = 1, password_update_time = adddate(now(), 1) where id = #{userId}
    </update>

    <select id="getUserNormalList" resultType="cn.roadm.bo.UserInfo">
        select id as user_id, user_name as userName, DATE_FORMAT(password_update_time, '%Y-%m-%d %H:%i:%S') as passwordUpdateTime from sms_user_info where STATUS = 1
    </select>

    <update id="updateUserStatusSafeMode">
        update sms_user_info set status = 3 where id = #{userId}
    </update>

    <update id="updateUaerArea" parameterType="UaerArea">
        update sms_user_info set area = #{province}  where USER_NAME = #{username}
    </update>

    <update id="updatePasswordUpdateTimeByDay">
        update sms_user_info set STATUS = 1, password_update_time = adddate(now(), #{invalidDays}) where id = #{userId}
    </update>
</mapper>
