Procházet zdrojové kódy

Merge branch 'fix/展望报告环形图线帽' of jyx/dcjxb.microservice into master

金逸霄 před 2 týdny
rodič
revize
3ccc361c6c

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

@@ -261,7 +261,6 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
     private String renderSyllabusMasteryChart(SyllabusMasteryChart chart) {
         double masteredPercent = percentage(chart.masteredWordCount(), chart.totalWordCount());
         double unmasteredPercent = percentage(chart.unmasteredWordCount(), chart.totalWordCount());
-        double endAngle = -90 + (Math.max(0d, Math.min(100d, masteredPercent)) * 3.6);
 
         StringBuilder builder = new StringBuilder();
         builder
@@ -272,9 +271,6 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
                 .append(" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 220 220' role='img' aria-label='考纲词汇掌握情况'>")
                 .append("<circle class='chart-track' cx='110' cy='110' r='76' fill='none' stroke='#e8eef7' stroke-width='18'></circle>")
                 .append(renderProgressRing("donut-mastered-arc", "donut-mastered-full-circle", 110, 110, 76, masteredPercent, "#448aff"))
-                .append("<path class='donut-unmastered-arc' d='")
-                .append(describeArc(110, 110, 76, endAngle, 270))
-                .append("' stroke='#e8eef7' stroke-width='18' fill='none' stroke-linecap='round'/>")
                 .append("<text class='chart-percent' x='110' y='106' text-anchor='middle' fill='#2b4c8a' font-size='28' font-weight='700'>")
                 .append(formatTwoDecimals(masteredPercent)).append("%</text>")
                 .append("<text class='chart-caption' x='110' y='131' text-anchor='middle' fill='#5f6b7a' font-size='14'>掌握率</text>")

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

@@ -263,11 +263,13 @@ class ClasspathOutlookExamSprintReportRendererTest {
 
         assertThat(html)
                 .contains("class='donut-mastered-full-circle'")
-                .doesNotContain("class='donut-mastered-arc'");
+                .contains("class='chart-track' cx='110' cy='110' r='76' fill='none' stroke='#e8eef7' stroke-width='18'")
+                .doesNotContain("class='donut-mastered-arc'")
+                .doesNotContain("class='donut-unmastered-arc'");
     }
 
     /**
-     * 覆盖官方 payload 计算出的考纲掌握率为 0% 时,考纲已掌握弧线应被省略且未掌握弧线仍存在
+     * 覆盖官方 payload 计算出的考纲掌握率为 0% 时,考纲已掌握弧线应被省略且仅保留完整浅色底环
      */
     @Test
     void renderSkipsProgressArcWhenSyllabusPercentIsZeroOrBelow() throws Exception {
@@ -277,8 +279,24 @@ class ClasspathOutlookExamSprintReportRendererTest {
         String html = renderer.render(unmodeledOutlookContent(payload), Instant.parse("2026-01-03T08:00:00Z"));
 
         assertThat(html)
+                .contains("class='chart-track' cx='110' cy='110' r='76' fill='none' stroke='#e8eef7' stroke-width='18'")
                 .doesNotContain("class='donut-mastered-arc'")
-                .contains("class='donut-unmastered-arc'");
+                .doesNotContain("class='donut-unmastered-arc'");
+    }
+
+    /**
+     * 覆盖考纲环形图的常规进度场景时,浅色未掌握部分应由完整底环表达,避免额外浅色圆头覆盖蓝色进度弧。
+     */
+    @Test
+    void renderSyllabusDonutUsesSingleTrackBehindProgressArc() throws Exception {
+        ClasspathOutlookExamSprintReportRenderer renderer = new ClasspathOutlookExamSprintReportRenderer(OBJECT_MAPPER);
+
+        String html = renderer.render(unmodeledOutlookContent(callerVocabularyPayload()), Instant.parse("2026-01-03T08:00:00Z"));
+
+        assertThat(html)
+                .contains("class='chart-track' cx='110' cy='110' r='76' fill='none' stroke='#e8eef7' stroke-width='18'")
+                .contains("class='donut-mastered-arc'")
+                .doesNotContain("class='donut-unmastered-arc'");
     }
 
     private static final class TrackingObjectMapper extends ObjectMapper {