From 1bae224374f7f15cce8118bc013b0ead1609bd78 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Fri, 11 Apr 2025 15:52:26 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=AE=8C=E6=88=90=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E8=80=83=E8=AF=95=E6=95=B0=E6=8D=AE=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LaborEducationController.java | 6 ++ .../controller/MoralEducationController.java | 7 ++ .../admin/service/LaborEducationService.java | 1 + .../admin/service/MoralEducationService.java | 1 + .../impl/LaborEducationServiceImpl.java | 75 ++++++++++++++++++- .../impl/MoralEducationServiceImpl.java | 75 +++++++++++++++++++ .../model/dto/admin/labor/LaborDto.java | 1 + 7 files changed, 165 insertions(+), 1 deletion(-) diff --git a/src/main/java/cn/teammodel/controller/admin/controller/LaborEducationController.java b/src/main/java/cn/teammodel/controller/admin/controller/LaborEducationController.java index 4bae25d..831725e 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/LaborEducationController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/LaborEducationController.java @@ -50,4 +50,10 @@ public class LaborEducationController { Map>> res = laborEducationService.getStudentMonthlyScores(laborDto,request); return R.success(res); } + @PostMapping("getExamDetails") + @ApiOperation("获取指定考试数据") + public R> getExamDetails(@Valid @RequestBody LaborDto laborDto, HttpServletRequest request) { + Map res = laborEducationService.getExamDetails(laborDto,request); + return R.success(res); + } } diff --git a/src/main/java/cn/teammodel/controller/admin/controller/MoralEducationController.java b/src/main/java/cn/teammodel/controller/admin/controller/MoralEducationController.java index d4962b3..d17458a 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/MoralEducationController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/MoralEducationController.java @@ -48,4 +48,11 @@ public class MoralEducationController { Map>> res = moralEducationService.getStudentMonthlyScores(laborDto,request); return R.success(res); } + + @PostMapping("getExamDetails") + @ApiOperation("获取指定考试数据") + public R> getExamDetails(@Valid @RequestBody LaborDto laborDto, HttpServletRequest request) { + Map res = moralEducationService.getExamDetails(laborDto,request); + return R.success(res); + } } diff --git a/src/main/java/cn/teammodel/controller/admin/service/LaborEducationService.java b/src/main/java/cn/teammodel/controller/admin/service/LaborEducationService.java index e70748f..f5ddc6f 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/LaborEducationService.java +++ b/src/main/java/cn/teammodel/controller/admin/service/LaborEducationService.java @@ -14,4 +14,5 @@ public interface LaborEducationService { Map getDetails(FindDto findDto, HttpServletRequest request); Map getStudentSemesterScores(LaborDto laborDto, HttpServletRequest request); Map>> getStudentMonthlyScores(LaborDto laborDto,HttpServletRequest request); + Map getExamDetails(LaborDto laborDto,HttpServletRequest request); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/MoralEducationService.java b/src/main/java/cn/teammodel/controller/admin/service/MoralEducationService.java index 44b6c71..865b74c 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/MoralEducationService.java +++ b/src/main/java/cn/teammodel/controller/admin/service/MoralEducationService.java @@ -12,4 +12,5 @@ public interface MoralEducationService { Map getDetails(FindDto findDto, HttpServletRequest request); Map getStudentSemesterScores(LaborDto laborDto, HttpServletRequest request); Map>> getStudentMonthlyScores(LaborDto laborDto,HttpServletRequest request); + Map getExamDetails(LaborDto laborDto,HttpServletRequest request); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java index f7797fe..946ac4f 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java @@ -92,7 +92,7 @@ public class LaborEducationServiceImpl implements LaborEducationService { Long startTime = laborDto.getStartTime(); Long endTime = laborDto.getEndTime(); String subjectId = laborDto.getSubjectId(); - String tmdId = laborDto.getTmdId(); + //String tmdId = laborDto.getTmdId(); String grade = laborDto.getGrade(); String periodId = laborDto.getPeriodId(); String academicYearId = laborDto.getAcademicYearId(); @@ -241,6 +241,79 @@ public class LaborEducationServiceImpl implements LaborEducationService { } return resMap; } + @Override + public Map getExamDetails(LaborDto laborDto, HttpServletRequest request) { + Map resMap = new HashMap<>(); + try { + List examResults = new ArrayList<>(); + if (!laborDto.getExamId().isEmpty()) { + Map>> knowledgeMap = new HashMap<>(); + Map> points = new HashMap<>(); + + // 1. 查询考试信息 + Exam exam = examRepository.findExamById(String.format(PK.EXAM, laborDto.getTmdId()), laborDto.getExamId()).get(0); + if (exam.getPapers() != null && !exam.getPapers().isEmpty()) { + knowledgeMap.put(exam.getId(), exam.getPapers().get(0).getKnowledge()); + points.put(exam.getId(), exam.getPapers().get(0).getPoint()); + } + + // 2. 查询考试结果 + examResults = examClassResultRepository.findById( + String.format(PK.CLASS_RESULT, laborDto.getCode()), + laborDto.getClassId(), + laborDto.getExamId() + ); + + // 3. 查询知识块-知识点映射关系 + Appraise appraise = appraiseRepository.findAppraiseBySchoolIdAndPeriodIdAndCode( + laborDto.getCode(), + laborDto.getPeriodId(), + PK.PK_APPRAISE + ); + appraise = evaluationService.buildTree(appraise); + Map> knowledgeBlockToPointsMap = getKnowledgeBlockToPointsMap(appraise); + + // 4. 计算每个知识点的得分(调用 calculateStudentScoreRates) + Map knowledgeTotalScore = new HashMap<>(); + if (!examResults.isEmpty()) { + // 假设计算所有学生的平均分(或指定某个学生) + String studentId = laborDto.getStudentId(); // 如果传入了学生ID + calculateStudentScoreRates(studentId, examResults, knowledgeMap, points, knowledgeTotalScore); + } else { + // 如果没有考试数据,默认所有知识点60分 + knowledgeMap.values().stream() + .flatMap(List::stream) + .flatMap(List::stream) + .forEach(knowledge -> knowledgeTotalScore.put(knowledge, 60.0)); + } + + // 5. 按知识块分组,计算每个知识块下知识点的得分 + List> knowledgeBlockScores = new ArrayList<>(); + for (Map.Entry> entry : knowledgeBlockToPointsMap.entrySet()) { + String blockName = entry.getKey(); + List knowledgePoints = entry.getValue(); + + List> pointScores = new ArrayList<>(); + for (String point : knowledgePoints) { + double score = knowledgeTotalScore.getOrDefault(point, 60.0); // 默认60分 + pointScores.add(new HashMap() {{ + put("name", point); + put("score", score); + }}); + } + knowledgeBlockScores.add(new HashMap() {{ + put("name", blockName); + put("children", pointScores); + }}); + } + + resMap.put("data", knowledgeBlockScores); + } + } catch (Exception e) { + throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据查询异常"); + } + return resMap; + } public List> combineScoresWithExamResults( List> scores, diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java index 3e690ca..bd11338 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java @@ -1465,6 +1465,81 @@ public class MoralEducationServiceImpl implements MoralEducationService { ); } + @Override + public Map getExamDetails(LaborDto laborDto, HttpServletRequest request) { + + Map resMap = new HashMap<>(); + try { + List examResults = new ArrayList<>(); + if (!laborDto.getExamId().isEmpty()) { + Map>> knowledgeMap = new HashMap<>(); + Map> points = new HashMap<>(); + + // 1. 查询考试信息 + Exam exam = examRepository.findExamById(String.format(PK.EXAM, laborDto.getTmdId()), laborDto.getExamId()).get(0); + if (exam.getPapers() != null && !exam.getPapers().isEmpty()) { + knowledgeMap.put(exam.getId(), exam.getPapers().get(0).getKnowledge()); + points.put(exam.getId(), exam.getPapers().get(0).getPoint()); + } + + // 2. 查询考试结果 + examResults = examClassResultRepository.findById( + String.format(PK.CLASS_RESULT, laborDto.getCode()), + laborDto.getClassId(), + laborDto.getExamId() + ); + + // 3. 查询知识块-知识点映射关系 + Appraise appraise = appraiseRepository.findAppraiseBySchoolIdAndPeriodIdAndCode( + laborDto.getCode(), + laborDto.getPeriodId(), + PK.PK_APPRAISE + ); + appraise = evaluationService.buildTree(appraise); + Map> knowledgeBlockToPointsMap = getKnowledgeBlockToPointsMap(appraise); + + // 4. 计算每个知识点的得分(调用 calculateStudentScoreRates) + Map knowledgeTotalScore = new HashMap<>(); + if (!examResults.isEmpty()) { + // 假设计算所有学生的平均分(或指定某个学生) + String studentId = laborDto.getStudentId(); // 如果传入了学生ID + calculateStudentScoreRates(studentId, examResults, knowledgeMap, points, knowledgeTotalScore); + } else { + // 如果没有考试数据,默认所有知识点60分 + knowledgeMap.values().stream() + .flatMap(List::stream) + .flatMap(List::stream) + .forEach(knowledge -> knowledgeTotalScore.put(knowledge, 60.0)); + } + + // 5. 按知识块分组,计算每个知识块下知识点的得分 + List> knowledgeBlockScores = new ArrayList<>(); + for (Map.Entry> entry : knowledgeBlockToPointsMap.entrySet()) { + String blockName = entry.getKey(); + List knowledgePoints = entry.getValue(); + + List> pointScores = new ArrayList<>(); + for (String point : knowledgePoints) { + double score = knowledgeTotalScore.getOrDefault(point, 60.0); // 默认60分 + pointScores.add(new HashMap() {{ + put("name", point); + put("score", score); + }}); + } + knowledgeBlockScores.add(new HashMap() {{ + put("name", blockName); + put("children", pointScores); + }}); + } + + resMap.put("data", knowledgeBlockScores); + } + } catch (Exception e) { + throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据查询异常"); + } + return resMap; + } + // 新增方法:添加综合得分 private List> addOverallScore( diff --git a/src/main/java/cn/teammodel/model/dto/admin/labor/LaborDto.java b/src/main/java/cn/teammodel/model/dto/admin/labor/LaborDto.java index 5fc5b5e..42121b4 100644 --- a/src/main/java/cn/teammodel/model/dto/admin/labor/LaborDto.java +++ b/src/main/java/cn/teammodel/model/dto/admin/labor/LaborDto.java @@ -26,4 +26,5 @@ public class LaborDto { private String source = "1"; private String studentId; private String targetType; // "student" 或 "class" + private String examId; }