| HANDOFF.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/生成汇总大表/2026年9月道路运输量汇总表.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HANDOFF.md
@@ -17,6 +17,18 @@ - **å£å¾ç»è®ºï¼åè¿è®¾è®¡ï¼**ï¼**æ°æ¯çä¸å¾ä»"å½æäº§ç©"æ´¾ç**ï¼äº§ç©å¸¦å½ææ°æ®ä¸å ¬å¼ï¼ï¼ä¸å仿§æ¯çæ´¾çââå¦åæ¯æé½ä¼ä¸¢"彿å"ï¼ç´¯è®¡éææ¼æ°ã - **éç**ï¼â å¾ ç¨æ·ç¡®è®¤æ¯å¦æ v3 è½ç为æ£å¼ 9 ææ¯çï¼ä¼å å¤ä»½æå·¥çï¼ï¼â¡ æ©å产ç©ä¸è¢«éåçå ¬å¼ææ ç¼åå¼ï¼åªåå ¬å¼ + `fullCalcOnLoad`ï¼Excel/WPS æå¼èªå¨ç®ï¼ââ建议补"æ´æ¬éç®åç¼å"ï¼â¢ `ä¸å£å¾æç»` 表头è¡è¯å«è¿å `[2,4]`ï¼éæ ¸æ¥ã - **æ¥åï¼æ¬å°ãä¸å ¥åºï¼**ï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ©åä»¥å½æäº§ç©ä¸ºåº_2026-10-12.md`ãç¶æï¼**ãå¾ éªæ¶ã**ã ### 10-12ï¼4ï¼ï¼æ©åå ¬å¼å é两å¤ä¿®æ£ + 9 ææ¯çè½ç + 端å°ç«¯éªè¯éè¿ãå¾ éªæ¶ã - **ä¿®åé®é¢ï¼å䏿¹æ¬¡çä¸ä¸ªï¼**ï¼â å é"彿å¼å"æ¶å ¬å¼æªç¸å¯¹å³ç§»ï¼æ°ååæ `=Q7+Q9`ï¼åº `=S7+S9`ï¼â å ¨çè¡åå°ä¸ææ°ï¼â¡ å é"彿忝å"æ¶ååæåæ§æä»½ï¼`=Q5/AN5-1`ï¼åº `=S5/AN5-1`ï¼â ç®çæ¯"䏿å¼Ã·å»å¹´åæ"ï¼â¢ POI `setCellFormula` **䏿¥åå导 `=`** â æ¥å£ 500ï¼`FormulaParseException`ï¼Â§6.3 åå²åï¼ã - **ä¿®æ³**ï¼æ°å¢ `shiftRefsAll`ï¼å 鿶坹"æ¬é¡µ/å·²æ©å页"å¼ç¨**æ æ¡ä»¶ +2**ï¼ç¸å¯¹å¤å¶ï¼ä¸ `cloneYoyCell`ï¼ä¸å éï¼ç´æ¥å `æ¬æå¼/表ä¸å®ä½çå»å¹´åæ-1`ï¼å³ C3 å£å¾ï¼ï¼å ¬å¼ä¸²å»æå导 `=`ã - **9 ææ¯çè½çï¼ç¨æ·å·²ç¡®è®¤ï¼**ï¼æå·¥çå¤ä»½ä¸º `_bak_2026å¹´9ææ¯ç_æå·¥ç_20261012.xlsx`ï¼æ°æ¯ç = "8 æäº§ç© â æ©å"ï¼1,083,567 Bï¼è¾åºç®å½å½åçé¡ºï¼ææ°ä»¶ `_æ©å_2026å¹´9æ_å¾ ç¡®è®¤.xlsx`ï¼æ§çå `_bak_` åç¼ï¼ã - **端å°ç«¯éªè¯ï¼ç¨æ°æ¯ççæ 2026-09ï¼**ï¼ - è´§è¿ 8 æåæå¼ï¼å ¨å£å¾ **16888.7615**ãè§ä¸ **3665.3638**ãè§ä¸ **13223.3977**ï¼ - 9 æåï¼å ¨å£å¾ 3575.1211ï¼â¡è¡¨æªå¯¼ï¼åªæâ è§ä¸ï¼ãè§ä¸ 3575.1211ï¼ - **累计ï¼å ¨å£å¾ 133887.0138ï¼=1-8æ 130311.89 + 9æ 3575.12ï¼ãè§ä¸ 34974.9459ï¼=27734.46+3665.36+3575.12ï¼ãè§ä¸ 98912.0679** â 䏿ç®ä¸è´ï¼ - å ¬äº¤ï¼8 æ 12315.37ã累计 110776.34 âã - **éç**ï¼â æ©å产ç©è¢«éåçå ¬å¼æ ç¼åå¼ï¼å»ºè®®è¡¥"æ´æ¬éç®åç¼å"ï¼ï¼â¡ `ä¸å£å¾æç»` 表头è¡è¯å«è¿å `[2,4]` å¾ æ ¸æ¥ï¼â¢ â¡è¡¨ï¼å ¨å£å¾ï¼9 ææªå¯¼å ¥åï¼"å ¨å£å¾"è¡æ¾ç¤ºçäºè§ä¸ï¼å ¬å¼ =è§ä¸+è§ä¸ãè§ä¸ä¸ºç©ºï¼ï¼ä½æ£å·²æç¤ºï¼å¯¼æ°æ®åèªå¨æ£å¸¸ã - **æ¥åï¼æ¬å°ãä¸å ¥åºï¼**ï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ©åå ¬å¼å éä¿®æ£ä¸9æéªè¯_2026-10-12.md`ãç¶æï¼**ãå¾ éªæ¶ã**ã ## ææ°ï¼2026-10-12ï¼zyj çº¿ï¼ ### 10-12ï¼æ©åå¨è¡¥ãæ 颿æ¯çææ¬¡éåã+ ä¿®æ£ 8 ææ¯çæ é¢ãå¾ éªæ¶ã docs/Éú³É»ã×Ü´ó±í/2026Äê9ÔµÀ·ÔËÊäÁ¿»ã×ܱí.xlsxBinary files differ
traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
@@ -208,8 +208,8 @@ if (headerRows.contains(r)) continue; Row row = sh.getRow(r); if (row == null) continue; cloneDataCell(row, srcVal, insertCol, shiftable, insertCol); cloneDataCell(row, srcYoy, insertCol + 1, shiftable, insertCol); cloneDataCell(row, srcVal, insertCol, shiftable); cloneYoyCell(row, srcYoy, insertCol + 1, insertCol, lastYearSameMonth + 2); } // 5) 累计åè¡¥å½æé¡¹ï¼ç´¯è®¡åæ¯åæ¯è¡¥å»å¹´åæå int cumCol = insertCol + 2, cumYoyCol = insertCol + 3; @@ -348,17 +348,47 @@ } } private void cloneDataCell(Row row, int srcCol, int dstCol, Set<String> shiftable, int insertCol) { private void cloneDataCell(Row row, int srcCol, int dstCol, Set<String> shiftable) { Cell s = row.getCell(srcCol); if (s == null) return; Cell d = getOrCreate(row, dstCol); d.setBlank(); d.setCellStyle(s.getCellStyle()); if (s.getCellType() == CellType.FORMULA) { d.setCellFormula(shiftRefs(s.getCellFormula(), insertCol, shiftable)); d.setCellFormula(shiftRefsAll(s.getCellFormula(), shiftable)); } } /** 彿忝åï¼ä¸å éä¸æå ¬å¼ï¼ç´æ¥æãæ¬æå¼ / å»å¹´åæ â 1ãéåï¼å»å¹´åæåå·²æè¡¨å¤´å®ä½ï¼ */ private void cloneYoyCell(Row row, int srcCol, int dstCol, int valCol0, int denCol0) { Cell s = row.getCell(srcCol); if (s == null) return; Cell d = getOrCreate(row, dstCol); d.setBlank(); d.setCellStyle(s.getCellStyle()); if (s.getCellType() == CellType.FORMULA) { int excelRow = row.getRowNum() + 1; d.setCellFormula(colLetter(valCol0) + excelRow + "/" + colLetter(denCol0) + excelRow + "-1"); } } /** ç¸å¯¹å¤å¶ç¨çå¹³ç§»ï¼ææ¬é¡µ/å·²æ©å页çå¼ç¨æ´ä½ +2ï¼ä¸ååå·éå¼å¤æï¼ */ private String shiftRefsAll(String formula, Set<String> shiftable) { Matcher m = REF.matcher(formula); StringBuffer sb = new StringBuffer(); while (m.find()) { String sheet = m.group(2) != null ? m.group(2) : m.group(3); if ((sheet != null && !shiftable.contains(sheet)) || isFunctionName(formula, m)) { m.appendReplacement(sb, Matcher.quoteReplacement(m.group(0))); continue; } int colIdx = colIndex(m.group(5)); m.appendReplacement(sb, Matcher.quoteReplacement(rebuild(m, sheet, colIdx + 2))); } m.appendTail(sb); return sb.toString(); } private void shiftAllRefs(Sheet sh, int insertCol, Set<String> shiftable) { for (int r = 0; r <= sh.getLastRowNum(); r++) { Row row = sh.getRow(r);