From aef11a583cfe318b6bbb2c1b4403b9ebc41d499c Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Thu, 27 Mar 2025 13:16:45 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=8A=A5=E5=91=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LaborEducationServiceImpl.java | 82 ++++++++++++------- .../impl/MoralEducationServiceImpl.java | 82 ++++++++++++------- 2 files changed, 104 insertions(+), 60 deletions(-) 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 508c969..6d32e03 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 @@ -2083,27 +2083,28 @@ public Map>> getStudentMonthlyScores(LaborDto la lastScore = new BigDecimal(lastScore).setScale(2, RoundingMode.HALF_UP).doubleValue(); blockData.put("classLastScore", lastScore); - // 知识点出现总次数 - ((Map)current.get("knowledgeCounts")).entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> blockData.put(e.getKey(), e.getValue())); - - // 处理知识点次数 + // 获取当前知识块下的所有知识点 + Set blockKnowledgePoints = getKnowledgePointsForBlock(block, finalAppraise); + // 获取次数统计(空值安全) + Map counts = current != null && current.containsKey("knowledgeCounts") + ? (Map) current.get("knowledgeCounts") + : Collections.emptyMap(); + + /* // 知识点出现总次数(兼容旧逻辑) + blockKnowledgePoints.forEach(point -> + blockData.put(point, counts.getOrDefault(point, 0)) + );*/ + + // 构建知识点明细列表 List> knowledgePoints = new ArrayList<>(); - if (current.containsKey("knowledgeCounts")) { - Map counts = (Map) current.get("knowledgeCounts"); - counts.entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> { - Map point = new HashMap<>(); - point.put("name", e.getKey()); - point.put("count", e.getValue() != null ? e.getValue() : 0); - knowledgePoints.add(point); - }); - } + blockKnowledgePoints.forEach(point -> { + Map pointData = new HashMap<>(); + pointData.put("name", point); + pointData.put("count", counts.getOrDefault(point, 0)); + knowledgePoints.add(pointData); + }); blockData.put("knowledgePoints", knowledgePoints); - return blockData; }).collect(Collectors.toList()); } @@ -2345,21 +2346,22 @@ public Map>> getStudentMonthlyScores(LaborDto la // 处理知识点次数 List> knowledgePoints = new ArrayList<>(); - if (currentData.containsKey("knowledgeCounts")) { - Map counts = (Map) currentData.get("knowledgeCounts"); - Appraise finalAppraise = appraise; - counts.entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> { - Map point = new HashMap<>(); - point.put("name", e.getKey()); - point.put("count", e.getValue() != null ? e.getValue() : 0); - knowledgePoints.add(point); - }); + // 获取当前知识块下的所有知识点 + Set blockKnowledgePoints = getKnowledgePointsForBlock(block, appraise); + // 获取次数统计,若不存在则使用空Map + Map counts = currentData.containsKey("knowledgeCounts") + ? (Map) currentData.get("knowledgeCounts") + : Collections.emptyMap(); + + // 遍历所有知识点,设置次数 + for (String pointName : blockKnowledgePoints) { + Map point = new HashMap<>(); + point.put("name", pointName); + point.put("count", counts.getOrDefault(pointName, 0)); + knowledgePoints.add(point); } blockData.put("knowledgePoints", knowledgePoints); - scores.add(blockData); } @@ -2367,6 +2369,26 @@ public Map>> getStudentMonthlyScores(LaborDto la return result; } + // 新增方法:根据知识块名称获取所有知识点 + private Set getKnowledgePointsForBlock(String block, Appraise appraise) { + Set points = new LinkedHashSet<>(); + // 遍历appraise的子节点(知识块),找到匹配的块后收集其子节点(知识点) + for (AppraiseTreeNode child : appraise.getNodes()) { + if ("德育".equals(child.getName())) { + for (AppraiseTreeNode pointOne : child.getChildren()) { + if (block.equals(pointOne.getName())) { + for (AppraiseTreeNode pointTwo : pointOne.getChildren()) { + points.add(pointTwo.getName()); + } + break; + } + } + + } + } + return points; + } + private Set loadKnowledgeBlocks(Appraise appraise) { // 从appraise配置获取所有德育知识块 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 3241e16..73682f3 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 @@ -2021,27 +2021,28 @@ public class MoralEducationServiceImpl implements MoralEducationService { lastScore = new BigDecimal(lastScore).setScale(2, RoundingMode.HALF_UP).doubleValue(); blockData.put("classLastScore", lastScore); - // 知识点出现总次数 - ((Map)current.get("knowledgeCounts")).entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> blockData.put(e.getKey(), e.getValue())); - - // 处理知识点次数 + // 获取当前知识块下的所有知识点 + Set blockKnowledgePoints = getKnowledgePointsForBlock(block, finalAppraise); + // 获取次数统计(空值安全) + Map counts = current != null && current.containsKey("knowledgeCounts") + ? (Map) current.get("knowledgeCounts") + : Collections.emptyMap(); + + /* // 知识点出现总次数(兼容旧逻辑) + blockKnowledgePoints.forEach(point -> + blockData.put(point, counts.getOrDefault(point, 0)) + );*/ + + // 构建知识点明细列表 List> knowledgePoints = new ArrayList<>(); - if (current.containsKey("knowledgeCounts")) { - Map counts = (Map) current.get("knowledgeCounts"); - counts.entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> { - Map point = new HashMap<>(); - point.put("name", e.getKey()); - point.put("count", e.getValue() != null ? e.getValue() : 0); - knowledgePoints.add(point); - }); - } + blockKnowledgePoints.forEach(point -> { + Map pointData = new HashMap<>(); + pointData.put("name", point); + pointData.put("count", counts.getOrDefault(point, 0)); + knowledgePoints.add(pointData); + }); blockData.put("knowledgePoints", knowledgePoints); - return blockData; }).collect(Collectors.toList()); } @@ -2283,21 +2284,22 @@ public class MoralEducationServiceImpl implements MoralEducationService { // 处理知识点次数 List> knowledgePoints = new ArrayList<>(); - if (currentData.containsKey("knowledgeCounts")) { - Map counts = (Map) currentData.get("knowledgeCounts"); - Appraise finalAppraise = appraise; - counts.entrySet().stream() - .filter(e -> isBelongToBlock(e.getKey(), block, finalAppraise)) - .forEach(e -> { - Map point = new HashMap<>(); - point.put("name", e.getKey()); - point.put("count", e.getValue() != null ? e.getValue() : 0); - knowledgePoints.add(point); - }); + // 获取当前知识块下的所有知识点 + Set blockKnowledgePoints = getKnowledgePointsForBlock(block, appraise); + // 获取次数统计,若不存在则使用空Map + Map counts = currentData.containsKey("knowledgeCounts") + ? (Map) currentData.get("knowledgeCounts") + : Collections.emptyMap(); + + // 遍历所有知识点,设置次数 + for (String pointName : blockKnowledgePoints) { + Map point = new HashMap<>(); + point.put("name", pointName); + point.put("count", counts.getOrDefault(pointName, 0)); + knowledgePoints.add(point); } blockData.put("knowledgePoints", knowledgePoints); - scores.add(blockData); } @@ -2305,6 +2307,26 @@ public class MoralEducationServiceImpl implements MoralEducationService { return result; } + // 新增方法:根据知识块名称获取所有知识点 + private Set getKnowledgePointsForBlock(String block, Appraise appraise) { + Set points = new LinkedHashSet<>(); + // 遍历appraise的子节点(知识块),找到匹配的块后收集其子节点(知识点) + for (AppraiseTreeNode child : appraise.getNodes()) { + if ("劳育".equals(child.getName())) { + for (AppraiseTreeNode pointOne : child.getChildren()) { + if (block.equals(pointOne.getName())) { + for (AppraiseTreeNode pointTwo : pointOne.getChildren()) { + points.add(pointTwo.getName()); + } + break; + } + } + + } + } + return points; + } + private Set loadKnowledgeBlocks(Appraise appraise) { // 从appraise配置获取所有劳育知识块