OprMemDictMapper.xml 10.7 KB
<?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.subsidy.mapper.OprMemDictMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.subsidy.model.OprMemDictDO">
        <id column="id" property="id"/>
        <result column="create_date" property="createDate"/>
        <result column="update_date" property="updateDate"/>
        <result column="delete_date" property="deleteDate"/>
        <result column="user_id" property="userId"/>
        <result column="opr_type" property="oprType"/>
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        create_date,
        update_date,
        delete_date,
        id, user_id, opr_type
    </sql>


    <select id="getHistory" resultType="com.subsidy.vo.opr.GetHistoryVO">
        SELECT
        t.id,
        t2.user_name,
        t3.company_name,
        t.opr_type,
        t.create_date,
        t.result
        FROM
        opr_mem_dict t
        LEFT JOIN member t2 ON t.user_id = t2.id
        left join company_member_mapping t5 on t5.member_id = t2.id and t5.member_status = 1
        LEFT JOIN company_dict t3 ON t5.company_id = t3.id
        WHERE
        t.delete_date IS NULL
        AND t2.delete_date IS NULL
        AND t3.delete_date IS NULL
        <if test="userName != null and userName !=''">
            and t2.user_name like concat('%',#{userName} ,'%')
        </if>
        AND DATE_FORMAT( t.create_date, '%Y-%m-%d' ) BETWEEN DATE_FORMAT( #{startDate}, '%Y-%m-%d' )
        AND DATE_FORMAT( #{endDate}, '%Y-%m-%d' )
        ORDER BY
        t.create_date DESC
    </select>

    <select id="getRecordByDate" resultType="com.subsidy.model.OprMemDictDO">
        SELECT
            *
        FROM
            opr_mem_dict
        WHERE
            create_date &lt; (NOW() -interval 1 day)
    </select>

    <select id="getLatestLoginInfo" parameterType="long" resultType="com.subsidy.model.OprMemDictDO">
        SELECT t.id,
            t.ip_address,
            t.opr_type,
            t.result,
            t.user_id,
            t.create_date
        FROM
            opr_mem_dict t
        WHERE
            t.delete_date IS NULL
            AND t.result = 1
            AND t.user_id = #{userId}
            and DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
            order by t.id desc
            limit 1
    </select>

    <select id="getLatestLogoutInfo" parameterType="long" resultType="com.subsidy.model.OprMemDictDO">
        SELECT t.id,
            t.ip_address,
            t.opr_type,
            t.result,
            t.user_id,
            t.create_date
        FROM
            opr_mem_dict t
        WHERE
            t.delete_date IS NULL
            AND t.result = 1
            AND t.user_id =#{userId}
            and t.opr_type = '登出'
            and DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
            order by t.id desc
            limit 1
    </select>


    <!--    <update id="deleteData" parameterType="com.subsidy.model.OprMemDictDO">-->
    <!--        DELETE-->
    <!--        FROM-->
    <!--            opr_mem_dict-->
    <!--        WHERE-->
    <!--            delete_date IS NULL-->
    <!--            AND id = #{id}-->
    <!--    </update>-->

    <select id="onlineUsers" resultType="long">
        SELECT
        distinct t1.user_id
        FROM
        (
        SELECT
        user_id,
        opr_type,
        max( create_date ) AS time1
        FROM
        opr_mem_dict
        WHERE
        DATE_FORMAT( create_date, '%Y-%m-%d ' ) = DATE_FORMAT( now(), '%Y-%m-%d ' )
        AND result = 1
        AND opr_type = "登录"
        and delete_date IS NULL
        GROUP BY
        user_id
        ORDER BY
        create_date DESC
        ) t1
        LEFT JOIN (
        SELECT
        user_id,
        opr_type,
        max( create_date ) AS time2
        FROM
        opr_mem_dict
        WHERE
        DATE_FORMAT( create_date, '%Y-%m-%d ' ) = DATE_FORMAT( now(), '%Y-%m-%d ' )
        AND result = 1
        AND opr_type = "登出"
        and delete_date is null
        GROUP BY
        user_id
        ORDER BY
        create_date DESC
        ) t2 ON t1.user_id = t2.user_id
        WHERE
         t2.time2 &lt; t1.time1
    </select>

    <select id="insertLastStudyRecord" resultType="com.subsidy.vo.opr.InsertLastStudyRecordVO">
        SELECT DISTINCT
            t1.mintime AS sign_in_date,
            t1.member_id,
            t3.ip_address,
            DATE_ADD( t2.mt, INTERVAL FLOOR( RAND()* 100 ) SECOND ) AS mt
        FROM
            (
            SELECT
                t.member_id,
                min( t.mintime ) AS mintime
            FROM
                (
                SELECT
                    member_id,
                    DATE_SUB( min( create_date ), INTERVAL ( play_length + suspend_length ) SECOND ) AS mintime
                FROM
                    vod_play_history
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id UNION ALL
                SELECT
                    member_id,
                    min( create_date ) AS mintime
                FROM
                    exercise_done_result
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id UNION ALL
                SELECT
                    ask_id,
                    min( create_date ) AS mintime
                FROM
                    answering_question
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    ask_id UNION ALL
                SELECT
                    member_id,
                    min( create_date ) AS mintime
                FROM
                    activity_detection
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id
                ) t
            GROUP BY
                t.member_id
            ) t1
            LEFT JOIN (
            SELECT
                t1.member_id,
                max( t1.maxtime ) AS mt
            FROM
                (
                SELECT
                    member_id,
                    max( create_date ) AS maxtime
                FROM
                    vod_play_history
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id UNION ALL
                SELECT
                    member_id,
                    max( create_date ) AS maxtime
                FROM
                    exercise_done_result
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id UNION ALL
                SELECT
                    ask_id,
                    max( create_date ) AS maxtime
                FROM
                    answering_question
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    ask_id UNION ALL
                SELECT
                    member_id,
                    max( create_date ) AS maxtime
                FROM
                    activity_detection
                WHERE
                    delete_date IS NULL
                    AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
                GROUP BY
                    member_id
                ) t1
            GROUP BY
                t1.member_id
            ) t2 ON t1.member_id = t2.member_id
            LEFT JOIN (
            SELECT
                member_id,
                min( sign_in_date ) AS sign_in_date,
                ip_address
            FROM
                sign_in_record
            WHERE
                delete_date IS NULL
                AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
            GROUP BY
            member_id
            ) t3 ON t1.member_id = t3.member_id
    </select>

    <select id="shutdownUser" resultType="long">
        SELECT
        t1.user_id
        FROM
        (
        SELECT
        t.user_id,
        max( t.create_date ) AS log_out
        FROM
        opr_mem_dict t
        WHERE
        t.delete_date IS NULL
        AND DATE_FORMAT( t.create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
        AND t.opr_type = '登出'
        GROUP BY
        t.user_id
        ) t1
        LEFT JOIN (
        SELECT
        t.member_id,
        max( t.create_date ) AS play_time
        FROM
        vod_play_history t
        WHERE
        t.delete_date IS NULL
        AND DATE_FORMAT( t.create_date, '%Y-%m-%d' ) = DATE_FORMAT( now(), '%Y-%m-%d' )
        GROUP BY
        t.member_id
        ) t2 ON t1.user_id = t2.member_id
        WHERE
        t2.member_id IS NOT NULL
        AND t1.log_out &lt; t2.play_time
    </select>

    <insert id="insertOrUpdate">
        insert into opr_mem_dict(user_id,opr_type,result,ip_address,create_date)
        values (#{userId},#{oprType},#{result},#{ipAddress},#{createDate})
        on duplicate key update
        user_id=values(user_id),
        opr_type=values(opr_type),
        result=values(result),
        ip_address=values(ip_address),
        create_date=values(create_date)
    </insert>

    <select id="getLoginInfo" parameterType="long" resultType="com.subsidy.model.OprMemDictDO">
        SELECT
           *
        FROM
            (
            SELECT
                *
            FROM
                opr_mem_dict t
                where t.delete_date is null
                and t.user_id  = #{userId}
                and DATE_FORMAT(t.create_date,'%Y-%m-%d') =DATE_FORMAT(now(), '%Y-%m-%d')
                and TIMESTAMPDIFF(SECOND,t.create_date,now()) &lt;= 300
            ORDER BY
            t.create_date DESC
            LIMIT 5)t2
    </select>

    <select id="clearTodayLoginData" parameterType="long">
        DELETE
        FROM
            opr_mem_dict
        WHERE
            delete_date IS NULL
            AND user_id = #{userId}
            AND DATE_FORMAT( create_date, '%Y-%m-%d' ) = CURRENT_DATE
    </select>

</mapper>