Explorar el Código

Merge branch 'fix/展望报告真题词汇' of jyx/dcjxb.microservice into master

金逸霄 hace 1 semana
padre
commit
4467c76e3c

+ 2 - 15
abilities/exam-sprint/infrastructure/src/main/java/cn/yunzhixue/ability/center/examsprint/infrastructure/report/rendering/outlook/ClasspathOutlookExamSprintReportRenderer.java

@@ -99,9 +99,7 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
                         "优先补齐高频和核心常考词。"),
                 new PastPaperVocabularyChart(
                         payload.testPaperWordCount(),
-                        payload.testPaperUnMasterWords().size(),
-                        sprintUnknownWordCount(payload.testPaperUnMasterWords().size()),
-                        "预计提分5-15分",
+                        payload.testPaperWordCount() - payload.testPaperMastedWordCount(),
                         null),
                 new HighFrequencyVocabularyChart(
                         roundedMasteryPercent(words, 0, basicUpper),
@@ -127,10 +125,6 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
                 .toList();
     }
 
-    private int sprintUnknownWordCount(int unknownWordCountBeforeSprint) {
-        return (int) Math.round(unknownWordCountBeforeSprint * 0.75d);
-    }
-
     private int roundedMasteryPercent(List<OutlookExamSprintReportPayload.StudentWordLatest> words,
                                       int lowerExclusive,
                                       int upperInclusive) {
@@ -199,8 +193,6 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
     private record PastPaperVocabularyChart(
             int totalWordCount,
             int unknownWordCountBeforeSprint,
-            int unknownWordCountAfterSprint,
-            String projectedScoreGainLabel,
             String recommendation) {
     }
 
@@ -295,8 +287,6 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
         int totalHeight = barHeight(chart.totalWordCount(), axisMax);
         int unknownHeight = barHeight(chart.unknownWordCountBeforeSprint(), axisMax);
         double beforePercent = percentage(chart.unknownWordCountBeforeSprint(), chart.totalWordCount());
-        double afterPercent = percentage(chart.unknownWordCountAfterSprint(), chart.totalWordCount());
-
         StringBuilder builder = new StringBuilder();
         builder
                 .append("<div class='card'>")
@@ -319,10 +309,7 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
                 .append("<div class='data-text'>")
                 .append("真题总词:").append(chart.totalWordCount()).append("词 | 生词量:")
                 .append(chart.unknownWordCountBeforeSprint()).append("词(")
-                .append(formatTwoDecimals(beforePercent)).append("%)<br/>")
-                .append("冲刺后生词:").append(chart.unknownWordCountAfterSprint())
-                .append("词,生词占比降至").append(formatTwoDecimals(afterPercent)).append("%,")
-                .append(escape(chart.projectedScoreGainLabel()))
+                .append(formatTwoDecimals(beforePercent)).append("%)")
                 .append("</div>");
 
         if (chart.recommendation() != null && !chart.recommendation().isBlank()) {

+ 14 - 4
abilities/exam-sprint/infrastructure/src/test/java/cn/yunzhixue/ability/center/examsprint/infrastructure/report/rendering/outlook/ClasspathOutlookExamSprintReportRendererTest.java

@@ -79,7 +79,7 @@ class ClasspathOutlookExamSprintReportRendererTest {
                 .contains("已掌握:<span class='highlight'>4词(40.00%)</span>")
                 .contains("未掌握:<span class='highlight'>6词(60.00%)</span>")
                 .contains("真题总词:5词 | 生词量:3词(60.00%)")
-                .contains("冲刺后生词:2词,生词占比降至40.00%")
+                .doesNotContain("冲刺后生词:")
                 .doesNotContain("先压降真题生词占比。")
                 .doesNotContain("拉分词是提分核心突破项")
                 .contains("基础必会词:综合掌握率75%")
@@ -97,14 +97,14 @@ class ClasspathOutlookExamSprintReportRendererTest {
     void renderAdaptsCallerVocabularyPayloadIntoOutlookReportBands() throws Exception {
         ClasspathOutlookExamSprintReportRenderer renderer = new ClasspathOutlookExamSprintReportRenderer(OBJECT_MAPPER);
 
-        String html = renderer.render(unmodeledOutlookContent(callerVocabularyPayload()), Instant.parse("2026-01-03T08:00:00Z"));
+        String html = renderer.render(unmodeledOutlookContent(callerVocabularyPayloadWithMismatchedPastPaperCounts()), Instant.parse("2026-01-03T08:00:00Z"));
 
         assertThat(html)
                 .contains("考纲总量:<span class='highlight'>10词</span>")
                 .contains("已掌握:<span class='highlight'>4词(40.00%)</span>")
                 .contains("未掌握:<span class='highlight'>6词(60.00%)</span>")
-                .contains("真题总词:5词 | 生词量:3词(60.00%)")
-                .contains("冲刺后生词:2词,生词占比降至40.00%")
+                .contains("真题总词:5词 | 生词量:1词(20.00%)")
+                .doesNotContain("冲刺后生词:")
                 .doesNotContain("先压降真题生词占比。")
                 .doesNotContain("拉分词是提分核心突破项")
                 .contains("基础必会词:综合掌握率75%")
@@ -480,6 +480,16 @@ class ClasspathOutlookExamSprintReportRendererTest {
         return payload;
     }
 
+    private JsonNode callerVocabularyPayloadWithMismatchedPastPaperCounts() throws Exception {
+        ObjectNode payload = (ObjectNode) callerVocabularyPayload();
+        payload.put("TestPaperMastedWordCount", 4);
+        payload.putArray("TestPaperUnMasterWords")
+                .add("lot")
+                .add("father")
+                .add("catch");
+        return payload;
+    }
+
     private JsonNode normalizedCallerVocabularyPayloadWithStudentNameAliases() throws Exception {
         ObjectNode payload = (ObjectNode) callerVocabularyPayload();
         payload.put("StudentName", "20260318测试");