ec86d9d1339f4a28a689b5545ac3ea3fa591cfc3..0acd500f0a2e2e34ff199472dd5575723afb6358
4 天以前 zhizhijie
fix(汇总表母版): 157 格文本型数字改为数值(公交 AF/M 各68 + G 17、轨道轮渡 4);重新生成验证仅 68 格类型变化、值不变。...
0acd50 对比 | 目录
4 天以前 zhizhijie
fix(汇总表母版): 轨道轮渡 R2/R11 表头按人工定稿改为『同比』(与累计同比体例一致);仅改母版,重新生成验证仅此 2 格变化
8d5b21 对比 | 目录
4 天以前 zhizhijie
docs(交接): 补同名列反例对照——中口径明细!AB=2025年4月(被700+同页/34跨页引用)不可清,避免与中口径客运量!AB(2024年1...
307f53 对比 | 目录
4 天以前 zhizhijie
docs(交接): HANDOFF 增补本次清空的 7 列草稿列对照表(页签/列/格数/原表头/公式语义/清空前缓存值/引用数=0,附中口径明细!AB...
c3354f 对比 | 目录
4 天以前 zhizhijie
fix(汇总表母版): 清空人工核算草稿累计列 577 格(公交/出租/网约车 U、城市客运 U、班线包车 DU、中口径明细 U、中口径客运量 AB,...
8a2f58 对比 | 目录
4 天以前 zhizhijie
docs(交接): 精确定位累计列缺月公式——公交/出租/网约车 U5:U76 各72格 + 城市客运 U4:U39(36) + 班线包车 DU4:D...
14938e 对比 | 目录
4 天以前 zhizhijie
docs(交接): HANDOFF 记录汇总大表现状复核——304 格 2025 累计列未落实、生成件 356 个 #DIV/0! + 13 个 #R...
1e1926 对比 | 目录
4 天以前 zhizhijie
docs: 清理历史临时件(临时脚本/dump/截图/调试转储)并同步文档引用;.gitignore 增加 _backups/
543fab 对比 | 目录
4 天以前 zhizhijie
docs(交接): HANDOFF 增补 09-27 状态——打包去密根因与修复、一键打包脚本与模板入库、旧包清理、提交规范改为同事方式
67d7fa 对比 | 目录
4 天以前 zhizhijie
docs: 提交规范改为同事方式——过程日志(功能测试报告/工作日结)转本地不入库、HANDOFF 作为状态入口;109 个过程文档出库,状态矩阵移出...
5f0cb4 对比 | 目录
4 天以前 zhizhijie
chore(打包): 一键打包脚本(含 jar 去密自检) + 打包模板入库 deploy-templates + 密钥更新脚本;清理含密钥的旧部署包...
a6fb28 对比 | 目录
108个文件已删除
7个文件已修改
1 文件已重命名
11个文件已添加
9597 ■■■■■ 已修改文件
.gitignore 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
AGENTS.md 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HANDOFF.md 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/README-部署说明.txt 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/backend/application.yml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/backend/start-backend.cmd 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/backend/start-backend.sh 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/db/init.sql 619 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/db/sql_city_bus.sql 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/db/sql_city_taxi.sql 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/db/sql_wyc.sql 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy-templates/frontend/nginx.conf.example 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_2026-07母版补齐与导出件打不开修复_2026-09-16.md 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_2026-09-02_导入与报表生成回归.md 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_H2031模板新增列适配_2026-09-16.md 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_M1-城市客运-公交出租轨道轮渡_2026-09-08.md 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_M1-城市客运-城市汇总整链回归_2026-09-08.md 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_M1-班线包车MidCalc_2026-09-08.md 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_M1-网约车拆分WycSplitCalc_2026-09-08.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_M1-货运取数链路与7月回归_2026-09-08.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_RULE001分项运政与阈值联动及列宽回归_2026-09-09.md 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_一键启停脚本与桌面入口_2026-09-19.md 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_中口径四维口径统一_2026-09-18.md 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_中口径排名同比基数方案A_2026-09-21.md 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_中口径排名周转量口径统一_2026-09-19.md 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_中口径排名左块删除与7月回归收口及8月扩列_2026-09-08.md 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_全精度存储与两位小数显示_2026-09-20.md 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_公路旅客报表并入个体客运_2026-09-03.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_同名企业1-8月累计货运量与周转量SQL_2026-09-19.md 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_城市客运新增网约车拆分表与汇总工作簿及两位小数显示_2026-09-03.md 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_城市客运月度与累计同比_2026-09-20.md 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_城市客运网约车导入下拉_2026-09-04.md 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_审核平均吨位口径与拆分目标月导入及全屏翻页_2026-09-04.md 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_审核界面交互与问题话术导出_2026-09-09.md 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_审核结果模板展示与导出及报表页整改_2026-09-09.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_审核结果页选月转圈修复_2026-09-09.md 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_密钥外部化与打包去密_2026-09-26.md 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_导入校验增强_2026-09-02.md 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_导入清空按类型与按钮防误触_2026-09-10.md 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_导出缓存改用数据指纹_2026-09-22.md 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_局域网IP访问登录CORS修复_2026-09-16.md 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_市州统一填报模板与县市区解析_2026-09-20.md 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资审核I004基准缺失保护_2026-09-02.md 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资市州月报多sheet识别与序号空格_2026-09-02.md 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资明细表与导入取列定位修复_2026-09-19.md 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资明细表取数修复_2026-09-22.md 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资明细表就绪与预览类型补齐_2026-09-20.md 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资月报匹配与校验引擎_2026-09-17.md 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资月报取列错位修复与弹窗提示_2026-09-17.md 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资月报格式探测与字段映射表_2026-09-17.md 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资月报源文件解析引擎_2026-09-17.md 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资系统新模板按表头解析与审核基准缺失保护_2026-09-21.md 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_投资预安排汇总补计与导入弹窗_2026-09-20.md 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_持续在规企业545家分市州累计运距同比_2026-09-19.md 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_接口鉴权与AI数据脱敏加固_2026-09-14.md 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据导入清空按钮按报表期清库_2026-09-10.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据导入页空白修复_2026-09-11.md 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看冻结列与数据类型下拉框_2026-09-22.md 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看口径筛选与表头单位_2026-09-22.md 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看展示优化与网约车按市州竖排_2026-09-22.md 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看投资能耗与报表期排序_2026-09-17.md 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看按市州汇总与导出_2026-09-22.md 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_数据查看补齐网约车与个体客运类型_2026-09-22.md 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_整改8项回归验证_2026-09-08.md 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表1-6月生成与1-7月扩列验证_2026-09-04.md 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表8月数据回填与版式对齐_2026-09-11.md 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表四页数据驱动_2026-09-13.md 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表导出结果落盘缓存复用_2026-09-22.md 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表异步导出与缓存_2026-09-20.md 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表数据驱动回填M2台账层_2026-09-09.md 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表日期格式与规则联动及数据查看滚动加载_2026-09-08.md 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表版式统一_2026-09-08.md 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表货运规上规下补数与成品页当月块修正_2026-09-07.md 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表软件输出与手工定稿差异_2026-09-21.md 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表进度弹窗优化_2026-09-22.md 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总大表预览删除中口径后明细表_2026-09-16.md 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总工作簿月度块扩列还原试点_2026-09-04.md 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总工作簿骨架生成_2026-09-03.md 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总表公式扩页与重算_2026-09-18.md 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总表排名页刷新与同比百分数_2026-09-11.md 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_汇总表整数不显示0.00与列宽自适应_2026-09-04.md 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_潜江投资物流月报重导_2026-09-23.md 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_生成模板新版式_2026-09-02.md 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_登录验证码容错与报表预览整改_2026-09-16.md 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_网约车订单报告WordML兼容导入_2026-09-18.md 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_网约车订单报告导入_2026-09-11.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_规上规下拆分月份页签识别_2026-09-04.md 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_货运月报持续在规企业分市州累计运距_2026-09-18.md 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_货运量周转量2023年数据补录_2026-09-16.md 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_货运量周转量多年度导入_2026-09-16.md 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_货运页签累计列修复与脏期清理_2026-09-16.md 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_运政车辆与轨迹里程导入回归_2026-09-02.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_部署包打包与独立启动_2026-09-13.md 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/功能测试报告_预览指标名称显示与货运量合计单位修正_2026-09-04.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/导入与生成模块体检问题清单_2026-09-02.md 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/数据比对报告_投资明细表软件生成与人工版_2026-09-22.md 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/汇总大表与定稿比对_2026-09-16.md 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/汇总大表异步导出进度弹窗_2026-09-20.png 补丁 | 查看 | 原始文档 | blame | 历史
docs/功能测试报告/货运累计列核对与导入数据体检_2026-09-16.md 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-02.md 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-03.md 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-04.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-05.md 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-07.md 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-08.md 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-09.md 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-10.md 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-11.md 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-13.md 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-14.md 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-15.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-16.md 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-17.md 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-18.md 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-19.md 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-20.md 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-21.md 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-22.md 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-23.md 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-26.md 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/打包部署说明.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/模块功能验证状态矩阵_2026-09-02.md 补丁 | 查看 | 原始文档 | blame | 历史
docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
docs/问题汇总/数据查看汇总与汇总大表口径对应关系_2026-09-23.md 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/问题汇总/汇总大表问题交接_2026-09-21.md 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pack-deploy.ps1 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
set-secrets.ps1 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -104,3 +104,9 @@
# Codex åº”用在本仓库根目录产生的产物目录(保留在本地,不入库)
outputs/
traffic-audit-server/config/application.yml
# ==== è¿‡ç¨‹æ—¥å¿—(本地自查用,不入库;2026-09-27 èµ·æŒ‰åŒäº‹æäº¤æ–¹å¼è°ƒæ•´ï¼‰====
docs/功能测试报告/
docs/工作日结/
# ==== æœ¬åœ°å¤‡ä»½ï¼ˆä¸å…¥åº“,2026-09-27)====
_backups/
AGENTS.md
@@ -34,17 +34,22 @@
- æ²™ç®±å†… `Get-NetTCPConnection` ä¼šå› æƒé™â€œæ‹’绝访问”而静默失败,**不要**据此判定端口未监听;判断服务状态以 backend.log / frontend.log ä¸ºå‡†ã€‚
- ç”¨æˆ·è¦æ±‚:临时脚本/文件未经同意不删;导入失败要在页面显示行号;AI åˆ†æžç»“果要给结构化排版 + é€å­—输出动画。
## å·¥ä½œè§„范(2026-09-02 èµ·ï¼Œå¿…须遵守)
1. **每做完一个功能,立即测试并写《功能测试报告》**
## å·¥ä½œè§„范(2026-09-02 èµ·ï¼›2026-09-27 æŒ‰åŒäº‹æäº¤æ–¹å¼è°ƒæ•´ï¼‰
1. **每做完一个功能,立即测试**(测试要求不变)
   - æµ‹è¯•至少覆盖:正向用例(正常数据)、负向用例(错类型/错列位/缺列等)、入库抽查(与源文件逐项对齐)。
   - æŠ¥å‘Šå†™å…¥ `docs/功能测试报告/`,命名:`功能测试报告_<功能名>_<YYYY-MM-DD>.md`。
   - ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Šã€‹å†™åœ¨æœ¬åœ° `docs/功能测试报告/`,命名:`功能测试报告_<功能名>_<YYYY-MM-DD>.md`;**该目录已 gitignore,不入库**(自己留档/复查用)。
   - æŠ¥å‘Šé¡»åŒ…含:功能说明、测试环境、用例表(输入/预期/实际/结论)、发现的问题与处置、结论。
2. **每天下班前写《工作日结》,命名附日期**
   - å†™å…¥ `docs/工作日结/`,命名:`工作日结_<YYYY-MM-DD>.md`。
   - å†…容至少包含:今天做了什么(功能/修复)、测试结果摘要、遗留问题与待办、明天计划。
   - å½“天没有代码/测试工作时,也要写(一句话说明“今日无代码改动”即可)。
3. **git å·¥ä½œæµï¼ˆ2026-09-03 ç”¨æˆ·æŽˆæƒï¼Œæ— éœ€å†è¯¢é—®æ˜¯å¦æŽ¨é€ï¼‰**
   - æ¯æ¬¡ä¿®æ”¹ä»£ç /文档后:先测试并写《功能测试报告》/更新《工作日结》,再 `git fetch origin` ä¸Žè¿œç«¯ `main` å¯¹æ¯”合并(必要时解决冲突),确认无误后 commit å¹¶ push åˆ°å…¬å¸ gitea(`http://61.183.254.94:3000/r/trafficAudit.git`,账号 zyj)。
   - **入库的是结论**:把关键结论/口径/风险/待办写进 `HANDOFF.md`(必要时另写 `docs/交接文档_<日期>.md`、`docs/问题汇总/`),与该次代码改动**放在同一条提交**里。
2. **《工作日结》本地写、不入库**
   - å†™å…¥æœ¬åœ° `docs/工作日结/`,命名:`工作日结_<YYYY-MM-DD>.md`;**该目录已 gitignore,不入库**(给自己看)。
   - å†…容至少包含:今天做了什么、测试结果摘要、遗留问题与待办、明天计划;当天无代码/测试工作也要写一句话说明。
   - éœ€è¦äº¤æŽ¥çš„部分:把"当前状态 + å¾…办"追加到 `HANDOFF.md`(同事的做法就是这样)。
3. **git å·¥ä½œæµï¼ˆ2026-09-03 ç”¨æˆ·æŽˆæƒï¼Œæ— éœ€å†è¯¢é—®æ˜¯å¦æŽ¨é€ï¼›æäº¤ç²’度参考同事 xyc)**
   - **一条提交 = ä¸€ä¸ªæ”¹åЍ**:代码/脚本 + è¯¥æ”¹åŠ¨çš„è¯´æ˜Žæ–‡æ¡£ï¼ˆ`HANDOFF.md` / æ–¹æ¡ˆ / å£å¾„清单)放在同一条提交里;不要为每个小改动单独建报告再单独提交。
   - message å†™æ³•:`feat(模块): â€¦` / `fix(模块): â€¦` / `docs: â€¦` / `docs(交接): â€¦`,一句话说清"改了什么"。
   - **禁止入库**:临时脚本与调试产物(`_tmp_*`、`_shots/`、`outputs/`)、构建产物(jar / dist / target)、密钥与口令、大体积备份(`*.sql` å…¨åº“导出);过程日志与日结只留本地。
   - æŽ¨é€å‰ï¼šå…ˆæŒ‰ä¸Šé¢å®Œæˆæµ‹è¯•,再 `git fetch origin` ä¸Žè¿œç«¯ `main` å¯¹æ¯”合并(必要时解决冲突),确认无误后 commit å¹¶ push åˆ°å…¬å¸ gitea(`http://61.183.254.94:3000/r/trafficAudit.git`,账号 zyj)。
   - è‹¥è¿œç«¯å·²æœ‰åŒäº‹æ–°æäº¤ï¼šå¿…须先合并/基于最新再推,禁止强推覆盖同事代码。
   - å…¬å¸ git è´¦å·å¯†ç åªé€šè¿‡æœ¬æœº git å‡­æ®/临时 askpass ä½¿ç”¨ï¼Œç¦æ­¢å†™è¿›ä»“库内任何文档或提交内容。
HANDOFF.md
@@ -4,6 +4,65 @@
> **每天结束时**:把当天进展、踩过的坑、新需求、未完成事项更新到本文件,然后可以放心开新对话。
> **协作约定(2026-08-31)**:说「提交」= æœ¬åœ° commit + æŽ¨é€åˆ°è¿œç«¯ git(origin main,Gitblit),不再只做本地 commit。
## æœ€æ–°ï¼ˆ2026-09-27)
- **提交规范改为同事方式(用户 09-27 å†³å®šï¼Œå·²å†™å…¥ AGENTS.md)**:
  1. ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Šã€‹ã€Šå·¥ä½œæ—¥ç»“ã€‹æ”¹ä¸º**本地写、不入库**(`docs/功能测试报告/`、`docs/工作日结/` å·² gitignore,本次 109 ä¸ªæ–‡ä»¶ç§»å‡ºä»“库、本地文件全部保留;其中《模块功能验证状态矩阵_2026-09-02》属团队共享信息,已移到 `docs/` æ ¹ç›®å½•继续入库);
  2. **入库的是结论**:关键结论/口径/风险/待办写进本文件(`HANDOFF.md`)或 `docs/交接文档_*.md`、`docs/问题汇总/`,与该次代码改动放在同一条提交;
  3. æäº¤ç²’度与 message:一条提交一个改动(代码+相关文档),前缀 `feat(模块):` / `fix(模块):` / `docs:` / `docs(交接):`;禁止入库临时脚本/调试产物/构建产物/密钥/大体积 sql。
  > å‚考数据:同事 xyc 55 æ¬¡æäº¤ä¸­ 37 æ¬¡æ›´æ–°æœ¬æ–‡ä»¶ã€åŠŸèƒ½æµ‹è¯•æŠ¥å‘Šä»… 4 æ¬¡ã€æ—¥ç»“ 7 æ¬¡ï¼›æ­¤å‰æˆ‘æ–¹ 144 æ¬¡æäº¤é‡Œå« 102 ä»½æŠ¥å‘Š + 106 ä»½æ—¥ç»“。
- **打包去密(根因已修)**:旧部署包的 jar å†…ç½® `BOOT-INF/classes/application.yml` å¸¦ç€**真实密钥与库口令**(外层 application.yml å¹²å‡€ã€è¿è¡Œæ—¶ä»¥å¤–部为准,但 jar å¯è§£åŽ‹æ˜Žæ–‡å¯è§ï¼›ä¸” zip åŽ‹ç¼©å¯¼è‡´ç›´æŽ¥ grep æœä¸åˆ°ï¼‰ã€‚
  çŽ°å·²æ”¹ä¸ºï¼š**进 jar çš„配置只有占位符**(`${TRAFFIC_DB_*}`、`${DEEPSEEK_API_KEY:}`、`${TRAFFIC_JWT_SECRET:...}`);本机真实值走 **Windows ç”¨æˆ·çŽ¯å¢ƒå˜é‡**(`TRAFFIC_DB_PASSWORD` / `DEEPSEEK_API_KEY`),`start-dev.ps1` å¢žåŠ äº†ä»Žæ³¨å†Œè¡¨è¡¥é½çš„å…œåº•ã€‚
- **新增脚本(已入库)**:`pack-deploy.ps1`(一键打包:构建 â†’ **解压 jar åŽ»å¯†è‡ªæ£€ï¼Œå‘½ä¸­çœŸå®žå¯†é’¥/明文口令即中止** â†’ é‡å»ºå‰ç«¯ â†’ ç»„装部署包到 `E:\试验\traffic-audit-deploy-<yyyyMMdd>`)、`set-secrets.ps1`(轮换后交互式更新本机环境变量)、`deploy-templates/`(打包模板入库:外部 application.yml、启动脚本、nginx ç¤ºä¾‹ã€db å»ºè¡¨ sql、部署 README——原先只在未跟踪的旧包里,删包即丢)。
- **清理旧部署件(用户确认后执行)**:删除 `E:\试验\traffic-audit-deploy-20260913`(目录 + **69.9 MB çš„ zip**)、`deploy\traffic-audit-deploy-20260913`、`_deploytest`、空 `out`/`deploy`;旧 `target` jar ç”± `mvn clean` è¦†ç›–。全盘复查(仓库 + `E:\试验`):**已无任何含明文 key çš„ jar / åŽ‹ç¼©åŒ… / æ–‡æœ¬æ–‡ä»¶**。
- **干净新包已产出**:`E:\试验\traffic-audit-deploy-20260927`(336 æ–‡ä»¶ / 96 MB,前端含最新「按市州汇总」;jar å†…置配置全占位符)。
- **运行状态(09-27 å®žæµ‹ï¼‰**:dev åŽç«¯ `8090`、前端 `8080` åœ¨è¿è¡Œï¼›**本机数据库为 MySQL80 `localhost:3308/traffic_audit`(root/口令走环境变量)**——注意 `docs/交接文档_2026-09-23.md` å†™çš„ `3305` æ˜¯**同事机器**的配置,本机没有 3305,别再照抄。
- **待办(接手优先)**:
  1. **【需用户】轮换已泄露的 DeepSeek key**(控制台新建 + åˆ æ—§ â†’ è·‘ `set-secrets.ps1`);
  2. **【需用户】服务器换包**:删旧包/zip â†’ æ‹· `traffic-audit-deploy-20260927` â†’ æ”¹ `backend\application.yml` æ•°æ®åº“三处(需要 AI åˆ†æžå†å¡« `deepseek.api-key`)→ `start-backend.cmd`;
  3. P0 ä¸‰é¡¹ä¸å˜ï¼šP0-2 äº¿å…ƒæŠ•资项目按 Q7 æŒ‰æœˆè¿½åˆ—、P0-3 å¯¼å‡ºå‰åŸºæ•°ä½“检 +《数据缺失清单》页、P0-4 ç¼º 2026-06/09 æ¯ç‰ˆï¼›
  3.1 **汇总大表现状复核(2026-09-27 å®žæµ‹ï¼Œæ¯ç‰ˆ `docs/生成汇总大表/2026å¹´8月道路运输量汇总表.xlsx` + æœ€è¿‘生成件)**:
      - **累计列公式没覆盖到当期(实测 306 æ ¼ï¼‰æœªè½å®ž**,确切位置(母版 `docs/生成汇总大表/2026å¹´8月道路运输量汇总表.xlsx`):
        Â· `公交!U5:U76`、`出租!U5:U76`、`网约车!U5:U76` å„ 72 æ ¼ = 216 æ ¼ï¼Œå…¬å¼ `=V5+X5+Z5+AB5+AD5+AF5`(只累加 2025 å¹´ 1~6 æœˆï¼›U åˆ—表头为空,位置在"2025å¹´1月"块左侧,对应 2026 å—çš„ `S` åˆ—"2026年累计",语义即"2025 å¹´ç´¯è®¡");
        Â· `城市客运!U4:U39` 36 æ ¼ï¼ˆåŒæ¨¡å¼ï¼Œåª 6 ä¸ªæœˆï¼‰ï¼›`班线包车!DU4:DU57` 54 æ ¼ï¼ˆ`DU2` è¡¨å¤´ç›´æŽ¥å†™"1-3月累计",只 3 ä¸ªæœˆâ€”—属版式未随月份扩展)。
        â†’ ä¸šåŠ¡å£å¾„ä¸º"可清空留空";**生成件与母版逐格相同**(证实程序只补当期列、不碰历史列)。09-22 å·®å¼‚报告按另一分页口径统计为"304 æ ¼ï¼ˆå«ä¸­å£å¾„明细 88 æ ¼ï¼‰",本次按公式模式定位到的是上述 306 æ ¼ï¼Œä¸¤è€…为同一类问题、分页归类不同。
      - **2026-09-27 å·²å¤„置:母版里的"人工核算草稿累计列"整体清空**(用户确认"这一列都可以留空,是人工核算时弄的草稿")。清空范围共 **577 æ ¼**:`公交/出租/网约车!U5:U76`、`城市客运!U4:U39`、`班线包车!DU4:DU57`(含表头 `DU2`"1-3月累计")、`中口径明细!U99:U188`、`中口径客运量!AB5:AB188`。
        Â· ä¾æ®ï¼šè¿™äº›åˆ—在整本工作簿里**没有任何公式引用**(全簿扫描 0 å‘½ä¸­ï¼‰ï¼Œä¸”程序**不写它们**(生成件与母版逐格相同)→ **只改母版即可,无需改代码**。
        Â· åšæ³•:直接改 xlsx å†…部 XML(只去对应单元格的 `<f>/<v>`、保留样式),**避免 openpyxl ä¿å­˜å¯¼è‡´å…¨ç°¿å…¬å¼ç¼“存值丢失**(该坑已实测复现:用 openpyxl å­˜ä¸€æ¬¡åŽ `公交!S5` ç”± 98460.97 å˜ None,会破坏"中口径排名用母版 2025 é™æ€åˆ—")。
        Â· éªŒè¯ï¼šé‡æ–°ç”Ÿæˆ 2026-08(母版变更使缓存自动失效,`staleCache=true`)→ æ–°æ—§ç”Ÿæˆä»¶é€æ ¼æ¯”对:**仅这 577 æ ¼å˜ä¸ºç©ºï¼Œ19 é¡µç­¾ä¸Žå°ºå¯¸ä¸å˜ï¼Œå…¶å®ƒä¸€å¾‹ä¸åЍ**;依赖母版缓存值的口径(中口径排名 M3、道路运输周转量 G4、货运量排名 B4、城市汇总 B3、公交 S5/Q5、中口径明细 C99、班线包车 Q4)**全部一致**。
        Â· å¤‡ä»½ï¼ˆæœ¬åœ°ä¿ç•™ã€ä¸å…¥åº“):`docs/生成汇总大表/_bak_202608母版清空草稿累计列前_20260927.xlsx`;新生成件已存 `D:\桌面\生成数据\生成_道路运输量汇总表_2026-08 (4).xlsx`。
        Â· **表头措辞修复(按人工定稿为准)**:`轨道、轮渡!R2`、`R11` ç”±æ¯ç‰ˆè‡ªå¸¦çš„"8月与去年同比"改为"同比"(与该页 `T2/T11`"累计同比"体例一致、与手工定稿一致;程序不写这两格,故只改母版)。
          éªŒè¯ï¼šé‡æ–°ç”Ÿæˆ 2026-08 â†’ æ–°æ—§ç”Ÿæˆä»¶é€æ ¼æ¯”对 **仅这 2 æ ¼æ–‡å­—变化,19 é¡µç­¾ä¸Žå°ºå¯¸ä¸å˜ã€å…¶å®ƒä¸€å¾‹ä¸åЍ**。
        Â· **判定为"程序正确、不改"的两处**:① `道路运输周转量!A23` ç¨‹åº"2026å¹´8月全省完成交通周转量情况"(该块是**当月值**:全省 2,301,720 vs ç´¯è®¡å— 17,749,657 ä¸‡å¨å…¬é‡Œï¼‰â†’ æ‰‹å·¥å®šç¨¿å¤šå†™äº†"累计";② ` è´§è¿!EA92:EA112` 2022 å¹´ç´¯è®¡åŒæ¯” 10 æ¡ï¼ˆä¸šåŠ¡å·²ç¡®è®¤è½¯ä»¶å£å¾„æ­£ç¡®ï¼‰ã€‚
        Â· **文本型数字统一为数值(用户口径"按程序对的改")**:母版 157 æ ¼æ–‡æœ¬åž‹æ•°å­— â†’ æ•°å€¼ï¼ˆ`公交` 153 = AF 68 + M 68 + G 17;`轨道、轮渡` 4 = M 2 + E 2),仍用 XML ç²¾å‡†æ”¹ç±»åž‹ï¼ˆç¼“存值全部保留)。重新生成 2026-08 â†’ ä¸Žä¸Šä¸€ç‰ˆæ¯”对:**仅 68 æ ¼ç±»åž‹å˜åŒ–(str→数值、数值相同),无任何值/尺寸变化**(其余 89 æ ¼ç¨‹åºæœ¬å°±ä¼šå†™æ•°å€¼ï¼‰ã€‚注:比对里另有 286 æ¡"文本型数字"差异在**手工定稿侧**(手工存文本),需手工侧统一或忽略。
        Â· **排名页"两个块顺序对调"(实为顺序问题,不是多了一张表)**:程序 ä»¥æ¨¡æ¿ `docs/货运/生成_货运量排名.xlsx`(模板本身=累计块在行1、当月块在行23)填充 â†’ `货运量排名` ç¨‹åº=行1累计/行22当月,手工=行1当月("2026å¹´8月各市州货运量排名")/行22累计;`货运周转量排名` ç¨‹åº 44×18(累计在前)vs æ‰‹å·¥ 51×18(当月在前、且多 7 è¡Œå¾…细看)。**用户口径:手工为准** â†’ éœ€æ”¹æ¨¡æ¿ï¼ˆä¸¤å—对调)+ ç›¸åº”代码(块定位/标题写法 `ReportExportService:961-966/1315/1575-1583`)+ å¸‚州名由 `RegionUtil.shortName()` æ”¹å…¨åï¼›ä¼° 0.5~1 å¤©å«å›žå½’,待开工。
        Â· **手工多出的"辅助列"清单**:` è´§è¿` å¤š 1 åˆ—(无表头,位于"同比"之后、2025 å¹´ 1 æœˆä¹‹å‰ â†’ å®žä¸º `U` åˆ—"2025 å¹´ 1-8 æœˆç´¯è®¡"辅助列,74 æ ¼ï¼Œä»Ž V åˆ—起手工整体右移);`城市客运` å¤š `AJ`="2025å¹´1-7月累计"(母版 09-20 å·²åˆ ã€ç¨‹åºå·²ä¸è¾“出);`班线包车` å¤š `DU`="1-3月累计"(即本次清空的草稿列);`道路运输周转量` æœ«å°¾å¤š 2 åˆ—(Z/AA,**表头与内容均为空**)。
        Â· å–整尾差 194 æ¡ï¼šç”¨æˆ·æ˜Žç¡®"不用管"。
        Â· **仍待业务定的版式/措辞项**:`货运量排名`/`货运周转量排名` çš„æ ‡é¢˜ã€è¡¨å¤´ï¼ˆç¨‹åº"累计完成(万吨)" vs æ‰‹å·¥"规上货运量(万吨)")与市州名(程序按设计用短名"武汉/恩施/林区"、手工用"武汉市"等全名)——需业务确认以哪版为准。
        Â· âš  **待同事确认**:手工定稿侧也把这些草稿列留空,否则比对会从"程序有值/手工有值"变成"程序空/手工有值"(同类差异、方向相反)。
        Â· **清空的 7 åˆ—对照表(供同事复核;引用数为清空前的全簿扫描)**:
        | é¡µç­¾ | åˆ— / èŒƒå›´ | æ¸…空格数 | åŽŸè¡¨å¤´ | å…¬å¼è¯­ä¹‰ | æ¸…空前缓存值(首行样例) | åŒé¡µå¼•用 | è·¨é¡µå¼•用 |
        | --- | --- | ---: | --- | --- | --- | ---: | ---: |
        | å…¬äº¤ | `U`(U5:U76) | 72 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=V5+X5+Z5+AB5+AD5+AF5` â†’ 2025 å¹´ 1~6 æœˆç´¯è®¡ | 88908.91 | 0 | 0 |
        | å‡ºç§Ÿ | `U`(U5:U76) | 72 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=V5+X5+Z5+AB5+AD5+AF5` â†’ 2025 å¹´ 1~6 æœˆç´¯è®¡ | 39797.94 | 0 | 0 |
        | ç½‘约车 | `U`(U5:U76) | 72 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=V5+X5+Z5+AB5+AD5+AF5` â†’ 2025 å¹´ 1~6 æœˆç´¯è®¡ | 16384.07 | 0 | 0 |
        | åŸŽå¸‚客运 | `U`(U4:U39) | 36 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=V4+X4+Z4+AB4+AD4+AF4` â†’ 2025 å¹´ 1~6 æœˆç´¯è®¡ | 206639.67 | 0 | 0 |
        | ç­çº¿åŒ…车 | `DU`(DU4:DU57) | 54 | 1-3月累计 | `=DO4+DQ4+DS4` â†’ 1~3 æœˆç´¯è®¡ | 5566.8922 | 0 | 0 |
        | ä¸­å£å¾„明细 | `U`(U99:U188) | 90 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=V99+X99+Z99+AB99+AD99+AF99+AH99` â†’ 2025 å¹´ 1~7 æœˆç´¯è®¡ | 1102278.385724 | 0 | 0 |
        | ä¸­å£å¾„客运量 | `AB`(AB5:AB188) | 184 | ï¼ˆæ— è¡¨å¤´ï¼‰ | `=AC5+AE5` â†’ 2024 å¹´ 1~2 æœˆç´¯è®¡ | 6088.1871 | 0 | 0 |
        Â· **⚠ åŒååˆ—别清错(反例对照)**:`中口径明细!AB3 = "2025å¹´4月"` æ˜¯**正常月份列**,被 **700+ å¤„同页 + 34 å¤„跨页公式引用**(例如 `中口径明细!J5 = I5/AB5-1` 2026 å¹´ 4 æœˆåŒæ¯”、`T5 = S5/SUM(V5,X5,Z5,AB5,…)-1` ç´¯è®¡åŒæ¯”、`AT5 = X5+V5+Z5+AB5+…` 2025 ç´¯è®¡ã€`中口径客运量!I11 = ä¸­å£å¾„明细!AB11`),**本次未动、也不能清**。判据:该列**有表头**、**被引用数远大于 0**、公式语义是"被别的格引用"而不是引用其它月份列。
      - **生成件里错误值 356 ä¸ª `#DIV/0!` + 13 ä¸ª `#REF!`**:班线包车 228+8、中口径明细 64+2、货运 38+3、中口径客运量 26;业务口径未定(是否清成空白)。
      - **城市客运页表头仍是日期序列号(确证未修)**:母版与生成件第 2 è¡Œç¬¬ 3 ä¸ªæœˆèµ·å‡ä¸ºåºåˆ—号(G2=46082、I2=46113…),1、2 æœˆæ˜¯æ–‡å­—ï¼›`fixCityMonthHeaderText()` æœªè¦†ç›–该页 â†’ "按表头文字匹配列"方案在该页失效。(此前文档标"待核实",现已确证。)
      - ç¼º 2026-09 æ¯ç‰ˆï¼ˆç›®å½•ä»… 7 æœˆ/8 æœˆ/版式原型 + 2 ä¸ª `_bak_*`)→ 9 æœˆå‡ºè¡¨ä¼š `ready=false`,需拍板方案 A(程序扩列)/ B(Excel å°å·¥å…·ï¼‰ã€‚
  4. æ±‡æ€»å¤§è¡¨ 304 æ ¼ã€Œ2025 ç´¯è®¡åˆ—少加 7、8 æœˆã€æ¸…空(业务已确认口径,待执行);
  5. æœ¬æœºåŽ†å²ä¸´æ—¶ç›®å½•å¾…æ¸…ï¼ˆ`outputs/` 41MB、`_shots/`、`_test_check*`、`_test_passenger`、`.tmp_*`、`_tmp_codexhome`);`_给同事_2026-09-21/`(52MB å…¨åº“备份)属交付件,未动。
## æœ€æ–°ï¼ˆ2026-09-23)
- **已同步**:本地 `main` å¿«è¿›åˆå¹¶å…¬å¸ `origin/main` æœ€æ–° `8b739ce`(同事 09-22 å…³æœºå¿«ç…§ç»Ÿä¸€ç‰ˆï¼‰ï¼Œåˆå¹¶åŽ `HEAD = 8b739ce = origin/main`,工作区干净。
deploy-templates/README-²¿Êð˵Ã÷.txt
New file
@@ -0,0 +1,67 @@
TrafficAudit äº¤é€šè´§è¿ç»Ÿè®¡å®¡æ ¸ç³»ç»Ÿ â€”— éƒ¨ç½²åŒ…({stamp})
========================================================
【目录结构】
  backend/
    traffic-audit-server-1.0.0-SNAPSHOT.jar  åŽç«¯ç¨‹åºï¼ˆå«å…¨éƒ¨ä¾èµ–,**已内嵌前端**)
    docs/                                    æŠ¥è¡¨æ¨¡æ¿ä¸Žè¿è¡Œæ•°æ®ç›®å½•(必需,勿删)
    application.yml                          å¤–部配置(改这里即可,无需重新打包)
    start-backend.cmd / start-backend.sh     å¯åŠ¨è„šæœ¬
  frontend/
    dist/                                    å‰ç«¯æž„建产物(备用:想用 nginx æ‰˜ç®¡æ—¶ç”¨ï¼‰
    nginx.conf.example                       nginx é…ç½®ç¤ºä¾‹
  db/
    init.sql                                 å»ºåº“建表 + é¢„置账号(必须执行)
    sql_city_bus.sql                         åŸŽå¸‚客运-公交月度表(必须执行)
    sql_city_taxi.sql                        åŸŽå¸‚客运-出租月度表/出租授权表(必须执行)
    sql_wyc.sql                              ç½‘约车全省总量表/订单分市州表(必须执行)
  README-部署说明.txt
【部署机环境要求】
  JDK 8(必需)
  MySQL 5.7 / 8.0(必需)
  **不需要 Redis**(代码未使用;旧版说明里的 Redis æ˜¯é—留配置,可忽略)
  **不需要 nginx**(前端已内嵌进 jar,访问 8090 å³å¯ï¼›nginx ä»…为备选方案)
【部署步骤】
  1. åˆå§‹åŒ–数据库(4 ä¸ªè„šæœ¬éƒ½è¦æ‰§è¡Œï¼Œé¡ºåºå¦‚ä¸‹ï¼‰
       mysql --default-character-set=utf8mb4 -u root -p < db/init.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_bus.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_taxi.sql
       mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_wyc.sql
     é¢„置账号:admin / admin123(首次登录后请改密码)
  2. æ”¹é…ç½® backend/application.yml
     - spring.datasource.url / username / password ï¼šæ”¹æˆéƒ¨ç½²æœºçš„ MySQL(默认端口 3306)
     - jwt.secret ï¼šæ”¹æˆä¸€ä¸²éšæœºå­—符串(**必须是 Base64 åˆæ³•字符且长度是 4 çš„倍数**,如 32 ä½åå…­è¿›åˆ¶ï¼›å¡«ä¸­æ–‡ä¼šç™»å½•失败)
     - deepseek.api-key ï¼šéœ€è¦ AI åˆ†æžæ—¶å¡«ï¼Œä¸éœ€è¦å¯ç•™ç©º
     æ³¨ï¼šapplication.yml ä¸Ž jar åŒçº§å³ç”Ÿæ•ˆï¼Œä¸ç”¨é‡æ–°æ‰“包。
  3. å¯åŠ¨åŽç«¯ï¼ˆåœ¨ backend ç›®å½•下)
     Windows:双击 start-backend.cmd
     Linux:  sh start-backend.sh
     æˆåŠŸæ ‡å¿—ï¼šå‡ºçŽ° "Started TrafficAuditApplication" ä¸Ž "Tomcat started on port(s): 8090"
  4. è®¿é—®ç³»ç»Ÿ
     æµè§ˆå™¨æ‰“å¼€ http://<部署机IP>:8090  ï¼ˆå‰ç«¯å·²å†…嵌,页面与接口同源)
     è´¦å·ï¼šadmin / admin123
【数据迁移(可选)】
  æƒ³æŠŠæœ¬æœºæ•°æ®ä¸€å¹¶æ¬åˆ°æ–°æœºå™¨ï¼Œç”¨ mysqldump(本机 MySQL è‹¥ä¸åœ¨ 3306,按实际端口改):
     mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases traffic_audit > traffic_audit_full.sql
  å†åœ¨æ–°æœºå™¨æ‰§è¡Œï¼š
     mysql -u root -p < traffic_audit_full.sql
  æ³¨æ„ï¼šå…¨é‡ dump ä¼šå¸¦ä¸Šæœ¬æœºçš„账号密码,覆盖 init.sql é¢„置的 admin è´¦å·ã€‚
【常见问题】
  1. å¯åŠ¨æŠ¥ã€Œæœªæ‰¾åˆ°æ•°æ®ç›®å½• docs」/ å¯¼å‡ºæŠ¥ã€Œæœªæ‰¾åˆ°æ¨¡æ¿æ–‡ä»¶ã€ï¼š
     å¿…须在 backend ç›®å½•下启动(jar ä¸Ž docs åŒçº§ï¼‰ï¼Œä¸è¦åªæ‹· jar。
  2. æŠ¥è¡¨å¯¼å‡ºæŠ¥ã€Œæœªæ‰¾åˆ°æ±‡æ€»è¡¨æ¯ç‰ˆã€ŠYYYYå¹´M月道路运输量汇总表.xlsx》」:
     docs/生成汇总大表 ä¸‹ç¼ºå°‘该月份母版;把源机器的该文件拷过去。
  3. 8090 ç«¯å£è¢«å ç”¨ï¼šæ”¹ application.yml çš„ server.port åŽé‡å¯ã€‚
  4. é¡µé¢æ‰“开是空白:确认访问的是 http://<IP>:8090 æ ¹è·¯å¾„,且浏览器强制刷新(Ctrl+F5)。
  5. ä¸Šä¼ å¤§æ–‡ä»¶å¤±è´¥ï¼šåŽç«¯é™åˆ¶ 100MB,已配置;如前面还挂了 nginx,需同步放大 client_max_body_size。
【停止服务】
  Windows:关闭 start-backend.cmd çª—口
  Linux:  Ctrl+C,或 kill å¯¹åº” java è¿›ç¨‹ï¼ˆps -ef | grep java)
deploy-templates/backend/application.yml
New file
@@ -0,0 +1,56 @@
# ============================================================
# TrafficAudit åŽç«¯å¤–部配置(与 jar åŒçº§å³å¯ç”Ÿæ•ˆï¼Œä¼˜å…ˆçº§é«˜äºŽ jar å†…置配置)
# éƒ¨ç½²åˆ°æ–°æœºå™¨åŽï¼Œè¯·**至少**修改下面标注 TODO çš„三处数据库配置!
# ============================================================
server:
  port: 8080
app:
  captcha:
    required: false        # ç”Ÿäº§çŽ¯å¢ƒå¦‚éœ€å›¾å½¢éªŒè¯ç ï¼Œæ”¹ä¸º true
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/traffic_audit?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
    username: root                     # TODO æ”¹æˆä½ çš„ MySQL è´¦å·
    password: è¯·æ”¹æˆä½ çš„æ•°æ®åº“密码      # TODO æ”¹æˆä½ çš„ MySQL å¯†ç 
    driver-class-name: com.mysql.cj.jdbc.Driver
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Shanghai
mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml
  type-aliases-package: com.trafficaudit
  configuration:
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: auto
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
jwt:
  # å¿…须是「Base64 åˆæ³•字符 + é•¿åº¦æ˜¯ 4 çš„倍数」;下面这串 32 ä½åå…­è¿›åˆ¶å¯ç›´æŽ¥ç”¨ï¼Œ
  # ç”Ÿäº§çŽ¯å¢ƒå»ºè®®æ¢æˆè‡ªå·±çš„éšæœºä¸²ï¼ˆå¡«ä¸­æ–‡æˆ–ä¸åˆæ³•å­—ç¬¦ä¼šå¯¼è‡´ç™»å½• 500)
  secret: 8f2c1d64a7b34e09c5d81f6a2b0e7c93
  expiration: 86400000
docs:
  template-root: docs
city-passenger:
  template-dir: docs/城市客运
passenger:
  template-dir: docs/公路旅客
freight:
  template-dir: docs/货运
energy:
  template-dir: docs/能耗
investment:
  template-dir: docs/投资/模板
summary:
  template-dir: docs/生成汇总大表         # æ±‡æ€»å¤§è¡¨æ¯ç‰ˆä¸Žç‰ˆå¼å‚照件所在目录(必需)
deepseek:
  api-key: ""                          # AI åˆ†æžç”¨ï¼›ç•™ç©ºåˆ™ AI åˆ†æžä¸å¯ç”¨
  api-url: https://api.deepseek.com/v1/chat/completions
  model: deepseek-chat
deploy-templates/backend/start-backend.cmd
New file
@@ -0,0 +1,16 @@
@echo off
chcp 65001 >nul
cd /d %~dp0
where java >nul 2>nul
if errorlevel 1 (
  echo [ERROR] æœªæ‰¾åˆ° java,请先安装 JDK 8 å¹¶åŠ å…¥ PATH
  pause
  exit /b 1
)
echo ============================================
echo  TrafficAudit å¯åŠ¨ä¸­ï¼šhttp://localhost:8090
echo  å‰ç«¯å·²å†…嵌,直接访问 8090 å³å¯ï¼ˆä¸éœ€è¦ nginx)
echo  æ—¥å¿—显示在本窗口,关闭窗口即停止服务
echo ============================================
java -jar traffic-audit-server-1.0.0-SNAPSHOT.jar
pause
deploy-templates/backend/start-backend.sh
New file
@@ -0,0 +1,4 @@
#!/bin/sh
cd "$(dirname "$0")" || exit 1
echo "TrafficAudit å¯åŠ¨ä¸­ï¼šhttp://localhost:8090 ï¼ˆCtrl+C åœæ­¢ï¼‰"
java -jar traffic-audit-server-1.0.0-SNAPSHOT.jar 2>&1 | tee app.log
deploy-templates/db/init.sql
New file
@@ -0,0 +1,619 @@
-- äº¤é€šç»Ÿè®¡æŠ¥è¡¨å®¡æ ¸ç³»ç»Ÿ - æ•°æ®åº“初始化脚本 v3
-- Demo范围:交企统H203-2表_道路货物运输月度生产情况
CREATE DATABASE IF NOT EXISTS traffic_audit DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE traffic_audit;
-- ============================================
-- ä¸€ã€ç”¨æˆ·æƒé™æ¨¡å—(含三员)
-- ============================================
-- éƒ¨é—¨è¡¨
DROP TABLE IF EXISTS sys_dept;
CREATE TABLE sys_dept (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
    dept_code VARCHAR(20) NOT NULL COMMENT '行政区划代码',
    parent_id BIGINT DEFAULT 0 COMMENT '上级部门',
    dept_level TINYINT COMMENT '1省 2市 3县',
    sort_order INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- è§’色表
DROP TABLE IF EXISTS sys_role;
CREATE TABLE sys_role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    role_name VARCHAR(50) NOT NULL COMMENT '角色名',
    role_code VARCHAR(50) NOT NULL COMMENT 'SYS_ADMIN/SEC_OFFICER/AUDITOR/PROVINCE/CITY/COUNTY',
    role_type VARCHAR(20) DEFAULT 'BUSINESS' COMMENT 'SYSTEM(三员)/BUSINESS(业务)',
    role_level TINYINT DEFAULT 1 COMMENT '0三员 1省厅 2市局 3县区',
    is_mutex TINYINT DEFAULT 0 COMMENT '1三员互斥 0普通'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ç”¨æˆ·è¡¨
DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(200) NOT NULL COMMENT 'BCrypt',
    real_name VARCHAR(50),
    modules VARCHAR(255) DEFAULT NULL COMMENT '负责报表模块(逗号分隔)',
    phone VARCHAR(20),
    dept_id BIGINT,
    status TINYINT DEFAULT 1 COMMENT '0禁用 1启用',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ç”¨æˆ·è§’色关联
DROP TABLE IF EXISTS sys_user_role;
CREATE TABLE sys_user_role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    role_id BIGINT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================
-- äºŒã€ä¸šåŠ¡æ•°æ®æ¨¡å—
-- ============================================
-- æ¸…理旧版遗留表(v2 schema)
DROP TABLE IF EXISTS report_enterprise_monthly;
-- äº¤ä¼ç»ŸH203-2表:道路货物运输月度生产情况(Demo核心表)
DROP TABLE IF EXISTS h2032_enterprise_monthly;
CREATE TABLE h2032_enterprise_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    unified_credit_code VARCHAR(50) COMMENT '统一社会信用代码',
    report_unit VARCHAR(200) COMMENT '填报单位',
    -- è½¦è¾†æ•°ä¸Žå¨ä½æ•°
    vehicle_total INT COMMENT '车辆数_总计',
    tons_total DOUBLE COMMENT '标记吨位数_总计',
    vehicle_tractor INT COMMENT '车辆数_牵引车',
    vehicle_trailer INT COMMENT '车辆数_挂车',
    tons_trailer DOUBLE COMMENT '标记吨位数_挂车',
    vehicle_container INT COMMENT '车辆数_集装箱车',
    tons_container DOUBLE COMMENT '标记吨位数_集装箱车',
    vehicle_whole INT COMMENT '车辆数_整车',
    tons_whole DOUBLE COMMENT '标记吨位数_整车',
    -- è´§è¿é‡ä¸Žå‘¨è½¬é‡
    freight_total DOUBLE COMMENT '货运量_总计(吨)',
    turnover_total DOUBLE COMMENT '货物周转量_总计(吨公里)',
    -- åˆ†è´§ç±»è´§è¿é‡
    freight_container DOUBLE COMMENT '货运量_集装箱(吨)',
    freight_coal DOUBLE COMMENT '货运量_煤炭及制品(吨)',
    freight_oil_gas DOUBLE COMMENT '货运量_石油天然气及制品(吨)',
    freight_crude_oil DOUBLE COMMENT '货运量_其中原油(吨)',
    freight_metal_ore DOUBLE COMMENT '货运量_金属矿石(吨)',
    freight_iron_ore DOUBLE COMMENT '货运量_其中铁矿石(吨)',
    freight_building DOUBLE COMMENT '货运量_矿物性建筑材料(吨)',
    freight_grain DOUBLE COMMENT '货运量_粮食(吨)',
    -- è¿è¥æŒ‡æ ‡
    avg_tonnage DOUBLE COMMENT '货车平均吨位',
    avg_tonnage_trailer DOUBLE COMMENT '平均吨位_挂车',
    avg_tonnage_whole DOUBLE COMMENT '平均吨位_整车',
    avg_distance DOUBLE COMMENT '货车平均运距(公里)',
    daily_trips_per_ton DOUBLE COMMENT '单吨日均载运次数',
    daily_mileage_per_vehicle DOUBLE COMMENT '单车单天行驶里程(公里)',
    daily_volume_per_vehicle DOUBLE COMMENT '单车日均运量(吨)',
    daily_trips_with_tractor DOUBLE COMMENT '单吨日均载运次数(结合牵引车)',
    -- çŽ¯æ¯”å¢žé€Ÿ
    vehicle_mom_growth DOUBLE COMMENT '车辆数-总计环比增速',
    tons_mom_growth DOUBLE COMMENT '标记吨位-总计环比增速',
    freight_mom_growth DOUBLE COMMENT '货运量-总计环比增速',
    turnover_mom_growth DOUBLE COMMENT '货物周转量-总计环比增速',
    avg_distance_mom_growth DOUBLE COMMENT '货车平均运距-环比增速',
    -- åŒæ¯”增速
    vehicle_yoy_growth DOUBLE COMMENT '车辆数-总计同比增速',
    tons_yoy_growth DOUBLE COMMENT '标记吨位-总计同比增速',
    tractor_trailer_ratio DOUBLE COMMENT '牵引车挂车比',
    freight_yoy_growth DOUBLE COMMENT '货运量-总计同比增速',
    turnover_yoy_growth DOUBLE COMMENT '货物周转量-总计同比增速',
    avg_distance_yoy_growth DOUBLE COMMENT '货车平均运距-同比增速',
    -- å¡«æŠ¥ä¿¡æ¯
    unit_leader VARCHAR(50) COMMENT '单位负责人',
    stats_leader VARCHAR(50) COMMENT '统计负责人',
    contact_person VARCHAR(50) COMMENT '填表人',
    contact_phone VARCHAR(20) COMMENT '联系电话',
    report_date DATE COMMENT '报出日期',
    verify_explanation TEXT COMMENT '核实性原因解释',
    report_notes TEXT COMMENT '上报说明',
    modify_record TEXT COMMENT '修改记录',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H203-2表_道路货物运输月度生产情况';
-- è¿æ”¿è½¦è¾†æ•°æ®
DROP TABLE IF EXISTS transport_auth_vehicle;
CREATE TABLE transport_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) COMMENT '报表期',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    tractor_count INT DEFAULT 0 COMMENT '总牵引车数',
    trailer_count INT DEFAULT 0 COMMENT '总挂车数',
    other_count INT DEFAULT 0 COMMENT '其它车辆数',
    trailer_tons DOUBLE COMMENT '挂车总吨位(吨)',
    other_tons DOUBLE COMMENT '其它车辆总吨位(吨)',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运政车辆数据';
-- è½¦è¾†è½¨è¿¹é‡Œç¨‹æ•°æ®
DROP TABLE IF EXISTS vehicle_track_mileage;
CREATE TABLE vehicle_track_mileage (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    monthly_mileage DOUBLE COMMENT '月度总里程(公里)',
    tracked_vehicles INT DEFAULT 0 COMMENT '有里程的车辆数',
    report_period VARCHAR(20) COMMENT '报表期',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆轨迹里程数据';
-- è§„上规下拆分运输量(用户手动上传)
DROP TABLE IF EXISTS scale_split_transport;
CREATE TABLE scale_split_transport (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    period_type VARCHAR(10) NOT NULL COMMENT 'MONTH当月/CUMULATIVE累计',
    region_name VARCHAR(50) COMMENT '市州名称',
    -- è§„上
    above_scale_freight DOUBLE COMMENT '规上货运量',
    above_scale_turnover DOUBLE COMMENT '规上周转量',
    above_scale_rank INT COMMENT '规上排名',
    above_scale_yoy DOUBLE COMMENT '规上同比',
    above_scale_yoy_rank INT COMMENT '规上增速排名',
    -- è§„下
    below_scale_freight DOUBLE COMMENT '规下货运量',
    below_scale_turnover DOUBLE COMMENT '规下周转量',
    below_scale_rank INT COMMENT '规下排名',
    below_scale_yoy DOUBLE COMMENT '规下同比',
    below_scale_yoy_rank INT COMMENT '规下增速排名',
    -- åˆè®¡
    total_freight DOUBLE COMMENT '运输量合计-货运量',
    total_turnover DOUBLE COMMENT '运输量合计-周转量',
    total_rank INT COMMENT '合计排名',
    total_yoy DOUBLE COMMENT '合计同比',
    total_yoy_rank INT COMMENT '合计增速排名',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='规上规下拆分运输量';
-- æ¨¡æ¿_货运量周转量(每月导入:左半今年1-N月,右半去年1-12月,N=报表期月份)
DROP TABLE IF EXISTS freight_turnover_import;
CREATE TABLE freight_turnover_import (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_name VARCHAR(50) NOT NULL COMMENT '市州或湖北省',
    -- ä»Šå¹´1-12月货运量(左半,仅1-N月有值)
    freight_m01 DOUBLE COMMENT '1月货运量(万吨)',
    freight_m02 DOUBLE COMMENT '2月货运量(万吨)',
    freight_m03 DOUBLE COMMENT '3月货运量(万吨)',
    freight_m04 DOUBLE COMMENT '4月货运量(万吨)',
    freight_m05 DOUBLE COMMENT '5月货运量(万吨)',
    freight_m06 DOUBLE COMMENT '6月货运量(万吨)',
    freight_m07 DOUBLE COMMENT '7月货运量(万吨)',
    freight_m08 DOUBLE COMMENT '8月货运量(万吨)',
    freight_m09 DOUBLE COMMENT '9月货运量(万吨)',
    freight_m10 DOUBLE COMMENT '10月货运量(万吨)',
    freight_m11 DOUBLE COMMENT '11月货运量(万吨)',
    freight_m12 DOUBLE COMMENT '12月货运量(万吨)',
    -- å޻年1-12月货运量(右半,固定12个月,算同比用)
    last_freight_m01 DOUBLE COMMENT '去年1月货运量(万吨)',
    last_freight_m02 DOUBLE COMMENT '去年2月货运量(万吨)',
    last_freight_m03 DOUBLE COMMENT '去年3月货运量(万吨)',
    last_freight_m04 DOUBLE COMMENT '去年4月货运量(万吨)',
    last_freight_m05 DOUBLE COMMENT '去年5月货运量(万吨)',
    last_freight_m06 DOUBLE COMMENT '去年6月货运量(万吨)',
    last_freight_m07 DOUBLE COMMENT '去年7月货运量(万吨)',
    last_freight_m08 DOUBLE COMMENT '去年8月货运量(万吨)',
    last_freight_m09 DOUBLE COMMENT '去年9月货运量(万吨)',
    last_freight_m10 DOUBLE COMMENT '去年10月货运量(万吨)',
    last_freight_m11 DOUBLE COMMENT '去年11月货运量(万吨)',
    last_freight_m12 DOUBLE COMMENT '去年12月货运量(万吨)',
    -- ä»Šå¹´1-12月周转量(左半,仅1-N月有值,导入存档,报表用拆分表)
    turnover_m01 DOUBLE COMMENT '1月周转量(万吨公里)',
    turnover_m02 DOUBLE COMMENT '2月周转量(万吨公里)',
    turnover_m03 DOUBLE COMMENT '3月周转量(万吨公里)',
    turnover_m04 DOUBLE COMMENT '4月周转量(万吨公里)',
    turnover_m05 DOUBLE COMMENT '5月周转量(万吨公里)',
    turnover_m06 DOUBLE COMMENT '6月周转量(万吨公里)',
    turnover_m07 DOUBLE COMMENT '7月周转量(万吨公里)',
    turnover_m08 DOUBLE COMMENT '8月周转量(万吨公里)',
    turnover_m09 DOUBLE COMMENT '9月周转量(万吨公里)',
    turnover_m10 DOUBLE COMMENT '10月周转量(万吨公里)',
    turnover_m11 DOUBLE COMMENT '11月周转量(万吨公里)',
    turnover_m12 DOUBLE COMMENT '12月周转量(万吨公里)',
    -- å޻年1-12月周转量(右半,固定12个月)
    last_turnover_m01 DOUBLE COMMENT '去年1月周转量(万吨公里)',
    last_turnover_m02 DOUBLE COMMENT '去年2月周转量(万吨公里)',
    last_turnover_m03 DOUBLE COMMENT '去年3月周转量(万吨公里)',
    last_turnover_m04 DOUBLE COMMENT '去年4月周转量(万吨公里)',
    last_turnover_m05 DOUBLE COMMENT '去年5月周转量(万吨公里)',
    last_turnover_m06 DOUBLE COMMENT '去年6月周转量(万吨公里)',
    last_turnover_m07 DOUBLE COMMENT '去年7月周转量(万吨公里)',
    last_turnover_m08 DOUBLE COMMENT '去年8月周转量(万吨公里)',
    last_turnover_m09 DOUBLE COMMENT '去年9月周转量(万吨公里)',
    last_turnover_m10 DOUBLE COMMENT '去年10月周转量(万吨公里)',
    last_turnover_m11 DOUBLE COMMENT '去年11月周转量(万吨公里)',
    last_turnover_m12 DOUBLE COMMENT '去年12月周转量(万吨公里)',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板_货运量周转量导入';
-- ============================================
-- ä¸‰ã€å®¡æ ¸è§„则模块
-- ============================================
DROP TABLE IF EXISTS audit_rule;
CREATE TABLE audit_rule (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    rule_name VARCHAR(100) NOT NULL COMMENT '规则名称',
    rule_code VARCHAR(50) NOT NULL COMMENT '规则编码',
    description TEXT COMMENT '规则描述',
    check_field VARCHAR(200) COMMENT '检查字段',
    compare_type VARCHAR(20) COMMENT 'DIFF/RATIO/MOM/YOY/NULL_CHECK/RANGE',
    threshold VARCHAR(50) COMMENT '阈值',
    alert_level VARCHAR(10) DEFAULT 'YELLOW' COMMENT 'RED/YELLOW',
    report_type VARCHAR(50) DEFAULT 'H2032' COMMENT '适用报表表号',
    is_enabled TINYINT DEFAULT 1,
    llm_raw_input TEXT COMMENT 'LLM翻译原始输入',
    sort_order INT DEFAULT 0,
    created_by BIGINT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- é¢„ç½®6条审核规则(Demo)
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆数运政对比', 'RULE_001', '企业上报车辆数与运政数据对比,差距>5台需核实', 'vehicleTotal', 'DIFF', '5', 'RED', 'H2032', 1, 1),
('吨位运政对比', 'RULE_002', '企业上报吨位与运政数据对比,差距>50需核实', 'tonsTotal', 'DIFF', '50', 'RED', 'H2032', 1, 2),
('周转量轨迹对比', 'RULE_003', '上报周转量与轨迹测算周转量对比,高出30%需核实', 'turnoverTotal,trackMileage', 'RATIO', '1.3', 'RED', 'H2032', 1, 3),
('货运类型环比', 'RULE_004', '上月无,本月新增,提醒;上月有,本月无,提醒(货运类型环比)', 'freightContainer,freightCoal,freightOilGas,freightCrudeOil,freightMetalOre,freightIronOre,freightBuilding,freightGrain', 'MOM', '0', 'YELLOW', 'H2032', 1, 4),
('集装箱异常', 'RULE_005', '无集装箱车但有集装箱货运量需核实', 'freightContainer,vehicleContainer', 'NULL_CHECK', '0', 'RED', 'H2032', 1, 5),
('整车吨位范围', 'RULE_006', '整车吨位不在4-40吨之间', 'tonsWhole', 'OUT_RANGE', '4,40', 'YELLOW', 'H2032', 1, 6);
-- ============================================
-- å››ã€å®¡æ ¸ç»“果模块
-- ============================================
DROP TABLE IF EXISTS audit_result;
CREATE TABLE audit_result (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    rule_id BIGINT NOT NULL COMMENT 'FK -> audit_rule',
    report_id BIGINT NOT NULL COMMENT 'FK -> h2032_enterprise_monthly',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    report_period VARCHAR(20) COMMENT '报表期',
    actual_value VARCHAR(200) COMMENT '实际值',
    threshold_value VARCHAR(200) COMMENT '阈值',
    deviation VARCHAR(200) COMMENT '偏差',
    status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/CONFIRMED/IGNORED',
    reviewer_id BIGINT COMMENT '审核人',
    review_comment TEXT COMMENT '审核意见',
    reviewed_at DATETIME,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS audit_explanation;
CREATE TABLE audit_explanation (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    audit_result_id BIGINT NOT NULL COMMENT 'FK -> audit_result',
    explanation_text TEXT COMMENT '上报人解释',
    llm_suggestion TEXT COMMENT 'LLM建议',
    llm_confidence DECIMAL(5,2) COMMENT '置信度',
    llm_status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/PROCESSED/FAILED'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================
-- äº”、系统日志与导入批次
-- ============================================
DROP TABLE IF EXISTS sys_operation_log;
CREATE TABLE sys_operation_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT COMMENT '操作人',
    module VARCHAR(50) COMMENT '模块',
    action VARCHAR(50) COMMENT '操作',
    detail TEXT COMMENT '详情JSON',
    ip_address VARCHAR(50) COMMENT 'IP地址',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS import_batch;
CREATE TABLE import_batch (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    file_name VARCHAR(200) COMMENT '文件名',
    import_type VARCHAR(50) COMMENT 'H2032/TRANSPORT_AUTH/TRACK_MILEAGE/SCALE_SPLIT',
    report_period VARCHAR(20) COMMENT '报表期',
    total_rows INT DEFAULT 0,
    success_rows INT DEFAULT 0,
    fail_rows INT DEFAULT 0,
    error_detail TEXT COMMENT '错误详情',
    created_by BIGINT COMMENT '导入人',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================
-- å…­ã€LLM脱敏映射
-- ============================================
DROP TABLE IF EXISTS llm_desensitize_map;
CREATE TABLE llm_desensitize_map (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    original_value VARCHAR(200) COMMENT '原始值',
    masked_value VARCHAR(200) COMMENT '脱敏值',
    mask_type VARCHAR(20) COMMENT 'ENTERPRISE/REGION',
    call_id VARCHAR(50) COMMENT '调用ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================
-- ä¸ƒã€é¢„置数据
-- ============================================
-- é¢„置部门(湖北省)
INSERT INTO sys_dept (dept_name, dept_code, dept_level) VALUES ('湖北省交通运输厅', '420000', 1);
-- é¢„置角色
INSERT INTO sys_role (role_name, role_code, role_type, role_level, is_mutex) VALUES
('系统管理员', 'SYS_ADMIN', 'SYSTEM', 0, 1),
('安全保密员', 'SEC_OFFICER', 'SYSTEM', 0, 1),
('安全审计员', 'AUDITOR', 'SYSTEM', 0, 1),
('省厅业务员', 'PROVINCE', 'BUSINESS', 1, 0);
-- é¢„置管理员账号 admin / admin123
INSERT INTO sys_user (username, password, real_name, dept_id) VALUES
('admin', '$2b$10$aqN02Pwvzzuta/66V9MpGerfUH6favtq8av3cc/gueg6lQ9E4CH8u', '系统管理员', 1);
INSERT INTO sys_user_role (user_id, role_id) VALUES (1, 1);
-- ============================================
-- å…«ã€å…¬è·¯æ—…客运输(交企统H203-1)扩展模块
-- ============================================
DROP TABLE IF EXISTS h2031_enterprise_monthly;
CREATE TABLE h2031_enterprise_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    vehicle_total INT COMMENT '客运车辆_总计',
    seat_total INT COMMENT '核定载客位_总计',
    vehicle_schedule INT COMMENT '车辆数_客运班车(含定线旅游客运客车)',
    seat_schedule INT COMMENT '核定载客位_客运班车(含定线旅游客运客车)',
    vehicle_charter INT COMMENT '车辆数_客运包车(含非定线旅游客运客车)',
    seat_charter INT COMMENT '核定载客位_客运包车(含非定线旅游客运客车)',
    passenger_total DOUBLE COMMENT '客运量_总计(人)',
    turnover_total DOUBLE COMMENT '旅客周转量_总计(人公里)',
    passenger_class1 DOUBLE COMMENT '客运量_一类客运班线(含定线旅游)',
    turnover_class1 DOUBLE COMMENT '旅客周转量_一类客运班线(含定线旅游)',
    passenger_class2 DOUBLE COMMENT '客运量_二类客运班线(含定线旅游)',
    turnover_class2 DOUBLE COMMENT '旅客周转量_二类客运班线(含定线旅游)',
    passenger_class3 DOUBLE COMMENT '客运量_三类客运班线(含定线旅游)',
    turnover_class3 DOUBLE COMMENT '旅客周转量_三类客运班线(含定线旅游)',
    passenger_class4 DOUBLE COMMENT '客运量_四类客运班线(含定线旅游)',
    turnover_class4 DOUBLE COMMENT '旅客周转量_四类客运班线(含定线旅游)',
    passenger_charter DOUBLE COMMENT '客运量_客运包车(含非定线旅游)',
    turnover_charter DOUBLE COMMENT '旅客周转量_客运包车(含非定线旅游)',
    avg_distance_total DOUBLE COMMENT '客运平均运距(公里)',
    avg_distance_class1 DOUBLE COMMENT '一类客运班线平均运距(公里)',
    avg_distance_class2 DOUBLE COMMENT '二类客运班线平均运距(公里)',
    avg_distance_class3 DOUBLE COMMENT '三类客运班线平均运距(公里)',
    avg_distance_class4 DOUBLE COMMENT '四类客运班线平均运距(公里)',
    avg_distance_charter DOUBLE COMMENT '旅游、包车平均运距(公里)',
    verify_explanation TEXT COMMENT '核实性原因解释',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H203-1表_公路旅客运输月度生产情况';
DROP TABLE IF EXISTS passenger_auth_vehicle;
CREATE TABLE passenger_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) COMMENT '报表期',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    vehicle_count INT DEFAULT 0 COMMENT '车辆数',
    seat_count INT DEFAULT 0 COMMENT '载客位数',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公路旅客运政车辆数据';
-- H203-1 é¢„置审核规则(4组8条,report_type=H2031)
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆数运政对比(旅客)', 'RULE_P001', '客运车辆数与运政车辆数对比,差距>3台需核实', 'vehicleTotal', 'DIFF', '3', 'RED', 'H2031', 1, 21),
('载客位数运政对比(旅客)', 'RULE_P002', '核定载客位数与运政载客位数对比,差距>50需核实', 'seatTotal', 'DIFF', '50', 'RED', 'H2031', 1, 22),
('客运量环比=0核实', 'RULE_P003', '一类/二类/三类/四类/包车客运量环比上个月等于0需核实', 'passengerClass1,passengerClass2,passengerClass3,passengerClass4,passengerCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 23),
('旅客周转量环比=0核实', 'RULE_P004', '一类/二类/三类/四类/包车旅客周转量环比上个月等于0需核实', 'turnoverClass1,turnoverClass2,turnoverClass3,turnoverClass4,turnoverCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 24),
('平均运距环比超±20%核实', 'RULE_P005', '一类/二类/三类/四类平均运距环比上个月超过±20%需核实', 'avgDistanceClass1,avgDistanceClass2,avgDistanceClass3,avgDistanceClass4', 'MOM_PCT', '20', 'YELLOW', 'H2031', 1, 25),
('包车平均运距等于上月核实', 'RULE_P006', '旅游包车平均运距等于上个月需核实', 'avgDistanceCharter', 'MOM_EQ', '0', 'YELLOW', 'H2031', 1, 26),
('无班线有班线客运量核实', 'RULE_P007', '无客运班车(班线车辆数为0)但有班线客运量需核实', 'vehicleSchedule,passengerClass1,passengerClass2,passengerClass3,passengerClass4', 'EXISTENCE', '0', 'RED', 'H2031', 1, 27),
('无包车有包车客运量核实', 'RULE_P008', '无客运包车(包车车辆数为0)但有包车客运量需核实', 'vehicleCharter,passengerCharter', 'EXISTENCE', '0', 'RED', 'H2031', 1, 28);
-- ============================================
-- ä¹ã€é“路货运能源消耗(交企统H204)扩展模块
-- ============================================
-- é“路货运车辆能源消耗情况(车辆粒度季报)
DROP TABLE IF EXISTS h204_vehicle_quarterly;
CREATE TABLE h204_vehicle_quarterly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-06(季度末月)',
    region_code VARCHAR(20) COMMENT '所属地区',
    enterprise_code VARCHAR(50) COMMENT '企业代码',
    enterprise_name VARCHAR(200) COMMENT '企业名称',
    plate_no VARCHAR(30) COMMENT '车牌号',
    vehicle_type_code VARCHAR(10) COMMENT '车辆类型代码',
    vehicle_type VARCHAR(50) COMMENT '车辆类型(中文)',
    fuel_type_code VARCHAR(10) COMMENT '燃料类型代码',
    fuel_type VARCHAR(50) COMMENT '燃料类型(中文)',
    manufacture_year INT COMMENT '出厂年份',
    marked_tonnage DOUBLE COMMENT '标记吨位(吨)',
    total_mileage DOUBLE COMMENT '总行程(公里)',
    loaded_mileage DOUBLE COMMENT '载货里程(公里)',
    empty_mileage DOUBLE COMMENT '空驶里程(公里)',
    freight DOUBLE COMMENT '货运量(吨)',
    turnover DOUBLE COMMENT '货物周转量(吨公里)',
    trip_count INT COMMENT '趟次数(个)',
    fuel_unit VARCHAR(20) COMMENT '燃料1计量单位',
    fuel_consumption DOUBLE COMMENT '燃料1消耗量',
    avg_distance DOUBLE COMMENT '平均运距(公里)',
    avg_loaded_tonnage DOUBLE COMMENT '平均载货吨位(吨)',
    avg_trip_mileage DOUBLE COMMENT '单趟平均里程(公里)',
    fuel_per_100km DOUBLE COMMENT '百公里单耗',
    turnover_fuel DOUBLE COMMENT '周转量单耗',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period_plate (report_period, plate_no),
    KEY idx_period_ent (report_period, enterprise_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交企统H204表_道路货运车辆能源消耗情况(车辆粒度)';
-- é“路货运能耗_运政车辆信息(车牌粒度)
DROP TABLE IF EXISTS h204_auth_vehicle;
CREATE TABLE h204_auth_vehicle (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期',
    plate_no VARCHAR(30) NOT NULL COMMENT '车牌号',
    vehicle_type VARCHAR(50) COMMENT '车辆类型',
    fuel_type VARCHAR(50) COMMENT '燃料类型',
    marked_tonnage DOUBLE COMMENT '标记吨位(吨)',
    traction_quality DOUBLE COMMENT '准牵引质量(牵引车标记吨位)',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period_plate (report_period, plate_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='道路货运能耗_运政车辆信息(车牌粒度)';
-- H204 é¢„置审核规则(4条,report_type=H204)
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('车辆类型与运政对比', 'RULE_E001', '能耗明细车辆类型与运政车辆信息不一致需核实', 'vehicleType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 31),
('燃料类型与运政对比', 'RULE_E002', '能耗明细燃料类型与运政车辆信息不一致需核实', 'fuelType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 32),
('标记吨位与运政对比', 'RULE_E003', '能耗明细标记吨位与运政对比,差距>0.05吨需核实(牵引车对比准牵引质量)', 'markedTonnage', 'CROSS_DIFF', '0.05', 'YELLOW', 'H204', 1, 33),
('运政车辆信息缺失', 'RULE_E004', '能耗明细车牌号在运政车辆信息中不存在需核实', 'plateNo', 'EXISTENCE_AUTH', '0', 'RED', 'H204', 1, 34),
('载货里程占比与单趟里程比核实', 'RULE_E005', '载货里程/总行程 ä¸Ž å¹³å‡è¿è·/单趟平均里程 ç›¸å·®Â±10%需核实', 'loadedMileage,totalMileage,avgDistance,avgTripMileage', 'LOADED_RATIO_DIFF', '0.1', 'YELLOW', 'H204', 1, 35),
('百公里单耗超范围核实', 'RULE_E006', '百公里单耗偏离同燃料类型中位数超过50%需核实', 'fuelPer100km,fuelTypeCode', 'FUEL_RANGE', '0.5', 'YELLOW', 'H204', 1, 36),
('百公里单耗环比变化核实', 'RULE_E007', '同一辆车百公里单耗环比变化超过±50%需核实', 'fuelPer100km,plateNo', 'FUEL_MOM', '0.5', 'YELLOW', 'H204', 1, 37),
('能耗量与货运月报对比核实', 'RULE_E008', '企业能耗货运量/周转量之和大于货运月报50%需核实', 'freight,turnover,enterpriseName', 'FREIGHT_VS_H2032', '0.5', 'RED', 'H204', 1, 38),
('平均运距与货运月报对比核实', 'RULE_E009', '车辆平均运距与货运月报平均运距相差±60%需核实', 'avgDistance,enterpriseName', 'AVG_DIST_VS_H2032', '0.6', 'YELLOW', 'H204', 1, 39),
('平均载货吨位与标记吨位比值核实', 'RULE_E010', '平均载货吨位/标记吨位 å°äºŽ0.5或大于1需核实', 'avgLoadedTonnage,markedTonnage', 'LOADED_TON_RATIO', '0.5,1', 'YELLOW', 'H204', 1, 40);
-- ============================================
-- åã€æŠ•资模块(客运站场/物流园区)扩展
-- ============================================
-- æŠ•资项目主档(按 é¡¹ç›®å+类别 å”¯ä¸€ï¼‰
DROP TABLE IF EXISTS investment_project;
CREATE TABLE investment_project (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    project_name VARCHAR(200) NOT NULL COMMENT '项目名称',
    category VARCHAR(20) NOT NULL COMMENT '类别:客运站场/物流园区',
    city VARCHAR(50) COMMENT '市州',
    county VARCHAR(100) COMMENT '县(市、区)',
    builder_name VARCHAR(200) COMMENT '投资建设单位',
    construct_nature VARCHAR(50) COMMENT '建设性质',
    start_time VARCHAR(20) COMMENT '开工时间',
    end_time VARCHAR(20) COMMENT '建成/竣工时间',
    total_investment DOUBLE COMMENT '计划总投资(万元)',
    approval_gk VARCHAR(500) COMMENT '工可批复',
    approval_cs VARCHAR(500) COMMENT '初设批复',
    building_area DOUBLE COMMENT '建筑面积(平方米)',
    is_billion TINYINT DEFAULT 0 COMMENT '亿元投资项目标记',
    is_county TINYINT DEFAULT 0 COMMENT '经济强县项目标记',
    is_five_year TINYINT DEFAULT 0 COMMENT '十五五重点物流项目标记',
    source VARCHAR(50) COMMENT '数据来源',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_name_category (project_name, category)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资项目主档';
-- æŠ•资项目月度完成情况
DROP TABLE IF EXISTS investment_monthly;
CREATE TABLE investment_monthly (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
    project_id BIGINT NOT NULL COMMENT '项目主档ID',
    year_plan DOUBLE COMMENT '本年计划投资(万元)',
    year_cum DOUBLE COMMENT '自年初累计完成投资(万元)',
    month_done DOUBLE COMMENT '其中:本月完成投资(万元)',
    start_cum DOUBLE COMMENT '自开始建设累计完成投资(万元)',
    progress_stage VARCHAR(100) COMMENT '建设阶段',
    progress_desc VARCHAR(2000) COMMENT '形象进度',
    building_area DOUBLE COMMENT '建筑面积(平方米)',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period (report_period),
    KEY idx_project (project_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资项目月度完成情况';
-- æŠ•资系统查询导出(审核比对基准)
DROP TABLE IF EXISTS investment_system;
CREATE TABLE investment_system (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
    project_name VARCHAR(200) NOT NULL COMMENT '项目名称(单位)',
    total_investment DOUBLE COMMENT '计划总投资(万元)',
    start_cum DOUBLE COMMENT '自开始建设至本月累计完成投资(万元)',
    year_plan DOUBLE COMMENT '本年计划投资(万元)',
    year_cum DOUBLE COMMENT '自年初累计完成投资(万元)',
    month_done DOUBLE COMMENT '当月完成投资(万元)',
    import_batch_id BIGINT COMMENT '导入批次',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    KEY idx_period (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投资系统查询导出(审核比对基准)';
-- INVEST é¢„置审核规则(4条,report_type=INVEST)
INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
('自开始累计与投资系统对比', 'RULE_I001', '自开始建设累计完成投资与投资系统导出差异超阈值需核实', 'startCum', 'CROSS_DIFF', '100|5', 'YELLOW', 'INVEST', 1, 41),
('自年初累计与投资系统对比', 'RULE_I002', '自年初累计完成投资与投资系统导出差异超阈值需核实', 'yearCum', 'CROSS_DIFF', '50|5', 'YELLOW', 'INVEST', 1, 42),
('本月完成与投资系统对比', 'RULE_I003', '本月完成投资与投资系统导出差异超阈值需核实', 'monthDone', 'CROSS_DIFF', '30|30', 'YELLOW', 'INVEST', 1, 43),
('投资系统项目缺失核实', 'RULE_I004', '汇总大表项目在投资系统导出中不存在需核实', 'projectName', 'EXISTENCE_SYS', '0', 'YELLOW', 'INVEST', 1, 44);
-- ============================================
-- ä¹ã€å…¬è·¯æ—…客个体客运量/周转量(企业线下汇报)
-- ============================================
DROP TABLE IF EXISTS passenger_individual_monthly;
CREATE TABLE passenger_individual_monthly (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  report_period VARCHAR(20) COMMENT '报表期 2026-07',
  region_code VARCHAR(20) COMMENT '所属地区(行政区划代码)',
  enterprise_code VARCHAR(50) COMMENT '企业代码',
  enterprise_name VARCHAR(200) COMMENT '企业名称',
  passenger_count DOUBLE COMMENT '其中个体客运量(人)',
  turnover DOUBLE COMMENT '其中个体旅客周转量(人公里)',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  KEY idx_period (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公路旅客个体客运量/周转量';
-- ============================================
-- åã€æŠ¥è¡¨æœŸå®¡æ ¸é€šè¿‡æ ‡è®°ï¼ˆaudit_run)
-- ============================================
DROP TABLE IF EXISTS audit_run;
CREATE TABLE audit_run (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  report_type VARCHAR(50) COMMENT '报表类型',
  report_period VARCHAR(20) COMMENT '报表期',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  KEY idx_type_period (report_type, report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报表期审核通过标记';
deploy-templates/db/sql_city_bus.sql
New file
@@ -0,0 +1,59 @@
-- åŸŽå¸‚客运第1步(公交)建表 + å®¡æ ¸è§„则
-- æ•°æ®æºï¼šå¯¼å…¥_城市公共交通月度运营情况(2026å¹´7月).xls(企业级明细,含公共汽电车/轨道/轮渡三类,本表只取公共汽电车字段)
CREATE TABLE IF NOT EXISTS city_bus_monthly (
  id BIGINT NOT NULL AUTO_INCREMENT,
  report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
  region_code VARCHAR(20) DEFAULT NULL COMMENT '所属地区代码',
  city VARCHAR(50) DEFAULT NULL COMMENT '市州(由地区代码映射)',
  enterprise_code VARCHAR(50) DEFAULT NULL COMMENT '企业代码',
  enterprise_name VARCHAR(200) DEFAULT NULL COMMENT '企业名称',
  op_vehicles DOUBLE DEFAULT NULL COMMENT '公共汽电车运营车数',
  stop_total DOUBLE DEFAULT NULL COMMENT '运营站点总个数',
  stop_city DOUBLE DEFAULT NULL COMMENT '其中:城市内运营站点',
  passenger_volume DOUBLE DEFAULT NULL COMMENT '公共汽电车客运量(万人次)',
  passenger_city DOUBLE DEFAULT NULL COMMENT '其中:城市内客运量(万人次)',
  turnover DOUBLE DEFAULT NULL COMMENT '公共汽电车旅客周转量(万人公里)',
  turnover_city DOUBLE DEFAULT NULL COMMENT '其中:城市内旅客周转量(万人公里)',
  avg_distance DOUBLE DEFAULT NULL COMMENT '公共汽电车平均运距(公里)',
  avg_distance_city DOUBLE DEFAULT NULL COMMENT '城市内平均运距(公里)',
  passenger_chengxiang DOUBLE DEFAULT NULL COMMENT '城际城乡客运量(万人次)',
  turnover_chengxiang DOUBLE DEFAULT NULL COMMENT '城际城乡旅客周转量(万人公里)',
  avg_distance_chengxiang DOUBLE DEFAULT NULL COMMENT '城际城乡平均运距(公里)',
  rate_op_vehicles_mom DOUBLE DEFAULT NULL COMMENT '运营车数环比增速',
  rate_passenger_mom DOUBLE DEFAULT NULL COMMENT '客运量环比增速',
  rate_passenger_city_mom DOUBLE DEFAULT NULL COMMENT '城市内客运量环比',
  rate_chengxiang_mom DOUBLE DEFAULT NULL COMMENT '城际城乡客运量环比增速',
  rate_chengxiang_turnover_mom DOUBLE DEFAULT NULL COMMENT '城际城乡旅客周转量环比增速',
  rate_turnover_mom DOUBLE DEFAULT NULL COMMENT '旅客周转量环比增速',
  avg_distance_mom_change DOUBLE DEFAULT NULL COMMENT '平均运距环比增减(公里)',
  avg_distance_city_mom_change DOUBLE DEFAULT NULL COMMENT '城市内平均运距环比增减(公里)',
  daily_passenger_per_vehicle DOUBLE DEFAULT NULL COMMENT '单车日均客运量',
  rate_op_vehicles_yoy DOUBLE DEFAULT NULL COMMENT '运营车数同比增速',
  rate_passenger_yoy DOUBLE DEFAULT NULL COMMENT '客运量同比增速',
  rate_passenger_city_yoy DOUBLE DEFAULT NULL COMMENT '城市内客运量同比增速',
  rate_chengxiang_yoy DOUBLE DEFAULT NULL COMMENT '城际城乡客运量同比增速',
  rate_chengxiang_turnover_yoy DOUBLE DEFAULT NULL COMMENT '城际城乡旅客周转量同比增速',
  rate_turnover_yoy DOUBLE DEFAULT NULL COMMENT '旅客周转量同比增速',
  stop_city_ratio DOUBLE DEFAULT NULL COMMENT '城市内运营站点占比',
  passenger_city_ratio DOUBLE DEFAULT NULL COMMENT '城市内客运量占比',
  chengxiang_ratio DOUBLE DEFAULT NULL COMMENT '城际城乡客运量占比',
  contact_person VARCHAR(100) DEFAULT NULL COMMENT '填表人',
  contact_phone VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
  report_date VARCHAR(20) DEFAULT NULL COMMENT '报出日期',
  verify_explanation TEXT COMMENT '核实性原因解释',
  report_note TEXT COMMENT '上报说明',
  modify_record TEXT COMMENT '修改记录',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_period (report_period),
  KEY idx_city (city),
  KEY idx_enterprise (enterprise_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='城市公交企业月度数据(城市公共交通月度运营情况)';
-- åŸŽå¸‚公交 4 ç»„审核规则(report_type=CITY_BUS)
INSERT IGNORE INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
  ('城市内与城际城乡客运量趋势一致核实', 'RULE_B001', '城市内客运量环比/同比与城际城乡客运量环比/同比趋势不一致且增速>2%需核实', 'passengerCityMom,passengerChengxiangMom,passengerCityYoy,passengerChengxiangYoy', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_BUS', 1, 51),
  ('客运量与旅客周转量趋势一致核实', 'RULE_B002', '客运量同比/环比与旅客周转量同比/环比趋势不一致需核实', 'passengerMom,turnoverMom,passengerYoy,turnoverYoy', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_BUS', 1, 52),
  ('城市内/城际城乡客运量占比变化核实', 'RULE_B003', '城市内客运量占比和城际城乡客运量占比与上月相比变化>1%需核实', 'passengerCityRatio,chengxiangRatio', 'RATIO_CHANGE', '0.01', 'YELLOW', 'CITY_BUS', 1, 53),
  ('平均运距变化幅度核实', 'RULE_B004', '平均运距与上月相比变化幅度超过3公里需核实(特别是城际城乡)', 'avgDistanceMomChange,avgDistanceCityMomChange,avgDistanceChengxiang', 'AVG_DIST_CHANGE', '3', 'YELLOW', 'CITY_BUS', 1, 54);
deploy-templates/db/sql_city_taxi.sql
New file
@@ -0,0 +1,82 @@
-- åŸŽå¸‚客运第2步(巡游出租)建表 + å®¡æ ¸è§„则
-- æ•°æ®æº1:导入_巡游出租汽车运营服务情况月报(2026å¹´7月).xls(市州级,17行)
-- æ•°æ®æº2:输入_出租车信息(运政车辆信息).xls(车辆级明细 42636 è¡Œï¼‰
CREATE TABLE IF NOT EXISTS city_taxi_monthly (
  id BIGINT NOT NULL AUTO_INCREMENT,
  report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
  region_code VARCHAR(20) DEFAULT NULL COMMENT '所属地区代码',
  city VARCHAR(50) DEFAULT NULL COMMENT '市州',
  trip_total DOUBLE DEFAULT NULL COMMENT '载客车次总数',
  trip_city DOUBLE DEFAULT NULL COMMENT '载客车次总数_城市内',
  passenger_volume DOUBLE DEFAULT NULL COMMENT '客运量(万人次)',
  passenger_city DOUBLE DEFAULT NULL COMMENT '客运量_其中城市内',
  turnover DOUBLE DEFAULT NULL COMMENT '旅客周转量(万人公里)',
  turnover_city DOUBLE DEFAULT NULL COMMENT '旅客周转量_城市内',
  op_vehicles DOUBLE DEFAULT NULL COMMENT '运营车辆数',
  avg_distance DOUBLE DEFAULT NULL COMMENT '巡游出租汽车平均运距(公里)',
  avg_distance_city DOUBLE DEFAULT NULL COMMENT '城市内平均运距(公里)',
  daily_trips_per_vehicle DOUBLE DEFAULT NULL COMMENT '单车日均载客车次',
  daily_passenger_per_vehicle DOUBLE DEFAULT NULL COMMENT '单车日均客运量',
  passengers_per_trip DOUBLE DEFAULT NULL COMMENT '单车次载客人数',
  passengers_per_trip_city DOUBLE DEFAULT NULL COMMENT '单车次载客人数_城市内',
  passengers_per_trip_chengxiang DOUBLE DEFAULT NULL COMMENT '单车次载客人数_城际城乡',
  rate_op_vehicles_mom DOUBLE DEFAULT NULL COMMENT '运营车数环比增速',
  rate_op_vehicles_yoy DOUBLE DEFAULT NULL COMMENT '运营车数同比增速',
  rate_trip_mom DOUBLE DEFAULT NULL COMMENT '载客车次总数环比增速',
  rate_trip_yoy DOUBLE DEFAULT NULL COMMENT '载客车次同比增速',
  rate_passenger_mom DOUBLE DEFAULT NULL COMMENT '客运量环比增速',
  rate_passenger_yoy DOUBLE DEFAULT NULL COMMENT '客运量同比增速',
  avg_distance_mom_change DOUBLE DEFAULT NULL COMMENT '平均运距环比增减(公里)',
  avg_distance_city_mom_change DOUBLE DEFAULT NULL COMMENT '平均运距_城市内环比增减(公里)',
  rate_trip_city_mom DOUBLE DEFAULT NULL COMMENT '载客车次总数环比增速_城市内',
  rate_passenger_city_mom DOUBLE DEFAULT NULL COMMENT '客运量环比增速_城市内',
  rate_trip_chengxiang_mom DOUBLE DEFAULT NULL COMMENT '载客车次总数_城际城乡环比增速',
  rate_passenger_chengxiang_mom DOUBLE DEFAULT NULL COMMENT '客运量_城际城乡环比增速',
  avg_distance_chengxiang DOUBLE DEFAULT NULL COMMENT '平均运距_城际城乡(公里)',
  trip_city_ratio DOUBLE DEFAULT NULL COMMENT '载客车次总数_城市内占比',
  passenger_city_ratio DOUBLE DEFAULT NULL COMMENT '客运量_城市内占比',
  contact_person VARCHAR(100) DEFAULT NULL COMMENT '填表人',
  contact_phone VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
  report_date VARCHAR(20) DEFAULT NULL COMMENT '报出日期',
  verify_explanation TEXT COMMENT '核实性原因解释',
  report_note TEXT COMMENT '上报说明',
  modify_record TEXT COMMENT '修改记录',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_period (report_period),
  KEY idx_city (city)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='巡游出租汽车运营服务情况月报(市州级)';
CREATE TABLE IF NOT EXISTS city_taxi_auth (
  id BIGINT NOT NULL AUTO_INCREMENT,
  report_period VARCHAR(20) NOT NULL COMMENT '报表期 2026-07',
  city VARCHAR(50) DEFAULT NULL COMMENT '市州(由证号/档案号/地址提取)',
  plate_no VARCHAR(30) DEFAULT NULL COMMENT '车牌号码',
  vehicle_type VARCHAR(50) DEFAULT NULL COMMENT '车辆类型',
  biz_type VARCHAR(50) DEFAULT NULL COMMENT '经营类型',
  owner_name VARCHAR(100) DEFAULT NULL COMMENT '车主名称',
  license_no VARCHAR(100) DEFAULT NULL COMMENT '经营权号',
  archive_no VARCHAR(100) DEFAULT NULL COMMENT '档案号',
  road_cert_no VARCHAR(100) DEFAULT NULL COMMENT '道路运输证字号',
  fuel_type VARCHAR(50) DEFAULT NULL COMMENT '燃料类型',
  operator_name VARCHAR(200) DEFAULT NULL COMMENT '业户名称',
  operator_addr VARCHAR(300) DEFAULT NULL COMMENT '业户地址',
  op_status VARCHAR(20) DEFAULT NULL COMMENT '营运状态',
  cert_status VARCHAR(20) DEFAULT NULL COMMENT '证件状态',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_period (report_period),
  KEY idx_city (city),
  KEY idx_period_city (report_period, city)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出租车运政车辆信息(车辆级明细)';
-- åŸŽå¸‚客运第2步:巡游出租 7 ç»„审核规则(report_type=CITY_TAXI)
INSERT IGNORE INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES
  ('运营车数与运政系统对比核实', 'RULE_T001', '月报运营车辆数与运政系统车辆数差距>3%需核实', 'opVehicles', 'CROSS_DIFF_PCT', '3', 'RED', 'CITY_TAXI', 1, 61),
  ('城市内与城际城乡客运量趋势一致核实', 'RULE_T002', '城市内客运量环比与城际城乡客运量环比趋势不一致且增速>2%需核实', 'passengerCityMom,passengerChengxiangMom', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_TAXI', 1, 62),
  ('客运量与旅客周转量趋势一致核实', 'RULE_T003', '客运量环比与旅客周转量环比(由平均运距推导)趋势不一致需核实', 'passengerMom,turnoverMomDerived', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_TAXI', 1, 63),
  ('城市内客运量占比变化核实', 'RULE_T004', '城市内客运量占比与上月相比变化>1%需核实', 'passengerCityRatio', 'RATIO_CHANGE', '0.01', 'YELLOW', 'CITY_TAXI', 1, 64),
  ('平均运距变化幅度核实', 'RULE_T005', '平均运距与上月相比变化超过3公里需核实(特别是城际城乡)', 'avgDistanceMomChange,avgDistanceCityMomChange,avgDistanceChengxiang', 'AVG_DIST_CHANGE', '3', 'YELLOW', 'CITY_TAXI', 1, 65),
  ('单车次载客人数系数变化核实', 'RULE_T006', '单车次载客人数=客运量/载客车次总数,与上月相比变化>0.2需核实', 'passengersPerTrip', 'PAX_PER_TRIP_CHANGE', '0.2', 'YELLOW', 'CITY_TAXI', 1, 66),
  ('载客车次总数与客运量趋势一致核实', 'RULE_T007', '载客车次总数环比/同比与客运量环比/同比趋势不一致需核实', 'tripMom,passengerMom,tripYoy,passengerYoy', 'TREND_CONSISTENCY', '0.01', 'YELLOW', 'CITY_TAXI', 1, 67);
deploy-templates/db/sql_wyc.sql
New file
@@ -0,0 +1,45 @@
-- åŸŽå¸‚客运网约车月度输入建表(2026-09-04)
-- æ•°æ®æº1:模板_网约车总数.xlsx(月度全省 pin:客运量/其中城市内/周转量/其中城市内周转量)
-- æ•°æ®æº2:模板_网约车订单及全省总量.xlsx(月度输入页:B-E å…¨çœ pin + F è®¢å•合计 + G-W 17市州订单)
CREATE TABLE IF NOT EXISTS wyc_total_monthly (
  id BIGINT NOT NULL AUTO_INCREMENT,
  report_period VARCHAR(20) NOT NULL COMMENT '报表期 yyyy-MM',
  pin_k DOUBLE DEFAULT NULL COMMENT '全省网约车客运量(万人次)',
  pin_ck DOUBLE DEFAULT NULL COMMENT '其中城市内客运量',
  pin_z DOUBLE DEFAULT NULL COMMENT '全省客运周转量(万人公里)',
  pin_cz DOUBLE DEFAULT NULL COMMENT '其中城市内周转量',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uk_wyc_total_period (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网约车月度全省 pin è¾“å…¥';
CREATE TABLE IF NOT EXISTS wyc_order_monthly (
  id BIGINT NOT NULL AUTO_INCREMENT,
  report_period VARCHAR(20) NOT NULL COMMENT '报表期 yyyy-MM',
  pin_k DOUBLE DEFAULT NULL,
  pin_ck DOUBLE DEFAULT NULL,
  pin_z DOUBLE DEFAULT NULL,
  pin_cz DOUBLE DEFAULT NULL,
  order_sum DOUBLE DEFAULT NULL COMMENT '订单合计(单)',
  order_wuhan DOUBLE DEFAULT NULL,
  order_huangshi DOUBLE DEFAULT NULL,
  order_shiyan DOUBLE DEFAULT NULL,
  order_yichang DOUBLE DEFAULT NULL,
  order_xiangyang DOUBLE DEFAULT NULL,
  order_ezhou DOUBLE DEFAULT NULL,
  order_jingmen DOUBLE DEFAULT NULL,
  order_xiaogan DOUBLE DEFAULT NULL,
  order_jingzhou DOUBLE DEFAULT NULL,
  order_huanggang DOUBLE DEFAULT NULL,
  order_xianning DOUBLE DEFAULT NULL,
  order_suizhou DOUBLE DEFAULT NULL,
  order_enshi DOUBLE DEFAULT NULL,
  order_xiantao DOUBLE DEFAULT NULL,
  order_qianjiang DOUBLE DEFAULT NULL,
  order_tianmen DOUBLE DEFAULT NULL,
  order_shennong DOUBLE DEFAULT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uk_wyc_order_period (report_period)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网约车订单及全省总量月度输入';
deploy-templates/frontend/nginx.conf.example
New file
@@ -0,0 +1,15 @@
# å‰ç«¯ nginx é…ç½®ç¤ºä¾‹ï¼ˆåªæœ‰åœ¨ä¸æƒ³ç”¨ã€Œjar å†…嵌前端」时才需要)
server {
    listen       8080;
    server_name  localhost;
    root   /opt/traffic-audit/frontend/dist;   # æ”¹æˆå®žé™…路径
    index  index.html;
    location /api/ {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300s;
    }
    location / { try_files $uri $uri/ /index.html; }
}
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_2026-07ĸ°æ²¹ÆëÓëµ¼³ö¼þ´ò²»¿ªÐÞ¸´_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_2026-09-02_µ¼ÈëÓ뱨±íÉú³É»Ø¹é.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_H2031Ä£°åÐÂÔöÁÐÊÊÅä_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_M1-³ÇÊпÍÔË-¹«½»³ö×â¹ìµÀÂÖ¶É_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_M1-³ÇÊпÍÔË-³ÇÊлã×ÜÕûÁ´»Ø¹é_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_M1-°àÏß°ü³µMidCalc_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_M1-ÍøÔ¼³µ²ð·ÖWycSplitCalc_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_M1-»õÔËÈ¡ÊýÁ´Â·Óë7Ô»عé_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_RULE001·ÖÏîÔËÕþÓëãÐÖµÁª¶¯¼°ÁÐ¿í»Ø¹é_2026-09-09.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ò»¼üÆôÍ£½Å±¾Óë×ÀÃæÈë¿Ú_2026-09-19.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Öпھ¶ËÄά¿Ú¾¶Í³Ò»_2026-09-18.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Öпھ¶ÅÅÃûͬ±È»ùÊý·½°¸A_2026-09-21.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Öпھ¶ÅÅÃûÖÜתÁ¿¿Ú¾¶Í³Ò»_2026-09-19.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Öпھ¶ÅÅÃû×ó¿éɾ³ýÓë7Ô»عéÊÕ¿Ú¼°8ÔÂÀ©ÁÐ_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_È«¾«¶È´æ´¢ÓëÁ½Î»Ð¡ÊýÏÔʾ_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_¹«Â·Âÿͱ¨±í²¢Èë¸öÌå¿ÍÔË_2026-09-03.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ͬÃûÆóÒµ1-8ÔÂÀۼƻõÔËÁ¿ÓëÖÜתÁ¿SQL_2026-09-19.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_³ÇÊпÍÔËÐÂÔöÍøÔ¼³µ²ð·Ö±íÓë»ã×ܹ¤×÷²¾¼°Á½Î»Ð¡ÊýÏÔʾ_2026-09-03.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_³ÇÊпÍÔËÔ¶ÈÓëÀÛ¼ÆÍ¬±È_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_³ÇÊпÍÔËÍøÔ¼³µµ¼ÈëÏÂÀ­_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÉóºËƽ¾ù¶Öλ¿Ú¾¶Óë²ð·ÖÄ¿±êÔµ¼Èë¼°È«ÆÁ·­Ò³_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÉóºË½çÃæ½»»¥ÓëÎÊÌâ»°Êõµ¼³ö_2026-09-09.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÉóºË½á¹ûÄ£°åչʾÓëµ¼³ö¼°±¨±íÒ³Õû¸Ä_2026-09-09.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÉóºË½á¹ûҳѡÔÂתȦÐÞ¸´_2026-09-09.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÃÜÔ¿Íⲿ»¯Óë´ò°üÈ¥ÃÜ_2026-09-26.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_µ¼ÈëУÑéÔöÇ¿_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_µ¼ÈëÇå¿Õ°´ÀàÐÍÓë°´Å¥·ÀÎó´¥_2026-09-10.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_µ¼³ö»º´æ¸ÄÓÃÊý¾ÝÖ¸ÎÆ_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_¾ÖÓòÍøIP·ÃÎʵǼCORSÐÞ¸´_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÊÐÖÝͳһÌģ°åÓëÏØÊÐÇø½âÎö_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÉóºËI004»ù׼ȱʧ±£»¤_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÊÐÖÝÔ±¨¶àsheetʶ±ðÓëÐòºÅ¿Õ¸ñ_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÃ÷ϸ±íÓëµ¼ÈëÈ¡Áж¨Î»ÐÞ¸´_2026-09-19.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÃ÷ϸ±íÈ¡ÊýÐÞ¸´_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÃ÷ϸ±í¾ÍÐ÷ÓëÔ¤ÀÀÀàÐͲ¹Æë_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÔ±¨Æ¥ÅäÓëУÑéÒýÇæ_2026-09-17.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÔ±¨È¡ÁдíλÐÞ¸´Ó뵯´°Ìáʾ_2026-09-17.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÔ±¨¸ñʽ̽²âÓë×Ö¶ÎÓ³Éä±í_2026-09-17.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÔ±¨Ô´Îļþ½âÎöÒýÇæ_2026-09-17.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊϵͳÐÂÄ£°å°´±íÍ·½âÎöÓëÉóºË»ù׼ȱʧ±£»¤_2026-09-21.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ͷ×ÊÔ¤°²ÅÅ»ã×ܲ¹¼ÆÓëµ¼È뵯´°_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_³ÖÐøÔÚ¹æÆóÒµ545¼Ò·ÖÊÐÖÝÀÛ¼ÆÔ˾àͬ±È_2026-09-19.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_½Ó¿Ú¼øÈ¨ÓëAIÊý¾ÝÍÑÃô¼Ó¹Ì_2026-09-14.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ýµ¼ÈëÇå¿Õ°´Å¥°´±¨±íÆÚÇå¿â_2026-09-10.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ýµ¼ÈëÒ³¿Õ°×ÐÞ¸´_2026-09-11.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´¶³½áÁÐÓëÊý¾ÝÀàÐÍÏÂÀ­¿ò_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´¿Ú¾¶É¸Ñ¡Óë±íÍ·µ¥Î»_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´Õ¹Ê¾ÓÅ»¯ÓëÍøÔ¼³µ°´ÊÐÖÝÊúÅÅ_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´Í¶×ÊÄܺÄÓ뱨±íÆÚÅÅÐò_2026-09-17.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´°´ÊÐÖÝ»ã×ÜÓëµ¼³ö_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Êý¾Ý²é¿´²¹ÆëÍøÔ¼³µÓë¸öÌå¿ÍÔËÀàÐÍ_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Õû¸Ä8Ïî»Ø¹éÑéÖ¤_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±í1-6ÔÂÉú³ÉÓë1-7ÔÂÀ©ÁÐÑéÖ¤_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±í8ÔÂÊý¾Ý»ØÌîÓë°æÊ½¶ÔÆë_2026-09-11.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íËÄÒ³Êý¾ÝÇý¶¯_2026-09-13.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íµ¼³ö½á¹ûÂäÅÌ»º´æ¸´ÓÃ_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íÒì²½µ¼³öÓ뻺´æ_2026-09-20.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íÊý¾ÝÇý¶¯»ØÌîM2̨Õ˲ã_2026-09-09.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íÈÕÆÚ¸ñʽÓë¹æÔòÁª¶¯¼°Êý¾Ý²é¿´¹ö¶¯¼ÓÔØ_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±í°æÊ½Í³Ò»_2026-09-08.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±í»õÔ˹æÉϹæÏ²¹ÊýÓë³ÉÆ·Ò³µ±Ô¿éÐÞÕý_2026-09-07.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íÈí¼þÊä³öÓëÊÖ¹¤¶¨¸å²îÒì_2026-09-21.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±í½ø¶Èµ¯´°ÓÅ»¯_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü´ó±íÔ¤ÀÀɾ³ýÖпھ¶ºóÃ÷ϸ±í_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×ܹ¤×÷²¾Ô¶ȿéÀ©Áл¹Ô­ÊÔµã_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×ܹ¤×÷²¾¹Ç¼ÜÉú³É_2026-09-03.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×Ü±í¹«Ê½À©Ò³ÓëÖØËã_2026-09-18.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×ܱíÅÅÃûҳˢÐÂÓëͬ±È°Ù·ÖÊý_2026-09-11.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»ã×ܱíÕûÊý²»ÏÔʾ0.00ÓëÁпí×ÔÊÊÓ¦_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_DZ½­Í¶×ÊÎïÁ÷Ô±¨Öص¼_2026-09-23.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Éú³ÉÄ£°åаæÊ½_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_µÇ¼ÑéÖ¤ÂëÈÝ´íÓ뱨±íÔ¤ÀÀÕû¸Ä_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÍøÔ¼³µ¶©µ¥±¨¸æWordML¼æÈݵ¼Èë_2026-09-18.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÍøÔ¼³µ¶©µ¥±¨¸æµ¼Èë_2026-09-11.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_¹æÉϹæÏ²ð·ÖÔ·Ýҳǩʶ±ð_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»õÔËÔ±¨³ÖÐøÔÚ¹æÆóÒµ·ÖÊÐÖÝÀÛ¼ÆÔ˾à_2026-09-18.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»õÔËÁ¿ÖÜתÁ¿2023ÄêÊý¾Ý²¹Â¼_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»õÔËÁ¿ÖÜתÁ¿¶àÄê¶Èµ¼Èë_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_»õÔËҳǩÀÛ¼ÆÁÐÐÞ¸´ÓëÔàÆÚÇåÀí_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÔËÕþ³µÁ¾Óë¹ì¼£Àï³Ìµ¼Èë»Ø¹é_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_²¿Êð°ü´ò°üÓë¶ÀÁ¢Æô¶¯_2026-09-13.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Ô¤ÀÀÖ¸±êÃû³ÆÏÔʾÓë»õÔËÁ¿ºÏ¼Æµ¥Î»ÐÞÕý_2026-09-04.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/µ¼ÈëÓëÉú³ÉÄ£¿éÌå¼ìÎÊÌâÇåµ¥_2026-09-02.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/Êý¾Ý±È¶Ô±¨¸æ_Ͷ×ÊÃ÷ϸ±íÈí¼þÉú³ÉÓëÈ˹¤°æ_2026-09-22.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/»ã×Ü´ó±íÓ붨¸å±È¶Ô_2026-09-16.md
File was deleted
docs/¹¦ÄܲâÊÔ±¨¸æ/»ã×Ü´ó±íÒì²½µ¼³ö½ø¶Èµ¯´°_2026-09-20.png
Binary files differ
docs/¹¦ÄܲâÊÔ±¨¸æ/»õÔËÀÛ¼ÆÁк˶ÔÓëµ¼ÈëÊý¾ÝÌå¼ì_2026-09-16.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-02.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-03.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-04.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-05.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-07.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-08.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-09.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-10.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-11.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-13.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-14.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-15.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-16.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-17.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-18.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-19.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-20.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-21.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-22.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-23.md
File was deleted
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-26.md
File was deleted
docs/´ò°ü²¿Êð˵Ã÷.md
@@ -255,6 +255,30 @@
python -c "import zipfile;print(zipfile.ZipFile('traffic-audit-server/target/traffic-audit-server-1.0.0-SNAPSHOT.jar').read('BOOT-INF/classes/application.yml').decode('utf-8'))" | Select-String "password:|api-key:"
```
### ä¸€é”®æ‰“包(推荐,2026-09-27 èµ·ï¼‰
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1
# å¯é€‰å‚数: -OutRoot "E:\试验"   -SkipFrontend
```
脚本做四件事:
1. `mvn clean package -DskipTests` æž„建后端 jar;
2. **解压 jar è‡ªæ£€**:检查 `BOOT-INF/classes/application.yml` æ˜¯å¦å…¨ä¸ºå ä½ç¬¦â€”—一旦发现 `sk-` æˆ–明文口令**直接中止打包**;
3. `npm run build` é‡å»ºå‰ç«¯ `dist`;
4. æŒ‰ `deploy-templates/` ç»„装完整部署包(backend / frontend / db / README-部署说明.txt),输出到 `<OutRoot>\traffic-audit-deploy-<yyyyMMdd>`。
模板件统一放在 **`deploy-templates/`**(已入库):外部 `application.yml`、`start-backend.cmd/.sh`、`nginx.conf.example`、`db\{init.sql,sql_city_bus,sql_city_taxi,sql_wyc}.sql`、`README-部署说明.txt`。改模板即改打包产物。
### è½®æ¢å¯†é’¥åŽåŒæ­¥æœ¬æœº
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File set-secrets.ps1
```
交互式输入(回车跳过某一项),自动 `setx` åˆ°ç”¨æˆ·çŽ¯å¢ƒå˜é‡å¹¶æç¤ºé‡å¯åŽç«¯ï¼›å€¼ä¸ä¼šå†™å…¥ä»»ä½•æ–‡ä»¶ã€‚
### éƒ¨ç½²æœºä¸ŠåŠ /换 DeepSeek key
1. æ‰“包上传后,编辑 **jar åŒçº§**的 `backend/application.yml`:`deepseek.api-key: "你的新key"`(留空则页面 AI åˆ†æžä¸å¯ç”¨ï¼Œå…¶ä½™åŠŸèƒ½æ­£å¸¸ï¼‰ï¼›
docs/Ä£¿é¹¦ÄÜÑé֤״̬¾ØÕó_2026-09-02.md
docs/Éú³É»ã×Ü´ó±í/2026Äê8ÔµÀ·ÔËÊäÁ¿»ã×ܱí.xlsx
Binary files differ
docs/ÎÊÌâ»ã×Ü/Êý¾Ý²é¿´»ã×ÜÓë»ã×Ü´ó±í¿Ú¾¶¶ÔÓ¦¹ØÏµ_2026-09-23.md
@@ -2,7 +2,7 @@
> æ ¸å¯¹æ—¥æœŸï¼š2026-09-23 提问:数据查看里的汇总功能与大表生成的数据是否一致
> æ ¸å¯¹æ–¹å¼ï¼šå¤§è¡¨å–自程序输出 `D:\桌面\生成数据\生成_道路运输量汇总表_2026-08 (3).xlsx`(含缓存直出,2026-09-22 14:10 ç”Ÿæˆï¼‰ï¼›æ•°æ®æŸ¥çœ‹å–自 `/api/data/summary?from=2026-01&to=2026-08`
> è„šæœ¬ï¼š`_tmp_cmp_dabiao2.py`(大表逐月列加总 vs æ±‡æ€»æŽ¥å£é€å€¼æ¯”对)
> æ ¸å¯¹æ–¹å¼ï¼šå¤§è¡¨é€æœˆåˆ—加总 vs æ±‡æ€»æŽ¥å£é€å€¼æ¯”对(当时用的临时脚本与中间文件已随历史临时件清理;需要复现按本文第四节方法重跑)
## ä¸€ã€ç»“论
docs/ÎÊÌâ»ã×Ü/»ã×Ü´ó±íÎÊÌâ½»½Ó_2026-09-21.md
@@ -241,6 +241,8 @@
| `_chk_all_pref.txt` | 17 å¸‚州两页同比差异清单 |
| `_chk_code*.txt`、`_chk_wyccalc.txt`、`_chk_wycdb.txt`、`_chk_filler.txt`、`_chk_freight.txt` | ç›¸å…³ä»£ç æ®µæ‘˜å½• |
> è¯´æ˜Žï¼ˆ2026-09-27):上表中的 `_chk_*` è¯æ®ä»¶ä¸ºå½“时的临时文本 dump,已随历史临时文件一并清理(本地不再保留);如需复现,按本章方法重跑(数据源与步骤见上)。
## 11. å¾…用户/业务确认清单(接手人先别自己拍)
1. ~~P0-1 èµ°æ–¹æ¡ˆ A è¿˜æ˜¯ B?(建议 A)~~ ç”¨æˆ·å·²é€‰æ‹©æ–¹æ¡ˆ A,2026-09-21 å·²å®žæ–½å¹¶å›žå½’通过。
pack-deploy.ps1
New file
@@ -0,0 +1,98 @@
<#
  ä¸€é”®æ‰“包部署包(含"去密自检")—— 2026-09-27 æ–°å¢ž
  ç”¨æ³•:
    powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1
    powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1 -OutRoot "E:\试验" -SkipFrontend
  åšå››ä»¶äº‹ï¼š
    1) mvn clean package æž„建后端 jar
    2) è§£åŽ‹ jar æ£€æŸ¥å†…ç½® application.yml:必须全是占位符(禁止 sk- å¯†é’¥ / æ˜Žæ–‡å£ä»¤ï¼‰ï¼Œä¸åˆæ ¼ç›´æŽ¥ä¸­æ­¢
    3) npm run build æž„建前端 dist(可 -SkipFrontend)
    4) ç»„装 deploy ç›®å½•结构(backend / frontend / db / README-部署说明.txt),输出到 <OutRoot>\traffic-audit-deploy-<yyyyMMdd>
#>
param(
  [string]$OutRoot = 'E:\试验',
  [switch]$SkipFrontend
)
$ErrorActionPreference = 'Stop'
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
$tplDir = Join-Path $root 'deploy-templates'                  # æ‰“包模板件(已入库,2026-09-27 èµ·ï¼‰
$jarRel = 'traffic-audit-server\target\traffic-audit-server-1.0.0-SNAPSHOT.jar'
$jar = Join-Path $root $jarRel
Write-Host '[1/5] æž„建后端(mvn clean package -DskipTests)...'
Push-Location $root
cmd /c "mvn.cmd -q clean package -DskipTests -f traffic-audit-server\pom.xml > pack-build.log 2>&1"
$rc = $LASTEXITCODE
Pop-Location
if ($rc -ne 0) { throw '后端构建失败,详见 pack-build.log' }
if (-not (Test-Path $jar)) { throw "未找到构建产物:$jar" }
Write-Host ("      äº§ç‰©ï¼š{0:N1} MB" -f ((Get-Item $jar).Length / 1MB))
Write-Host '[2/5] åŽ»å¯†è‡ªæ£€ï¼šè§£åŽ‹ jar æ£€æŸ¥ BOOT-INF/classes/application.yml ...'
Add-Type -AssemblyName System.IO.Compression.FileSystem
$zip = [System.IO.Compression.ZipFile]::OpenRead($jar)
try {
  $entry = $zip.Entries | Where-Object { $_.FullName -eq 'BOOT-INF/classes/application.yml' }
  if (-not $entry) { throw 'jar å†…缺少 BOOT-INF/classes/application.yml' }
  $sr = New-Object System.IO.StreamReader($entry.Open())
  $text = $sr.ReadToEnd()
  $sr.Close()
} finally { $zip.Dispose() }
$bad = @()
if ($text -match 'sk-[A-Za-z0-9]{16,}') { $bad += '疑似明文 API key(sk-…)' }
foreach ($line in ($text -split "`n")) {
  if ($line -match '^\s*(password|api-key|secret)\s*:\s*(.+)$') {
    $v = $matches[2].Trim().Trim('"')
    if ($v -and -not $v.StartsWith('${')) { $bad += ("$($matches[1]) ä¸æ˜¯å ä½ç¬¦") }
  }
}
if ($bad.Count -gt 0) {
  throw ('去密自检未通过:' + ($bad -join ';') + '。请检查 traffic-audit-server\src\main\resources\application.yml')
}
Write-Host '      é€šè¿‡ï¼šjar å†…置配置全部为占位符,无明文密钥/口令。'
Write-Host '[3/5] æž„建前端(npm run build,可 -SkipFrontend è·³è¿‡ï¼‰...'
if (-not $SkipFrontend) {
  Push-Location (Join-Path $root 'traffic-audit-web')
  cmd /c "npm.cmd run build > ..\pack-front.log 2>&1"
  $rc2 = $LASTEXITCODE
  Pop-Location
  if ($rc2 -ne 0) { throw '前端构建失败,详见 pack-front.log' }
  Write-Host '      å‰ç«¯ dist å·²é‡å»º'
}
Write-Host '[4/5] ç»„装部署目录...'
$stamp = Get-Date -Format 'yyyyMMdd'
$dest = Join-Path $OutRoot ("traffic-audit-deploy-" + $stamp)
$n = 2
while (Test-Path $dest) { $dest = Join-Path $OutRoot ("traffic-audit-deploy-" + $stamp + "-" + $n); $n++ }
New-Item -ItemType Directory -Force -Path (Join-Path $dest 'backend'), (Join-Path $dest 'frontend'), (Join-Path $dest 'db') | Out-Null
Copy-Item $jar (Join-Path $dest 'backend') -Force
Copy-Item (Join-Path $tplDir 'backend\application.yml') (Join-Path $dest 'backend') -Force
Copy-Item (Join-Path $tplDir 'backend\start-backend.cmd') (Join-Path $dest 'backend') -Force
Copy-Item (Join-Path $tplDir 'backend\start-backend.sh') (Join-Path $dest 'backend') -Force
Copy-Item (Join-Path $root 'traffic-audit-web\dist') (Join-Path $dest 'frontend') -Recurse -Force
Copy-Item (Join-Path $tplDir 'frontend\nginx.conf.example') (Join-Path $dest 'frontend') -Force
Copy-Item (Join-Path $tplDir 'db\*.sql') (Join-Path $dest 'db') -Force
# docs:运行时模板 + ç”¨æˆ·æ–‡æ¡£ï¼›æŽ’除开发过程文档与缓存/备份(减小体积、避免把内部清单带出去)
$docsDest = Join-Path $dest 'backend\docs'
New-Item -ItemType Directory -Force -Path $docsDest | Out-Null
cmd /c "robocopy `"$root\docs`" `"$docsDest`" /E /NFL /NDL /NJH /NJS /NP /XD _cache å·¥ä½œæ—¥ç»“ åŠŸèƒ½æµ‹è¯•æŠ¥å‘Š é—®é¢˜æ±‡æ€» /XF ç”Ÿæˆ_*.xlsx _bak_* >nul"
if ($LASTEXITCODE -ge 8) { throw "docs å¤åˆ¶å¤±è´¥ï¼ˆrobocopy è¿”回 $LASTEXITCODE)" }
# db è„šæœ¬ä¹Ÿæ”¾ä¸€ä»½åˆ° docs(与旧包一致:docs/init.sql ç­‰ï¼‰
Copy-Item (Join-Path $tplDir 'db\init.sql'), (Join-Path $tplDir 'db\sql_city_bus.sql'), (Join-Path $tplDir 'db\sql_city_taxi.sql'), (Join-Path $tplDir 'db\sql_wyc.sql') $docsDest -Force -ErrorAction SilentlyContinue
# README:用旧包模板并替换日期占位
$readme = Get-Content (Join-Path $tplDir 'README-部署说明.txt') -Raw -Encoding UTF8
$readme = $readme.Replace('{stamp}', $stamp)
Set-Content -LiteralPath (Join-Path $dest 'README-部署说明.txt') -Value $readme -Encoding UTF8
Write-Host '[5/5] æ±‡æ€»...'
$files = Get-ChildItem $dest -Recurse -File
Write-Host ("      è¾“出目录:{0}" -f $dest)
Write-Host ("      æ–‡ä»¶æ•°ï¼š{0} 合计:{1:N2} MB" -f $files.Count, (($files | Measure-Object Length -Sum).Sum / 1MB))
Write-Host '      æé†’:把包拷到部署机后,只需改 backend\application.yml é‡Œçš„æ•°æ®åº“三处 + éœ€è¦æ—¶å¡« deepseek.api-key。'
set-secrets.ps1
New file
@@ -0,0 +1,31 @@
<#
  è®¾ç½®/更新本机密钥环境变量(值不落文件)—— è½®æ¢ DeepSeek key åŽè·‘这个
  ç”¨æ³•:powershell -NoProfile -ExecutionPolicy Bypass -File set-secrets.ps1
        ï¼ˆå›žè½¦è·³è¿‡æŸä¸€é¡¹ï¼Œè¡¨ç¤ºä¸æ”¹ï¼‰
#>
$ErrorActionPreference = 'Stop'
function Read-Secret([string]$prompt) {
  $sec = Read-Host -Prompt $prompt -AsSecureString
  if ($null -eq $sec) { return '' }
  $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
  try { return [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr) }
  finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) }
}
foreach ($name in @('DEEPSEEK_API_KEY', 'TRAFFIC_DB_PASSWORD')) {
  $cur = [Environment]::GetEnvironmentVariable($name, 'User')
  $hint = if ($cur) { '(已设置,长度 ' + $cur.Length + ')' } else { '(当前未设置)' }
  $val = Read-Secret ("输入 " + $name + " " + $hint + ",直接回车跳过")
  if ([string]::IsNullOrWhiteSpace($val)) { Write-Host ("  è·³è¿‡ " + $name); continue }
  & setx.exe $name $val | Out-Null
  if ($LASTEXITCODE -eq 0) {
    [Environment]::SetEnvironmentVariable($name, $val, 'Process')
    Write-Host ("  å·²æ›´æ–° " + $name)
  } else {
    Write-Host ("  æ›´æ–°å¤±è´¥ï¼š" + $name)
  }
}
Write-Host ''
Write-Host '完成。生效方式:新开的终端自动带上;用 start-dev.ps1 å¯åŠ¨ä¹Ÿä¼šè‡ªåŠ¨ä»Žæ³¨å†Œè¡¨è½½å…¥ã€‚'
Write-Host '(若后端正在运行,请重启后端:停掉 8090 è¿›ç¨‹åŽé‡æ–°æ‰§è¡Œ start-dev.ps1)'