123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- <?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.FsStatisSalerWatchMapper"> <!-- 请替换为你的Mapper接口的完整路径 -->
- <!-- 结果映射 -->
- <resultMap id="BaseResultMap" type="com.fs.statis.domain.FsStatisSalerWatch"> <!-- 请替换为你的Entity的完整路径 -->
- <id column="id" property="id" jdbcType="INTEGER"/>
- <result column="dept_id" property="deptId" jdbcType="INTEGER"/>
- <result column="company_user_id" property="companyUserId" jdbcType="INTEGER"/>
- <result column="train_camp_num" property="trainCampNum" jdbcType="INTEGER"/>
- <result column="not_registered_num" property="notRegisteredNum" jdbcType="INTEGER"/>
- <result column="registered_num" property="registeredNum" jdbcType="INTEGER"/>
- <result column="reg_rate" property="regRate" jdbcType="FLOAT"/>
- <result column="finished_rate" property="finishedRate" jdbcType="FLOAT"/>
- <result column="offline_total" property="offlineTotal" jdbcType="INTEGER"/>
- <result column="offline_not_part" property="offlineNotPart" jdbcType="INTEGER"/> <!-- 对应修正后的 offlineNotPart -->
- <result column="offline_not_watched" property="offlineNotWatched" jdbcType="INTEGER"/>
- <result column="online_total" property="onlineTotal" jdbcType="INTEGER"/>
- <result column="online_online_rate" property="onlineOnlineRate" jdbcType="FLOAT"/>
- <result column="online_playback_comple_rate" property="onlinePlaybackCompleRate" jdbcType="FLOAT"/>
- <result column="online_incomplete_playback" property="onlineIncompletePlayback" jdbcType="INTEGER"/>
- <result column="online_complete_playback" property="onlineCompletePlayback" jdbcType="INTEGER"/>
- </resultMap>
- <!-- 通用查询结果列 -->
- <sql id="Base_Column_List">
- id, dept_id, company_user_id, train_camp_num, not_registered_num, registered_num,
- reg_rate, finished_rate, offline_total, offline_not_part, offline_not_watched,
- online_total, online_online_rate, online_playback_comple_rate,
- online_incomplete_playback, online_complete_playback
- </sql>
- <select id="queryList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
- SELECT
- company_user_id,
- ANY_VALUE(dept_id) as dept_id,
- SUM(train_camp_num) as train_camp_num,
- SUM(not_registered_num) as not_registered_num,
- SUM(registered_num) as registered_num,
- SUM(completed_num) as completed_num,
- SUM(interrupt_num) as interrupt_num,
- SUM(offline_total) as offline_total,
- SUM(offline_not_part) as offline_not_part,
- SUM(offline_not_watched) as offline_not_watched,
- SUM(online_total) as online_total,
- SUM(online_incomplete_playback) as online_incomplete_playback,
- SUM(online_complete_playback) as online_complete_playback,
- sum(send_num) as send_num,
- sum(qw_repeat_num) as qw_repeat_num,
- sum(user_repeat_num) as user_repeat_num,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(registered_num) * 1.0 / SUM(train_camp_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(completed_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as finished_rate
- FROM fs_statis_saler_watch
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND send_num = 0
- </when>
- <otherwise>
- AND send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY company_user_id
- </select>
- <select id="queryPeriodList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
- SELECT
- period_id,
- any_value(sop_id) as sop_id,
- SUM(train_camp_num) as train_camp_num,
- SUM(not_registered_num) as not_registered_num,
- SUM(registered_num) as registered_num,
- SUM(completed_num) as completed_num,
- SUM(interrupt_num) as interrupt_num,
- SUM(offline_total) as offline_total,
- SUM(offline_not_part) as offline_not_part,
- SUM(offline_not_watched) as offline_not_watched,
- SUM(online_total) as online_total,
- SUM(online_incomplete_playback) as online_incomplete_playback,
- SUM(online_complete_playback) as online_complete_playback,
- sum(send_num) as send_num,
- sum(qw_repeat_num) as qw_repeat_num,
- sum(user_repeat_num) as user_repeat_num,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(registered_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(completed_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as finished_rate,
- CASE WHEN SUM(online_total) > 0
- THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
- ELSE 0 END as online_online_rate,
- CASE WHEN SUM(online_total) > 0
- THEN ROUND(SUM(online_complete_playback) * 1.0 / SUM(online_total), 4)
- ELSE 0 END as online_playback_comple_rate
- FROM fs_statis_saler_watch
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND send_num = 0
- </when>
- <otherwise>
- AND send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY period_id,sop_id
- </select>
- <select id="queryTodayList" resultType="com.fs.statis.domain.FsStatisSalerWatch">
- SELECT
- data_date,
- SUM(train_camp_num) as train_camp_num,
- SUM(not_registered_num) as not_registered_num,
- SUM(registered_num) as registered_num,
- SUM(completed_num) as completed_num,
- SUM(interrupt_num) as interrupt_num,
- SUM(offline_total) as offline_total,
- SUM(offline_not_part) as offline_not_part,
- SUM(offline_not_watched) as offline_not_watched,
- SUM(online_total) as online_total,
- SUM(online_incomplete_playback) as online_incomplete_playback,
- SUM(online_complete_playback) as online_complete_playback,
- sum(send_num) as send_num,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(registered_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(completed_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as finished_rate
- FROM fs_statis_saler_watch
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND send_num = 0
- </when>
- <otherwise>
- AND send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY data_date
- order by data_date desc
- </select>
- <select id="queryListExport" resultType="com.fs.statis.domain.FsStatisSalerWatch">
- SELECT
- concat(u.user_name,'_',u.nick_name) as company_user_name,
- ANY_VALUE(concat(dept.dept_id,'_',dept.dept_name)) as dept_name,
- SUM(watch.train_camp_num) as train_camp_num,
- SUM(watch.not_registered_num) as not_registered_num,
- SUM(watch.registered_num) as registered_num,
- SUM(watch.completed_num) as completed_num,
- SUM(watch.interrupt_num) as interrupt_num,
- SUM(watch.offline_total) as offline_total,
- SUM(watch.offline_not_part) as offline_not_part,
- SUM(watch.offline_not_watched) as offline_not_watched,
- SUM(watch.online_total) as online_total,
- SUM(watch.online_incomplete_playback) as online_incomplete_playback,
- SUM(watch.online_complete_playback) as online_complete_playback,
- sum(watch.send_num) as send_num,
- sum(watch.qw_repeat_num) as qw_repeat_num,
- sum(watch.user_repeat_num) as user_repeat_num,
- CASE WHEN SUM(watch.send_num) > 0
- THEN ROUND(SUM(watch.registered_num) * 1.0 / SUM(watch.train_camp_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(watch.send_num) > 0
- THEN ROUND(SUM(watch.completed_num) * 1.0 / SUM(watch.send_num), 4)
- ELSE 0 END as finished_rate
- FROM fs_statis_saler_watch watch
- LEFT JOIN company_dept dept
- on dept.del_flag=0 and watch.dept_id=dept.dept_id
- LEFT JOIN company_user u
- on u.del_flag=0 and watch.company_user_id=u.user_id
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND watch.company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND watch.period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND watch.data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND watch.send_num = 0
- </when>
- <otherwise>
- AND watch.send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY watch.company_user_id
- </select>
- <select id="generateSopData" resultType="com.fs.statis.domain.FsStatisSalerWatch">
- INSERT INTO fs_statis_saler_watch (
- company_user_id,
- sop_id,
- period_id,
- data_date,
- qw_repeat_num,
- user_repeat_num,
- dept_id
- )
- SELECT
- p.company_user_id as company_user_id,
- p.sop_id as sop_id,
- p.period_id as period_id,
- #{date} as data_date,
- -- 企微重粉统计
- ifnull(sum(u.qw_repeat),0) AS qw_repeat_num,
- -- 小程序(看课)重粉统计
- ifnull(sum(u.user_repeat),0) AS user_repeat_num,
- p.dept_id
- FROM fs_statis_temp_param p
- LEFT JOIN fs_statis_temp_fsuser fu ON p.period_id = fu.period_id
- AND p.qw_user_id = fu.qw_user_id
- LEFT JOIN fs_user u ON fu.fs_user_id = u.user_id
- WHERE p.company_user_id IS NOT NULL
- AND p.sop_id IS NOT NULL
- AND p.period_id IS NOT NULL
- GROUP BY
- p.sop_id,
- p.period_id,
- p.company_user_id
- ON DUPLICATE key update
- qw_repeat_num = VALUES(qw_repeat_num),
- user_repeat_num = VALUES(user_repeat_num)
- </select>
- <select id="querySopRepeatData" resultType="com.fs.statis.domain.FsStatisTempFsuser">
- SELECT DISTINCT
- suli_filtered.user_logs_id as period_id,
- suli_filtered.fs_user_id as fs_user_id,
- suli_filtered.qw_user_id as qw_user_id
- FROM (
- SELECT
- suli_ct.user_logs_id,
- suli_ct.fs_user_id,
- suli_ct.qw_user_id,
- suli_ct.sop_id
- FROM
- sop_user_logs_info suli_ct
- WHERE
- suli_ct.create_time = #{date}
- AND suli_ct.fs_user_id IS NOT NULL
- AND suli_ct.fs_user_id != 0
- and suli_ct.qw_user_id is not null
- UNION ALL
- SELECT
- suli_ut.user_logs_id,
- suli_ut.fs_user_id,
- suli_ut.qw_user_id,
- suli_ut.sop_id
- FROM
- sop_user_logs_info suli_ut
- WHERE
- suli_ut.update_time = #{date}
- AND suli_ut.fs_user_id IS NOT NULL
- AND suli_ut.fs_user_id != 0
- AND suli_ut.create_time != #{date}
- and suli_ut.qw_user_id is not null
- ) suli_filtered
- INNER JOIN
- fs_statis_temp_param fstp
- ON fstp.period_id = suli_filtered.user_logs_id
- AND fstp.sop_id = suli_filtered.sop_id
- </select>
- <select id="queryPeriodListExport" resultType="com.fs.statis.domain.FsStatisSopWatch">
- SELECT
- period_id,
- SUM(train_camp_num) as train_camp_num,
- SUM(not_registered_num) as not_registered_num,
- SUM(registered_num) as registered_num,
- SUM(completed_num) as completed_num,
- SUM(interrupt_num) as interrupt_num,
- SUM(offline_total) as offline_total,
- SUM(offline_not_part) as offline_not_part,
- SUM(offline_not_watched) as offline_not_watched,
- SUM(online_total) as online_total,
- SUM(online_incomplete_playback) as online_incomplete_playback,
- SUM(online_complete_playback) as online_complete_playback,
- sum(send_num) as send_num,
- sum(qw_repeat_num) as qw_repeat_num,
- sum(user_repeat_num) as user_repeat_num,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(registered_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(completed_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as finished_rate
- FROM fs_statis_saler_watch
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND send_num = 0
- </when>
- <otherwise>
- AND send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY period_id,sop_id
- </select>
- <select id="queryEveryDayListExport" resultType="com.fs.statis.domain.FsStatisEveryDayWatch">
- SELECT
- data_date,
- SUM(train_camp_num) as train_camp_num,
- SUM(not_registered_num) as not_registered_num,
- SUM(registered_num) as registered_num,
- SUM(completed_num) as completed_num,
- SUM(interrupt_num) as interrupt_num,
- SUM(offline_total) as offline_total,
- SUM(offline_not_part) as offline_not_part,
- SUM(offline_not_watched) as offline_not_watched,
- SUM(online_total) as online_total,
- SUM(online_incomplete_playback) as online_incomplete_playback,
- SUM(online_complete_playback) as online_complete_playback,
- sum(send_num) as send_num,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(registered_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as reg_rate,
- CASE WHEN SUM(send_num) > 0
- THEN ROUND(SUM(completed_num) * 1.0 / SUM(send_num), 4)
- ELSE 0 END as finished_rate
- FROM fs_statis_saler_watch
- <where>
- <if test="userIds != null and userIds.size() > 0">
- AND company_user_id IN
- <foreach collection="userIds" open="(" close=")" separator="," item="item">
- ${item}
- </foreach>
- </if>
- <if test="periodList != null and periodList.size() > 0">
- AND period_id IN
- <foreach collection="periodList" open="(" close=")" separator="," item="item">
- #{item}
- </foreach>
- </if>
- <if test="startDate != null and endDate != null">
- AND data_date BETWEEN #{startDate} AND #{endDate}
- </if>
- <choose>
- <when test="includeSend0 != null and includeSend0">
- AND send_num = 0
- </when>
- <otherwise>
- AND send_num != 0
- </otherwise>
- </choose>
- </where>
- GROUP BY data_date
- order by data_date desc
- </select>
- <insert id="batchSave">
- INSERT INTO fs_statis_saler_watch (
- dept_id, company_user_id, train_camp_num,
- not_registered_num, registered_num,completed_num,interrupt_num, reg_rate,
- finished_rate, offline_total, offline_not_part,
- offline_not_watched, online_total, online_online_rate,
- online_playback_comple_rate, online_incomplete_playback,
- online_complete_playback,period_id,data_date,sop_id,send_num
- ) VALUES
- <foreach collection="list" item="item" separator=",">
- (
- #{item.deptId,jdbcType=INTEGER},
- #{item.companyUserId,jdbcType=INTEGER},
- #{item.trainCampNum,jdbcType=INTEGER},
- #{item.notRegisteredNum,jdbcType=INTEGER},
- #{item.registeredNum,jdbcType=INTEGER},
- #{item.completedNum,jdbcType=INTEGER},
- #{item.interruptNum,jdbcType=INTEGER},
- #{item.regRate,jdbcType=FLOAT},
- #{item.finishedRate,jdbcType=FLOAT},
- #{item.offlineTotal,jdbcType=INTEGER},
- #{item.offlineNotPart,jdbcType=INTEGER},
- #{item.offlineNotWatched,jdbcType=INTEGER},
- #{item.onlineTotal,jdbcType=INTEGER},
- #{item.onlineOnlineRate,jdbcType=FLOAT},
- #{item.onlinePlaybackCompleRate,jdbcType=FLOAT},
- #{item.onlineIncompletePlayback,jdbcType=INTEGER},
- #{item.onlineCompletePlayback,jdbcType=INTEGER},
- #{item.periodId,jdbcType=VARCHAR},
- #{item.dataDate,jdbcType=VARCHAR},
- #{item.sopId,jdbcType=VARCHAR},
- #{item.sendNum,jdbcType=VARCHAR}
- )
- </foreach>
- ON DUPLICATE KEY UPDATE
- train_camp_num = VALUES(train_camp_num),
- not_registered_num = VALUES(not_registered_num),
- registered_num = VALUES(registered_num),
- completed_num = VALUES(completed_num),
- interrupt_num = VALUES(interrupt_num),
- reg_rate = VALUES(reg_rate),
- finished_rate = VALUES(finished_rate),
- offline_total = VALUES(offline_total),
- offline_not_part = VALUES(offline_not_part),
- offline_not_watched = VALUES(offline_not_watched),
- online_total = VALUES(online_total),
- online_online_rate = VALUES(online_online_rate),
- online_playback_comple_rate = VALUES(online_playback_comple_rate),
- online_incomplete_playback = VALUES(online_incomplete_playback),
- online_complete_playback = VALUES(online_complete_playback)
- </insert>
- <insert id="generateData">
- REPLACE INTO fs_statis_saler_watch (
- company_user_id,
- sop_id,
- period_id,
- data_date,
- send_num,
- train_camp_num,
- not_registered_num,
- completed_num,
- interrupt_num,
- dept_id
- )
- SELECT
- temp.company_user_id,
- temp.sop_id,
- temp.period_id,
- temp.this_date as data_date,
- COALESCE(log_stats.send_count, 0) as send_num,
- COALESCE(log_stats.period_count, 0) as train_camp_num,
- COALESCE(log_stats.not_register_count, 0) as not_registered_num,
- COALESCE(log_stats.completed_count, 0) as completed_num,
- COALESCE(log_stats.interrupt_count, 0) as interrupt_num,
- temp.dept_id
- FROM fs_statis_temp_param temp
- LEFT JOIN (
- -- 一次性统计所有指标,避免重复扫描
- SELECT
- company_user_id,
- sop_id,
- qw_user_id,
- camp_period_time,
- COUNT(DISTINCT log_id) as send_count,
- COUNT(DISTINCT qw_external_contact_id) as period_count,
- COUNT(DISTINCT CASE WHEN log_type = 3 THEN log_id END) as not_register_count,
- COUNT(DISTINCT CASE WHEN log_type = 2 THEN log_id END) as completed_count,
- COUNT(DISTINCT CASE WHEN (log_type = 4 or log_type = 1) THEN log_id END) as interrupt_count
- FROM fs_course_watch_log
- WHERE (DATE(update_time) = #{date} OR DATE(create_time) = #{date})
- GROUP BY company_user_id, sop_id, qw_user_id, camp_period_time
- ) log_stats ON temp.company_user_id = log_stats.company_user_id
- AND temp.sop_id = log_stats.sop_id
- AND temp.start_time = log_stats.camp_period_time
- AND temp.qw_user_id = log_stats.qw_user_id
- WHERE temp.this_date IS NOT NULL
- UNION ALL
- -- 孤立数据处理部分保持不变,但也进行了优化
- SELECT
- orphan_summary.company_user_id,
- orphan_summary.sop_id,
- '-1' as period_id,
- #{date} as data_date,
- orphan_summary.send_num,
- orphan_summary.train_camp_num,
- orphan_summary.not_registered_num,
- orphan_summary.completed_num,
- orphan_summary.interrupt_num,
- cu.dept_id as dept_id
- FROM (
- SELECT
- orphan_data.company_user_id,
- orphan_data.sop_id,
- SUM(orphan_data.send_count) as send_num,
- SUM(orphan_data.period_count) as train_camp_num,
- SUM(orphan_data.not_registered_num) as not_registered_num,
- SUM(orphan_data.completed_count) as completed_num,
- SUM(orphan_data.interrupt_num) as interrupt_num
- FROM (
- SELECT
- log_data.company_user_id,
- log_data.sop_id,
- log_data.qw_user_id,
- log_data.camp_period_time,
- COUNT(DISTINCT log_data.log_id) as send_count,
- COUNT(DISTINCT log_data.qw_external_contact_id) as period_count,
- COUNT(DISTINCT CASE WHEN log_data.log_type = 3 THEN log_data.log_id END) as not_registered_num,
- COUNT(DISTINCT CASE WHEN log_data.log_type = 2 THEN log_data.log_id END) as completed_count,
- COUNT(DISTINCT CASE WHEN (log_data.log_type = 4 or log_type = 1) THEN log_data.log_id END) as interrupt_num
- FROM fs_course_watch_log log_data
- WHERE (DATE(log_data.update_time) = #{date} OR DATE(log_data.create_time) = #{date})
- GROUP BY log_data.company_user_id, log_data.sop_id, log_data.qw_user_id, log_data.camp_period_time
- ) orphan_data
- WHERE NOT EXISTS (
- SELECT 1
- FROM fs_statis_temp_param temp
- WHERE temp.company_user_id = orphan_data.company_user_id
- AND ((temp.sop_id = orphan_data.sop_id) OR (temp.sop_id IS NULL AND orphan_data.sop_id IS NULL))
- AND temp.qw_user_id = orphan_data.qw_user_id
- AND ((temp.start_time = orphan_data.camp_period_time) OR (temp.start_time IS NULL AND orphan_data.camp_period_time IS NULL))
- )
- GROUP BY orphan_data.company_user_id, orphan_data.sop_id
- ) orphan_summary
- LEFT JOIN company_user cu ON cu.user_id = orphan_summary.company_user_id
- WHERE cu.dept_id IS NOT NULL AND cu.dept_id != 0 -- 过滤掉dept_id为NULL或0的记录
- </insert>
- </mapper>
|