|
@@ -0,0 +1,161 @@
|
|
|
+<?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.fs.statis.mapper.FsStatsMemberDailyMapper">
|
|
|
+
|
|
|
+ <update id="refreshMemberDailyData">
|
|
|
+ insert into fs_stats_member_daily
|
|
|
+ (
|
|
|
+ stat_date,user_id,nick_name,real_name,phone,tag,company_group_id,company_id,company_name,company_user_id,company_user_name,
|
|
|
+ train_camp_id,train_camp_name,period_id,period_name,course_id,course_name,video_id,video_name,is_over,watch_count,watch_duration,
|
|
|
+ answer_count,answer_correct_count,red_packet_count,red_packet_amount
|
|
|
+ )
|
|
|
+ select
|
|
|
+ #{date} as stat_date,
|
|
|
+ u.user_id as user_id,
|
|
|
+ u.nickname as nick_name,
|
|
|
+ u.real_name as real_name,
|
|
|
+ u.phone as phone,
|
|
|
+ concat_ws(',', t.tag) as tag,
|
|
|
+ null as company_group_id,
|
|
|
+ c.company_id as company_id,
|
|
|
+ c.company_name as company_name,
|
|
|
+ cu.user_id as company_user_id,
|
|
|
+ cu.nick_name as company_user_name,
|
|
|
+ uctc.training_camp_id as train_camp_id,
|
|
|
+ uctc.training_camp_name as train_camp_name,
|
|
|
+ ucp.period_id as period_id,
|
|
|
+ ucp.period_name as period_name,
|
|
|
+ uc.course_id as course_id,
|
|
|
+ uc.course_name as course_name,
|
|
|
+ ucv.video_id as video_id,
|
|
|
+ ucv.title as video_name,
|
|
|
+ max(case when cwl.log_type = 2 then 1 else 0 end)
|
|
|
+ as is_over,
|
|
|
+ count(cwl.log_id) as watch_count,
|
|
|
+ sum(cwl.duration) as watch_duration,
|
|
|
+ count(cal.log_id) as answer_count,
|
|
|
+ count(case when cal.is_right = 1 then cal.log_id end)
|
|
|
+ as answer_correct_count,
|
|
|
+ count(crpl.log_id) as red_packet_count,
|
|
|
+ ifnull(sum(crpl.amount),0) as red_packet_amount
|
|
|
+ from fs_course_watch_log cwl
|
|
|
+ inner join fs_user u on u.user_id = cwl.user_id
|
|
|
+ left join company_tag_user ctu on ctu.company_id = cwl.company_id and ctu.company_user_id = cwl.company_user_id and ctu.user_id = cwl.user_id
|
|
|
+ left join company_tag t on FIND_IN_SET(t.tag_id, ctu.tag_ids)
|
|
|
+ left join fs_user_course_period ucp on ucp.period_id = cwl.period_id
|
|
|
+ left join fs_user_course_training_camp uctc on uctc.training_camp_id = ucp.training_camp_id
|
|
|
+ left join company c on c.company_id = cwl.company_id
|
|
|
+ left join company_user cu on cu.company_id = cwl.company_id and cu.user_id = cwl.company_user_id
|
|
|
+ left join fs_user_course uc on uc.course_id = cwl.course_id
|
|
|
+ left join fs_user_course_video ucv on ucv.course_id = cwl.course_id and ucv.video_id = cwl.video_id
|
|
|
+ left join fs_course_answer_logs cal on cal.watch_log_id = cwl.log_id
|
|
|
+ left join fs_course_red_packet_log crpl on crpl.watch_log_id = cwl.log_id
|
|
|
+ <![CDATA[
|
|
|
+ where cwl.create_time >= #{date} and cwl.create_time < date_add(#{date}, interval 1 day)
|
|
|
+ ]]>
|
|
|
+ group by
|
|
|
+ cwl.user_id,
|
|
|
+ cwl.company_id,
|
|
|
+ cwl.company_user_id,
|
|
|
+ ucp.training_camp_id,
|
|
|
+ cwl.period_id,
|
|
|
+ cwl.course_id,
|
|
|
+ cwl.video_id
|
|
|
+ on duplicate key update
|
|
|
+ nick_name = values(nick_name),
|
|
|
+ real_name = values(real_name),
|
|
|
+ phone = values(phone),
|
|
|
+ tag = values(tag),
|
|
|
+ company_name = values(company_name),
|
|
|
+ company_user_name = values(company_user_name),
|
|
|
+ train_camp_name = values(train_camp_name),
|
|
|
+ period_name = values(period_name),
|
|
|
+ course_name = values(course_name),
|
|
|
+ video_name = values(video_name),
|
|
|
+ is_over = values(is_over),
|
|
|
+ watch_count = values(watch_count),
|
|
|
+ watch_duration = values(watch_duration),
|
|
|
+ answer_count = values(answer_count),
|
|
|
+ answer_correct_count = values(answer_correct_count),
|
|
|
+ red_packet_count = values(red_packet_count),
|
|
|
+ red_packet_amount = values(red_packet_amount)
|
|
|
+ </update>
|
|
|
+
|
|
|
+ <select id="selectDailyData" resultType="com.fs.statis.vo.FsStatsMemberDailyVO">
|
|
|
+ select
|
|
|
+ <choose>
|
|
|
+ <when test="params.type == 1">
|
|
|
+ fsmd.stat_date,
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ date_format(fsmd.stat_date, '%Y-%m') as stat_date,
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ fsmd.user_id,
|
|
|
+ fsmd.nick_name,
|
|
|
+ fsmd.real_name,
|
|
|
+ fsmd.phone,
|
|
|
+ fsmd.tag,
|
|
|
+ fsmd.company_id,
|
|
|
+ fsmd.company_name,
|
|
|
+ fsmd.company_user_id,
|
|
|
+ fsmd.company_user_name,
|
|
|
+ count(fsmd.id) as count,
|
|
|
+ sum(fsmd.is_over) as overCount,
|
|
|
+ sum(fsmd.watch_count) as watchCount,
|
|
|
+ sum(fsmd.watch_duration) as watchDuration,
|
|
|
+ sum(fsmd.answer_count) as answerCount,
|
|
|
+ sum(fsmd.answer_correct_count) as anserCorrectCount,
|
|
|
+ sum(fsmd.red_packet_count) as redPacketCount,
|
|
|
+ sum(fsmd.red_packet_amount) redPacketAmount
|
|
|
+ from fs_stats_member_daily fsmd
|
|
|
+ <where>
|
|
|
+ <if test="params.startDate != null">
|
|
|
+ and fsmd.stat_date >= #{params.startDate}
|
|
|
+ </if>
|
|
|
+ <if test="params.endDate != null">
|
|
|
+ <![CDATA[
|
|
|
+ and fsmd.stat_date < #{params.endDate}
|
|
|
+ ]]>
|
|
|
+ </if>
|
|
|
+ <if test="params.companyId != null">
|
|
|
+ and fsmd.company_id = #{params.companyId}
|
|
|
+ </if>
|
|
|
+ <if test="params.companyUserId != null">
|
|
|
+ and fsmd.company_user_id = #{params.companyUserId}
|
|
|
+ </if>
|
|
|
+ <if test="params.userId != null">
|
|
|
+ and fsmd.user_id = #{params.userId}
|
|
|
+ </if>
|
|
|
+ <if test="params.phone != null and params.phone != ''">
|
|
|
+ and fsmd.phone like concat('%', #{params.phone}, '%')
|
|
|
+ </if>
|
|
|
+ <if test="params.trainCampId != null">
|
|
|
+ and fsmd.train_camp_id = #{params.trainCampId}
|
|
|
+ </if>
|
|
|
+ <if test="params.periodId != null">
|
|
|
+ and fsmd.period_id = #{params.periodId}
|
|
|
+ </if>
|
|
|
+ <if test="params.courseId != null">
|
|
|
+ and fsmd.course_id = #{params.courseId}
|
|
|
+ </if>
|
|
|
+ <if test="params.videoId != null">
|
|
|
+ and fsmd.video_id = #{params.videoId}
|
|
|
+ </if>
|
|
|
+ </where>
|
|
|
+ group by
|
|
|
+ <choose>
|
|
|
+ <when test="params.type == 1">
|
|
|
+ stat_date,
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ date_format(stat_date, '%Y-%m'),
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ user_id,
|
|
|
+ company_id,
|
|
|
+ company_user_id
|
|
|
+ </select>
|
|
|
+</mapper>
|