From 179544a82b074f4f1a131c01f3e3653066c19eea Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期三, 07 十月 2026 12:28:17 +0800
Subject: [PATCH] Revert "fix(holiday): 走势图按年度配置截取假期天数"

---
 HANDOFF.md                                                                                        |   11 ---
 /dev/null                                                                                         |   32 ----------
 traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendChartService.java |   12 +---
 traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendService.java      |   89 +++++++++++------------------
 4 files changed, 37 insertions(+), 107 deletions(-)

diff --git a/HANDOFF.md b/HANDOFF.md
index e7a4727..bda268b 100644
--- a/HANDOFF.md
+++ b/HANDOFF.md
@@ -6,17 +6,6 @@
 
 ## 鏈�鏂帮紙2026-10-07 涓婂崍锛屾柊寮�浼氳瘽浜ゆ帴锛�
 
-### 10-07锛氳蛋鍔垮浘妯酱鍜岀疮璁¤寖鍥存敼涓烘寜骞村害閰嶇疆锛堝緟 10-07 鏁版嵁榻愬叏鍚庢渶缁堥獙鏀讹級
-
-- **鍙戠幇鏂瑰紡**锛氬簲瑕佹眰瀵瑰凡楠屾敹鐨� 10鏈�6鏃ヨ蛋鍔垮浘 `(12).docx` 鍋氭暟鍊煎鏍搞��15 寮犲浘涓庢簮琛ㄣ�佹暟鎹簱鍜岀幇鍦洪噸鏂扮敓鎴愬浘涓�鑷达紝浣嗘姌绾垮浘妯酱浠嶅嚭鐜� `10/8`銆傛牳瀵� `holiday_calendar` 鍚庣‘璁� 2026 骞村崄涓�鍙厤缃� `10-01` 鑷� `10-07` 鍏� 7 澶╋紝浠g爜鍗村浐瀹氶亶鍘� 8 澶┿��
-- **褰卞搷**锛氭姌绾垮浘浼氬涓�涓� `10/8` 绌烘棩鏈熶綅锛�2025 骞村鍑虹殑 10/8 杩樺彲鑳借繘鍏ユ渶缁� 7 澶╃増鐨勭疮璁″拰鍏矾鍑鸿缁撴瀯瀵规瘮锛屽鑷� 2025 鑷┚鐢� `10,406` 鍙樹负 `9,365`銆侀亾璺敱 `648` 鍙樹负 `571`銆�
-- **淇**锛歚HolidayTrendService` 鎸夋墍閫夊勾浠界殑 `holiday_calendar` 鐢熸垚鏃ユ湡鏍囩鍜屽ぉ鏁帮紝鎶樼嚎鏁版嵁銆佺疮璁°�佹瘡鏃ユ瀯鎴愩�佽娴嬬珯鏁版嵁鍧囨寜閰嶇疆澶╂暟鎴彇锛沗HolidayTrendChartService.lineChart` 鏂板鏄惧紡鏃ユ湡鏍囩鍙傛暟锛屾棫璋冪敤淇濈暀榛樿琛屼负銆�
-- **楠岃瘉**锛歚mvn -q -f traffic-audit-server\pom.xml -Dtest=HolidayTrendServiceTest,HolidayTrendChartServiceTest test` 閫氳繃锛涘悗绔叏閲� `mvn -q test -f traffic-audit-server\pom.xml` 閫氳繃锛涚湡瀹炲簱鍙鐢熸垚 `_tmp_holiday_verify\server_trend_7day.docx`锛�15 寮犲浘瀹屾暣锛涘師鍥� + 3 鍊嶆斁澶� OCR 鍚堝苟鏍稿锛�2026/2025/2024 鎶樼嚎銆佹瘡鏃ユ瀯鎴愩�侀ゼ鍥俱�佸叕璺粨鏋勫拰瑙傛祴绔欐爣绛惧潎涓庣嫭绔嬮噸绠椾竴鑷达紝妯酱鏃� `10/8`銆傚敮涓� OCR 绮樿繛鏄� `1.3701.31`锛屽寘鍚鏈熺殑 `1.37` 鍜� `1.31`銆�
-- **楠屾敹鍓湰**锛歚C:\Users\jcxiong\Downloads\2026骞村崄涓�鍋囨湡鍏ㄧ渷缁煎悎杩愯緭瀹㈡祦閲忚蛋鍔垮浘锛�7澶╃増-寰呴獙鏀讹級.docx`銆�
-- **娴嬭瘯鎶ュ憡**锛歚docs\鍔熻兘娴嬭瘯鎶ュ憡\鍔熻兘娴嬭瘯鎶ュ憡_璧板娍鍥炬í杞存寜骞村害閰嶇疆_2026-10-07.md`锛堟湰鍦扮暀瀛橈紝涓嶅叆搴擄級銆�
-- **鏁版嵁杈圭晫**锛氭湭瀵煎叆銆佽鐩栨垨閲嶅浠讳綍涓氬姟鏁版嵁銆�
-- **鍚庣画**锛�10-07 鏁版嵁瀵煎叆鍚庨噸鏂扮敓鎴愭渶缁� 7 澶╃増锛岀‘璁ゆí杞村寘鍚� 10/7 涓� 2026-10-07 鏁板�艰繘鍏ュ悇鍥撅紱闅忓悗鍐嶅仛涓�娆″彧璇绘牳楠屻��
-
 ### 10-07锛氭瘡鏃ュ娴佹瀯鎴愬浘鍙充晶鏍囩甯冨眬淇锛堥獙鏀堕�氳繃锛�
 
 - **闂**锛歚image13`銆屾瘡鏃ュ娴佹瀯鎴愬彉鍖栥�嶅彸渚у缃櫨鍒嗘瘮鏍囩鍦ㄧ浉閭绘棩鏈熶箣闂撮噸鍙� 4 澶勶紱鏀逛负涓ゅ垪鍚庡紩绾夸氦閿欙紝涓埆寮曠嚎鍘嬩綇缁胯壊鍧楀唴鏁板�笺��
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendChartService.java b/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendChartService.java
index 3b4357d..0f06317 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendChartService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/holiday/service/HolidayTrendChartService.java
@@ -93,21 +93,16 @@
     }
 
     public byte[] lineChart(String yAxisLabel, List<ChartSeries> series, boolean percentAxis) {
-        return lineChart(yAxisLabel, series, percentAxis, DAY_LABELS, 2, 1100, 590);
+        return lineChart(yAxisLabel, series, percentAxis, 1100, 590);
     }
 
     public byte[] lineChart(String yAxisLabel, List<ChartSeries> series, boolean percentAxis,
                             int width, int height) {
-        return lineChart(yAxisLabel, series, percentAxis, DAY_LABELS, 2, width, height);
+        return lineChart(yAxisLabel, series, percentAxis, 2, width, height);
     }
 
     public byte[] lineChart(String yAxisLabel, List<ChartSeries> series, boolean percentAxis,
                             int valueDecimals, int width, int height) {
-        return lineChart(yAxisLabel, series, percentAxis, DAY_LABELS, valueDecimals, width, height);
-    }
-
-    public byte[] lineChart(String yAxisLabel, List<ChartSeries> series, boolean percentAxis,
-                            List<String> dayLabels, int valueDecimals, int width, int height) {
         XYSeriesCollection dataset = new XYSeriesCollection();
         for (int seriesIndex = 0; seriesIndex < series.size(); seriesIndex++) {
             ChartSeries item = series.get(seriesIndex);
@@ -137,8 +132,7 @@
         plot.setRangeGridlinesVisible(false);
         plot.setDomainTickBandPaint(null);
         plot.setRangeTickBandPaint(null);
-        List<String> axisLabels = dayLabels == null || dayLabels.isEmpty() ? DAY_LABELS : dayLabels;
-        SymbolAxis domainAxis = new SymbolAxis(null, axisLabels.toArray(new String[0]));
+        SymbolAxis domainAxis = new SymbolAxis(null, DAY_LABELS.toArray(new String[0]));
         domainAxis.setGridBandPaint(new Color(0, 0, 0, 0));
         domainAxis.setGridBandAlternatePaint(new Color(0, 0, 0, 0));
         domainAxis.setLowerMargin(0.04);
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 f02238e..9960464 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
@@ -47,16 +47,10 @@
         if (holidayLabel == null) {
             throw new IllegalArgumentException("涓嶆敮鎸佺殑鑺傚亣鏃ョ被鍨�");
         }
-        List<HolidayCalendar> holidayDays = configService.findHolidayDays(year, holidayType);
-        if (holidayDays.isEmpty()) {
-            throw new IllegalArgumentException("鎵�閫夊勾浠藉拰鑺傚亣鏃ュ皻鏈厤缃棩鏈燂紝璇峰厛鍦ㄧ郴缁熼厤缃腑缁存姢鑺傚亣鏃�");
-        }
-        List<String> dayLabels = dayLabels(holidayDays);
-        int dayCount = holidayDays.size();
         List<Integer> years = Arrays.asList(year, year - 1, year - 2);
         Map<Integer, YearData> yearData = new LinkedHashMap<>();
         for (Integer item : years) {
-            yearData.put(item, buildYearData(item, holidayType, dayCount));
+            yearData.put(item, buildYearData(item, holidayType));
         }
         YearData selected = yearData.get(year);
         if (selected == null || !selected.hasAnyData()) {
@@ -69,12 +63,12 @@
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 prefix + "鍏ㄧ渷璺ㄥ尯鍩熶汉鍛樻祦鍔ㄩ噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.totalDaily), false, dayLabels, 2, 1100, 715),
+                        series(years, yearData, item -> item.totalDaily), false, 1100, 715),
                 lineImageSize(5268595L, 3424555L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熺疮璁¤法鍖哄煙浜哄憳娴佸姩閲忚蛋鍔�",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.totalCumulative), false, dayLabels, 2, 1100, 590),
+                        series(years, yearData, item -> item.totalCumulative), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷悇浜ら�氳繍杈撴柟寮忓杩愰噺鍗犳瘮鎯呭喌",
@@ -85,44 +79,44 @@
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熻嚜椹惧嚭琛岄噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.selfDrivingPersonFlow), false, dayLabels, 2, 1100, 522),
+                        series(years, yearData, item -> item.selfDrivingPersonFlow), false, 1100, 522),
                 lineImageSize(5232400L, 2484120L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼搧璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.rail), false, dayLabels, 2, 1100, 445),
+                        series(years, yearData, item -> item.rail), false, 1100, 445),
                 lineImageSize(5264785L, 2129155L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸按璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.water), false, dayLabels, 2, 1100, 433),
+                        series(years, yearData, item -> item.water), false, 1100, 433),
                 lineImageSize(5274310L, 2075815L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸皯鑸杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.civilAviation), false, dayLabels, 2, 1100, 521),
+                        series(years, yearData, item -> item.civilAviation), false, 1100, 521),
                 lineImageSize(5271135L, 2496185L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼亾璺杩愰噺鎯呭喌",
                 chartService.lineChart("涓囦汉娆�",
-                        series(years, yearData, item -> item.road), false, dayLabels, 2, 1100, 590),
+                        series(years, yearData, item -> item.road), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
 
         blocks.add(new HolidayTrendWordService.SectionBlock("涓夈�佽溅娴侀噺璧板娍"));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熼珮閫熷叕璺溅娴侀噺鎯呭喌",
                 chartService.lineChart("涓囪締娆�",
-                        series(years, yearData, item -> item.expressway), false, dayLabels, 2, 1100, 590),
+                        series(years, yearData, item -> item.expressway), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸櫘閫氬浗鐪侀亾杞︽祦閲忔儏鍐�",
                 chartService.lineChart("涓囪締娆�",
-                        series(years, yearData, item -> item.nationalProvincial), false, dayLabels, 2, 1100, 590),
+                        series(years, yearData, item -> item.nationalProvincial), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷叏鐪佽溅娴佹�婚噺鎯呭喌",
                 chartService.lineChart("涓囪締娆�",
-                        series(years, yearData, item -> item.totalVehicleFlow), false, dayLabels, 2, 1100, 590),
+                        series(years, yearData, item -> item.totalVehicleFlow), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熷叕璺嚭琛岀粨鏋�",
@@ -135,21 +129,21 @@
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 "鈥�" + holidayLabel + "鈥濆亣鏈熸瘡鏃ュ娴佹瀯鎴愬彉鍖�",
                 chartService.stackedBarChart("鍗犳瘮",
-                        dayLabels,
-                        dailyShareSeries(selected, dayCount), true, 1000, 607), true,
+                        HolidayTrendChartService.DAY_LABELS,
+                        dailyShareSeries(selected), true, 1000, 607), true,
                 new HolidayTrendWordService.ImageSize(5106670L, 3097530L)));
 
         blocks.add(new HolidayTrendWordService.SectionBlock("闄勫綍浜� 鏅�氬浗鐪侀亾瑙傛祴绔欒矾缃戣繍琛�"));
-        ObservationData observation = observationData(holidayDays);
+        ObservationData observation = observationData(year, holidayType);
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 prefix + "鏅�氬浗鐪侀亾瑙傛祴绔欏钩鍧囨満鍔ㄨ溅閫熷害",
                 chartService.lineChart("鍏噷/灏忔椂",
-                        Collections.singletonList(series("骞冲潎閫熷害", observation.speed)), false, dayLabels, 2, 1100, 590),
+                        Collections.singletonList(series("骞冲潎閫熷害", observation.speed)), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
         blocks.add(new HolidayTrendWordService.ChartBlock(
                 prefix + "鏅�氬浗鐪侀亾瑙傛祴绔欏钩鍧囨嫢鎸ゅ害",
                 chartService.lineChart("鎷ユ尋搴�",
-                        Collections.singletonList(series("骞冲潎鎷ユ尋搴�", observation.congestion)), false, dayLabels, 2, 1100, 590),
+                        Collections.singletonList(series("骞冲潎鎷ユ尋搴�", observation.congestion)), false, 1100, 590),
                 lineImageSize(5268595L, 2821305L)));
 
         File template = resolveTemplateFile();
@@ -163,9 +157,9 @@
         }
     }
 
-    private YearData buildYearData(int year, String holidayType, int dayCount) {
+    private YearData buildYearData(int year, String holidayType) {
         List<DailyMetrics> metrics = new ArrayList<>();
-        for (int day = 1; day <= dayCount; day++) {
+        for (int day = 1; day <= HolidayTrendChartService.DAY_LABELS.size(); day++) {
             metrics.add(statService.dailyMetrics(year, holidayType, day));
         }
         YearData data = new YearData();
@@ -216,19 +210,19 @@
         return result;
     }
 
-    private List<HolidayTrendChartService.ChartSeries> dailyShareSeries(YearData data, int dayCount) {
+    private List<HolidayTrendChartService.ChartSeries> dailyShareSeries(YearData data) {
         List<HolidayTrendChartService.ChartSeries> result = new ArrayList<>();
-        result.add(series("鑷┚", share(data.selfDrivingPersonFlow, data, dayCount)));
-        result.add(series("閬撹矾", share(data.road, data, dayCount)));
-        result.add(series("閾佽矾", share(data.rail, data, dayCount)));
-        result.add(series("姘戣埅", share(data.civilAviation, data, dayCount)));
-        result.add(series("姘磋矾", share(data.water, data, dayCount)));
+        result.add(series("鑷┚", share(data.selfDrivingPersonFlow, data)));
+        result.add(series("閬撹矾", share(data.road, data)));
+        result.add(series("閾佽矾", share(data.rail, data)));
+        result.add(series("姘戣埅", share(data.civilAviation, data)));
+        result.add(series("姘磋矾", share(data.water, data)));
         return result;
     }
 
-    private List<BigDecimal> share(List<BigDecimal> values, YearData data, int dayCount) {
+    private List<BigDecimal> share(List<BigDecimal> values, YearData data) {
         List<BigDecimal> result = new ArrayList<>();
-        for (int i = 0; i < dayCount; i++) {
+        for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) {
             BigDecimal total = dayTotal(data, i);
             BigDecimal value = valueAt(values, i);
             result.add(total == null || total.signum() == 0
@@ -266,12 +260,13 @@
                 series("閬撹矾瀹㈣繍閲�", road));
     }
 
-    private ObservationData observationData(List<HolidayCalendar> days) {
+    private ObservationData observationData(int year, String holidayType) {
+        List<HolidayCalendar> days = configService.findHolidayDays(year, holidayType);
         if (days.isEmpty()) {
-            return new ObservationData(nulls(0), nulls(0));
+            return new ObservationData(nulls(), nulls());
         }
         LocalDate start = days.get(0).getHolidayDate();
-        LocalDate end = days.get(days.size() - 1).getHolidayDate();
+        LocalDate end = start.plusDays(HolidayTrendChartService.DAY_LABELS.size() - 1L);
         List<ObservationDailyOperation> rows = observationStationFlowMapper.selectDailyOperations(start, end);
         Map<LocalDate, ObservationDailyOperation> byDate = new LinkedHashMap<>();
         for (ObservationDailyOperation row : rows) {
@@ -279,8 +274,8 @@
         }
         List<BigDecimal> speed = new ArrayList<>();
         List<BigDecimal> congestion = new ArrayList<>();
-        for (HolidayCalendar day : days) {
-            ObservationDailyOperation row = byDate.get(day.getHolidayDate());
+        for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) {
+            ObservationDailyOperation row = byDate.get(start.plusDays(i));
             speed.add(row == null ? null : row.getAverageSpeed());
             congestion.add(row == null ? null : row.getAverageCongestion());
         }
@@ -324,8 +319,7 @@
 
     private List<BigDecimal> percentageChanges(List<BigDecimal> current, List<BigDecimal> previous) {
         List<BigDecimal> result = new ArrayList<>();
-        int size = Math.max(current == null ? 0 : current.size(), previous == null ? 0 : previous.size());
-        for (int i = 0; i < size; i++) {
+        for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) {
             BigDecimal currentValue = valueAt(current, i);
             BigDecimal previousValue = valueAt(previous, i);
             BigDecimal ratio = HolidayNumberUtils.divide(currentValue, previousValue);
@@ -348,24 +342,9 @@
     }
 
     private List<BigDecimal> nulls() {
-        return nulls(HolidayTrendChartService.DAY_LABELS.size());
-    }
-
-    private List<BigDecimal> nulls(int size) {
         List<BigDecimal> result = new ArrayList<>();
-        for (int i = 0; i < size; i++) result.add(null);
+        for (int i = 0; i < HolidayTrendChartService.DAY_LABELS.size(); i++) result.add(null);
         return result;
-    }
-
-    static List<String> dayLabels(List<HolidayCalendar> days) {
-        List<String> labels = new ArrayList<>();
-        if (days == null) return labels;
-        for (HolidayCalendar day : days) {
-            if (day == null || day.getHolidayDate() == null) continue;
-            labels.add(day.getHolidayDate().getMonthValue() + "鏈�"
-                    + day.getHolidayDate().getDayOfMonth() + "鏃�");
-        }
-        return labels;
     }
 
     private HolidayTrendWordService.ImageSize lineImageSize(long width, long height) {
diff --git a/traffic-audit-server/src/test/java/com/trafficaudit/holiday/service/HolidayTrendServiceTest.java b/traffic-audit-server/src/test/java/com/trafficaudit/holiday/service/HolidayTrendServiceTest.java
deleted file mode 100644
index 89be91d..0000000
--- a/traffic-audit-server/src/test/java/com/trafficaudit/holiday/service/HolidayTrendServiceTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.trafficaudit.holiday.service;
-
-import com.trafficaudit.holiday.entity.HolidayCalendar;
-import org.junit.jupiter.api.Test;
-
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-class HolidayTrendServiceTest {
-
-    @Test
-    void buildsTrendAxisFromConfiguredHolidayDays() {
-        List<HolidayCalendar> days = new ArrayList<>();
-        for (int index = 1; index <= 7; index++) {
-            HolidayCalendar day = new HolidayCalendar();
-            day.setYear(2026);
-            day.setHolidayType("NATIONAL_DAY");
-            day.setDayIndex(index);
-            day.setHolidayDate(LocalDate.of(2026, 10, index));
-            days.add(day);
-        }
-
-        assertEquals(Arrays.asList(
-                "10鏈�1鏃�", "10鏈�2鏃�", "10鏈�3鏃�", "10鏈�4鏃�",
-                "10鏈�5鏃�", "10鏈�6鏃�", "10鏈�7鏃�"),
-                HolidayTrendService.dayLabels(days));
-    }
-}

--
Gitblit v1.9.1