<?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.deer.wms.system.dao.SysUserOnlineMapper">

    <resultMap type="SysUserOnline" id="SysUserOnlineResult">
        <id property="sessionId" column="sessionId"/>
        <result property="loginName" column="login_name"/>
        <result property="deptName" column="dept_name"/>
        <result property="ipaddr" column="ipaddr"/>
        <result property="loginLocation" column="login_location"/>
        <result property="browser" column="browser"/>
        <result property="os" column="os"/>
        <result property="status" column="status"/>
        <result property="startTimestamp" column="start_timestamp"/>
        <result property="lastAccessTime" column="last_access_time"/>
        <result property="expireTime" column="expire_time"/>
    </resultMap>

    <sql id="selectOnlineVo">
       select sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, status, start_timestamp, last_access_time, expire_time 
	   from sys_user_online
    </sql>

    <select id="selectOnlineById" parameterType="String" resultMap="SysUserOnlineResult">
        <include refid="selectOnlineVo"/>
        where sessionId = #{sessionid}
    </select>

    <insert id="saveOnline" parameterType="SysUserOnline">
		replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
        values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
	</insert>

    <delete id="deleteOnlineById" parameterType="String">
 		delete from sys_user_online where sessionId = #{sessionId}
 	</delete>

    <select id="selectUserOnlineList" parameterType="SysUserOnline" resultMap="SysUserOnlineResult">
        <include refid="selectOnlineVo"/>
        <where>
            <if test="ipaddr != null and ipaddr != ''">
                AND ipaddr like concat('%', #{ipaddr}, '%')
            </if>
            <if test="loginName != null and loginName != ''">
                AND login_name like concat('%', #{loginName}, '%')
            </if>
        </where>
    </select>

    <select id="selectOnlineByExpired" parameterType="String" resultMap="SysUserOnlineResult">
        <include refid="selectOnlineVo"/>
        o
        WHERE o.last_access_time <![CDATA[ <= ]]> #{lastAccessTime} ORDER BY o.last_access_time ASC
    </select>

    <select id="selectByAccountId" parameterType="Long" resultMap="SysUserOnlineResult">
		select
		o.*
		from sys_user_online o
		left join sys_user u on u.login_name = o.login_name
		where u.user_id = #{userId}
		order by ipaddr,last_access_time
	</select>

    <update id="updateBySessionId" parameterType="SysUserOnline">
        update sys_user_online
        set last_access_time = #{lastAccessTime}
        where sessionId = #{sessionId}
    </update>

</mapper> 