FsCourseWatchLogMapper.xml 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918
  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.course.mapper.FsCourseWatchLogMapper">
  6. <resultMap type="FsCourseWatchLog" id="FsCourseWatchLogResult">
  7. <result property="logId" column="log_id" />
  8. <result property="userId" column="user_id" />
  9. <result property="videoId" column="video_id" />
  10. <result property="logType" column="log_type" />
  11. <result property="createTime" column="create_time" />
  12. <result property="updateTime" column="update_time" />
  13. <result property="qwExternalContactId" column="qw_external_contact_id" />
  14. <result property="duration" column="duration" />
  15. <result property="qwUserId" column="qw_user_id" />
  16. <result property="companyUserId" column="company_user_id" />
  17. <result property="companyId" column="company_id" />
  18. <result property="courseId" column="course_id" />
  19. <result property="sendType" column="send_type" />
  20. <result property="rewardType" column="reward_type" />
  21. <result property="sopId" column="sop_id" />
  22. <result property="finishTime" column="finish_time" />
  23. <result property="sendFinishMsg" column="send_finish_msg" />
  24. <result property="campPeriodTime" column="camp_period_time" />
  25. <result property="lastHeartbeatTime" column="last_heartbeat_time" />
  26. <result property="project" column="project" />
  27. <result property="periodId" column="period_id" />
  28. </resultMap>
  29. <sql id="selectFsCourseWatchLogVo">
  30. select log_id, user_id,finish_time,send_finish_msg,sop_id,video_id,reward_type, log_type, create_time, update_time, qw_external_contact_id, duration, qw_user_id, company_user_id, company_id, course_id,camp_period_time,project,period_id from fs_course_watch_log
  31. </sql>
  32. <select id="selectFsCourseWatchLogList" parameterType="FsCourseWatchLog" resultMap="FsCourseWatchLogResult">
  33. <include refid="selectFsCourseWatchLogVo"/>
  34. <where>
  35. <if test="userId != null "> and user_id = #{userId}</if>
  36. <if test="videoId != null "> and video_id = #{videoId}</if>
  37. <if test="logType != null "> and log_type = #{logType}</if>
  38. <if test="qwExternalContactId != null "> and qw_external_contact_id = #{qwExternalContactId}</if>
  39. <if test="duration != null "> and duration = #{duration}</if>
  40. <if test="qwUserId != null and qwUserId != ''"> and qw_user_id = #{qwUserId}</if>
  41. <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
  42. <if test="companyId != null "> and company_id = #{companyId}</if>
  43. <if test="courseId != null "> and course_id = #{courseId}</if>
  44. <if test="sendType != null "> and send_type = #{sendType}</if>
  45. <if test="campPeriodTime != null "> and camp_period_time = #{campPeriodTime}</if>
  46. <if test="project != null "> and project = #{project}</if>
  47. </where>
  48. </select>
  49. <select id="selectFsCourseWatchLogByLogId" parameterType="Long" resultMap="FsCourseWatchLogResult">
  50. <include refid="selectFsCourseWatchLogVo"/>
  51. where log_id = #{logId}
  52. </select>
  53. <select id="selectFsCourseWatchLogListVO" resultType="com.fs.course.vo.FsCourseWatchLogListVO">
  54. select l.log_id,l.project,l.period_id,l.user_id,uc.course_name,v.title as video_name,qec.avatar as external_user_avatar,
  55. l.log_type,SEC_TO_TIME(l.duration) as duration,c.company_name,l.camp_period_time,l.finish_time,
  56. cu.nick_name as company_user_name ,l.send_type,l.create_time,l.update_time,l.last_heartbeat_time,
  57. qu.qw_user_name,qec.name as external_user_name,c.company_id,u.avatar as fsAvatar,u.nick_name as fsNickName,qec.create_time as qec_create_time,
  58. u.is_vip isVip
  59. from fs_course_watch_log l
  60. left join fs_user_course_video v on v.video_id = l.video_id
  61. left join fs_user_course uc on uc.course_id = l.course_id
  62. left join fs_user u on u.user_id = l.user_id
  63. left join company_user cu on cu.user_id = l.company_user_id
  64. left join company c on c.company_id = l.company_id
  65. LEFT JOIN qw_user qu on qu.id= l.qw_user_id
  66. LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
  67. <where>
  68. <if test ='maps.isVip != null and maps.isVip == 0'>
  69. and (l.user_id = 0 or l.user_id is null)
  70. </if>
  71. <if test ='maps.isVip != null and maps.isVip == 1'>
  72. and l.user_id != 0 and l.user_id is not null
  73. </if>
  74. <if test ='maps.sendType !=null'>
  75. and l.send_type = #{maps.sendType}
  76. </if>
  77. <if test ='maps.userId !=null'>
  78. and l.user_id = #{maps.userId}
  79. </if>
  80. <if test ='maps.project !=null'>
  81. and l.project = #{maps.project}
  82. </if>
  83. <if test ='maps.qwExternalContactId !=null'>
  84. and l.qw_external_contact_id = #{maps.qwExternalContactId}
  85. </if>
  86. <if test ='maps.qwUserId !=null'>
  87. and l.qw_user_id = #{maps.qwUserId}
  88. </if>
  89. <if test ='maps.courseId !=null'>
  90. and l.course_id = #{maps.courseId}
  91. </if>
  92. <if test ='maps.videoId !=null'>
  93. and l.video_id = #{maps.videoId}
  94. </if>
  95. <if test ='maps.logType !=null'>
  96. and l.log_type = #{maps.logType}
  97. </if>
  98. <if test ='maps.companyId !=null'>
  99. and l.company_id = #{maps.companyId}
  100. </if>
  101. <if test ='maps.companyUserId !=null'>
  102. and l.company_user_id = #{maps.companyUserId}
  103. </if>
  104. <if test ='maps.companyUserName !=null and maps.companyUserName!=""'>
  105. and cu.nick_name like concat('%', #{maps.companyUserName}, '%')
  106. </if>
  107. <if test ='maps.nickName !=null and maps.nickName!=""'>
  108. and u.nick_name like concat('%', #{maps.nickName}, '%')
  109. </if>
  110. <if test ='maps.externalUserName !=null and maps.externalUserName!=""'>
  111. and qec.name like concat('%', #{maps.externalUserName}, '%')
  112. </if>
  113. <if test= 'maps.qecSTime != null '>
  114. and DATE(qec.create_time) &gt;= DATE(#{maps.qecSTime})
  115. </if>
  116. <if test='maps.qecETime != null '>
  117. and DATE(qec.create_time) &lt;= DATE(#{maps.qecETime})
  118. </if>
  119. <if test= 'maps.sTime != null '>
  120. and DATE(l.create_time) &gt;= DATE(#{maps.sTime})
  121. </if>
  122. <if test='maps.eTime != null '>
  123. and DATE(l.create_time) &lt;= DATE(#{maps.eTime})
  124. </if>
  125. <if test= 'maps.scheduleStartTime != null '>
  126. and DATE(l.camp_period_time) &gt;= DATE(#{maps.scheduleStartTime})
  127. </if>
  128. <if test='maps.scheduleEndTime != null '>
  129. and DATE(l.camp_period_time) &lt;= DATE(#{maps.scheduleEndTime})
  130. </if>
  131. <if test= 'maps.upSTime != null '>
  132. and DATE(l.update_time) &gt;= DATE(#{maps.upSTime})
  133. </if>
  134. <if test='maps.upETime != null '>
  135. and DATE(l.update_time) &lt;= DATE(#{maps.upETime})
  136. </if>
  137. <if test="maps.sopIds != null and maps.sopIds.size() > 0">
  138. and l.sop_id in
  139. <foreach item="sopId" index="index" collection="maps.sopIds" open="(" separator="," close=")">
  140. #{sopId}
  141. </foreach>
  142. </if>
  143. <if test="maps.sopId != null and maps.sopId != '' ">
  144. and l.sop_id = #{maps.sopId}
  145. </if>
  146. <if test="maps.periodIds != null and maps.periodIds.size() > 0">
  147. and l.period_id in
  148. <foreach item="periodId" index="index" collection="maps.periodIds" open="(" separator="," close=")">
  149. #{periodId}
  150. </foreach>
  151. </if>
  152. <if test="maps.qwUserName != null and maps.qwUserName != '' ">
  153. and qu.qw_user_name = #{maps.qwUserName}
  154. </if>
  155. <if test='maps.cuDeptIdList != null and !maps.cuDeptIdList.isEmpty() and maps.userType != "00" '>
  156. AND cu.dept_id IN
  157. <foreach collection='maps.cuDeptIdList' item='item' open='(' separator=',' close=')'>
  158. #{item}
  159. </foreach>
  160. </if>
  161. </where>
  162. order by l.finish_time desc,l.update_time desc,l.create_time desc
  163. </select>
  164. <select id="selectFsCourseWatchLogListByParam" resultType="com.fs.course.vo.FsCourseWatchLogListVO">
  165. select l.log_id,l.user_id,uc.course_name,v.title as video_name,u.nick_name as fsNickName, u.avatar as fsAvatar,
  166. l.log_type,SEC_TO_TIME(l.duration) as duration,c.company_name,l.camp_period_time,l.finish_time,
  167. cu.nick_name as company_user_name ,l.send_type,l.create_time, qu.qw_user_name,qec.name as external_user_name
  168. from fs_course_watch_log l
  169. left join fs_user_course_video v on v.video_id = l.video_id
  170. left join fs_user_course uc on uc.course_id = l.course_id
  171. left join fs_user u on u.user_id = l.user_id
  172. left join company_user cu on cu.user_id = l.company_user_id
  173. left join company c on c.company_id = l.company_id
  174. LEFT JOIN qw_user qu on qu.id= l.qw_user_id
  175. LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
  176. <where>
  177. <if test ='userId !=null'>
  178. and l.user_id = #{userId}
  179. </if>
  180. <if test ='qwUserId !=null'>
  181. and l.qw_user_id = #{qwUserId}
  182. </if>
  183. <if test ='courseId !=null'>
  184. and l.course_id = #{courseId}
  185. </if>
  186. <if test ='videoId !=null'>
  187. and l.video_id = #{videoId}
  188. </if>
  189. <if test ='logType !=null'>
  190. and l.log_type = #{logType}
  191. </if>
  192. <if test ='companyId !=null'>
  193. and l.company_id = #{companyId}
  194. </if>
  195. <if test ='companyUserId !=null'>
  196. and l.company_user_id = #{companyUserId}
  197. </if>
  198. <if test ='companyUserName !=null and maps.companyUserName!=""'>
  199. and cu.nick_name like concat('%', #{companyUserName}, '%')
  200. </if>
  201. <if test ='nickName !=null and maps.nickName!=""'>
  202. and u.nick_name like concat('%', #{nickName}, '%')
  203. </if>
  204. <if test= 'sTime != null '>
  205. and DATE(l.create_time) &gt;= DATE(#{sTime})
  206. </if>
  207. <if test='eTime != null '>
  208. and DATE(l.create_time) &lt;= DATE(#{eTime})
  209. </if>
  210. <if test= 'maps.scheduleStartTime != null '>
  211. and DATE(l.camp_period_time) &gt;= DATE(#{maps.scheduleStartTime})
  212. </if>
  213. <if test='maps.scheduleEndTime != null '>
  214. and DATE(l.camp_period_time) &lt;= DATE(#{maps.scheduleEndTime})
  215. </if>
  216. <if test="sopIds != null and sopIds.size() > 0">
  217. and l.sop_id in
  218. <foreach item="sopId" index="index" collection="sopIds" open="(" separator="," close=")">
  219. #{sopId}
  220. </foreach>
  221. </if>
  222. </where>
  223. order by l.log_id desc
  224. </select>
  225. <insert id="insertFsCourseWatchLog" parameterType="FsCourseWatchLog" useGeneratedKeys="true" keyProperty="logId">
  226. insert into fs_course_watch_log
  227. <trim prefix="(" suffix=")" suffixOverrides=",">
  228. <if test="userId != null">user_id,</if>
  229. <if test="videoId != null">video_id,</if>
  230. <if test="logType != null">log_type,</if>
  231. <if test="createTime != null">create_time,</if>
  232. <if test="updateTime != null">update_time,</if>
  233. <if test="qwExternalContactId != null">qw_external_contact_id,</if>
  234. <if test="duration != null">duration,</if>
  235. <if test="qwUserId != null">qw_user_id,</if>
  236. <if test="companyUserId != null">company_user_id,</if>
  237. <if test="companyId != null">company_id,</if>
  238. <if test="courseId != null">course_id,</if>
  239. <if test="sendType != null">send_type,</if>
  240. <if test="rewardType != null">reward_type,</if>
  241. <if test="sopId != null">sop_id,</if>
  242. <if test="finishTime != null">finish_time,</if>
  243. <if test="sendFinishMsg != null">send_finish_msg,</if>
  244. <if test="campPeriodTime != null">camp_period_time,</if>
  245. <if test="periodId != null">period_id,</if>
  246. <if test="project != null">project,</if>
  247. </trim>
  248. <trim prefix="values (" suffix=")" suffixOverrides=",">
  249. <if test="userId != null">#{userId},</if>
  250. <if test="videoId != null">#{videoId},</if>
  251. <if test="logType != null">#{logType},</if>
  252. <if test="createTime != null">#{createTime},</if>
  253. <if test="updateTime != null">#{updateTime},</if>
  254. <if test="qwExternalContactId != null">#{qwExternalContactId},</if>
  255. <if test="duration != null">#{duration},</if>
  256. <if test="qwUserId != null">#{qwUserId},</if>
  257. <if test="companyUserId != null">#{companyUserId},</if>
  258. <if test="companyId != null">#{companyId},</if>
  259. <if test="courseId != null">#{courseId},</if>
  260. <if test="sendType != null">#{sendType},</if>
  261. <if test="rewardType != null">#{rewardType},</if>
  262. <if test="sopId != null">#{sopId},</if>
  263. <if test="finishTime != null">#{finishTime},</if>
  264. <if test="sendFinishMsg != null">#{sendFinishMsg},</if>
  265. <if test="campPeriodTime != null">#{campPeriodTime},</if>
  266. <if test="periodId != null">#{periodId},</if>
  267. <if test="project != null">#{project},</if>
  268. </trim>
  269. </insert>
  270. <insert id="insertOrUpdateFsCourseWatchLog" parameterType="FsCourseWatchLog">
  271. insert into fs_course_watch_log
  272. <trim prefix="(" suffix=")" suffixOverrides=",">
  273. <if test="userId != null">user_id,</if>
  274. <if test="videoId != null">video_id,</if>
  275. <if test="logType != null">log_type,</if>
  276. <if test="createTime != null">create_time,</if>
  277. <if test="updateTime != null">update_time,</if>
  278. <if test="qwExternalContactId != null">qw_external_contact_id,</if>
  279. <if test="duration != null">duration,</if>
  280. <if test="qwUserId != null">qw_user_id,</if>
  281. <if test="companyUserId != null">company_user_id,</if>
  282. <if test="companyId != null">company_id,</if>
  283. <if test="courseId != null">course_id,</if>
  284. <if test="sendType != null">send_type,</if>
  285. <if test="rewardType != null">reward_type,</if>
  286. <if test="sopId != null">sop_id,</if>
  287. <if test="finishTime != null">finish_time,</if>
  288. <if test="sendFinishMsg != null">send_finish_msg,</if>
  289. <if test="campPeriodTime != null">camp_period_time,</if>
  290. <if test="project != null">project,</if>
  291. </trim>
  292. <trim prefix="values (" suffix=")" suffixOverrides=",">
  293. <if test="userId != null">#{userId},</if>
  294. <if test="videoId != null">#{videoId},</if>
  295. <if test="logType != null">#{logType},</if>
  296. <if test="createTime != null">#{createTime},</if>
  297. <if test="updateTime != null">#{updateTime},</if>
  298. <if test="qwExternalContactId != null">#{qwExternalContactId},</if>
  299. <if test="duration != null">#{duration},</if>
  300. <if test="qwUserId != null">#{qwUserId},</if>
  301. <if test="companyUserId != null">#{companyUserId},</if>
  302. <if test="companyId != null">#{companyId},</if>
  303. <if test="courseId != null">#{courseId},</if>
  304. <if test="sendType != null">#{sendType},</if>
  305. <if test="rewardType != null">#{rewardType},</if>
  306. <if test="sopId != null">#{sopId},</if>
  307. <if test="finishTime != null">#{finishTime},</if>
  308. <if test="sendFinishMsg != null">#{sendFinishMsg},</if>
  309. <if test="campPeriodTime != null">#{campPeriodTime},</if>
  310. <if test="project != null">#{project},</if>
  311. </trim>
  312. on duplicate key update
  313. <trim suffixOverrides=",">
  314. <if test="updateTime != null">update_time = #{updateTime},</if>
  315. </trim>
  316. </insert>
  317. <insert id="insertFsCourseWatchLogBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="logId">
  318. INSERT INTO fs_course_watch_log (
  319. user_id,
  320. video_id,
  321. log_type,
  322. create_time,
  323. update_time,
  324. qw_external_contact_id,
  325. duration,
  326. qw_user_id,
  327. company_user_id,
  328. company_id,
  329. course_id,
  330. send_type,
  331. reward_type,
  332. sop_id,
  333. camp_period_time,
  334. project
  335. )
  336. VALUES
  337. <foreach collection="watchLogs" item="log" separator=",">
  338. (
  339. #{log.userId},
  340. #{log.videoId},
  341. #{log.logType},
  342. #{log.createTime},
  343. #{log.updateTime},
  344. #{log.qwExternalContactId},
  345. #{log.duration},
  346. #{log.qwUserId},
  347. #{log.companyUserId},
  348. #{log.companyId},
  349. #{log.courseId},
  350. #{log.sendType},
  351. #{log.rewardType},
  352. #{log.sopId},
  353. #{log.campPeriodTime},
  354. #{log.project}
  355. )
  356. </foreach>
  357. ON DUPLICATE KEY UPDATE
  358. update_time = VALUES(update_time)
  359. </insert>
  360. <update id="updateFsCourseWatchLog" parameterType="FsCourseWatchLog">
  361. update fs_course_watch_log
  362. <trim prefix="SET" suffixOverrides=",">
  363. <if test="userId != null">user_id = #{userId},</if>
  364. <if test="videoId != null">video_id = #{videoId},</if>
  365. <if test="logType != null">log_type = #{logType},</if>
  366. <if test="createTime != null">create_time = #{createTime},</if>
  367. <if test="updateTime != null">update_time = #{updateTime},</if>
  368. <if test="qwExternalContactId != null">qw_external_contact_id = #{qwExternalContactId},</if>
  369. <if test="duration != null">duration = #{duration},</if>
  370. <if test="qwUserId != null">qw_user_id = #{qwUserId},</if>
  371. <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
  372. <if test="companyId != null">company_id = #{companyId},</if>
  373. <if test="courseId != null">course_id = #{courseId},</if>
  374. <if test="sendType != null">send_type = #{sendType},</if>
  375. <if test="rewardType != null">reward_type = #{rewardType},</if>
  376. <if test="sopId != null">sop_id = #{sopId},</if>
  377. <if test="finishTime != null">finish_time = #{finishTime},</if>
  378. <if test="sendFinishMsg != null">send_finish_msg = #{sendFinishMsg},</if>
  379. <if test="lastHeartbeatTime != null">last_heartbeat_time = #{lastHeartbeatTime},</if>
  380. <if test="periodId != null">period_id = #{periodId},</if>
  381. <if test="project != null">project = #{project},</if>
  382. </trim>
  383. where log_id = #{logId}
  384. </update>
  385. <delete id="deleteFsCourseWatchLogByLogId" parameterType="Long">
  386. delete from fs_course_watch_log where log_id = #{logId}
  387. </delete>
  388. <delete id="deleteFsCourseWatchLogByLogIds" parameterType="String">
  389. delete from fs_course_watch_log where log_id in
  390. <foreach item="logId" collection="array" open="(" separator="," close=")">
  391. #{logId}
  392. </foreach>
  393. </delete>
  394. <select id="selectFsCourseWatchLogByFinishTime" resultType="com.fs.course.param.FsCourseWatchLogByFinishTimeParam">
  395. <![CDATA[
  396. SELECT
  397. fcwl.log_id,
  398. fcwl.create_time,
  399. fcwl.qw_external_contact_id,
  400. fcwl.qw_user_id,
  401. fcwl.user_id,
  402. fcwl.company_user_id,
  403. fcwl.company_id,
  404. fcwl.sop_id,
  405. fcwl.finish_time,
  406. fcwl.camp_period_time,
  407. qec.corp_id,
  408. qec.external_user_id,
  409. qec.tag_ids,
  410. qec.user_id AS qw_user,
  411. qec.name AS external_contact_name
  412. FROM
  413. fs_course_watch_log fcwl
  414. LEFT JOIN qw_external_contact qec ON fcwl.qw_external_contact_id = qec.id
  415. WHERE
  416. DATE(fcwl.finish_time)= '2025-02-09'
  417. and fcwl.camp_period_time is not NULL
  418. ]]>
  419. </select>
  420. <select id="getWatchLogByFsUser" resultType="com.fs.course.domain.FsCourseWatchLog">
  421. SELECT
  422. log_id,
  423. user_id,
  424. video_id,
  425. log_type,
  426. create_time,
  427. update_time,
  428. duration,
  429. company_user_id,
  430. company_id,
  431. course_id,
  432. send_type,
  433. reward_type,
  434. last_heartbeat_time,
  435. sop_id,
  436. finish_time,
  437. send_finish_msg,
  438. camp_period_time
  439. FROM
  440. fs_course_watch_log
  441. WHERE
  442. send_type = 1
  443. AND video_id = #{videoId}
  444. AND user_id = #{fsUserId}
  445. AND company_user_id = #{companyUserId} order by log_id desc limit 1
  446. </select>
  447. <select id="selectFsCourseWatchLogStatisticsListVONew"
  448. resultType="com.fs.course.vo.FsCourseWatchLogStatisticsListVO">
  449. SELECT
  450. o.company_user_id,o.user_id,DATE(o.create_time) create_time,
  451. SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,
  452. SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,
  453. SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,
  454. SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4,
  455. o.project as project,
  456. o.course_id as course_id,
  457. o.video_id as video_id
  458. FROM fs_course_watch_log o
  459. <where>
  460. send_type=1
  461. <if test="companyId != null">
  462. and o.company_id=#{companyId}
  463. </if>
  464. <if test= 'sTime != null '>
  465. and DATE(o.create_time) &gt;= #{sTime}
  466. </if>
  467. <if test='eTime != null '>
  468. and DATE(o.create_time) &lt;= #{eTime}
  469. </if>
  470. <if test ='courseId !=null'>
  471. and o.course_id = #{courseId}
  472. </if>
  473. <if test ='videoId !=null'>
  474. and o.video_id = #{videoId}
  475. </if>
  476. <if test="companyUserId != null">
  477. and o.company_user_id = #{companyUserId}
  478. </if>
  479. <if test="project != null">
  480. and o.project = #{project}
  481. </if>
  482. <if test="userId != null">
  483. and o.user_id = #{userId}
  484. </if>
  485. </where>
  486. GROUP BY o.video_id,o.user_id,DATE(o.create_time),o.project,o.course_id
  487. ORDER BY o.video_id ,DATE(o.create_time)
  488. <!-- limit ${(pageNum-1)*pageSize},${pageSize}-->
  489. </select>
  490. <select id="selectFsCourseWatchLogStatisticsListVONewCount" resultType="java.lang.Long">
  491. SELECT COUNT(*)
  492. FROM (
  493. SELECT 1
  494. FROM fs_course_watch_log o
  495. <where>
  496. send_type=2
  497. <if test="companyId != null">
  498. and o.company_id=#{companyId}
  499. </if>
  500. <if test= 'sTime != null '>
  501. and o.create_time &gt;= #{startDate}
  502. </if>
  503. <if test='eTime != null '>
  504. and o.create_time &lt;= #{endDate}
  505. </if>
  506. <if test ='courseId !=null'>
  507. and o.course_id = #{courseId}
  508. </if>
  509. <if test ='videoId !=null'>
  510. and o.video_id = #{videoId}
  511. </if>
  512. <if test="companyUserId != null">
  513. and o.company_user_id = #{companyUserId}
  514. </if>
  515. <if test="project != null">
  516. and o.project = #{project}
  517. </if>
  518. <if test="userId != null">
  519. and o.user_id = #{userId}
  520. </if>
  521. </where>
  522. GROUP BY o.video_id, o.user_id, DATE(o.create_time), o.project, o.course_id
  523. ) AS grouped_results_count
  524. </select>
  525. <!-- 根据条件查询条数 -->
  526. <select id="countByMap" resultType="java.lang.Integer">
  527. select count(fcwl.log_id) from fs_course_watch_log fcwl
  528. <where>
  529. <if test="params.logTypes != null and params.logTypes.size() > 0">
  530. and fcwl.log_type in
  531. <foreach collection="params.logTypes" open="(" close=")" separator="," item="logType">
  532. #{logType}
  533. </foreach>
  534. </if>
  535. <if test="params.companyUserId != null">
  536. and fcwl.company_user_id = #{params.companyUserId}
  537. </if>
  538. <if test="params.date != null">
  539. and date(fcwl.create_time) = #{params.date}
  540. </if>
  541. </where>
  542. </select>
  543. <update id="batchUpdateWatchLog" parameterType="java.util.List">
  544. UPDATE fs_course_watch_log
  545. SET
  546. duration = CASE
  547. <foreach collection="list" item="item" index="index">
  548. WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
  549. CASE
  550. <!-- 仅当传入的duration > 当前值时才更新 -->
  551. WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
  552. ELSE duration <!-- 如果 duration 为 null,保持原值 -->
  553. END
  554. </foreach>
  555. END,
  556. last_heartbeat_time = CASE
  557. <foreach collection="list" item="item" index="index">
  558. WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
  559. CASE
  560. WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
  561. ELSE last_heartbeat_time <!-- 如果 last_heartbeat_time 为 null,保持原值 -->
  562. END
  563. </foreach>
  564. END,
  565. finish_time = CASE
  566. <foreach collection="list" item="item" index="index">
  567. WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
  568. CASE
  569. WHEN finish_time IS NULL THEN #{item.finishTime} <!-- 如果表中 finish_time 为 null,更新为传入的值 -->
  570. ELSE finish_time <!-- 如果表中 finish_time 不为 null,保持原值 -->
  571. END
  572. </foreach>
  573. END,
  574. log_type = CASE
  575. <foreach collection="list" item="item" index="index">
  576. WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
  577. CASE
  578. WHEN log_type = 2 THEN log_type <!-- 如果 log_type 已经是 2,保持原值 -->
  579. WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType} <!-- 如果 log_type 不是 2,更新为传入的值 -->
  580. ELSE log_type <!-- 其他情况保持原值 -->
  581. END
  582. </foreach>
  583. END
  584. WHERE
  585. (video_id, qw_external_contact_id, qw_user_id) IN
  586. <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
  587. (#{item.videoId}, #{item.qwExternalContactId}, #{item.qwUserId})
  588. </foreach>
  589. </update>
  590. <update id="batchUpdateWatchLogSendMsg" parameterType="java.util.List">
  591. UPDATE fs_course_watch_log
  592. SET send_finish_msg = CASE
  593. <foreach collection="list" item="item">
  594. WHEN log_id = #{item.logId} THEN #{item.sendFinishMsg}
  595. </foreach>
  596. ELSE send_finish_msg
  597. END
  598. WHERE log_id IN
  599. <foreach collection="list" item="item" open="(" separator="," close=")">
  600. #{item.logId}
  601. </foreach>
  602. </update>
  603. <update id="batchUpdateFsUserWatchLog" parameterType="java.util.List">
  604. UPDATE fs_course_watch_log
  605. SET
  606. duration = CASE
  607. <foreach collection="list" item="item" index="index">
  608. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
  609. CASE
  610. <!-- 仅当传入的duration > 当前值时才更新 -->
  611. WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
  612. ELSE duration <!-- 如果 duration 为 null,保持原值 -->
  613. END
  614. </foreach>
  615. END,
  616. last_heartbeat_time = CASE
  617. <foreach collection="list" item="item" index="index">
  618. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
  619. CASE
  620. WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
  621. ELSE last_heartbeat_time <!-- 如果 last_heartbeat_time 为 null,保持原值 -->
  622. END
  623. </foreach>
  624. END,
  625. finish_time = CASE
  626. <foreach collection="list" item="item" index="index">
  627. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
  628. CASE
  629. WHEN finish_time IS NULL THEN #{item.finishTime} <!-- 如果表中 finish_time 为 null,更新为传入的值 -->
  630. ELSE finish_time <!-- 如果表中 finish_time 不为 null,保持原值 -->
  631. END
  632. </foreach>
  633. END,
  634. log_type = CASE
  635. <foreach collection="list" item="item" index="index">
  636. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
  637. CASE
  638. WHEN log_type = 2 THEN log_type <!-- 如果 log_type 已经是 2,保持原值 -->
  639. WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType} <!-- 如果 log_type 不是 2,更新为传入的值 -->
  640. ELSE log_type <!-- 其他情况保持原值 -->
  641. END
  642. </foreach>
  643. END
  644. WHERE
  645. (video_id, user_id, company_user_id) IN
  646. <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
  647. (#{item.videoId}, #{item.userId}, #{item.companyUserId})
  648. </foreach>
  649. </update>
  650. <update id="batchUpdateWatchLogIsOpen">
  651. UPDATE fs_course_watch_log
  652. SET
  653. duration = CASE
  654. <foreach collection="list" item="item" index="index">
  655. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
  656. CASE
  657. <!-- 仅当传入的duration > 当前值时才更新 -->
  658. WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
  659. ELSE duration <!-- 如果 duration 为 null,保持原值 -->
  660. END
  661. </foreach>
  662. END,
  663. last_heartbeat_time = CASE
  664. <foreach collection="list" item="item" index="index">
  665. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
  666. CASE
  667. WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
  668. ELSE last_heartbeat_time <!-- 如果 last_heartbeat_time 为 null,保持原值 -->
  669. END
  670. </foreach>
  671. END,
  672. finish_time = CASE
  673. <foreach collection="list" item="item" index="index">
  674. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
  675. CASE
  676. WHEN finish_time IS NULL THEN #{item.finishTime} <!-- 如果表中 finish_time 为 null,更新为传入的值 -->
  677. ELSE finish_time <!-- 如果表中 finish_time 不为 null,保持原值 -->
  678. END
  679. </foreach>
  680. END,
  681. log_type = CASE
  682. <foreach collection="list" item="item" index="index">
  683. WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
  684. CASE
  685. WHEN log_type = 2 THEN log_type <!-- 如果 log_type 已经是 2,保持原值 -->
  686. WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType} <!-- 如果 log_type 不是 2,更新为传入的值 -->
  687. ELSE log_type <!-- 其他情况保持原值 -->
  688. END
  689. </foreach>
  690. END
  691. WHERE
  692. (video_id, user_id) IN
  693. <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
  694. (#{item.videoId}, #{item.userId})
  695. </foreach>
  696. </update>
  697. <select id="selectListBytrainingCampId" resultType="com.fs.course.vo.FsCourseWatchLogVO">
  698. select
  699. uc.course_name,v.title as video_name,
  700. watch.log_id,
  701. watch.user_id,
  702. watch.finish_time,
  703. watch.send_finish_msg,
  704. watch.sop_id,
  705. watch.video_id,
  706. watch.reward_type,
  707. watch.log_type,
  708. watch.create_time,
  709. watch.update_time,
  710. watch.qw_external_contact_id,
  711. watch.duration,
  712. watch.qw_user_id,
  713. watch.company_user_id,
  714. watch.company_id,
  715. watch.course_id,
  716. watch.camp_period_time
  717. from
  718. fs_user_course_training_camp camp
  719. left join fs_user_course_period period on
  720. camp.training_camp_id = period.training_camp_id
  721. left join fs_course_watch_log watch on
  722. period.period_id = watch.period_id
  723. left join fs_user_course uc on uc.course_id = watch.course_id
  724. left join fs_user_course_video v on v.video_id = watch.video_id
  725. <where>
  726. `period`.del_flag = '0' and watch.log_type &lt;&gt; 3
  727. <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
  728. <if test="userId != null">and watch.user_id = #{userId}</if>
  729. <if test="periodId != null">and `period`.period_id = #{periodId}</if>
  730. </where>
  731. </select>
  732. <select id="selectFsCourseWatchLogListVOexport" resultType="com.fs.course.vo.FsCourseWatchLogListVO">
  733. SELECT
  734. l.log_id,
  735. l.project AS project,
  736. l.period_id,
  737. l.user_id,
  738. l.log_type,
  739. SEC_TO_TIME(l.duration) AS duration,
  740. l.camp_period_time,
  741. l.finish_time,
  742. l.send_type,
  743. l.create_time,
  744. l.update_time,
  745. l.last_heartbeat_time,
  746. l.company_id,
  747. l.company_user_id,
  748. l.course_id,
  749. l.video_id,
  750. l.qw_user_id,
  751. l.qw_external_contact_id,
  752. l.sop_id,
  753. qec.create_time as qec_create_time
  754. FROM
  755. fs_course_watch_log l LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
  756. left join fs_user u on u.user_id = l.user_id
  757. left join company_user cu on cu.user_id = l.company_user_id
  758. <where>
  759. <if test ='maps.sendType !=null'>
  760. and l.send_type = #{maps.sendType}
  761. </if>
  762. <if test ='maps.userId !=null'>
  763. and l.user_id = #{maps.userId}
  764. </if>
  765. <if test ='maps.qwExternalContactId !=null'>
  766. and l.qw_external_contact_id = #{maps.qwExternalContactId}
  767. </if>
  768. <if test ='maps.qwUserId !=null'>
  769. and l.qw_user_id = #{maps.qwUserId}
  770. </if>
  771. <if test ='maps.courseId !=null'>
  772. and l.course_id = #{maps.courseId}
  773. </if>
  774. <if test ='maps.videoId !=null'>
  775. and l.video_id = #{maps.videoId}
  776. </if>
  777. <if test ='maps.logType !=null'>
  778. and l.log_type = #{maps.logType}
  779. </if>
  780. <if test ='maps.companyId !=null'>
  781. and l.company_id = #{maps.companyId}
  782. </if>
  783. <if test ='maps.companyUserId !=null'>
  784. and l.company_user_id = #{maps.companyUserId}
  785. </if>
  786. <if test ='maps.companyUserName !=null and maps.companyUserName!=""'>
  787. and cu.nick_name like concat('%', #{maps.companyUserName}, '%')
  788. </if>
  789. <if test ='maps.nickName !=null and maps.nickName!=""'>
  790. and u.nick_name like concat('%', #{maps.nickName}, '%')
  791. </if>
  792. <if test ='maps.externalUserName !=null and maps.externalUserName!=""'>
  793. and qec.name like concat('%', #{maps.externalUserName}, '%')
  794. </if>
  795. <if test= 'maps.qecSTime != null '>
  796. and DATE(qec.create_time) &gt;= DATE(#{maps.qecSTime})
  797. </if>
  798. <if test='maps.qecETime != null '>
  799. and DATE(qec.create_time) &lt;= DATE(#{maps.qecETime})
  800. </if>
  801. <if test= 'maps.sTime != null '>
  802. and DATE(l.create_time) &gt;= DATE(#{maps.sTime})
  803. </if>
  804. <if test='maps.eTime != null '>
  805. and DATE(l.create_time) &lt;= DATE(#{maps.eTime})
  806. </if>
  807. <if test= 'maps.scheduleStartTime != null '>
  808. and DATE(l.camp_period_time) &gt;= DATE(#{maps.scheduleStartTime})
  809. </if>
  810. <if test='maps.scheduleEndTime != null '>
  811. and DATE(l.camp_period_time) &lt;= DATE(#{maps.scheduleEndTime})
  812. </if>
  813. <if test= 'maps.upSTime != null '>
  814. and DATE(l.update_time) &gt;= DATE(#{maps.upSTime})
  815. </if>
  816. <if test='maps.upETime != null '>
  817. and DATE(l.update_time) &lt;= DATE(#{maps.upETime})
  818. </if>
  819. <if test="maps.sopIds != null and maps.sopIds.size() > 0">
  820. and l.sop_id in
  821. <foreach item="sopId" index="index" collection="maps.sopIds" open="(" separator="," close=")">
  822. #{sopId}
  823. </foreach>
  824. </if>
  825. <if test="maps.periodIds != null and maps.periodIds.size() > 0">
  826. and l.period_id in
  827. <foreach item="periodId" index="index" collection="maps.periodIds" open="(" separator="," close=")">
  828. #{periodId}
  829. </foreach>
  830. </if>
  831. </where>
  832. order by l.finish_time desc,l.update_time desc,l.create_time desc
  833. </select>
  834. <select id="getUserCountByCampId" resultType="java.lang.Integer">
  835. select count(distinct cwl.user_id)
  836. from fs_user_course_period ucp
  837. inner join fs_course_watch_log cwl on ucp.period_id = cwl.period_id
  838. where ucp.training_camp_id = #{trainingCampId}
  839. </select>
  840. <select id="selectFsCourseWatchLogStatisticsListByCompanyVO"
  841. resultType="com.fs.course.vo.FsCourseWatchLogStatisticsListByCompanyVO">
  842. SELECT
  843. o.video_id,
  844. o.company_id,
  845. comp.company_name,
  846. o.qw_user_id,
  847. DATE(o.create_time) create_time,
  848. v.title videoName,
  849. uc.course_name,
  850. SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,
  851. SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,
  852. SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,
  853. SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4
  854. FROM
  855. fs_course_watch_log o
  856. LEFT JOIN fs_user_course_video v ON v.video_id = o.video_id
  857. LEFT JOIN company comp ON comp.company_id = o.company_id
  858. LEFT JOIN qw_user qu ON qu.id = o.qw_user_id
  859. LEFT JOIN fs_user_course uc ON uc.course_id = v.course_id
  860. <where>
  861. <if test="sendType != null">
  862. and send_type = #{sendType}
  863. </if>
  864. <if test="companyId != null">
  865. and o.company_id = #{companyId}
  866. </if>
  867. <if test="sTime != null">
  868. AND DATE (o.create_time) &gt;= DATE (#{sTime})
  869. </if>
  870. <if test="eTime != null">
  871. AND DATE (o.create_time) &lt;= DATE (#{eTime})
  872. </if>
  873. <if test="courseId != null">
  874. and o.course_id = #{courseId}
  875. </if>
  876. <if test="videoId != null">
  877. and o.video_id = #{videoId}
  878. </if>
  879. </where>
  880. GROUP BY
  881. DATE (o.create_time),
  882. o.company_id
  883. ORDER BY
  884. comp.company_id,
  885. DATE (o.create_time)
  886. </select>
  887. </mapper>