# 变更审计记录:全栈累积变更(营业日配置、WebSocket 日志、微信认证、仓库清理) | 字段 | 值 | |------|-----| | 日期 | 2026-03-05 00:04:01 | | Prompt-ID | P20260304-232912 | | Session-ID | 0b65aa43 | | Session 路径 | docs/audit/session_logs/2026-03/04/52_0b65aa43_232320 | | 风险标签 | `root-file` `dir:admin-web` `dir:backend` `dir:etl` `dir:miniprogram` `dir:db` `db-schema-change` `dir:shared` | | 变更规模 | 273 文件,+10,505 / -219,431 行 | ## 操作摘要 本次审计覆盖多轮对话的累积变更,核心工作包括: 1. **管理后台(admin-web)**:新增营业日配置全局状态(Zustand store + API + BusinessDayHint 提示组件);TaskManager 历史标签页增加 WebSocket 实时日志推送和任务终止按钮 2. **后端(backend)**:配置化 ETL Python 路径、运维面板根目录、微信小程序凭证、营业日分割点;新增/重构 xcx_auth 认证路由和 schemas 3. **ETL(feiqiu)**:config 模块新增 BUSINESS_DAY_START_HOUR 支持;consistency_checker 大幅重构;flow_runner 调整 4. **共享包(shared)**:新增 `datetime_utils` 模块(营业日计算工具) 5. **数据库(db)**:FDW 反向映射更新;DDL 基线同步更新(dwd/dws/ods/auth/public 多 schema) 6. **仓库清理**:删除 `tmp/api_samples/`(~200K 行)、废弃 `field_mappings_new/`、旧运维脚本、旧 `.kiro/` hooks 和 specs ## 本次对话文件变更 ### 新增文件 - `docs/audit/prompt_logs/prompt_log_20260304_232912.md` — Prompt 审计日志 - `docs/audit/session_logs/2026-03/04/52_0b65aa43_232320/main_01_389bf343.md` — Session 日志(主) - `docs/audit/session_logs/2026-03/04/52_0b65aa43_232320/sub_01_389bf343.md` — Session 日志(子代理) - `docs/audit/session_logs/2026-03/04/53_34248647_232911/main_01_a6834276.md` — Session 日志 ### 修改文件 - `docs/DOCUMENTATION-MAP.md` — 文档地图更新 - `docs/audit/README.md` — 审计说明更新 - `docs/audit/SESSION-LOG-GUIDE.md` — Session 日志指南更新 - `docs/audit/session_logs/_session_index.json` — 会话索引更新 - 多个 `_day_index.json` / `_day_index_full.json` — 日索引批量更新 ## 改动注解 ### `apps/admin-web/src/App.tsx` - 变更类型:修改 - 原始原因:管理后台启动时需加载营业日配置,供全局日期组件使用 - 思路分析:在 App 组件 useEffect 中调用 `useBusinessDayStore.init()`,与 hydrate 同步执行。降级策略封装在 store 内部,App 层无需处理异常 - 修改结果:应用启动时自动请求 `/api/config/business-day`,失败时降级为默认值 8 ### `apps/admin-web/src/api/businessDay.ts` - 变更类型:新增 - 原始原因:前端需要从后端获取营业日分割点配置 - 思路分析:封装单一 GET 请求,返回 `BusinessDayConfig` 接口(含 `business_day_start_hour` 字段),复用 `apiClient` 实例 - 修改结果:提供 `fetchBusinessDayConfig()` API 函数 ### `apps/admin-web/src/components/BusinessDayHint.tsx` - 变更类型:新增 - 原始原因:用户在日期选择器旁需要了解当前营业日口径(分割点时间) - 思路分析:使用 Tooltip + Typography.Text 组合,从 businessDayStore 读取 startHour,格式化为 `HH:00` 显示 - 修改结果:在 TaskConfig 日期选择区域下方显示「营业日:08:00 起」提示 ### `apps/admin-web/src/pages/TaskConfig.tsx` - 变更类型:修改 - 原始原因:日期范围选择区域需要展示营业日口径提示 - 思路分析:在日期选择 Row 下方插入 BusinessDayHint 组件,用 Fragment 包裹避免多余 DOM 节点 - 修改结果:日期选择器下方显示营业日分割点提示 ### `apps/admin-web/src/pages/TaskManager.tsx` - 变更类型:修改 - 原始原因:历史任务查看需要实时日志推送(running 状态)和任务终止能力 - 思路分析:为 HistoryTab 新增 WebSocket 连接管理(`historyWsRef`),running 任务点击时建立 `ws://host/ws/logs/{id}` 连接实时推送日志,已完成任务仍走 REST API。新增终止按钮(Popconfirm 确认)调用 `cancelExecution`。Drawer 标题显示连接状态标签。WebSocket 失败时自动回退到 REST API - 修改结果:HistoryTab 支持实时日志流、连接状态指示、任务终止操作 ### `apps/admin-web/src/store/businessDayStore.ts` - 变更类型:新增 - 原始原因:营业日分割点配置需要全局共享,多个页面组件依赖 - 思路分析:Zustand store,启动时请求一次后端配置,API 不可用时降级为默认值 8 并 console.warn。`loaded` 标志防止重复请求 - 修改结果:提供 `useBusinessDayStore`,含 `startHour`、`loaded`、`init()` 三个成员 ### `apps/backend/app/config.py` - 变更类型:修改 - 原始原因:多个硬编码配置需要环境变量化(ETL Python 路径、运维面板根目录、微信凭证、营业日分割点) - 思路分析:统一使用 `os.environ.get()` 读取,提供合理默认值。`WX_DEV_MODE` 支持 true/1/yes 三种写法。`BUSINESS_DAY_START_HOUR` 转 int - 修改结果:新增 `ETL_PYTHON_EXECUTABLE`、`OPS_SERVER_BASE`、`WX_APPID`、`WX_SECRET`、`WX_DEV_MODE`、`BUSINESS_DAY_START_HOUR` 六个配置项 ### `apps/backend/app/main.py` - 变更类型:修改 - 原始原因:新增路由模块需要注册到 FastAPI 应用 - 思路分析:按模块分组 import 并 include_router,保持路由注册的清晰分层 - 修改结果:注册 business_day、xcx_auth 等新路由 ### `apps/backend/app/routers/xcx_auth.py` - 变更类型:修改(大幅重构,+352/-352) - 原始原因:微信小程序认证流程需要完善,支持 code2Session、token 签发、用户注册等完整链路 - 思路分析:重构为完整的微信认证路由,包含 login、register、refresh 等端点 - 修改结果:完整的微信小程序认证 API ### `apps/backend/app/schemas/xcx_auth.py` - 变更类型:新增 - 原始原因:xcx_auth 路由需要请求/响应 Schema 定义 - 思路分析:Pydantic v2 模型,定义 login request/response、register request、token refresh 等数据结构 - 修改结果:提供微信认证相关的全部 Schema ### `apps/etl/connectors/feiqiu/config/settings.py` - 变更类型:修改 - 原始原因:ETL 配置需要支持营业日分割点参数 - 思路分析:在 AppConfig 中新增 BUSINESS_DAY_START_HOUR 字段,从环境变量读取 - 修改结果:ETL 配置类支持营业日分割点 ### `apps/etl/connectors/feiqiu/orchestration/flow_runner.py` - 变更类型:修改 - 原始原因:流程编排器需要适配新的配置和执行逻辑 - 思路分析:调整 flow_runner 的参数传递和执行流程 - 修改结果:flow_runner 适配新配置 ### `apps/etl/connectors/feiqiu/quality/consistency_checker.py` - 变更类型:修改(+136/-136,大幅重构) - 原始原因:一致性检查器需要更精确的比对逻辑和更清晰的报告输出 - 思路分析:重构检查逻辑,改进 API↔ODS、ODS↔DWD 的字段比对算法 - 修改结果:一致性检查器输出更准确、报告更结构化 ### `packages/shared/src/neozqyy_shared/datetime_utils.py` - 变更类型:新增 - 原始原因:营业日计算逻辑需要跨模块共享(ETL 和后端都需要) - 思路分析:放入 shared 包,提供营业日边界计算、日期转换等工具函数 - 修改结果:新增 92 行的 datetime_utils 模块,供 ETL 和后端共同使用 ### `db/fdw/setup_fdw_reverse.sql` / `db/fdw/setup_fdw_reverse_test.sql` - 变更类型:修改 - 原始原因:FDW 反向映射需要同步最新的表结构变更 - 思路分析:更新 IMPORT FOREIGN SCHEMA 和 CREATE FOREIGN TABLE 语句 - 修改结果:FDW 映射与当前数据库结构一致 ### 非高风险文件简要注解 - `.env` / `.env.template` / `.gitignore`:新增微信凭证、营业日配置、ETL Python 路径等环境变量 - `apps/admin-web/README.md` / `apps/backend/README.md` / `apps/miniprogram/README.md` / `packages/shared/README.md`:文档同步更新 - `apps/backend/docs/API-REFERENCE.md`:接口文档更新 - `apps/etl/connectors/feiqiu/docs/etl_tasks/*.md`:ETL 任务文档更新 - `docs/database/ddl/*.sql`:DDL 基线同步 - `docs/contracts/openapi/backend-api.json`:OpenAPI spec 更新(+5096 行) - `docs/DOCUMENTATION-MAP.md`:文档地图更新 - 大量 `tmp/api_samples/` 和 `field_mappings_new/` 文件删除:仓库清理 ## 合规检查 | 检查项 | 状态 | 说明 | |--------|------|------| | 文档同步 | ✅ 已同步 | `code_without_docs` 为空,各模块 README 已更新 | | 新增迁移 SQL | ⚪ 不涉及 | `new_migration_sql` 为空 | | DDL 基线 | ⚠️ 待确认 | `has_ddl_baseline: false`,DDL 基线文件已有变更但标记未更新 | | OpenAPI Spec | ✅ 已同步 | `api_changed: false`,`openapi_spec_stale: false` | | BD 手册 | ⚠️ 待补充 | `has_bd_manual: false`,reasons 含 `db-schema-change` 但 BD 手册未同步 | ## 回滚方案 - 营业日功能:删除 businessDayStore、BusinessDayHint、businessDay API,移除 config.py 中 BUSINESS_DAY_START_HOUR,移除 shared/datetime_utils.py - WebSocket 日志:回退 TaskManager.tsx 到 REST-only 版本 - 微信认证:回退 xcx_auth.py 和对应 schemas - 仓库清理:已删除文件为历史样本数据和废弃脚本,无需回滚