From e958585c9e80b984d6dcd5dc8247cc73ed87a70e Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期四, 08 十月 2026 10:43:38 +0800
Subject: [PATCH] fix(holiday): 观测站速度/拥挤度走势图横轴改用系统配置假期天数

---
 traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java |   54 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java b/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java
index 39b61d4..11793f8 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java
@@ -15,6 +15,7 @@
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -64,12 +65,12 @@
                 prefix + "鍏ㄧ渷璺ㄥ尯鍩熶汉鍛樻祦鍔ㄩ噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.totalDaily), false, 1100, 715),
-                new HolidayTrendWordService.ImageSize(5268595L, 3424555L)));
+                lineImageSize(5268595L, 3424555L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熺疮璁¤法鍖哄煙浜哄憳娴佸姩閲忚蛋鍔�",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.totalCumulative), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷悇浜ら�氳繍杈撴柟寮忓杩愰噺鍗犳瘮鎯呭喌",
                 chartService.pieChart("浜烘", selected.modalShare(), 1000, 607), true,
@@ -80,44 +81,44 @@
                 "鈥�" + holidayLabel + "鈥濆亣鏈熻嚜椹惧嚭琛岄噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.selfDrivingPersonFlow), false, 1100, 522),
-                new HolidayTrendWordService.ImageSize(5232400L, 2484120L)));
+                lineImageSize(5232400L, 2484120L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼搧璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.rail), false, 1100, 445),
-                new HolidayTrendWordService.ImageSize(5264785L, 2129155L)));
+                lineImageSize(5264785L, 2129155L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸按璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.water), false, 1100, 433),
-                new HolidayTrendWordService.ImageSize(5274310L, 2075815L)));
+                lineImageSize(5274310L, 2075815L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸皯鑸杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.civilAviation), false, 1100, 521),
-                new HolidayTrendWordService.ImageSize(5271135L, 2496185L)));
+                lineImageSize(5271135L, 2496185L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼亾璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
                         series(years, yearData, item -> item.road), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                lineImageSize(5268595L, 2821305L)));
 
         blocks.add(new HolidayTrendWordService.SectionBlock("涓夈�佽溅娴侀噺璧板娍"));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼珮閫熷叕璺溅娴侀噺鎯呭喌",
                 chartService.lineChart("涓囪締娆�",
                         series(years, yearData, item -> item.expressway), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸櫘閫氬浗鐪侀亾杞︽祦閲忔儏鍐�",
                 chartService.lineChart("涓囪締娆�",
                         series(years, yearData, item -> item.nationalProvincial), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷叏鐪佽溅娴佹�婚噺鎯呭喌",
                 chartService.lineChart("涓囪締娆�",
                         series(years, yearData, item -> item.totalVehicleFlow), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷叕璺嚭琛岀粨鏋�",
                 chartService.stackedBarChart("涓囦汉娆�",
@@ -138,13 +139,15 @@
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 prefix + "鏅�氬浗鐪侀亾瑙傛祴绔欏钩鍧囨満鍔ㄨ溅閫熷害",
                 chartService.lineChart("鍏噷/灏忔椂",
-                        Collections.singletonList(series("骞冲潎閫熷害", observation.speed)), false, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                        Collections.singletonList(series("骞冲潎閫熷害", observation.speed)), false, 2,
+                        observation.labels, 1100, 590),
+                lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 prefix + "鏅�氬浗鐪侀亾瑙傛祴绔欏钩鍧囨嫢鎸ゅ害",
                 chartService.lineChart("鎷ユ尋搴�",
-                        Collections.singletonList(series("骞冲潎鎷ユ尋搴�", observation.congestion)), false, 3, 1100, 590),
-                new HolidayTrendWordService.ImageSize(5268595L, 2821305L)));
+                        Collections.singletonList(series("骞冲潎鎷ユ尋搴�", observation.congestion)), false, 2,
+                        observation.labels, 1100, 590),
+                lineImageSize(5268595L, 2821305L)));
 
         File template = resolveTemplateFile();
         if (!template.exists() || !template.isFile()) {
@@ -263,23 +266,27 @@
     private ObservationData observationData(int year, String holidayType) {
         List<HolidayCalendar> days = configService.findHolidayDays(year, holidayType);
         if (days.isEmpty()) {
-            return new ObservationData(nulls(), nulls());
+            return new ObservationData(nulls(), nulls(), HolidayTrendChartService.DAY_LABELS);
         }
         LocalDate start = days.get(0).getHolidayDate();
-        LocalDate end = start.plusDays(HolidayTrendChartService.DAY_LABELS.size() - 1L);
+        LocalDate end = days.get(days.size() - 1).getHolidayDate();
         List<ObservationDailyOperation> rows = observationStationFlowMapper.selectDailyOperations(start, end);
         Map<LocalDate, ObservationDailyOperation> byDate = new LinkedHashMap<>();
         for (ObservationDailyOperation row : rows) {
             byDate.put(row.getObsDate(), row);
         }
+        DateTimeFormatter labelFormat = DateTimeFormatter.ofPattern("M鏈坉鏃�");
         List<BigDecimal> speed = new ArrayList<>();
         List<BigDecimal> congestion = new ArrayList<>();
-        for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) {
-            ObservationDailyOperation row = byDate.get(start.plusDays(i));
+        List<String> labels = new ArrayList<>();
+        for (HolidayCalendar day : days) {
+            LocalDate date = day.getHolidayDate();
+            ObservationDailyOperation row = byDate.get(date);
             speed.add(row == null ? null : row.getAverageSpeed());
             congestion.add(row == null ? null : row.getAverageCongestion());
+            labels.add(date.format(labelFormat));
         }
-        return new ObservationData(speed, congestion);
+        return new ObservationData(speed, congestion, labels);
     }
 
     private HolidayTrendChartService.ChartSeries series(String name, List<BigDecimal> values) {
@@ -345,6 +352,11 @@
         List<BigDecimal> result = new ArrayList<>();
         for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) result.add(null);
         return result;
+    }
+
+    private HolidayTrendWordService.ImageSize lineImageSize(long width, long height) {
+        return new HolidayTrendWordService.ImageSize(
+                width, HolidayTrendChartService.scaleLineChartHeight(height));
     }
 
     private File resolveTemplateFile() {
@@ -436,10 +448,12 @@
     private static class ObservationData {
         private final List<BigDecimal> speed;
         private final List<BigDecimal> congestion;
+        private final List<String> labels;
 
-        private ObservationData(List<BigDecimal> speed, List<BigDecimal> congestion) {
+        private ObservationData(List<BigDecimal> speed, List<BigDecimal> congestion, List<String> labels) {
             this.speed = speed;
             this.congestion = congestion;
+            this.labels = labels;
         }
     }
 }

--
Gitblit v1.9.1