| | |
| | | > **每天结束时**:把当天进展、踩过的坑、新需求、未完成事项更新到本文件,然后可以放心开新对话。 |
| | | > **协作约定(2026-08-31)**:说「提交」= 本地 commit + 推送到远端 git(origin main,Gitblit),不再只做本地 commit。 |
| | | |
| | | ### 10-12(2):货运口径「导出前基数体检」(B4)6 条规则落地【待验收】 |
| | | |
| | | - **背景**:规下 = ②《货运量周转量表》全口径 − ①H203-2 规上÷10000,是**倒减**——①漏报会让规下虚高、极端还会算出负数。用户 2026-10-12 同意把这组规则加进 B4。 |
| | | - **实现**:新增 `reportexport/calc/FreightReadinessCheck.java`(只读);接入 `exportSummaryWorkbook` 的缺数收集 `dbProblems`(随导出日志输出);新增只读接口 `GET /api/report/summaryWorkbook/freightCheck?period=YYYY-MM`。 |
| | | - **规则**:① 某市州规下为负;② ②有全口径、①无规上记录(疑漏报→规下=全口径);③ ②全口径 < ①规上;④ Σ17 市州 ≠ ②"湖北省"行(容差 0.01);⑤ **本月与上月完全相同**(疑重复导入,两侧 ≥50 万吨/万吨公里);⑥ **同比异常**(|去年同月→本月| > 50%,两侧 ≥50);⑥' 累计勾稽(①周转量 1..M 求和 ÷10000 vs ③拆分表 CUMULATIVE)。 |
| | | - **阈值修正(实测驱动,重要)**:首版用"规下环比 > 30%" → 2026-02 命中 22 条、2026-03 命中 32 条,复核确认**全是春节季节性**(各市州 2 月 −30~−40%、3 月 +30~+60%),非数据错误 → 改为"重复导入特征 + 同比>50%";并给判据加**绝对门槛 50 万吨/万吨公里**,避免神农架林区(20~46 万吨)这类小基数噪声长期报警。 |
| | | - **实测**:2026-01~08 **全期 0 命中**(无误报);②表 `last_freight_m08`/`last_turnover_m08` **18/18 行有值** → 同比规则确实参与计算(非空跑)。 |
| | | - **报告(本地、不入库)**:`docs/功能测试报告/功能测试报告_货运基数体检B4六条规则_2026-10-12.md`;日结同日两条。 |
| | | - **待用户验收/确认**:① 阈值(绝对门槛 50、同比 50%)是否合适;② 是否现在做 B4 剩余部分——导出前弹窗 + 生成件《数据缺失清单》页(P0-3 剩余)。 |
| | | - **状态**:**【待验收】**。只读功能,未改动业务数据。 |
| | | ## 最新(2026-10-12,zyj 线) |
| | | |
| | | ### 10-12:扩列器补「标题按母版期次重写」+ 修正 8 月母版标题【待验收】 |
| | | |
| | | - **用户反馈**:9 月版式件与 8 月母版里,7 个页签的标题仍是 `1-7月 / 7月`(货运量排名、货运周转量排名、城市汇总、城市分市州、中口径排名、中口径分析、道路运输周转量)。 |
| | | - **根因(两条)**:① 按已确认口径这 7 页是 C 类页——**标题由生成程序在出表时现写**(`ReportExportService :969 / :1011 / :2707 / :2891 / :4446 / :4498 / :4499 / :4604` 均按 period 写),母版里的文字不参与出表,所以扩列器原本没动它们;② **我的实现确实漏了"标题 +1"这一步**——《扩列配置·核对版》动作 7 写了"标题:页面标题月份+1(逐页核对)",我只做了 8 个台账页的表头克隆。 |
| | | - **修复**:扩列器新增 `applyTitles(...)`——按**母版期次**重写标题(累计=`1-M月`、当月=`M月`),只处理 7 个标题页、**命中标题标记才改**(避免误伤 ` 货运!A1` 这类备注),4 位年份一并按目标年重写;新增只读接口参数 `?titlesOnly=true`(只改标题不扩列)。 |
| | | - **8 月母版已修正**:7 页标题 `1-7月/7月` → **`1-8月/8月`**(修正前备份 `docs/生成汇总大表/_bak_2026年8月母版_标题修正前_20261012.xlsx`);19 页签与公式抽查无损(`中口径明细!C5`、`公交!C5` 全省行公式、` 货运!A1` 备注均正常)。 |
| | | - **9 月版式重跑**:7 页标题 → **`1-9月/9月`**;产出 `docs/生成汇总大表/输出/_扩列_2026年9月_待确认_v2.xlsx`(1,037,071 B)。 |
| | | - **与手工 9 月母版复比**:851 条差异 = 8 个台账页 836 条(沿用 10-10 分类:累计/分母是否扩到 9 月 548、分隔符 153、表名引号 130、浮点尾差 1)+ **标题页 15 条**(手工件标题为滞后的 `1-8月/7月`)。 |
| | | - **踩坑**:重跑时目标文件被 Excel/WPS 占用(`being used by another process`)→ 先落 `_v2` 命名;用户关闭后可用原名重写。 |
| | | - **报告(本地、不入库)**:`docs/功能测试报告/功能测试报告_汇总大表扩列器标题修正_2026-10-12.md`;日结 `docs/工作日结/工作日结_2026-10-12.md`。 |
| | | - **待用户验收/确认**:① 标题口径按"**标题期次=母版期次**"(8月→1-8月/8月、9月→1-9月/9月)是否正确;② `_扩列_2026年9月_待确认_v2.xlsx` 是否改名为正式名(原名那份是旧内容、被 WPS 存过,未经同意不动);③ 累计/累计同比"是否扩到 9 月"(产出=已扩、手工版未扩)。 |
| | | - **状态**:**【待验收】**。 |
| | | ## 最新(2026-10-10,zyj 线) |
| | | |
| | | ### 10-10:Step 1 扩列器落地 + 8→9 月版式首轮产出【待验收】 |
| | | |
| | | - **新增扩列器**:`traffic-audit-server/.../reportexport/layout/SummaryLayoutExpander.java`;新增只读接口 `GET /api/report/export/summaryWorkbook/expand?period=YYYY-MM`(返回字节、**不落盘**);`ReportExportService.expandSummaryWorkbook(period)` 负责取当期母版并调用。规则依据 `docs/汇总大表母版扩列配置_核对版_2026-10-09.md`(8 个可见台账页;4 个隐藏页不扩列但同步平移其跨页引用)。 |
| | | - **产出(待确认件,未落盘为母版)**:`docs/生成汇总大表/输出/_扩列_2026年9月_待确认.xlsx`(1,036,939 B,2026-10-10 09:30:07)。只做版式,9 月数据列留空。 |
| | | - **与手工 9 月母版逐格比对**:**` 货运` 差异 = 0**(规则正确的最强证据);其余 7 页共 836 条差异,**全部非数值分歧**,分为四类: |
| | | 1. **548 条**:产出把「累计/累计同比分母」扩到 9 月,手工版未扩——正是 09-29《扩列进度》认定的待修项 ③④("累计列只算到 8 月""去年基数只到 8 月"),即**手工 9 月母版这 7 页尚未修完**; |
| | | 2. 153 条:分母新增项分隔符写法(`SUM(a+b+…,c)` vs `SUM(a+b+…+c)`,等价同值); |
| | | 3. 130 条:表名引号写法(`轨道、轮渡!C6` vs `'轨道、轮渡'!C6`,Excel 规范化所致,同值); |
| | | 4. 1 条:浮点尾差。 |
| | | - **8 月及以前列**:仅 28 条差异且全部属第 3 类引号写法(集中在 `城市客运`),未动数值/列号。 |
| | | - **过程中修掉的两个实现缺陷**(重要,避免复现): |
| | | 1. POI 5.2.5 的合并区 API 是 `addMergedRegion(CellRangeRangeAddress)`、`removeMergedRegion(int)`(无 CellRangeAddress 重载)——按下标摘除、按对象添加; |
| | | 2. 引用正则最初只认 ASCII 表名,**漏掉母版里 5,574 处"未带引号的中文表名"引用**(如 `轨道、轮渡!C6`)→ 已把表名字符类扩到 CJK,修正后列号与手工真值一致。 |
| | | 3. 写件用 **POI**(与生成链路同源),不用 openpyxl(本项目历史上有 openpyxl 写出导致 Excel 拒绝打开的案例)。 |
| | | - **报告(本地、不入库)**:`docs/功能测试报告/功能测试报告_汇总大表扩列器8月到9月版式_2026-10-10.md`;日结 `docs/工作日结/工作日结_2026-10-10.md`。 |
| | | - **待用户验收/确认**:① 累计列与累计同比分母**是否应扩到 9 月**(产出=已扩;按 09-29 待修清单,方向与当时认定一致);② 确认后是否把产出落盘为正式 9 月母版(按已确认口径:人工确认后落盘)。 |
| | | - **状态**:**【待验收】**(版式类改动)。未导入任何业务数据、未改动生成主链。 |
| | | - **下一步**:按确认结论微调(如需)→ 复跑 8→9 → 接入主链(`resolveSummaryMother` 找不到目标月母版时自动扩列)+ 归档目录与版式参照件按 C4 收尾。 |
| | | ## 最新(2026-10-09,zyj 线) |
| | | |
| | | ### 10-09:2025 数据现状核验(结论:已在库,无需补录)+ M0 规格补第十二节 |
| | |
| | | - **仍待确认(仅一项)**:扩列产物是自动落盘为下期母版,还是每次人工确认后再落盘(建议后者,与 A3/A4 一致)。 |
| | | - **文档更新**:`docs/汇总大表M0版式重建器规格_2026-10-06.md` 第十四节已定项替换"未决项";规格表与配置初稿各追加口径补充。 |
| | | - **状态**:【待验收】;未改动代码、未导入数据。 |
| | | |
| | | - **(同日已确认,非待确认项)落盘与文件管理**:扩列产物**先落 `docs/生成汇总大表/输出/`**(`_扩列_YYYY年M月_待确认.xlsx`),**人工确认后**才重命名落盘为当期母版;目录只留**当期一本**母版,历史期移入 `docs/生成汇总大表/归档/`,`2026年8月…_版式原型.xlsx` 一并归档;版式参照件 `生成_道路运输量汇总表.xlsx` 在扩列器跑通后归档(归档前做 C4 两步:列宽/隐藏一次性固化进母版 + `applySummaryReferenceLayout` 改按表头文字匹配列)。 |
| | | - **实施要点(实测细节,非决策项)**:母版 vs 参照件实测 **列宽 320 处、隐藏标记 31 处**不同(` 货运` 77+8、班线包车 109、中口径明细 32+14、中口径排名 17+9 等);`copyColumnWidth`(`ReportExportService.java:1186`)**只复制宽度、不复制 hidden**,扩列器克隆月份列时须补 hidden。 |
| | | ### 10-09(5):Step 0 落地——四张跨页合成页取数改为**按表头动态定位**月份列【待验收】 |
| | | |
| | | - **改动**:`ReportExportService` 中 `SM_CUR_COL0 = 2`(2026年1月=C)/ `SM_LAST_COL0 = 21`(2025年1月=V)**废弃**,改由新增的 `smMonthCols(sheet, year)` + `smYearMonthOf(cell)` 按表头定位;`smSumMonths` 改吃「月份→列号」映射。**只换取数方式,不改版式与数值口径、不做扩列**。 |
| | | - **为什么必须先做**:该写死列位是 09-29《配置初稿》第五节标明的"硬前提"——一插列,2025 块右移,四页会读错去年基数(对应已确认口径 C3/C4)。 |
| | | - **表头三形式兼容**(实测 8 月母版确为三种混用):文本 `'2026年3月'`、裸日期序列号(`46082`,General,出租页几乎整行)、真日期 + `yyyy"年"m"月"`(` 货运`)。排除含「累计/同比/环比」的表头与非当月 1 号的数值;年份不匹配(2024/2023 块)不认。 |
| | | - **验证(关键,重做过一次)**:旧代码实例(java PID 5716)生成 2026-08 作基线 → 新代码实例(java PID 32368,10:07:58 启动)生成 2026-08 → **逐格 diff = 0**(公式/文本 0、缓存值 0,覆盖 19 页);无"未识别到月份表头列"告警;2026-07 亦正常出表。 |
| | | - **踩坑(务必记住)**:首次对比的"0 差异"是**假的**——旧后端仍占 8090,`start-dev.ps1` 因端口已监听而跳过启动,且其报出的 PID 与真实监听 PID 不一致,导致误判"已换新进程"。**判断是否换了进程,必须看 `netstat -ano` 的真实监听 PID + 日志里的启动时间/PID,不能只信启停脚本输出。** |
| | | - **其它确认**:后端日志中文为 **GBK**(`Select-String` 中文模式匹配不到,需用 PID/类名等 ASCII 锚点);两次产物 sha256 不同但 29 个 zip 条目内容全同(差异仅在 zip 容器元数据)。 |
| | | - **报告**(本地、不入库):`docs/功能测试报告/功能测试报告_汇总大表列位置表头动态定位_2026-10-09.md`;日结 `docs/工作日结/工作日结_2026-10-09.md`。 |
| | | - **一致性旁证(2026-10-09,作为 Step 0 验收材料)**:用 `docs/工具/汇总大表差异比对.py` 把**新代码产物**与**手工定稿** `D:\05_数据分类\汇总表\8月汇总定稿\2026年8月客运量、货运量定稿.xlsx`(9/13 版)逐格比对,明细 1020 条: |
| | | - 实质数值差异 **10**:全在《 货运》`DZ` 列(2022 年累计同比,仙桃/潜江/天门/林区)——即 09-21~09-28 已确认"**软件正确**"的那 10 条; |
| | | - 需处理(非数值文本) **1**:班线包车 `IM50`(仙桃 客运量同比),生成件为数值 `0.0077858…`,手工侧值是**反引号脏字符**; |
| | | - 错误值(手工) **364**:程序侧留空、手工侧 `#REF!`/`#DIV/0!`,属已确认的"历史错误值留白"口径; |
| | | - 用户手工改动 **1**:`城市汇总!G20` 措辞(已登记 `USER_EDITS`); |
| | | - 其余 1009 条为已按口径忽略的结构/格式类(结构/设计、无表头草稿列、排名表当月/累计块、文本型数字 354、取整尾差、单边有值、措辞等)。 |
| | | - **结论**:与手工定稿**数字一致**,无新增需处理项;比 09-29"需处理=0"多出的部分全部源于该定稿为 **9/13 版**、尚未同步 09-28 之后的手工改动(措辞/清 0/错误值留白/按软件值同步)——属定稿滞后,非程序回归。报告(本地):`_tmp/_step0/diff_0813.md` / `.csv`。 |
| | | |
| | | - **状态**:**【待验收】**(取数方式属口径相关改动)。未导入任何业务数据。 |
| | | - **下一步**:Step 1 扩列器本体(配置驱动,8 个可见台账页;§5.2 三条必改点;产物先落 `输出/` 待人工确认后再落盘为下期母版)。 |
| | | |
| | | ## 最新(2026-10-06,zyj 线) |
| | | |
| | | ### 10-06:拉取合并 + 验收门禁分级 + 汇总大表 M0 立项 |