| | |
| | | > **每天结束时**:把当天进展、踩过的坑、新需求、未完成事项更新到本文件,然后可以放心开新对话。 |
| | | > **协作约定(2026-08-31)**:说「提交」= 本地 commit + 推送到远端 git(origin main,Gitblit),不再只做本地 commit。 |
| | | |
| | | ### 10-14(3):Excel COM 打不开部分生成件 → 改用 WPS KET.Application(坑与绕法) |
| | | |
| | | - **现象**:用 `New-Object -ComObject Excel.Application` 自动核对生成件时,`Workbooks.Open` 报「不能取得类 Workbooks 的 Open 属性」。**同一次脚本里**预测件、母版 `2026年9月道路运输量汇总表.xlsx`、`生成_道路运输量汇总表_2026-07_验证.xlsx` 都打得开;打不开的是 `生成_道路运输量汇总表_2026-09 (12).xlsx` 与 `输出\生成_道路运输量汇总表_2026-08_四页数据驱动_2026-09-13.xlsx` → **是文件级的,不是环境级**。 |
| | | - **已排除(均实测,不是原因)**:① 文件被 WPS/微信占用——按字节复制到本地(SHA256 一致)后在独立 Excel 实例里**仍然打不开**;② 网络来源标记——副本没有任何 Zone.Identifier 附加流;③ `calcPr fullCalcOnLoad="true"`——把它去掉后仍失败;④ OPC 部件缺失——打不开的文件与能打开的文件**部件列表完全一致**。根因未定位,不要再盲目二分。 |
| | | - **可用绕法**:① **WPS 的 COM 组件 `KET.Application`**(注意 `ET.Application` 未注册,报 0x80040154)能打开这些文件,`WorksheetFunction.Sum` / `UsedRange` / `Count` 均正常——本轮实测读到生成件 594 个数值格、SUM=`658615.2874963345`;② `openpyxl(data_only=True)` 读缓存值对所有文件都可用;③ 需要在 Python 里复现 Excel 状态栏求和时,按**行序**用 double 累加——在 Excel 能打开的那份上实测与 COM SUM **完全一致**(`658615.287496335`)。 |
| | | - **顺带的显示坑**:Excel 显示末位是"四舍五入",Python/.NET 的 `F8` 是"银行家舍入",同一个数可能显示差最后一位。本轮:预测件 SUM=`658615.287496335` → 显示 `…49634`;生成件 SUM=`658615.2874963345` → 显示 `…49633`;**底层只差 4.66e-10**,却被显示成"差 1e-8"。 |
| | | - **进程卫生**:`Excel.Application` 会真的拉起 `EXCEL.EXE`。新建前记录 EXCEL/ET 的 PID,用完先 `Quit()` 再 `ReleaseComObject`,只清理自己拉起的 PID;**绝不要对"挂上去/复用"的实例调 `Quit()`**——Excel/WPS 都会注册到 ROT,`Quit` 可能把用户正开着的窗口关掉。 |
| | | - **快查文件是否被占用**:`[System.IO.File]::Open($p, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)` 抛 Access denied 即被占用;但被占用不是本坑的原因(副本同样打不开)。 |
| | | - **已按 AGENTS §0 同步到顶层** `C:\Users\jcxiong\.codex\AGENTS.md` 第 11 节(跨项目通用)。 |
| | | - **数据边界**:本轮只读;未修改/未保存任何原始业务文件。`_tmp\_cmp_1014\` 下留了副本 `gen12_copy.xlsx` 与去掉 `fullCalcOnLoad` 的对照件 `gen12_nocalc.xlsx`(临时产物,按约定不删、不入库)。 |
| | | |
| | | ### 10-14(2):重启后端加载合并后新代码并核验生效【无代码改动】 |
| | | |
| | | - **做了什么**:按 10-14(1)的接手提示,只停后端链(`cmd 27476` → `maven java 3948` → `app java 28136`),前端 8080 不动;再执行 `start-dev.ps1`(脚本检测到 8080 已监听 → 跳过前端,只拉起后端)。新后端进程 **PID 21640**,08:35:08 启动。 |
| | | - **核验生效**:`target/classes` 于 08:34:45 重新编译,`ReportExportService`、`SummaryLayoutExpander`、`SummaryMissingDataCheck`、`SummaryWorkbookFiller`、`FreightReadinessCheck` 均为本次编译产物;字节码含新映射 `/summaryWorkbook/missing`、`/summaryWorkbook/freightCheck` 与参数 `titlesOnly`;`backend.log` 两条就绪标志齐全(`Tomcat started on port(s): 8090`、`Started TrafficAuditApplication in 8.691 seconds`);`GET /api/version` 返回 HTTP 200。 |
| | | - **未做 / 边界**:本轮无代码改动、未导入或覆盖任何业务数据;只读接口 `summaryWorkbook/missing|freightCheck` 直接请求返回 401(`JwtAuthFilter` 要求登录),未用账号登录调用。同事这批「汇总大表」改动(多为【待验收】)仍需用户在页面重新生成 2026-09 验收。 |
| | | |
| | | ### 10-14(1):重启后拉起前后端 + 拉取合并同事 34 个提交(汇总大表)【无代码改动】 |
| | | |
| | | - **本轮(未改代码)**:电脑重启,用 `start-dev.ps1` 拉起前后端,脚本输出后端 OK、前端 OK;前端 http://localhost:8080,后端 8090,日志见 `backend.log` / `traffic-audit-web/frontend.log`。 |
| | | - **git**:本地原为 `a2dfe61`,落后 `origin/main` 34 个提交;已 `git fetch origin` + `git merge --ff-only origin/main` 快进到 `697891d`。这批提交是同事"汇总大表"系列:`ReportExportService`、`SummaryLayoutExpander`、`SummaryMissingDataCheck`、`FreightReadinessCheck`、`ReportExport.vue`,以及配套母版/规格/验证方法文档(多为【待验收】)。 |
| | | - **【接手注意·已处理】**:当时 8090 的后端是合并前(08:23)启动的旧字节码;已由下一节 10-14(2)重启(新进程 PID 21640,08:35:08 启动)加载同事最新代码,并核验生效。 |
| | | - **数据边界**:本轮未改代码、未跑测试、未导入/覆盖任何业务数据。 |
| | | - **工作区**:仅保留约定不入库的临时目录/文件(`_tmp_doc_compare/`、`_tmp_flow_table/`、`_tmp_holiday_verify/`、`_tmp_rail_label/`、`_tmp_pack_smoke_trend.docx`)和用户数据 `docs/专项统计/重要节假日/观测站分日调查数据 (2026年10月1日).xls`,不要删除或误提交。 |
| | | |
| | | ### 10-13(1):汇总大表《货运周转量排名》块错位修复(母版删多余标题行 + 代码按「全省」行锚点对齐 + 写后自检)【待验收】 |
| | | |
| | | - **现象(用户报告 + 核对)**:9 月 ②③ 入库后,生成件《货运周转量排名》整块错位一行——全省值落到**表头行**(覆盖「累计完成(万吨公里)」文字)、市州值与市州名**错开一行**(武汉行装黄石的数…林区行是母版旧值)、**武汉的值丢失**;`RANK/占比/Q/R` 随错位一并错。 |
| | | - **根因(两层)**:① 母版该页每块比源底稿 `docs/货运/生成_周转量排名.xlsx` **多 1 行**(标题合并占两行:`A1:R2`、`A23:R24`;全省行在第 5/27 行);② `ReportExportService.copyRankValues` 按「块标题行 + 源行偏移」逐行照搬,且 `:4334` 遇到目标格是公式就跳过 → 形成"值列保留 SUM、排名列被写成上一行市州"的半错位。该缺陷**一直存在**(7/8/9 月母版同结构),因这页此前走"整块缺数留空"分支(②③未导)而未暴露。 |
| | | - **修复**: |
| | | 1. **母版**(用户 19:47 执行):`docs/生成汇总大表/2026年9月道路运输量汇总表.xlsx`《货运周转量排名》删掉两块多出的标题行 → 全省行回到第 **4/25** 行,与《货运量排名》同构;Excel 已自动修好合并区与 `SUM(B5:B21)`/`SUM(B26:B42)` 等公式区间。 |
| | | 2. **代码**(`ReportExportService.copyRankValues` → 传参 `List<String> problems`):改按目标块「全省」行做锚点,`rowOff = 目标全省行 − 源全省行`;识别不到锚点回退标题行偏移并 WARN;新增**写后自检**(目标全省行与源侧不一致 ≥2 列 → WARN + 写入《数据缺失清单》)。三个排名页(货运量/周转量/中口径)统一生效。 |
| | | - **验证(20:06 重新生成 2026-09,dev 8090/8080 已重启加载新代码)**:《货运周转量排名》累计块/当月块 × 全省 + 17 市州 × 16 列(规上/规下/合计值、名次、占比、同比、增速名次、Q/R)与库内 `scale_split_transport` 2026-09(CUMULATIVE/MONTH)**逐格一致,0 处不一致**;缺数清单 4→2 条(②③已入库,仅剩网约车 2 条);页签定位 20 页、累计重建 0 格、公式重算 39969 格成功。 |
| | | - **报告(本地、不入库)**:`docs/功能测试报告/功能测试报告_汇总大表周转量排名锚点对齐_2026-10-13.md`。产物:`_tmp/_fix_1013/生成_道路运输量汇总表_2026-09_验证.xlsx`(未入库)。 |
| | | - **【待验收/待定夺/待处理】**: |
| | | 1. 【待验收】《货运周转量排名》母版删行 + 代码锚点对齐与自检(页面重新生成即可复现验证)。 |
| | | 2. 【待用户拍板】《货运量排名》累计块「规下增速 / 增速排名」**30 格**口径:生成件(全省 0.052525)vs 桌面《2026年9月客运量、货运量预测.xlsx》(全省 -0.224015),需定以哪边为准。 |
| | | 3. 【待用户拍板】版式期望:块顺序(生成件=累计在上;预测件=当月在上)、市州名带不带"市"。 |
| | | 4. 【待处理】7/8 月母版同为"多 1 行"结构(在 `归档/`)——锚点对齐后正确性已不受影响,下次取回出表时确认即可,暂不改归档件。 |
| | | 5. 【12 月前】跨年母版需新开一本(扩列 `month>=12` 明确拒绝);建议做成半自动,规则待定(保留几年历史块 / 新一年月度列布放 / 2027-01 母版是否留档)。 |
| | | 6. 【缺数/缺行】网约车 9 月(订单、全省 pin、源文件);公交 9 月 141 行 vs 142 行(源文件缺 `随州市·广水市安顺公交有限公司`)。 |
| | | - **环境**:dev 前后端 20:00 重启(`backend.log` 见 `Started TrafficAuditApplication`、`Tomcat started on port(s): 8090`);启动日志另有一条与本次无关的 `traffic_audit.holiday_calendar` 表不存在告警。 |
| | | - **数据边界**:本轮只做生成与只读核对(库内查询只读),**未导入、未覆盖任何业务数据**。 |
| | | |
| | | ### 10-12(14):汇总大表「缺数清单弹窗 + 生成件《数据缺失清单》页」+ 体检假阳性修复 + 公交 9月缺行核查【待验收】 |
| | | |
| | | - **动因**:用户要求把缺数摆到台面上(P0-3 剩余),并在生成件里给一页《数据缺失清单》。 |
| | | - **改动(3 处)**: |
| | | 1. 后端 `ReportExportService.appendMissingDataSheet(...)`:生成收尾在产物末尾追加《数据缺失清单》页(第 20 页),分「一、缺数清单 / 二、数据体检 / 三、其它提示」,写报表期+生成时间+条数;只读提示页、不参与计算;母版若由产物派生已带同名页会先移除再建。 |
| | | 2. 前端 `ReportExport.vue`:点「导出/生成」先调 `GET /api/report/summaryWorkbook/missing` + `freightCheck`,命中则弹窗(分两段、可滚动)「仍要生成 / 取消」;两项皆空、接口异常或年报模式 → 直接生成。 |
| | | 3. `FreightReadinessCheck` 修假阳性:②全口径整期未导时不再按 `0−规上` 报「规下为负」(上面已报「缺②全口径」)→ 2026-09 命中 68→34,2026-08 仍 0。 |
| | | - **实测(dev 8090/8080,仅生成/只读)**:missing(2026-09)=4 条(货运②③、网约车订单、网约车 pin);freightCheck(2026-09)=34、2026-08=0;异步生成 2026-09(refresh=true)→ 1,303,490 B / 20 页 / 清单 39 条(4+34+1),落盘缓存同步刷新为 `_cache/summaryWorkbook_2026-09_month__vc0e2afa47b51bc04.xlsx`;前端 `Compiled successfully`、bundle `/js/6.js` 已含新代码;年报模式两接口返回空。 |
| | | - **报告(本地、不入库)**:`docs/功能测试报告/功能测试报告_汇总大表缺数清单弹窗与生成件页_2026-10-12.md`。状态:**【待验收】**。 |
| | | - **【待验收 / 待定夺 / 待处理】三项**: |
| | | 1. 【待验收】导出前弹窗 + 生成件《数据缺失清单》页(产物 `docs/生成汇总大表/输出/生成_道路运输量汇总表_2026-09.xlsx` 末页); |
| | | 2. 【待用户定夺】排名页缺数期留空:数值列留空符合预期,但《货运周转量排名》`R` 列仍显示 **10.00**(母版 `=10-Q` 在 `Q` 清空后算出;源侧空表无此公式),是否一并清空本次**未改**; |
| | | 3. 【待处理】公交 2026-09 少 1 行属**源文件缺行**——`随州市·42138100005·广水市安顺公交有限公司` 在 6/7 月源表第 119 行存在、9 月源表没有(`import_batch#551` 记录 141/141/0,非导入跳过)→ 需向数据来源补件或确认企业停报;**未导入任何数据**。 |
| | | - **顺带复核**:09 月母版 9 月列数值无误(`班线包车!S9=20647.5363`、`公交!S8=61618.09`、`出租!S6=32787.72`、`中口径明细!S5=3517.9161`;全簿 `46266` 只剩 3 个合法表头行)。 |
| | | - **环境提示**:本机残留 1 个无窗口 `EXCEL.EXE`(PID 23540,`taskkill` 拒绝访问);已确认**母版未被锁**(读写测试通过),下次用 Excel COM 前先复查该进程。 |
| | | |
| | | ### 10-12(13):下班关机交接 — 汇总大表缺数/母版脏格修复已提交推送,下一步待办与新会话起步 |
| | | |
| | | **接手入口(新会话先读这三处)**:① 根目录 `AGENTS.md`;② 本文件顶部(本节 + 10-12(11)(12));③ 上一会话标题「10.8日比对汇总大表和专项统计的生成逻辑」(因上下文超限报错中断,其工作已由本节这条线做完并补提交)。 |