|
|
@@ -1255,7 +1255,7 @@ FROM
|
|
|
LEFT JOIN company c ON log.company_id = c.company_id
|
|
|
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
|
|
|
LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
|
|
|
- WHERE log.send_type =1
|
|
|
+ WHERE log.send_type =1 and log.watch_type = 2
|
|
|
<include refid="commonConditions"/>
|
|
|
<if test="orderSTime != null and orderETime != null">
|
|
|
AND DATE(po.create_time) BETWEEN #{orderSTime} AND #{orderETime}
|
|
|
@@ -1267,7 +1267,6 @@ FROM
|
|
|
SELECT
|
|
|
log.user_id userId,
|
|
|
log.company_user_id companyUserId,
|
|
|
- log.period_id periodId,
|
|
|
log.log_id logId,
|
|
|
log.create_time courseTime,
|
|
|
cu.nick_name as salesName,
|
|
|
@@ -1275,11 +1274,13 @@ FROM
|
|
|
c.company_name AS salesCompany,
|
|
|
COUNT( DISTINCT u.user_id ) AS userCount,
|
|
|
COUNT( DISTINCT CASE WHEN u.STATUS = 1 THEN u.user_id END ) AS onlineUserCount,
|
|
|
- cv.title videoTitle,
|
|
|
COUNT(DISTINCT log.log_id) AS totalLogCount,
|
|
|
COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
|
|
|
COUNT(DISTINCT CASE WHEN log.log_type IN ('1', '3', '4') THEN log.log_id END) AS unfinishedCount,
|
|
|
- COUNT(DISTINCT log.log_id)-COUNT(DISTINCT log.user_id) AS notWatchedCount
|
|
|
+ COUNT(DISTINCT log.log_id)-COUNT(DISTINCT log.user_id) AS notWatchedCount,
|
|
|
+ COUNT(DISTINCT log.log_id) - COUNT(DISTINCT a.watch_log_id) AS notAnsweredCount,
|
|
|
+ COALESCE(SUM(rp.amount), 0) AS redPacketAmount,
|
|
|
+ COUNT(DISTINCT rp.log_id) AS redPacketCount
|
|
|
FROM
|
|
|
fs_course_watch_log log
|
|
|
<if test="orderSTime != null and orderETime != null">
|
|
|
@@ -1289,10 +1290,11 @@ FROM
|
|
|
LEFT JOIN fs_user u on log.user_id= u.user_id
|
|
|
LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
|
|
|
LEFT JOIN company c ON d.company_id = c.company_id
|
|
|
- LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
|
|
|
- WHERE log.send_type =1
|
|
|
- <if test="sTime != null and eTime != null">
|
|
|
- AND DATE(log.create_time) BETWEEN #{sTime} AND #{eTime}
|
|
|
+ LEFT JOIN fs_course_answer_logs a ON a.watch_log_id = log.log_id
|
|
|
+ LEFT JOIN fs_course_red_packet_log rp ON rp.watch_log_id = log.log_id
|
|
|
+ WHERE log.send_type =1 and log.watch_type =2
|
|
|
+ <if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
|
|
|
+ AND log.create_time >= #{startDate} AND log.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
|
|
</if>
|
|
|
<if test="orderSTime != null and orderETime != null">
|
|
|
AND DATE(po.create_time) BETWEEN #{orderSTime} AND #{orderETime}
|
|
|
@@ -1456,7 +1458,8 @@ FROM
|
|
|
<select id="selectRedPacketStats" resultType="com.fs.his.vo.WatchLogReportVO">
|
|
|
SELECT
|
|
|
rp.watch_log_id as logId,
|
|
|
- SUM(rp.amount) AS redPacketAmount
|
|
|
+ SUM(rp.amount) AS redPacketAmount,
|
|
|
+ COUNT( rp.log_id) AS redPacketCount
|
|
|
FROM fs_course_red_packet_log rp
|
|
|
WHERE rp.watch_log_id IN
|
|
|
<foreach collection="logIds" item="logId" open="(" separator="," close=")">
|
|
|
@@ -1771,7 +1774,6 @@ FROM
|
|
|
<select id="selectCompanyBaseDataOptimized" resultType="com.fs.his.vo.WatchLogReportVO">
|
|
|
SELECT
|
|
|
d.dept_id AS deptId,
|
|
|
- log.period_id periodId,
|
|
|
d.dept_name AS salesDept,
|
|
|
c.company_name AS salesCompany,
|
|
|
COUNT(DISTINCT cu.user_id) AS salesCount,
|
|
|
@@ -1782,9 +1784,9 @@ FROM
|
|
|
LEFT JOIN fs_user u ON log.user_id = u.user_id
|
|
|
LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
|
|
|
LEFT JOIN company c ON d.company_id = c.company_id
|
|
|
- WHERE log.send_type = 1
|
|
|
+ WHERE log.send_type = 1 and log.watch_type = 2
|
|
|
<if test="sTime != null and eTime != null">
|
|
|
- AND DATE(log.create_time) BETWEEN #{sTime} AND #{eTime}
|
|
|
+ AND log.create_time >= #{sTime} AND log.create_time < DATE_ADD(#{eTime}, INTERVAL 1 DAY)
|
|
|
</if>
|
|
|
<!-- 销售公司 -->
|
|
|
<if test="companyId != null and companyId != ''">
|
|
|
@@ -1817,8 +1819,63 @@ FROM
|
|
|
<if test="nickName != null and nickName != ''">
|
|
|
AND u.nick_name LIKE CONCAT('%', #{nickName}, '%')
|
|
|
</if>
|
|
|
- GROUP BY d.dept_id, d.dept_name,log.period_id, c.company_name
|
|
|
+ GROUP BY d.dept_id
|
|
|
</select>
|
|
|
+
|
|
|
+ <!-- 公司维度合并查询(基础数据+统计数据) -->
|
|
|
+ <select id="selectCompanyDeptStatsMerged" resultType="com.fs.his.vo.WatchLogReportVO">
|
|
|
+ SELECT
|
|
|
+ d.dept_id AS deptId,
|
|
|
+ d.dept_name AS salesDept,
|
|
|
+ c.company_name AS salesCompany,
|
|
|
+ COUNT(DISTINCT cu.user_id) AS salesCount,
|
|
|
+ COUNT(DISTINCT u.user_id) AS userCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN u.STATUS = 1 THEN u.user_id END) AS onlineUserCount,
|
|
|
+ COUNT(DISTINCT log.log_id) AS totalLogCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN log.log_type IN ('1', '3', '4') THEN log.log_id END) AS unfinishedCount,
|
|
|
+ COUNT(DISTINCT log.user_id) - COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.user_id END) AS notWatchedCount,
|
|
|
+ COUNT(DISTINCT log.log_id) - COUNT(DISTINCT a.watch_log_id) AS notAnsweredCount,
|
|
|
+ COALESCE(SUM(rp.amount), 0) AS redPacketAmount,
|
|
|
+ COUNT(DISTINCT rp.log_id) AS redPacketCount
|
|
|
+ FROM fs_course_watch_log log
|
|
|
+ LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
|
|
|
+ LEFT JOIN fs_user u ON log.user_id = u.user_id
|
|
|
+ LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
|
|
|
+ LEFT JOIN company c ON d.company_id = c.company_id
|
|
|
+ LEFT JOIN fs_course_answer_logs a ON a.watch_log_id = log.log_id
|
|
|
+ LEFT JOIN fs_course_red_packet_log rp ON rp.watch_log_id = log.log_id
|
|
|
+ WHERE log.send_type = 1 AND log.watch_type = 2
|
|
|
+ <if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
|
|
|
+ AND log.create_time >= #{startDate} AND log.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
|
|
+ </if>
|
|
|
+ <if test="companyId != null and companyId != ''">
|
|
|
+ AND c.company_id = #{companyId}
|
|
|
+ </if>
|
|
|
+ <if test="deptId != null and deptId != ''">
|
|
|
+ AND d.dept_id = #{deptId}
|
|
|
+ </if>
|
|
|
+ <if test="trainingCampId != null and trainingCampId != ''">
|
|
|
+ AND log.period_id IN (SELECT period_id FROM fs_user_course_period WHERE training_camp_id = #{trainingCampId})
|
|
|
+ </if>
|
|
|
+ <if test="periodId != null and periodId != ''">
|
|
|
+ AND log.period_id = #{periodId}
|
|
|
+ </if>
|
|
|
+ <if test="userId != null and userId != ''">
|
|
|
+ AND log.user_id = #{userId}
|
|
|
+ </if>
|
|
|
+ <if test="userPhone != null and userPhone != ''">
|
|
|
+ AND u.phone LIKE CONCAT('%', #{userPhone}, '%')
|
|
|
+ </if>
|
|
|
+ <if test="project != null and project != ''">
|
|
|
+ AND log.project = #{project}
|
|
|
+ </if>
|
|
|
+ <if test="nickName != null and nickName != ''">
|
|
|
+ AND u.nick_name LIKE CONCAT('%', #{nickName}, '%')
|
|
|
+ </if>
|
|
|
+ GROUP BY d.dept_id
|
|
|
+ </select>
|
|
|
+
|
|
|
<select id="selectAllDeptIds" resultType="java.lang.Long">
|
|
|
SELECT DISTINCT d.dept_id
|
|
|
FROM fs_course_watch_log log
|
|
|
@@ -1866,31 +1923,24 @@ FROM
|
|
|
SELECT
|
|
|
d.dept_id AS deptId,
|
|
|
log.user_id AS userId,
|
|
|
- log.period_id AS periodId,
|
|
|
log.log_id AS logId,
|
|
|
- cv.title videoTitle,
|
|
|
COUNT(DISTINCT log.log_id) AS totalLogCount,
|
|
|
COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
|
|
|
COUNT(DISTINCT CASE WHEN log.log_type IN ('1', '3', '4') THEN log.log_id END) AS unfinishedCount,
|
|
|
COUNT(DISTINCT log.user_id) - COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.user_id END) AS notWatchedCount
|
|
|
FROM fs_course_watch_log log
|
|
|
- LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
|
|
|
<if test="orderSTime != null and orderETime != null">
|
|
|
LEFT JOIN fs_package_order po ON po.user_id = log.user_id
|
|
|
</if>
|
|
|
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
|
|
|
LEFT JOIN company_dept d ON cu.dept_id = d.dept_id
|
|
|
- WHERE log.send_type = 1
|
|
|
+ WHERE log.send_type = 1 and log.watch_type = 2
|
|
|
AND d.dept_id IN
|
|
|
<foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
|
|
|
#{deptId}
|
|
|
</foreach>
|
|
|
- and log.period_id in
|
|
|
- <foreach collection="periodIds" item="periodId" open="(" separator="," close=")">
|
|
|
- #{periodId}
|
|
|
- </foreach>
|
|
|
<if test="sTime != null and eTime != null">
|
|
|
- AND DATE(log.create_time) BETWEEN #{sTime} AND #{eTime}
|
|
|
+ AND log.create_time >= #{sTime} AND log.create_time < DATE_ADD(#{eTime}, INTERVAL 1 DAY)
|
|
|
</if>
|
|
|
<if test="orderSTime != null and orderETime != null">
|
|
|
AND DATE(po.create_time) BETWEEN #{orderSTime} AND #{orderETime}
|
|
|
@@ -1911,7 +1961,7 @@ FROM
|
|
|
<if test="userId != null and userId != ''">
|
|
|
AND log.user_id = #{userId}
|
|
|
</if>
|
|
|
- GROUP BY d.dept_id,log.period_id
|
|
|
+ GROUP BY d.dept_id
|
|
|
</select>
|
|
|
<select id="selectCompanyBaseDataWithIds" resultType="com.fs.his.vo.WatchLogReportVO">
|
|
|
SELECT
|
|
|
@@ -2143,21 +2193,22 @@ FROM
|
|
|
<select id="selectAppSalesUserStats" resultType="com.fs.his.vo.AppSalesWatchLogReportVO">
|
|
|
SELECT
|
|
|
cu.user_id AS salesId,
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END) AS appUserCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL THEN u.user_id END) AS appUserCount,
|
|
|
<choose>
|
|
|
<when test="startDate != null and startDate != '' and endDate != null and endDate != ''">
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL AND u.register_date >= #{startDate} AND u.register_date < DATE_ADD(#{endDate}, INTERVAL 1 DAY) THEN u.user_id END)
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL AND u.app_create_time >= #{startDate} AND u.app_create_time < CONCAT(#{endDate}, ' 23:59:59') THEN u.user_id END)
|
|
|
</when>
|
|
|
<otherwise>
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END)
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL THEN u.user_id END)
|
|
|
</otherwise>
|
|
|
</choose> AS newAppUserCount
|
|
|
FROM fs_user u
|
|
|
- LEFT JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
|
|
|
- LEFT JOIN company_user cu ON cuu.company_user_id = cu.user_id
|
|
|
- LEFT JOIN company c ON cuu.company_id = c.company_id
|
|
|
- LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
|
|
|
- WHERE u.source IS NOT NULL
|
|
|
+ INNER JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
|
|
|
+ INNER JOIN company_user cu ON cuu.company_user_id = cu.user_id
|
|
|
+ INNER JOIN company c ON cuu.company_id = c.company_id
|
|
|
+ WHERE u.app_create_time IS NOT NULL
|
|
|
+ AND u.status = 1
|
|
|
+ AND cuu.status IN (0, 1)
|
|
|
<if test="companyId != null and companyId != ''">
|
|
|
AND cuu.company_id = #{companyId}
|
|
|
</if>
|
|
|
@@ -2174,23 +2225,21 @@ FROM
|
|
|
</select>
|
|
|
|
|
|
<!-- 销售维度基础数据+看课统计(合并查询) -->
|
|
|
- <select id="selectAppSalesWatchStats" resultType="com.fs.his.vo.AppSalesWatchLogReportVO">
|
|
|
+ <select id="selectAppSalesWatchStats" resultType="com.fs.his.vo.AppSalesWatchLogReportVO">
|
|
|
SELECT
|
|
|
cu.user_id AS salesId,
|
|
|
cu.nick_name AS salesName,
|
|
|
cd.dept_name AS salesDept,
|
|
|
c.company_name AS salesCompany,
|
|
|
- log.period_id AS periodId,
|
|
|
- log.video_id AS videoId,
|
|
|
- cv.title AS videoTitle,
|
|
|
cd.dept_id AS deptId,
|
|
|
c.company_id AS companyId,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '1' THEN log.log_id END) AS unfinishedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '3' THEN log.log_id END) AS notWatchedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN a.log_id IS NULL THEN log.log_id END) AS notAnsweredCount,
|
|
|
- COALESCE(SUM(rpl.amount), 0) AS redPacketAmount
|
|
|
- FROM fs_course_watch_log log
|
|
|
+ COUNT( CASE WHEN log.log_type = 2 THEN log.log_id END ) AS finishedCount,
|
|
|
+ COUNT(log.log_id)- COUNT(CASE WHEN log.log_type = 2 THEN log.log_id END )AS unfinishedCount,
|
|
|
+ COUNT( CASE WHEN log.log_type = 3 THEN log.log_id END ) AS notWatchedCount,
|
|
|
+ COUNT( a.watch_log_id ) answeredCount,
|
|
|
+ COALESCE ( SUM( rpl.amount ), 0 ) AS redPacketAmount,
|
|
|
+ COUNT( rpl.log_id) AS packetUserCount
|
|
|
+ FROM fs_course_watch_log log
|
|
|
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
|
|
|
LEFT JOIN company c ON log.company_id = c.company_id
|
|
|
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
|
|
|
@@ -2200,7 +2249,7 @@ FROM
|
|
|
WHERE log.send_type = 1
|
|
|
AND log.watch_type = 1
|
|
|
<include refid="commonConditions"/>
|
|
|
- GROUP BY cu.user_id, log.period_id, log.video_id
|
|
|
+ GROUP BY cu.user_id
|
|
|
ORDER BY cu.user_id
|
|
|
</select>
|
|
|
|
|
|
@@ -2241,22 +2290,24 @@ FROM
|
|
|
<select id="selectAppDeptUserStats" resultType="com.fs.his.vo.AppSalesWatchLogReportVO">
|
|
|
SELECT
|
|
|
cd.dept_id AS deptId,
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END) AS appUserCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL THEN u.user_id END) AS appUserCount,
|
|
|
<choose>
|
|
|
<when test="startDate != null and startDate != '' and endDate != null and endDate != ''">
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL AND u.register_date >= #{startDate} AND u.register_date < DATE_ADD(#{endDate}, INTERVAL 1 DAY) THEN u.user_id END)
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL AND u.app_create_time >= #{startDate} AND u.app_create_time < CONCAT(#{endDate}, ' 23:59:59') THEN u.user_id END)
|
|
|
</when>
|
|
|
<otherwise>
|
|
|
- COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END)
|
|
|
+ COUNT(DISTINCT CASE WHEN u.app_create_time IS NOT NULL THEN u.user_id END)
|
|
|
</otherwise>
|
|
|
</choose> AS newAppUserCount,
|
|
|
COUNT(DISTINCT cu.user_id) AS salesCount
|
|
|
FROM fs_user u
|
|
|
- LEFT JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
|
|
|
- LEFT JOIN company_user cu ON cuu.company_user_id = cu.user_id
|
|
|
- LEFT JOIN company c ON cuu.company_id = c.company_id
|
|
|
- LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
|
|
|
- WHERE u.source IS NOT NULL
|
|
|
+ INNER JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
|
|
|
+ INNER JOIN company_user cu ON cuu.company_user_id = cu.user_id
|
|
|
+ INNER JOIN company c ON cuu.company_id = c.company_id
|
|
|
+ INNER JOIN company_dept cd ON cu.dept_id = cd.dept_id
|
|
|
+ WHERE u.app_create_time IS NOT NULL
|
|
|
+ AND u.status = 1
|
|
|
+ AND cuu.status IN (0, 1)
|
|
|
<if test="companyId != null and companyId != ''">
|
|
|
AND cuu.company_id = #{companyId}
|
|
|
</if>
|
|
|
@@ -2275,18 +2326,16 @@ FROM
|
|
|
<!-- 销售部门维度基础数据+看课统计(合并查询) -->
|
|
|
<select id="selectAppDeptWatchStats" resultType="com.fs.his.vo.AppSalesWatchLogReportVO">
|
|
|
SELECT
|
|
|
- cd.dept_id AS deptId,
|
|
|
- cd.dept_name AS salesDept,
|
|
|
- c.company_name AS salesCompany,
|
|
|
- log.period_id AS periodId,
|
|
|
- log.video_id AS videoId,
|
|
|
- cv.title AS videoTitle,
|
|
|
- c.company_id AS companyId,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '1' THEN log.log_id END) AS unfinishedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN log.log_type = '3' THEN log.log_id END) AS notWatchedCount,
|
|
|
- COUNT(DISTINCT CASE WHEN a.log_id IS NULL THEN log.log_id END) AS notAnsweredCount,
|
|
|
- COALESCE(SUM(rpl.amount), 0) AS redPacketAmount
|
|
|
+ cd.dept_id AS deptId,
|
|
|
+ cd.dept_name AS salesDept,
|
|
|
+ c.company_name AS salesCompany,
|
|
|
+ c.company_id AS companyId,
|
|
|
+ COUNT( CASE WHEN log.log_type = 2 THEN log.log_id END ) AS finishedCount,
|
|
|
+ COUNT(log.log_id)- COUNT(CASE WHEN log.log_type = 2 THEN log.log_id END )AS unfinishedCount,
|
|
|
+ COUNT( CASE WHEN log.log_type = 3 THEN log.log_id END ) AS notWatchedCount,
|
|
|
+ COUNT( a.watch_log_id ) anscount,
|
|
|
+ COALESCE ( SUM( rpl.amount ), 0 ) AS redPacketAmount,
|
|
|
+ COUNT( rpl.log_id) AS packetUserCount
|
|
|
FROM fs_course_watch_log log
|
|
|
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
|
|
|
LEFT JOIN company c ON log.company_id = c.company_id
|
|
|
@@ -2297,7 +2346,7 @@ FROM
|
|
|
WHERE log.send_type = 1
|
|
|
AND log.watch_type = 1
|
|
|
<include refid="commonConditions"/>
|
|
|
- GROUP BY cd.dept_id, log.period_id, log.video_id
|
|
|
+ GROUP BY cd.dept_id
|
|
|
ORDER BY cd.dept_id
|
|
|
</select>
|
|
|
|