FsStatsMemberDailyMapper.xml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.fs.statis.mapper.FsStatsMemberDailyMapper">
  6. <update id="refreshMemberDailyData">
  7. insert into fs_stats_member_daily
  8. (
  9. stat_date,user_id,nick_name,real_name,phone,tag,company_group_id,company_id,company_name,company_user_id,company_user_name,
  10. train_camp_id,train_camp_name,period_id,period_name,course_id,course_name,video_id,video_name,is_over,watch_count,watch_duration,
  11. answer_count,answer_correct_count,red_packet_count,red_packet_amount
  12. )
  13. select
  14. #{date} as stat_date,
  15. u.user_id as user_id,
  16. u.nickname as nick_name,
  17. u.real_name as real_name,
  18. u.phone as phone,
  19. concat_ws(',', t.tag) as tag,
  20. null as company_group_id,
  21. c.company_id as company_id,
  22. c.company_name as company_name,
  23. cu.user_id as company_user_id,
  24. cu.nick_name as company_user_name,
  25. uctc.training_camp_id as train_camp_id,
  26. uctc.training_camp_name as train_camp_name,
  27. ucp.period_id as period_id,
  28. ucp.period_name as period_name,
  29. uc.course_id as course_id,
  30. uc.course_name as course_name,
  31. ucv.video_id as video_id,
  32. ucv.title as video_name,
  33. max(case when cwl.log_type = 2 then 1 else 0 end)
  34. as is_over,
  35. count(cwl.log_id) as watch_count,
  36. sum(cwl.duration) as watch_duration,
  37. count(cal.log_id) as answer_count,
  38. count(case when cal.is_right = 1 then cal.log_id end)
  39. as answer_correct_count,
  40. count(crpl.log_id) as red_packet_count,
  41. ifnull(sum(crpl.amount),0) as red_packet_amount
  42. from fs_course_watch_log cwl
  43. inner join fs_user u on u.user_id = cwl.user_id
  44. 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
  45. left join company_tag t on FIND_IN_SET(t.tag_id, ctu.tag_ids)
  46. left join fs_user_course_period ucp on ucp.period_id = cwl.period_id
  47. left join fs_user_course_training_camp uctc on uctc.training_camp_id = ucp.training_camp_id
  48. left join company c on c.company_id = cwl.company_id
  49. left join company_user cu on cu.company_id = cwl.company_id and cu.user_id = cwl.company_user_id
  50. left join fs_user_course uc on uc.course_id = cwl.course_id
  51. left join fs_user_course_video ucv on ucv.course_id = cwl.course_id and ucv.video_id = cwl.video_id
  52. left join fs_course_answer_logs cal on cal.watch_log_id = cwl.log_id
  53. left join fs_course_red_packet_log crpl on crpl.watch_log_id = cwl.log_id
  54. <![CDATA[
  55. where cwl.create_time >= #{date} and cwl.create_time < date_add(#{date}, interval 1 day)
  56. ]]>
  57. group by
  58. cwl.user_id,
  59. cwl.company_id,
  60. cwl.company_user_id,
  61. ucp.training_camp_id,
  62. cwl.period_id,
  63. cwl.course_id,
  64. cwl.video_id
  65. on duplicate key update
  66. nick_name = values(nick_name),
  67. real_name = values(real_name),
  68. phone = values(phone),
  69. tag = values(tag),
  70. company_name = values(company_name),
  71. company_user_name = values(company_user_name),
  72. train_camp_name = values(train_camp_name),
  73. period_name = values(period_name),
  74. course_name = values(course_name),
  75. video_name = values(video_name),
  76. is_over = values(is_over),
  77. watch_count = values(watch_count),
  78. watch_duration = values(watch_duration),
  79. answer_count = values(answer_count),
  80. answer_correct_count = values(answer_correct_count),
  81. red_packet_count = values(red_packet_count),
  82. red_packet_amount = values(red_packet_amount)
  83. </update>
  84. <select id="selectDailyData" resultType="com.fs.statis.vo.FsStatsMemberDailyVO">
  85. select
  86. <choose>
  87. <when test="params.type == 1">
  88. fsmd.stat_date,
  89. </when>
  90. <otherwise>
  91. date_format(fsmd.stat_date, '%Y-%m') as stat_date,
  92. </otherwise>
  93. </choose>
  94. fsmd.user_id,
  95. fsmd.nick_name,
  96. fsmd.real_name,
  97. fsmd.phone,
  98. fsmd.tag,
  99. fsmd.company_id,
  100. fsmd.company_name,
  101. fsmd.company_user_id,
  102. fsmd.company_user_name,
  103. count(fsmd.id) as count,
  104. sum(fsmd.is_over) as overCount,
  105. sum(fsmd.watch_count) as watchCount,
  106. sum(fsmd.watch_duration) as watchDuration,
  107. sum(fsmd.answer_count) as answerCount,
  108. sum(fsmd.answer_correct_count) as anserCorrectCount,
  109. sum(fsmd.red_packet_count) as redPacketCount,
  110. sum(fsmd.red_packet_amount) redPacketAmount
  111. from fs_stats_member_daily fsmd
  112. <where>
  113. <if test="params.startDate != null">
  114. and fsmd.stat_date >= #{params.startDate}
  115. </if>
  116. <if test="params.endDate != null">
  117. <![CDATA[
  118. and fsmd.stat_date < #{params.endDate}
  119. ]]>
  120. </if>
  121. <if test="params.companyId != null">
  122. and fsmd.company_id = #{params.companyId}
  123. </if>
  124. <if test="params.companyUserId != null">
  125. and fsmd.company_user_id = #{params.companyUserId}
  126. </if>
  127. <if test="params.userId != null">
  128. and fsmd.user_id = #{params.userId}
  129. </if>
  130. <if test="params.phone != null and params.phone != ''">
  131. and fsmd.phone like concat('%', #{params.phone}, '%')
  132. </if>
  133. <if test="params.trainCampId != null">
  134. and fsmd.train_camp_id = #{params.trainCampId}
  135. </if>
  136. <if test="params.periodId != null">
  137. and fsmd.period_id = #{params.periodId}
  138. </if>
  139. <if test="params.courseId != null">
  140. and fsmd.course_id = #{params.courseId}
  141. </if>
  142. <if test="params.videoId != null">
  143. and fsmd.video_id = #{params.videoId}
  144. </if>
  145. </where>
  146. group by
  147. <choose>
  148. <when test="params.type == 1">
  149. stat_date,
  150. </when>
  151. <otherwise>
  152. date_format(stat_date, '%Y-%m'),
  153. </otherwise>
  154. </choose>
  155. user_id,
  156. company_id,
  157. company_user_id
  158. </select>
  159. </mapper>