From 6f3dd209dee910a9ea899c35600ceaf84e528218 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 12 十月 2026 15:18:50 +0800
Subject: [PATCH] fix(汇总大表): 扩列器整本重算写缓存(修公式无缓存导致的取数差异)待验收

---
 HANDOFF.md                                                                                         |    7 +++++++
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java |   14 ++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/HANDOFF.md b/HANDOFF.md
index 9dc34d6..f4a0d2d 100644
--- a/HANDOFF.md
+++ b/HANDOFF.md
@@ -64,6 +64,13 @@
 - **涓�澶勯渶鐢ㄦ埛鎷嶆澘鐨勬暟鍊煎彉鍖�**锛氭湰娆$敓鎴愪欢 `涓彛寰勬帓鍚峘 鏈� **46 鏍�**锛堝悓姣�/鎺掑悕锛屽 `D3` 0.0581鈫�**0.0402**銆乣E4` 绗�10鈫掔**9**锛変笌涓婁竴鐗堜笉鍚岋紱**鏂板�间笌銆婁腑鍙e緞鍒嗘瀽銆嬮〉閫愪綅涓�鑷�**锛坄B3=35028.0636`銆乣C3=0.04015856`锛夆�斺�斿嵆鎺掑悕椤典笌鏄庣粏/鍒嗘瀽椤靛彛寰勭粺涓�锛堝師鏃у�兼槸璇ラ〉鍦ㄦ瘝鐗堥噷鐨勬棫缂撳瓨锛夈��**淇濈暀鏂板�� / 鍥為��鏃у�煎緟鐢ㄦ埛纭**銆�
 - **褰掓。璇存槑**锛歚褰掓。/` 鍐� 5 浠跺巻鍙叉瘝鐗�/鐗堝紡浠朵粛鍙殢鏃跺彇鍥烇紙鏈垹闄わ級锛涙瘝鐗堢洰褰曚互鍚庡彧鏀�"褰撴湡涓�鏈�"銆�
 - **鐘舵��**锛�**銆愬緟楠屾敹銆�**銆�
+### 10-12锛�9锛夛細鎵╁垪鍣ㄥ姞銆屾暣鏈噸绠楀啓缂撳瓨銆�+ 鏄庣‘淇濈暀涓彛寰勬帓鍚嶆柊鍊笺�愬緟楠屾敹銆�
+
+- **闂瀹氫綅锛堢敤鎴烽棶"涓轰粈涔堜骇鐢熻繖 46 鏍煎樊寮�"锛�**锛氭瘝鐗堥噷**澶ч噺鍏紡鍙湁鍏紡銆佹病鏈夌紦瀛樺��**锛圥OI 鍐欏叕寮忎笉甯︾紦瀛橈級銆傚疄璇侊細姣嶇増缁� Excel 淇濆瓨鍓嶅悗 **绾� 2.47 涓囨牸**鐢�"绌�"鍙�"鏈夊��"锛堝 ` 璐ц繍!U5: 绌衡啋130311.8927`锛夈�俙涓彛寰勬帓鍚峘 鐨勫悓姣�/鎺掑悕鐢辩▼搴�**璇绘瘝鐗堢紦瀛�**璁$畻锛堟柟妗� A锛夆啋 缂撳瓨绌烘椂绠楁棫鍊� `0.0581`锛岀紦瀛樿ˉ榻愬悗绠� `0.0402`锛�**涓庛�婁腑鍙e緞鍒嗘瀽銆嬮�愪綅涓�鑷�**锛夈��**鏂板�兼墠鏄暟鎹畬鏁存椂鐨勬纭粨鏋�**銆�
+- **鏀瑰姩**锛歚SummaryLayoutExpander` 鏂板 `recalcAndCache(wb)`锛坄clearAllCachedResultValues()` + `evaluateAll()` 鍐欏洖缂撳瓨锛屽け璐ヤ粎 WARN锛夛紝鍦� `expand()` 涓� `fixTitles()` 涓皟鐢ㄣ��
+- **楠岃瘉**锛氭墿鍒� 2026-08 鈫� 鍏紡鏍� **39,961** 涓紝**绌虹紦瀛樹粎 4 鏍�**锛堝叏鍦� ` 璐ц繍`锛孭OI 鏃犳硶姹傝В鐨勫閮ㄥ紩鐢紝Excel 鎵撳紑浼氱畻锛夛紱淇鍓嶅悓绫绘瘝鐗堢害 2.47 涓囨牸鏃犵紦瀛樸��
+- **鐢ㄦ埛鍐冲畾**锛歚涓彛寰勬帓鍚峘 閭� 46 鏍�**淇濈暀鏂板��**锛堜笌涓彛寰勫垎鏋愪竴鑷达紝鍙e緞缁熶竴锛夈��
+- **鎶ュ憡锛堟湰鍦般�佷笉鍏ュ簱锛�**锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎵╁垪鏁存湰閲嶇畻鍐欑紦瀛榑2026-10-12.md`銆傜姸鎬侊細**銆愬緟楠屾敹銆�**銆�
 ## 鏈�鏂帮紙2026-10-12锛寊yj 绾匡級
 
 ### 10-12锛氭墿鍒楀櫒琛ャ�屾爣棰樻寜姣嶇増鏈熸閲嶅啓銆�+ 淇 8 鏈堟瘝鐗堟爣棰樸�愬緟楠屾敹銆�
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
index 20c94ff..6d3b317 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
@@ -3,6 +3,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
@@ -80,6 +81,7 @@
                 if (sh == null || expanded.contains(sh.getSheetName())) continue;
                 shiftQualifiedRefs(sh, insertColOf);
             }
+            recalcAndCache(wb);
             int titleFixed = applyTitles(wb, year, targetMonth);
             if (titleFixed > 0) {
                 log.info("鎵╁垪锛氭爣棰樻寜 {}骞磠}鏈� 閲嶅啓 {} 鏍�", year, targetMonth, titleFixed);
@@ -96,6 +98,7 @@
     /** 鍙妸 7 涓爣棰橀〉鐨勬爣棰樻寜缁欏畾鏈熸閲嶅啓锛堢敤浜庝慨姝f瘝鐗堥噷婊炲悗鐨勬爣棰橈級銆� */
     public byte[] fixTitles(byte[] source, int year, int month) {
         try (XSSFWorkbook wb = new XSSFWorkbook(new ByteArrayInputStream(source))) {
+            recalcAndCache(wb);
             int n = applyTitles(wb, year, month);
             wb.setForceFormulaRecalculation(true);
             ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -107,6 +110,17 @@
         }
     }
 
+    /** 鏁存湰閲嶇畻骞舵妸缁撴灉鍐欏叆缂撳瓨鍊硷細鍚﹀垯姣嶇増閲屽彧鏈夊叕寮忔病鏈夊�硷紝鍚庣画璇诲彇浼氭妸绌哄�煎綋 0锛�2026-10-12 淇級 */
+    private void recalcAndCache(XSSFWorkbook wb) {
+        try {
+            FormulaEvaluator ev = wb.getCreationHelper().createFormulaEvaluator();
+            ev.clearAllCachedResultValues();
+            ev.evaluateAll();
+        } catch (Exception e) {
+            log.warn("鎵╁垪锛氭暣鏈噸绠楁湭瀹屾垚锛堝叕寮忎粛鍦紝Excel 鎵撳紑浼氬啀绠楋級锛歿}", e.getMessage());
+        }
+    }
+
     /** 鎶� 7 涓〉绛剧殑鏍囬鏂囧瓧鎸夈�岀疮璁�=1-M鏈堛�佸綋鏈�=M鏈堛�嶉噸鍐欙紱鍛戒腑鏍囪鎵嶆敼锛岄伩鍏嶈浼ゅ娉ㄣ�� */
     private int applyTitles(XSSFWorkbook wb, int year, int month) {
         int changed = 0;

--
Gitblit v1.9.1