commit
aaae0c16c2
6 changed files with 312 additions and 0 deletions
@ -0,0 +1,18 @@ |
|||||||
|
package com.ccic.safeliab.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||||
|
|
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
public class ExamStatistics extends BaseEntity{ |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.ccic.safeliab.dao; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.ccic.safeliab.entity.ExamStatistics; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@Mapper |
||||||
|
public interface ExamStatisticsMapper extends BaseMapper<ExamStatistics>{ |
||||||
|
int getQuestionCount(); |
||||||
|
int getPaperCount(); |
||||||
|
int getExamCount(); |
||||||
|
List<Map<String,Object>> getIndustryDimensionData(); |
||||||
|
List<Map<String,Object>> getAqServiceDimensionData(); |
||||||
|
List<Map<String,Object>> getExamTableData(); |
||||||
|
List<Map<String,Object>> getScoreDistributionData(); |
||||||
|
List<Map<String,Object>> getPaperDistributionData(); |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.ccic.safeliab.service; |
||||||
|
|
||||||
|
import com.ccic.safeliab.entity.ExamSchedule; |
||||||
|
import com.ccic.safeliab.entity.ExamStatistics; |
||||||
|
import com.ccic.safeliab.support.BaseService; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public interface ExamStatisticsService extends BaseService<ExamStatistics> { |
||||||
|
int getQuestionCount(); |
||||||
|
int getPaperCount(); |
||||||
|
int getExamCount(); |
||||||
|
List<Map<String,Object>> getIndustryDimensionData(); |
||||||
|
List<Map<String,Object>> getAqServiceDimensionData(); |
||||||
|
List<Map<String,Object>> getExamTableData(); |
||||||
|
List<Map<String,Object>> getScoreDistributionData(); |
||||||
|
List<Map<String,Object>> getPaperDistributionData(); |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.ccic.safeliab.service; |
||||||
|
|
||||||
|
import com.ccic.safeliab.dao.ExamStatisticsMapper; |
||||||
|
import com.ccic.safeliab.entity.ExamStatistics; |
||||||
|
import com.ccic.safeliab.support.BaseServiceImpl; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class ExamStatisticsServiceImpl extends BaseServiceImpl<ExamStatisticsMapper, ExamStatistics> implements ExamStatisticsService { |
||||||
|
public int getQuestionCount(){ |
||||||
|
return baseMapper.getQuestionCount(); |
||||||
|
} |
||||||
|
public int getPaperCount(){ |
||||||
|
return baseMapper.getPaperCount(); |
||||||
|
} |
||||||
|
public int getExamCount(){ |
||||||
|
return baseMapper.getExamCount(); |
||||||
|
} |
||||||
|
public List<Map<String,Object>> getIndustryDimensionData(){ |
||||||
|
return baseMapper.getIndustryDimensionData(); |
||||||
|
} |
||||||
|
public List<Map<String,Object>> getAqServiceDimensionData(){ |
||||||
|
return baseMapper.getAqServiceDimensionData(); |
||||||
|
} |
||||||
|
public List<Map<String,Object>> getExamTableData(){ |
||||||
|
return baseMapper.getExamTableData(); |
||||||
|
} |
||||||
|
public List<Map<String,Object>> getScoreDistributionData(){ |
||||||
|
return baseMapper.getScoreDistributionData(); |
||||||
|
} |
||||||
|
public List<Map<String,Object>> getPaperDistributionData(){ |
||||||
|
return baseMapper.getPaperDistributionData(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.ccic.safeliab.web; |
||||||
|
|
||||||
|
import com.ccic.safeliab.entity.ExamSchedule; |
||||||
|
import com.ccic.safeliab.service.ExamScheduleService; |
||||||
|
import com.ccic.safeliab.service.ExamStatisticsService; |
||||||
|
import com.ccic.safeliab.util.R; |
||||||
|
import com.ccic.safeliab.vo.ExamScheduleVO; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@RestController |
||||||
|
@RequestMapping("/ex/exam-statistics") |
||||||
|
public class ExamStatisticsController { |
||||||
|
@Autowired |
||||||
|
private ExamStatisticsService service; |
||||||
|
@GetMapping("/init") |
||||||
|
public R init() { |
||||||
|
// 这里可以添加实际的数据库查询逻辑
|
||||||
|
Map<Object,Object> result = new HashMap<>(); |
||||||
|
// 题目数
|
||||||
|
result.put("questionCount", service.getQuestionCount()); |
||||||
|
// 试卷数
|
||||||
|
result.put("paperCount", service.getPaperCount()); |
||||||
|
// 考试数
|
||||||
|
result.put("examCount", service.getExamCount()); |
||||||
|
// 监管行业环状图
|
||||||
|
result.put("industryDimensionData", service.getIndustryDimensionData()); |
||||||
|
// 安全服务环状图
|
||||||
|
result.put("aqServiceDimensionData",service.getAqServiceDimensionData()); |
||||||
|
// 考试状况表格
|
||||||
|
result.put("examTableData",service.getExamTableData()); |
||||||
|
// 成绩分布
|
||||||
|
result.put("scoreDistributionData",service.getScoreDistributionData()); |
||||||
|
// 试卷情况
|
||||||
|
result.put("paperDistributionData",service.getPaperDistributionData()); |
||||||
|
|
||||||
|
return R.ok().data(result); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,174 @@ |
|||||||
|
<?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.ccic.safeliab.dao.ExamStatisticsMapper"> |
||||||
|
<select id="getQuestionCount" resultType="java.lang.Integer"> |
||||||
|
select count(1) from ex_question_categories |
||||||
|
where status = 1 |
||||||
|
and is_deleted = 0 |
||||||
|
</select> |
||||||
|
<select id="getPaperCount" resultType="java.lang.Integer"> |
||||||
|
select count(1) from ex_exam_papers |
||||||
|
where paper_status = 1 |
||||||
|
and is_deleted = 0 |
||||||
|
</select> |
||||||
|
<select id="getExamCount" resultType="java.lang.Integer"> |
||||||
|
select count(1) from ex_exam_info |
||||||
|
where status = 1 |
||||||
|
and publish_status = 1 |
||||||
|
and is_deleted = 0 |
||||||
|
</select> |
||||||
|
<select id="getIndustryDimensionData" resultType="java.util.Map"> |
||||||
|
<![CDATA[ |
||||||
|
SELECT |
||||||
|
COUNT ( q.ID ) AS "value", |
||||||
|
( ind.industry_name || ': ' || COUNT ( q.ID ) || ' 条' ) AS "name" |
||||||
|
FROM |
||||||
|
tbl_industry ind |
||||||
|
LEFT JOIN ex_question_categories q ON q.industry_id = ind.industry_id |
||||||
|
AND q.is_deleted = 0 |
||||||
|
AND q.status = 1 |
||||||
|
WHERE |
||||||
|
ind.status = 1 |
||||||
|
GROUP BY |
||||||
|
ind.industry_id, |
||||||
|
ind.industry_name |
||||||
|
ORDER BY |
||||||
|
ind.industry_id |
||||||
|
]]> |
||||||
|
</select> |
||||||
|
<select id="getAqServiceDimensionData" resultType="java.util.Map"> |
||||||
|
<![CDATA[ |
||||||
|
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 |
||||||
|
WHERE |
||||||
|
dict.code = 'serviceTypeDict' |
||||||
|
AND dict.is_deleted = 0 |
||||||
|
AND dict.parent_id <> 0 |
||||||
|
GROUP BY |
||||||
|
dict.dict_key, |
||||||
|
dict.dict_value |
||||||
|
ORDER BY |
||||||
|
dict.dict_key |
||||||
|
]]> |
||||||
|
</select> |
||||||
|
<select id="getExamTableData" resultType="java.util.Map"> |
||||||
|
<![CDATA[ |
||||||
|
-- 定义 CTE exam_Count,统计符合条件的考试数量 |
||||||
|
WITH exam_Count AS ( |
||||||
|
SELECT COUNT(1) AS "count" |
||||||
|
FROM ex_exam_info |
||||||
|
WHERE status = 1 |
||||||
|
AND publish_status = 1 |
||||||
|
AND is_deleted = 0 |
||||||
|
), |
||||||
|
-- 定义 CTE scores,计算每个考试记录的得分比例和用时 |
||||||
|
scores AS ( |
||||||
|
SELECT |
||||||
|
score.total_score / papers.total_score AS score, |
||||||
|
score.exam_time_spent AS time_spent |
||||||
|
FROM |
||||||
|
ex_exam_scores score |
||||||
|
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id |
||||||
|
AND info.publish_status = 1 |
||||||
|
AND info.is_deleted = 0 |
||||||
|
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id |
||||||
|
AND papers.is_deleted = 0 |
||||||
|
WHERE |
||||||
|
score.is_deleted = 0 |
||||||
|
) |
||||||
|
-- 主查询,统计相关信息 |
||||||
|
SELECT |
||||||
|
1 as "key", |
||||||
|
(SELECT "count" FROM exam_Count) AS "examTimes", |
||||||
|
(SELECT COUNT(1) FROM scores) AS "participants", |
||||||
|
(SELECT AVG(time_spent) FROM scores) AS "averageTime", |
||||||
|
ROUND((SELECT COUNT(1) FROM scores WHERE score >= 0.6) * 100.0 / (SELECT COUNT(1) FROM scores), 2) AS "passRate" |
||||||
|
]]> |
||||||
|
</select> |
||||||
|
<select id="getScoreDistributionData" resultType="java.util.Map"> |
||||||
|
<![CDATA[ |
||||||
|
-- 定义 CTE scores,用于获取考试成绩相关信息 |
||||||
|
WITH scores AS ( |
||||||
|
SELECT |
||||||
|
score.total_score, |
||||||
|
papers.total_score, |
||||||
|
score.total_score / papers.total_score AS grade, |
||||||
|
info.ID |
||||||
|
FROM |
||||||
|
ex_exam_scores score |
||||||
|
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id |
||||||
|
AND info.publish_status = 1 |
||||||
|
AND info.is_deleted = 0 |
||||||
|
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id |
||||||
|
AND papers.is_deleted = 0 |
||||||
|
WHERE |
||||||
|
score.is_deleted = 0 |
||||||
|
), |
||||||
|
-- 定义 CTE total,用于计算总人数 |
||||||
|
total AS ( |
||||||
|
SELECT count(1) headcount |
||||||
|
FROM |
||||||
|
ex_exam_scores score |
||||||
|
LEFT JOIN ex_exam_info info ON info.ID = score.exam_id |
||||||
|
AND info.publish_status = 1 |
||||||
|
AND info.is_deleted = 0 |
||||||
|
LEFT JOIN ex_exam_papers papers ON papers.ID = info.paper_id |
||||||
|
AND papers.is_deleted = 0 |
||||||
|
WHERE |
||||||
|
score.is_deleted = 0 |
||||||
|
) |
||||||
|
-- 主查询部分,计算不同成绩区间的比例并精确到小数点后两位 |
||||||
|
SELECT |
||||||
|
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , |
||||||
|
'优秀占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%' AS "name" |
||||||
|
FROM |
||||||
|
scores |
||||||
|
WHERE |
||||||
|
grade >= 0.9 |
||||||
|
UNION ALL |
||||||
|
SELECT |
||||||
|
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , |
||||||
|
'合格占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%'AS "name" |
||||||
|
FROM |
||||||
|
scores |
||||||
|
WHERE |
||||||
|
grade < 0.9 |
||||||
|
AND grade >= 0.6 |
||||||
|
UNION ALL |
||||||
|
SELECT |
||||||
|
ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) AS "value" , |
||||||
|
'需努力占比: '||ROUND(COUNT(1) / (SELECT headcount FROM total) * 100, 2) || '%'AS "name" |
||||||
|
FROM |
||||||
|
scores |
||||||
|
WHERE |
||||||
|
grade < 0.6; |
||||||
|
]]> |
||||||
|
</select> |
||||||
|
<select id="getPaperDistributionData" resultType="java.util.Map"> |
||||||
|
SELECT COUNT |
||||||
|
( 1 ) AS "value", |
||||||
|
ind.industry_name || ': '|| COUNT( 1 ) || ' 套' AS "name" |
||||||
|
FROM |
||||||
|
tbl_industry ind |
||||||
|
left join ex_exam_papers papers |
||||||
|
on papers.industry_id = ind.industry_id |
||||||
|
and papers.is_deleted = 0 |
||||||
|
AND papers.paper_status = 1 |
||||||
|
WHERE |
||||||
|
ind.status = 1 |
||||||
|
GROUP BY |
||||||
|
ind.industry_id , |
||||||
|
ind.industry_name |
||||||
|
ORDER BY |
||||||
|
ind.industry_id |
||||||
|
</select> |
||||||
|
<select id="getExamAnswerDetails" resultType="java.util.Map"> |
||||||
|
|
||||||
|
</select> |
||||||
|
</mapper> |
Loading…
Reference in new issue