工作日结_2026-09-22
一、今天做了什么
1. 数据查看页补齐网约车与个体客运类型("能导入就能看")
用户诉求:数据查看的数据类型应做到"能导入什么数据就能看到什么数据",用于核对导入是否完整。
原先网约车总数、网约车订单、个体客运三张表**有导入接口和模板但没有查看入口**,导入后只能查数据库。
- 后端
DataViewController:新增 wycTotal / wycOrder / passengerIndividual 三个分支 + 三组列定义 + 三个 Mapper 注入;
passengerIndividual 用 RegionUtil.cityByCode 把 6 位区划代码派生为"市州"列(如 420900 → 孝感市)。
- 前端
DataView.vue:公路旅客模块加"个体客运量/周转量",城市客运模块加"网约车总数""网约车订单及全省总量"(订单表 23 列,17 市州各一列,保持与导入文件列序一致)。
2. 跨期"按市州汇总"的口径调研 + 样例
- 生成样例
D:\桌面\按市州汇总_2026年1-8月累计_样例.xlsx:公交、巡游出租、货运规上企业三张表,17 市州 + 全省合计行 + "口径说明"页。
- 核实各表月值口径为**当月值**(公交 2025 各月全省 1.2~1.5 亿人次量级),故跨期汇总按列性质分三类:
- 流量类(客运量/周转量/货运量/订单数)→ 求和;
- 时点类(运营车辆数/营运车辆数/企业数)→ 取期末(武汉公交 2026 各月 8476→7861,逐月相加得 64879 辆,实际 8 月末仅 7861 辆);
- 比率类(环比/同比/平均运距/占比)→ 按累计口径重算。
- 货运企业表的市州由 6 位区划代码前 4 位归并(4290xx 直管市按 6 位优先),17 市州全部识别,无"未识别"。
3. 核查"数据查看已加汇总功能"的现状
用户在别处看到"汇总"按钮,实际核查:前端 DataView.vue 全文无"汇总/导出"(ReportExport.vue 才有),后端只有 /api/data/list,全仓 + traffic-audit-web/dist + 部署 jar + gitea 远端 main 均无相关代码。已向用户说明,按"尚未实现、由本仓实现"推进。
4. 汇总大表进度弹窗优化(用户:"保存"会导致再下载一次)
- 根因:任务完成时会自动下载一次,但弹窗底部仍挂着「保存文件」按钮,点它会再次请求后端拿同一份文件并第二次下载;同时标题/按钮文案不随状态变化。
- 改动(
traffic-audit-web/src/views/ReportExport.vue):
- 完成后显示「已自动下载:<文件名>(<大小>)」+ 提示可点「再次下载」(本地缓存,不再请求服务器);
- 按钮文案随状态:再次下载 / 下载 / 保存文件(生成中禁用);
- 首次下载后把 Blob 存内存,重复保存 0 请求;
- 弹窗标题随状态:正在生成 / 已生成 / 生成失败;完成态主按钮改为「关闭」;
- 每次新任务重置
taskDownloaded/taskFileName/taskFileSize/taskBlob。
- 浏览器实测(admin/123456,2026-08):生成 13.5 秒、产物 1.15 MB;完成后标题「汇总大表已生成」、提示「已自动下载:生成_道路运输量汇总表_2026-08.xlsx (1.15 MB)」;控制台 0 报错。
- 用户反馈后改 v2:「已经下载过了就不需要再次下载」→ 删掉「再次下载」按钮与内存缓存,**完成后底部只留「重新生成 / 关闭」**;仅当自动下载失败时才出现「保存文件」兜底。复验:生成中「重新生成(禁用)/后台运行」→ 完成后「重新生成/关闭」,提示语为「已自动下载:…,文件在浏览器默认下载目录。」,13.6 秒、控制台 0 报错。
5. 数据查看体验优化(第二轮,用户当日反馈)
用户三点反馈:①跨期汇总时点列怎么处理——决定**不放时点列**;②横向滚动时看不到企业名称;③数据类型做成下拉框更简洁。
- 数据类型改为分组单下拉框:去掉"模块单选按钮 + 类型下拉"两级结构,合并为一个
el-select(按 5 个模块分组、支持输入搜索),切换类型时同步 activeModule。
- 左侧冻结标识列:
renderColumns 按表自适应冻结 报表期/所属地区/市州/企业名称 等前导列(此实现 09:56 已落在工作区但未提交,本次真机验证后一并提交)。
- 跨期汇总口径定稿:流量列求和、时点列不参与汇总且不显示、比率列按累计口径重算。
6. 数据查看展示优化(第三轮,用户复核反馈 4 点)
- 下拉分组标题:改成 13px/700/深色+浅底(原为 Element UI 默认 12px 灰字),
popper-class 精确命中;
- 隐藏报表期与所属地区,冻结区收窄为"市州/地区 + 企业名称/项目名称 + 口径"(最多 3 列);后端为企业类表(h2032/h2031/h204 车辆能耗)补派生市州列;
- 规上规下拆分空值定性:源文件《模板_规上规下拆分运输量.xlsx》只有"周转量"列,无货运量列 → 三列空属源数据形态;周转量单位核对为**万吨公里**(1,235,760.72×10000=12,357,607,239 吨公里,与 h2032 武汉 1-6 月完全一致);列名已标注单位;
- 网约车订单改按市州竖排:地区(全省+17 市州)× 指标(期间/订单数/订单占比/客运量/旅客周转量/城市内两项/说明);客运量与周转量复用
WycSplitCalc 拆分口径,全省行取台账 pin;
- 市州月报进度:连
investment_project 补项目名称与市州(原表只有 project_id,页面显示数字无法辨识);
- 数值显示规范:底层全精度不变,显示层千分位+两位小数、比率类转百分比、排名字段整数。
7. 数据查看:口径上移筛选、空列隐藏、表头补单位(第四轮)
- 空列不显示:拆分表"规上/规下/合计货运量"(源文件未提供、库内全空)不再展示,字段保留;
- 口径上移:拆分表"口径"从表格列改为工具栏下拉(全部/当月/累计),后端
/api/data/list 新增 periodType 参数;切换类型自动复位;
- 表头补单位:12 类表 60 余列按库内注释/源文件核对补齐(万人次、万人公里、吨、吨公里、万吨、万吨公里、人、人公里、辆、座、公里、车次、万元、平方米、名、%);
能耗燃料三项库内无单位注释,标注"(按燃料单位)"未臆造。
8. 数据查看「按市州汇总 + 导出 Excel」落地(第五轮,主线功能)
- 新增
CityRollupService + 三个接口:/api/data/rollupTypes、/api/data/summary、/api/data/export;
- 支持 7 类:公交、巡游出租、货运企业、公路旅客企业、个体客运、网约车(拆分口径)、货运量周转量;
- 口径:任意起止月;流量求和、**时点列不参与**、比率按累计重算(累计同比自动取上年同期);排名可选「留空 / 按累计值重排」;结果 = 17 市州 + 全省合计;
- 前端:工具栏加「视图:明细 / 按市州汇总」,汇总模式提供起止月、排名、汇总、导出 Excel;
- 修复两个口径坑:货运量周转量表的"行内累计 + 湖北省合计行"重复计算(1,149,579 → 130,311.89 万吨)、结束月无数据自动回退;
- 与手工核算一致:公交 1-8 月 110776.34 万人次、货运企业 313,998,248 吨、货运量周转量 130,311.89 万吨。
- 收尾:按用户要求把「全省合计」行提到最前面(武汉市之上),导出 Excel 中合计行加粗。
9. 汇总大表导出结果落盘缓存(用户:"下载过就不该再等很久,能不能记住上次结果")
- 背景:原来只有「10 分钟内 + 期间无新导入」的**内存**缓存,窗口短、重启即失效 → 第二次下载还要等 13~17 秒。
- 改动(
ReportExportTaskService.java 为主):
- 结果**落盘**到
docs/生成汇总大表/_cache/,文件名 <key>_v<数据版本>.xlsx(数据版本=MAX(import_batch.id)),已加 .gitignore;
- 提交顺序:内存缓存 → 落盘缓存(同报表期 + 同数据版本 + 7 天内)→ 真算;生成成功后写盘并删除同 key 旧版本;
- 前端文案:命中缓存显示「本次直接沿用 <时间> 生成的结果(期间没有新的数据导入)」,元信息改为「上次生成于 …」。
- 顺带修 bug:落盘命中时
elapsedMs 为负数(任务起点用现在、结束时间是历史生成时间)→ 已改为以生成时间作起点。
- 实测:首次 12.4 s 写缓存;再次提交 164 ms 命中内存;**重启后端后提交 1.19 s 命中落盘**;临时插一条导入记录后
fromCache=false 重新生成(验证「有新导入即失效」);浏览器点导出秒出、文案与按钮正确、控制台 0 报错。
10. 导出缓存守卫升级为「数据指纹」+ 失效提示(用户:按你说的做)
- 背景:上一版缓存守卫用全局
MAX(import_batch.id),①导入投资/能耗等无关数据会白失效;②**不含母版文件**,换母版时会错误命中旧结果(正确性漏洞)。
- 改动(
ReportExportTaskService.java):
- 指纹 =「依赖源表
CHECKSUM TABLE 校验和(能捕捉原地 UPDATE)」+「母版目录全部文件 + 网约车订单 xlsx 的名称/大小/修改时间」,SHA-256 前 8 字节写进缓存文件名;
- 源表范围用**排除法**:排除投资 3 / 能耗 2 / 审核 4 / 系统 6 /
import_batch,其余全纳入(宁可多算不可出错);
- 失效提示(第 3 步提示版):没命中且有旧结果时,进度弹窗显示「上次生成的结果已因数据或母版变化失效,本次按最新数据重算。」
- 实测:无关导入(投资项目 + 导入记录各插一行)**仍命中**缓存;相关源表原地 UPDATE、改母版 mtime 必定失效并重算;命中缓存时不再残留提示;浏览器实测提示行显示正常、控制台 0 报错;测试数据已全部还原(419 批次 / 152 项目)。
11. 交接收尾:同步同事进展 + 剩余项核查(用户准备开新会话)
- 同事进展核实(近三天 xyc / zyj 账号的提交):改动**全部集中在汇总大表线**——
abf468c 中口径排名累计同比基数改用母版 2025 静态列(方案 A,ReportExportService.java)、47a8734 软件输出与手工定稿差异报告、
ceaa5f2 AGENTS 改公司 gitea 单仓库、a5a9545 09-22 记录与 Codex 卡顿复核、zyj 的 8 月母版 196 格文本转数值 + 差异清单。
- 剩余待办逐条核查,同事均未触碰(有证据):
- P0-2《亿元投资项目》按 Q7 追列 ——
ReportExportService.java:6251 仍写同一格(第 24 列),无追列逻辑;
- P0-3 导出前基数体检 +《数据缺失清单》页 ——
getLastMidIssues() 全仓库无调用方;
- P0-4 缺 2026-06 / 2026-09 母版 —— 母版目录无这两个月文件;
- P1-7 投资资金渠道分组 —— 无
fund_channel 字段;
- P1-9 投资导出按月分目录 + 运行日志/校验报错 —— 无实现;
- P2-1 D 组「增速排名」措辞 —— 无「暂不排名」逻辑。
- 交接文档已同步(commit
06b1cb7):§0 最紧急清单 4→3 件并列出三项已闭环(十堰源文件 / 中口径基数双轨制 / 导出缓存);
P1-1 补提交号 abf468c;§1.3 与 §7.4 从「双仓库」改为**公司 gitea 单仓库**;§6 索引补同事两份文档。
- 待核实(留给新会话):P2-2「城市客运页表头仍是日期序列号」可能已过时——代码里有
fixCityMonthHeaderText()(09-03 加入)
会把城市客运类表头序列号改写成「YYYY年M月」;建议跑一次 2026-08 导出核对实际表头后再更新交接文档。
二、测试结果摘要
- 报告:
docs/功能测试报告/功能测试报告_数据查看补齐网约车与个体客运类型_2026-09-22.md
- 报告:
docs/功能测试报告/功能测试报告_数据查看冻结列与数据类型下拉框_2026-09-22.md(冻结列/下拉框真机用例 12 条全通过)
- 报告:
docs/功能测试报告/功能测试报告_数据查看展示优化与网约车按市州竖排_2026-09-22.md(接口 6 条 + 真机 6 条全通过)
- 报告:
docs/功能测试报告/功能测试报告_数据查看口径筛选与表头单位_2026-09-22.md(接口 7 条 + 真机 2 条全通过)
- 报告:
docs/功能测试报告/功能测试报告_数据查看按市州汇总与导出_2026-09-22.md(接口 10 条 + 真机 4 条全通过)
- 报告:
docs/功能测试报告/功能测试报告_汇总大表进度弹窗优化_2026-09-22.md(6 条用例通过:生成中状态 / 完成提示 / 再次下载走缓存 / 关闭 / 无控制台报错 / 其它导出未受影响)
- 报告:
docs/功能测试报告/功能测试报告_汇总大表导出结果落盘缓存复用_2026-09-22.md(10 条用例通过:首次生成写缓存 / 内存命中 164ms / 重启后落盘命中 1.19s / 有新导入即失效 / 同 key 只留最新版本 / 时长显示修复 / 浏览器端到端)
- 报告:
docs/功能测试报告/功能测试报告_导出缓存改用数据指纹_2026-09-22.md(12 条用例通过:无关导入仍命中 / 相关源表原地 UPDATE 必失效 / 换母版必失效 / 失效提示显示 / 命中无提示 / 数据还原核对)
- 环境:后端
mvn spring-boot:run(8090,Started TrafficAuditApplication);前端 npm run serve(8080,Compiled successfully in 4769ms);MySQL localhost:3308/traffic_audit;登录 admin/123456 取 JWT。
- 结果:3 个新类型正向(含期间/关键字筛选)、负向(未知类型、无数据期、无 token)全部通过;入库抽查条数与库内一致(20 / 20 / 139);原有 15 类回归正常。
三、遗留问题与待办
- 【已完成】数据查看"按市州汇总 + 导出 Excel"(见第 8 节与《功能测试报告_数据查看按市州汇总与导出_2026-09-22.md》)。
- 汇总口径细则待业务确认:排名字段跨期需重新排名(先留空);累计同比需要自动取上年同期期间。
- 关键字框对无名称列的表(网约车总数、网约车订单)无效,待优化。
- 冻结列依赖"标识列连续排在前面"的列序假设,若以后调整列序/新增类型需同步维护
stickyProps/nameProps。
scale_split_transport(规上/规下拆分)288 行数值全为 NULL,若哪张报表依赖它按市州出数会取不到值,建议与同事确认导入来源。
- Codex 桌面端模型显示(09-21 晚遗留):已写
model_catalog_json 清单,待用户重启客户端确认界面显示 deepseek-flash。
四、明天计划
- 开工"按市州汇总 + 导出 Excel":后端加
/api/data/summary 与 /api/data/export,前端加"明细/汇总"切换与导出按钮。
- 汇总结果与报表/手工作业抽样核对(1-8 月公交、巡游出租、货运规上企业)。
五、Codex 桌面端输入卡顿复核(2026-09-22)
- 按 09-21 的修复方案,用户重启电脑和 Codex 后复核。
- 进程:ChatGPT 于 2026-09-22 12:54 新启动;修复脚本
fix-codex-typing-retry-storm.js 存在且 user_scripts.json 仍为 enabled=true。
- 性能:主渲染进程(PID 7044)连续 10 秒采样约
13.28% 单核;修复前约 115% 单核。
- 守卫:调试端口 9229 读取
window.__codexPlusRetryTimerGuardInstalled=true,本次会话 window.__codexPlusRetryTimerGuardDropped=16。
- 结论:输入卡顿修复在重启后仍生效,问题已解决。
六、投资明细表「软件生成 vs 人工版」数据比对(2026-08)
用户要求:把软件生成的《客运站投资明细表》《物流站场投资明细》与人工维护的两份定稿逐格比对,列出所有不同。
- 比对文件:人工版
D:\05_数据分类\投资\8月\8月客运站投资明细表.xlsx、8月物流站场投资明细.xls
vs 软件版 D:\桌面\生成数据\生成_所选报表_2026-08 (1)\生成_客运站投资明细表.xlsx、生成_物流站场投资明细.xls。
- 比对方法:脚本逐页签逐格比对(
_tmp_diff_invest_0922.py);先核对 B 列项目名逐行对齐(192/121 行全部一致,无错位),再统计差异,最后回溯源文件 / 数据库 / 底稿模板定位根因。
- 结果:共 156 格差异 —— 客运《明细》12 +《汇总》4;物流《分项目投资完成情况》108 +《分市州规划内外》15 +《市州汇总》17,《月2》无差异。
- 根因(三方证据锁定):
- 软件导出 = 在底稿《模板_X月…投资明细》上,把库内当月数据**按项目名称匹配**覆盖 H/J/K 与 M;**匹配不上或库内无当月数就静默沿用上期值** —— 武汉市物流(库内 0 条月度记录)整段保留 7 月值;荆州「中国供销公安商贸物流园」(库内名多一个点,匹配失败)保留 7 月值 7758.5/1600.1(库内/源表实际 15986/8227.5)。
- 库内**同名双档**:十堰「快递物流产业园二期」有
id=154(竣工 2026)与 id=181(竣工 2029)两档,导出取到旧档,写了 7 月值 20081/2900/214(应 20377/3196/296)。
- 导入丢数:天门「天门市物流中心建设项目」库内 2026-08 的累计/自年初/本月全是 0,源文件是 16677.7/16677.7/500(P1-5 原记录「源文件 H/J/K 列为空」与现文件不符)。
- 导出**不覆盖 L(建设阶段)等非金额列** → 黄石大冶湖冷链 L=暂停、十堰枢纽 L=前期、襄阳冷链中心 L=在建、随州民生物资 M 的 7 月文字,都是底稿残留。
- 单渠道市州的**分组小计行**:软件填=市州合计,人工版不填;0 与空白的写法两边不同(不影响金额)。
- 客运部分差异主要是**人工版手写四舍五入**(203 / 2531 / 43225.9 等),以及 3 处形象进度/建设阶段:M26、M85 人工版空(软件版取自源表与库内、是对的),L91 人工版「在建」正确、软件版是底稿旧值「暂停施工」。
- 影响金额:软件版物流「自开始累计」「自年初累计」各少 34399.2 万元、「本月完成」少 6291.4 万元。
- 报告:
docs/功能测试报告/数据比对报告_投资明细表软件生成与人工版_2026-09-22.md(含 156 格全量清单 + 逐条核对结论 + 处置建议)。
- 临时脚本(保留):
_tmp_diff_invest_0922.py、_tmp_dump_invest_full_0922.py、_tmp_diff_invest_annot_0922.py、_tmp_diff_tables_0922.py、_tmp_src_spotcheck_0922.py、_tmp_src_spotcheck2_0922.py、_tmp_db_probe*_0922.py、_tmp_tpl_*_0922.py 及对应 _*.txt 输出。