考试统计获取数据调整

main
liuyiliang 4 months ago
parent af6612b3f2
commit e05a324fd3
  1. 1
      ccic-exam/src/main/java/com/ccic/safeliab/web/ExamScheduleController.java
  2. 2
      ccic-exam/src/main/resources/mappers/ExamScheduleMapper.xml
  3. 197
      ccic-exam/src/main/resources/mappers/ExamStatisticsMapper.xml

@ -64,6 +64,7 @@ public class ExamScheduleController {
ExamScheduleVO examScheduleVO = new ExamScheduleVO(); ExamScheduleVO examScheduleVO = new ExamScheduleVO();
examScheduleVO.setCaptcha(examSchedule.getCaptcha()); examScheduleVO.setCaptcha(examSchedule.getCaptcha());
examScheduleVO.setPath(examSchedule.getPath()); examScheduleVO.setPath(examSchedule.getPath());
examSchedule.setId(examSchedule.getId());
return R.ok().data(service.saveOrUpdate(examScheduleVO)); return R.ok().data(service.saveOrUpdate(examScheduleVO));
} }

@ -62,7 +62,7 @@
industry_id as regulatory_industry industry_id as regulatory_industry
from ex_exam_papers from ex_exam_papers
where is_deleted = 0 where is_deleted = 0
and status = 1 and paper_status = 1
</select> </select>
<select id="getExamParticipation" resultType="java.util.Map"> <select id="getExamParticipation" resultType="java.util.Map">
SELECT SELECT

@ -37,64 +37,63 @@
]]> ]]>
</select> </select>
<select id="getAqServiceDimensionData" resultType="java.util.Map"> <select id="getAqServiceDimensionData" resultType="java.util.Map">
SELECT
COUNT ( q.ID ) AS "value",
( dict.dict_value || ': ' || COUNT ( q.ID ) || ' 条' ) AS "name"
FROM
ex_dict dict
LEFT JOIN ex_question_categories q ON q.service_type_id = dict.dict_key
AND q.is_deleted = 0
AND q.status = 1
<if test="id != null and id != ''">
AND q.industry_id = #{id}
</if>
WHERE
dict.code = 'serviceTypeDict'
AND dict.is_deleted = 0
<![CDATA[ AND dict.parent_id <> 0 ]]>
SELECT
COUNT ( q.ID ) AS "value",
( dict.dict_value || ': ' || COUNT ( q.ID ) || ' 条' ) AS "name"
FROM
ex_dict dict
LEFT JOIN ex_question_categories q ON q.service_type_id = dict.dict_key
AND q.is_deleted = 0
AND q.status = 1
<if test="id != null and id != ''">
AND q.industry_id = #{id}
</if>
WHERE
dict.code = 'serviceTypeDict'
AND dict.is_deleted = 0
<![CDATA[ AND dict.parent_id <> 0 ]]>
GROUP BY
dict.dict_key,
dict.dict_value
ORDER BY
dict.dict_key
GROUP BY
dict.dict_key,
dict.dict_value
ORDER BY
dict.dict_key
</select> </select>
<select id="getExamTableData" resultType="java.util.Map"> <select id="getExamTableData" resultType="java.util.Map">
<![CDATA[ WITH exam_Count AS (
-- 定义 CTE exam_Count,统计符合条件的考试数量 SELECT COUNT(1) AS "count"
WITH exam_Count AS ( FROM ex_exam_info
SELECT COUNT(1) AS "count" WHERE status = 1
FROM ex_exam_info AND publish_status = 1
WHERE status = 1 AND is_deleted = 0
AND publish_status = 1 ),
AND is_deleted = 0 scores AS (
), SELECT
-- 定义 CTE scores,计算每个考试记录的得分比例和用时 score.total_score / papers.total_score AS score,
scores AS ( score.exam_time_spent AS time_spent
SELECT FROM
score.total_score / papers.total_score AS score, ex_exam_scores score
score.exam_time_spent AS time_spent LEFT JOIN ex_exam_info info ON info.ID = score.exam_id
FROM AND info.publish_status = 1
ex_exam_scores score AND info.is_deleted = 0
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id
AND info.publish_status = 1 AND papers.is_deleted = 0
AND info.is_deleted = 0 WHERE
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id score.is_deleted = 0
AND papers.is_deleted = 0 )
WHERE SELECT
score.is_deleted = 0 1 AS "key",
) (SELECT "count" FROM exam_Count) AS "examTimes",
-- 主查询,统计相关信息 (SELECT COUNT(1) FROM scores) AS "participants",
SELECT (SELECT AVG(time_spent) FROM scores) AS "averageTime",
1 as "key", ROUND(
(SELECT "count" FROM exam_Count) AS "examTimes", CASE
(SELECT COUNT(1) FROM scores) AS "participants", WHEN (SELECT COUNT(1) FROM scores) = 0 THEN 0
(SELECT AVG(time_spent) FROM scores) AS "averageTime", ELSE (SELECT COUNT(1) FROM scores WHERE score >= 0.6) * 100.0 / (SELECT COUNT(1) FROM scores)
ROUND((SELECT COUNT(1) FROM scores WHERE score >= 0.6) * 100.0 / (SELECT COUNT(1) FROM scores), 2) AS "passRate" END,
]]> 2
) AS "passRate"
</select> </select>
<select id="getScoreDistributionData" resultType="java.util.Map"> <select id="getScoreDistributionData" resultType="java.util.Map">
<![CDATA[ <![CDATA[
@ -107,71 +106,78 @@
info.ID info.ID
FROM FROM
ex_exam_scores score ex_exam_scores score
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id LEFT JOIN ex_exam_info info ON info.ID = score.exam_id
AND info.publish_status = 1 AND info.publish_status = 1
AND info.is_deleted = 0 AND info.is_deleted = 0
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id
AND papers.is_deleted = 0 AND papers.is_deleted = 0
WHERE WHERE
score.is_deleted = 0 score.is_deleted = 0
), ),
-- 定义 CTE total,用于计算总人数 -- 定义 CTE total,用于计算总人数
total AS ( total AS (
SELECT count(1) headcount SELECT COUNT(1) AS headcount
FROM FROM
ex_exam_scores score ex_exam_scores score
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id LEFT JOIN ex_exam_info info ON info.ID = score.exam_id
AND info.publish_status = 1 AND info.publish_status = 1
AND info.is_deleted = 0 AND info.is_deleted = 0
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id
AND papers.is_deleted = 0 AND papers.is_deleted = 0
WHERE WHERE
score.is_deleted = 0 score.is_deleted = 0
) )
-- 主查询部分,计算不同成绩区间的比例并精确到小数点后两位 -- 主查询部分,计算不同成绩区间的比例并精确到小数点后两位
SELECT SELECT
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , ROUND(COUNT(1) / total.headcount * 100, 2) AS "value",
'优秀占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%' AS "name" '优秀占比: ' || ROUND(COUNT(1) / total.headcount * 100, 2) || '%' AS "name"
FROM FROM
scores scores, total
WHERE WHERE
grade >= 0.9 grade >= 0.9
GROUP BY total.headcount
UNION ALL UNION ALL
SELECT SELECT
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , ROUND(COUNT(1) / total.headcount * 100, 2) AS "value",
'合格占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%'AS "name" '合格占比: ' || ROUND(COUNT(1) / total.headcount * 100, 2) || '%' AS "name"
FROM FROM
scores scores, total
WHERE WHERE
grade < 0.9 grade < 0.9
AND grade >= 0.6 AND grade >= 0.6
GROUP BY total.headcount
UNION ALL UNION ALL
SELECT SELECT
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , ROUND(COUNT(1) / total.headcount * 100, 2) AS "value",
'需努力占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%'AS "name" '需努力占比: ' || ROUND(COUNT(1) / total.headcount * 100, 2) || '%' AS "name"
FROM FROM
scores scores, total
WHERE WHERE
grade < 0.6; grade < 0.6
GROUP BY total.headcount;
]]> ]]>
</select> </select>
<select id="getPaperDistributionData" resultType="java.util.Map"> <select id="getPaperDistributionData" resultType="java.util.Map">
SELECT COUNT SELECT
( 1 ) AS "value", COUNT(1) AS "value",
ind.industry_name || ': '|| COUNT( 1 ) || ' 套' AS "name" ind.industry_name || ': ' || COUNT(1) || ' 套' AS "name"
FROM FROM
tbl_industry ind tbl_industry ind
left join ex_exam_papers papers LEFT JOIN ex_exam_papers papers ON papers.industry_id = ind.industry_id
on papers.industry_id = ind.industry_id AND papers.is_deleted = 0
and papers.is_deleted = 0
AND papers.paper_status = 1
WHERE WHERE
ind.status = 1 ind.status = 1
AND papers.is_deleted = 0
AND papers.paper_status = 1
GROUP BY GROUP BY
ind.industry_id , ind.industry_id,
ind.industry_name ind.industry_name
ORDER BY ORDER BY
ind.industry_id ind.industry_id
</select> </select>
<select id="getQuestionTypeDistributionData" resultType="java.util.Map"> <select id="getQuestionTypeDistributionData" resultType="java.util.Map">
with total as ( with total as (
@ -366,6 +372,7 @@
and score.is_deleted = 0 and score.is_deleted = 0
WHERE WHERE
paper.is_deleted = 0 paper.is_deleted = 0
and paper.paper_status = 1
<if test="paperName != null and paperName != ''"> <if test="paperName != null and paperName != ''">
AND paper.paper_name LIKE '%' || #{paperName} || '%' AND paper.paper_name LIKE '%' || #{paperName} || '%'
</if> </if>

Loading…
Cancel
Save