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