数据统计
This commit is contained in:
@@ -204,4 +204,157 @@
|
||||
<include refid="Where_Clause" />
|
||||
</select>
|
||||
|
||||
<!-- 获取本周课程和文章的总学习时长统计 -->
|
||||
<select id="getWeeklyStudyDurationByType" resultType="map">
|
||||
SELECT
|
||||
CASE
|
||||
WHEN lr.resource_type = 2 THEN '课程'
|
||||
WHEN lr.resource_type = 1 THEN '文章'
|
||||
ELSE '其他'
|
||||
END AS resourceType,
|
||||
COUNT(DISTINCT lr.user_id) AS userCount,
|
||||
COALESCE(SUM(lr.duration), 0) AS totalDuration,
|
||||
COUNT(*) AS studyCount
|
||||
FROM tb_learning_record lr
|
||||
INNER JOIN tb_sys_user u ON lr.user_id = u.id AND u.deleted = 0
|
||||
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
|
||||
INNER JOIN tb_sys_user_dept_role udr ON u.id = udr.user_id AND udr.deleted = 0
|
||||
INNER JOIN tb_sys_dept user_dept ON udr.dept_id = user_dept.dept_id AND user_dept.deleted = 0
|
||||
INNER JOIN (
|
||||
SELECT dept_id, dept_path FROM tb_sys_dept WHERE deleted = 0 AND dept_id IN (
|
||||
<foreach collection="userDeptRoles" item="udr" separator=",">
|
||||
#{udr.deptID}
|
||||
</foreach>
|
||||
)
|
||||
) current_dept ON user_dept.dept_path LIKE CONCAT(current_dept.dept_path, '%')
|
||||
</if>
|
||||
WHERE lr.deleted = 0
|
||||
AND lr.last_learn_time >= DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY)
|
||||
AND lr.last_learn_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY)
|
||||
GROUP BY lr.resource_type
|
||||
ORDER BY totalDuration DESC
|
||||
</select>
|
||||
|
||||
<!-- 获取本周学习时长排行榜 -->
|
||||
<select id="getWeeklyStudyDurationRanking" resultType="map">
|
||||
SELECT
|
||||
lr.user_id AS userId,
|
||||
u.username AS username,
|
||||
COALESCE(SUM(lr.duration), 0) AS totalDuration,
|
||||
COUNT(DISTINCT lr.resource_id) AS resourceCount,
|
||||
COUNT(*) AS studyCount
|
||||
FROM tb_learning_record lr
|
||||
INNER JOIN tb_sys_user u ON lr.user_id = u.id AND u.deleted = 0
|
||||
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
|
||||
INNER JOIN tb_sys_user_dept_role udr ON u.id = udr.user_id AND udr.deleted = 0
|
||||
INNER JOIN tb_sys_dept user_dept ON udr.dept_id = user_dept.dept_id AND user_dept.deleted = 0
|
||||
INNER JOIN (
|
||||
SELECT dept_id, dept_path FROM tb_sys_dept WHERE deleted = 0 AND dept_id IN (
|
||||
<foreach collection="userDeptRoles" item="udr" separator=",">
|
||||
#{udr.deptID}
|
||||
</foreach>
|
||||
)
|
||||
) current_dept ON user_dept.dept_path LIKE CONCAT(current_dept.dept_path, '%')
|
||||
</if>
|
||||
WHERE lr.deleted = 0
|
||||
AND lr.last_learn_time >= DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY)
|
||||
AND lr.last_learn_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY)
|
||||
GROUP BY lr.user_id, u.username
|
||||
ORDER BY totalDuration DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
<!-- 获取本周学习课程排行榜 -->
|
||||
<select id="getWeeklyCourseRanking" resultType="map">
|
||||
SELECT
|
||||
lr.resource_id AS resourceId,
|
||||
c.name AS resourceName,
|
||||
COUNT(DISTINCT lr.user_id) AS learnerCount,
|
||||
COALESCE(SUM(lr.duration), 0) AS totalDuration,
|
||||
COUNT(*) AS studyCount
|
||||
FROM tb_learning_record lr
|
||||
INNER JOIN tb_course c ON lr.resource_id = c.course_id AND c.deleted = 0
|
||||
INNER JOIN tb_sys_user u ON lr.user_id = u.id AND u.deleted = 0
|
||||
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
|
||||
INNER JOIN tb_sys_user_dept_role udr ON u.id = udr.user_id AND udr.deleted = 0
|
||||
INNER JOIN tb_sys_dept user_dept ON udr.dept_id = user_dept.dept_id AND user_dept.deleted = 0
|
||||
INNER JOIN (
|
||||
SELECT dept_id, dept_path FROM tb_sys_dept WHERE deleted = 0 AND dept_id IN (
|
||||
<foreach collection="userDeptRoles" item="udr" separator=",">
|
||||
#{udr.deptID}
|
||||
</foreach>
|
||||
)
|
||||
) current_dept ON user_dept.dept_path LIKE CONCAT(current_dept.dept_path, '%')
|
||||
</if>
|
||||
WHERE lr.deleted = 0
|
||||
AND lr.resource_type = 2
|
||||
AND lr.last_learn_time >= DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY)
|
||||
AND lr.last_learn_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY)
|
||||
GROUP BY lr.resource_id, c.name
|
||||
ORDER BY learnerCount DESC, totalDuration DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
<!-- 获取本周学习文章排行榜 -->
|
||||
<select id="getWeeklyArticleRanking" resultType="map">
|
||||
SELECT
|
||||
lr.resource_id AS resourceId,
|
||||
r.title AS resourceName,
|
||||
COUNT(DISTINCT lr.user_id) AS learnerCount,
|
||||
COALESCE(SUM(lr.duration), 0) AS totalDuration,
|
||||
COUNT(*) AS studyCount
|
||||
FROM tb_learning_record lr
|
||||
INNER JOIN tb_resource r ON lr.resource_id = r.resource_id AND r.deleted = 0
|
||||
INNER JOIN tb_sys_user u ON lr.user_id = u.id AND u.deleted = 0
|
||||
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
|
||||
INNER JOIN tb_sys_user_dept_role udr ON u.id = udr.user_id AND udr.deleted = 0
|
||||
INNER JOIN tb_sys_dept user_dept ON udr.dept_id = user_dept.dept_id AND user_dept.deleted = 0
|
||||
INNER JOIN (
|
||||
SELECT dept_id, dept_path FROM tb_sys_dept WHERE deleted = 0 AND dept_id IN (
|
||||
<foreach collection="userDeptRoles" item="udr" separator=",">
|
||||
#{udr.deptID}
|
||||
</foreach>
|
||||
)
|
||||
) current_dept ON user_dept.dept_path LIKE CONCAT(current_dept.dept_path, '%')
|
||||
</if>
|
||||
WHERE lr.deleted = 0
|
||||
AND lr.resource_type = 1
|
||||
AND lr.last_learn_time >= DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY)
|
||||
AND lr.last_learn_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY)
|
||||
GROUP BY lr.resource_id, r.title
|
||||
ORDER BY learnerCount DESC, totalDuration DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
<!-- 获取本周任务完成最多的排行榜 -->
|
||||
<select id="getWeeklyTaskCompletionRanking" resultType="map">
|
||||
SELECT
|
||||
tu.user_id AS userId,
|
||||
u.username AS username,
|
||||
COUNT(DISTINCT tu.task_id) AS completedTaskCount,
|
||||
COALESCE(SUM(lr.duration), 0) AS totalDuration,
|
||||
MAX(tu.complete_time) AS lastCompleteTime
|
||||
FROM tb_task_user tu
|
||||
INNER JOIN tb_sys_user u ON tu.user_id = u.id AND u.deleted = 0
|
||||
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
|
||||
INNER JOIN tb_sys_user_dept_role udr ON u.id = udr.user_id AND udr.deleted = 0
|
||||
INNER JOIN tb_sys_dept user_dept ON udr.dept_id = user_dept.dept_id AND user_dept.deleted = 0
|
||||
INNER JOIN (
|
||||
SELECT dept_id, dept_path FROM tb_sys_dept WHERE deleted = 0 AND dept_id IN (
|
||||
<foreach collection="userDeptRoles" item="udr" separator=",">
|
||||
#{udr.deptID}
|
||||
</foreach>
|
||||
)
|
||||
) current_dept ON user_dept.dept_path LIKE CONCAT(current_dept.dept_path, '%')
|
||||
</if>
|
||||
LEFT JOIN tb_learning_record lr ON tu.user_id = lr.user_id AND tu.task_id = lr.task_id AND lr.deleted = 0
|
||||
WHERE tu.deleted = 0
|
||||
AND tu.status = 2
|
||||
AND tu.complete_time >= DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY)
|
||||
AND tu.complete_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY)
|
||||
GROUP BY tu.user_id, u.username
|
||||
ORDER BY completedTaskCount DESC, totalDuration DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -263,4 +263,84 @@
|
||||
<include refid="Where_Clause" />
|
||||
</select>
|
||||
|
||||
<!-- 获取任务学习时长分布数据 -->
|
||||
<select id="getStudyDurationDistribution" resultType="map">
|
||||
SELECT
|
||||
CASE
|
||||
WHEN total_duration < 600 THEN '0-10分钟'
|
||||
WHEN total_duration < 1800 THEN '10-30分钟'
|
||||
WHEN total_duration < 3600 THEN '30-60分钟'
|
||||
WHEN total_duration < 7200 THEN '1-2小时'
|
||||
WHEN total_duration < 14400 THEN '2-4小时'
|
||||
ELSE '4小时以上'
|
||||
END AS durationRange,
|
||||
COUNT(*) AS userCount
|
||||
FROM (
|
||||
SELECT
|
||||
lh.user_id,
|
||||
COALESCE(SUM(lh.duration), 0) AS total_duration
|
||||
FROM tb_task_user tu
|
||||
LEFT JOIN tb_learning_history lh ON tu.user_id = lh.user_id AND tu.task_id = lh.task_id AND lh.deleted = 0
|
||||
WHERE tu.task_id = #{taskId} AND tu.deleted = 0
|
||||
GROUP BY lh.user_id
|
||||
) AS user_durations
|
||||
GROUP BY durationRange
|
||||
ORDER BY MIN(total_duration)
|
||||
</select>
|
||||
|
||||
<!-- 获取任务学习进度分布数据 -->
|
||||
<select id="getStudyProgressDistribution" resultType="map">
|
||||
SELECT
|
||||
CASE
|
||||
WHEN progress < 10 THEN '0-10%'
|
||||
WHEN progress < 20 THEN '10-20%'
|
||||
WHEN progress < 30 THEN '20-30%'
|
||||
WHEN progress < 40 THEN '30-40%'
|
||||
WHEN progress < 50 THEN '40-50%'
|
||||
WHEN progress < 60 THEN '50-60%'
|
||||
WHEN progress < 70 THEN '60-70%'
|
||||
WHEN progress < 80 THEN '70-80%'
|
||||
WHEN progress < 90 THEN '80-90%'
|
||||
WHEN progress < 100 THEN '90-100%'
|
||||
ELSE '100%'
|
||||
END AS progressRange,
|
||||
COUNT(*) AS userCount
|
||||
FROM tb_task_user
|
||||
WHERE task_id = #{taskId} AND deleted = 0
|
||||
GROUP BY progressRange
|
||||
ORDER BY MIN(progress)
|
||||
</select>
|
||||
|
||||
<!-- 获取任务完成时间排行榜(前10名) -->
|
||||
<select id="getCompletionTimeRanking" resultType="map">
|
||||
SELECT
|
||||
tu.user_id AS userId,
|
||||
u.username AS username,
|
||||
tu.complete_time AS completeTime,
|
||||
TIMESTAMPDIFF(SECOND, tu.create_time, tu.complete_time) AS completionDuration
|
||||
FROM tb_task_user tu
|
||||
INNER JOIN tb_sys_user u ON tu.user_id = u.id AND u.deleted = 0
|
||||
WHERE tu.task_id = #{taskId}
|
||||
AND tu.status = 2
|
||||
AND tu.complete_time IS NOT NULL
|
||||
AND tu.deleted = 0
|
||||
ORDER BY tu.complete_time ASC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
<!-- 获取任务学习时长排行榜(前10名) -->
|
||||
<select id="getStudyDurationRanking" resultType="map">
|
||||
SELECT
|
||||
lh.user_id AS userId,
|
||||
u.username AS username,
|
||||
COALESCE(SUM(lh.duration), 0) AS totalDuration
|
||||
FROM tb_task_user tu
|
||||
INNER JOIN tb_sys_user u ON tu.user_id = u.id AND u.deleted = 0
|
||||
LEFT JOIN tb_learning_history lh ON tu.user_id = lh.user_id AND tu.task_id = lh.task_id AND lh.deleted = 0
|
||||
WHERE tu.task_id = #{taskId} AND tu.deleted = 0
|
||||
GROUP BY lh.user_id, u.username
|
||||
ORDER BY totalDuration DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user