在前后端开发联调前 的提交20260223

This commit is contained in:
Neo
2026-02-23 23:02:20 +08:00
parent 254ccb1e77
commit fafc95e64c
1142 changed files with 10366960 additions and 36957 deletions

View File

@@ -0,0 +1,165 @@
- [P20260221-210605] 2026-02-21 21:06:05 +0800
- summary: CONTEXT TRANSFER: We are continuing a conversation that had gotten too long. Here is a summary: --- ## TASK 1: 前后端联调 — a…
- prompt:
```text
CONTEXT TRANSFER: We are continuing a conversation that had gotten too long. Here is a summary:
---
## TASK 1: 前后端联调 — admin-web 任务配置、提交、执行、验证
**STATUS**: in-progress
**USER QUERIES**: All queries in this conversation are continuations of the same task from previous context transfers.
**SHORT DESCRIPTION**: 前后端联调:通过 admin-web 浏览器配置 ETL 任务api_full, full_window, 2025-11-01~2026-02-20, 30天窗口切分, force-full, 31个任务提交执行修复发现的 BUG做回归测试和数据检验。
**DETAILS**:
### 执行历史
#### 第一次执行(已完成)
- execution_id: `dbf0c29a-253a-4705-a1ef-35cd71243d48`
- 结果: 10 成功, 31 失败, 耗时 590.7s
- 根因: `DWS_ASSISTANT_DAILY` SQL 字段引用错误 → 已修复 4 处改动
#### 第二次执行(已完成)
- execution_id: `e21e1935-5abf-434f-9984-69c492402db7`
- 结果: 耗时 150.4s, 31 个任务
- `DWS_ASSISTANT_DAILY` ✅, `DWS_ASSISTANT_MONTHLY` ❌ UniqueViolation, `DWS_ASSISTANT_CUSTOMER` ❌ UndefinedColumn site_id
#### 第三次执行(已完成)
- execution_id: `abc94b2d-615f-42ea-83cc-ce687524a6ea`
- 结果: 耗时 681.2s, 9 成功, 22 失败
- BUG 1/2/3 全部修复验证通过
- 新发现 BUG 4: `DWS_MEMBER_CONSUMPTION` 的 `dim_member.site_id` 不存在
#### 第四次执行(已完成)
- execution_id: `efd4f421-ee10-4244-833f-7b2d68c3c05b`
- 结果: 耗时 11m55s, 10 成功, 21 失败
- BUG 4 修复验证通过(`DWS_MEMBER_CONSUMPTION` ✅)
- 新发现 BUG 5: `DWS_MEMBER_VISIT` → `UndefinedColumn: birthday`
#### 第五次执行(已完成,报告已导出)
- execution_id: `fe87144a-687d-4ce0-9b79-6bd0186b2be3`
- 结果: 耗时 11m37s, 10 成功, 21 失败, exit_code=0
- BUG 5 修复已部署但被 BUG 6 遮蔽
- BUG 6: `DWS_MEMBER_VISIT` → `UndefinedColumn: site_table_id` 不存在(`_extract_table_info` 方法)
- 级联导致后续 20 个任务全部 InFailedSqlTransaction 失败
- 报告已导出: `export/SYSTEM/LOGS/2026-02-21__etl_run_result_v5.md`
#### 第六次执行(正在运行,轮询中 — 已超过 17 分钟)
- execution_id: `d9443781-e4ac-4df6-9f87-11c45d72e5ba`
- 修复了 BUG 5 + BUG 6 + BUG 7预防性修复
- 轮询进程 ID: 20`poll_v6.py`cwd: `scripts/ops/`
- 最后观察状态: `[17m0s] status=running`(仍在运行)
- 执行时间比之前几轮11-12分钟长很多说明更多 DWS 任务在正常执行(之前因级联失败很多任务秒失败不消耗时间)
- 轮询脚本最大等待 30 分钟90次 × 20秒完成后自动保存日志到 `export/SYSTEM/LOGS/2026-02-21__etl_run_raw_v6.json`
- 已确认修复代码正确(读取了 `member_visit_task.py` 和 `finance_income_task.py`
### 已修复的 BUG 汇总
**BUG 1** (第一次发现,第二次验证通过):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/assistant_daily_task.py`4 处改动
**BUG 2** (第二次发现,第三次验证通过):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/assistant_monthly_task.py`
- GROUP BY 去掉 nickname/level 维度字段,改用 `MAX()` 聚合
**BUG 3** (第二次发现,第三次验证通过):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/assistant_customer_task.py`
- `dim_member` 表 `WHERE site_id` → `WHERE register_site_id`
**BUG 4** (第三次发现,第四次验证通过):
- 根因: `dwd.dim_member` 和 `dwd.dim_member_card_account` 表没有 `site_id` 字段,只有 `register_site_id`
- 修复了 4 处:
1. `member_consumption_task.py` — `_extract_member_info`
2. `member_consumption_task.py` — `_extract_card_balances`
3. `member_visit_task.py` — `_extract_member_info`
4. `finance_recharge_task.py` — `_extract_card_balances`
**BUG 5** (第四次发现,第五次部署但被 BUG 6 遮蔽):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py`
- `_extract_member_info` SQL 移除 `birthday` 字段dim_member 无此字段)
- transform 中 `member_birthday` 改为 `None`
**BUG 6** (第五次发现,第六次已修复):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py`
- `_extract_table_info()` 方法中 `dwd.dim_table` 的字段引用错误
- `site_table_id AS table_id` → `table_id AS table_id`
- `site_table_name AS table_name` → `table_name AS table_name`
- `site_table_area_name` 保持不变DDL 中存在)
**BUG 7** (预防性修复,第六次已修复):
- 文件: `apps/etl/connectors/feiqiu/tasks/dws/finance_income_task.py`
- `_extract_income_by_area()` 方法中 JOIN 条件引用了 `dt.site_table_id`,但 `dim_table` 主键是 `table_id`
- 两处修复: `dt.site_table_id = tfl.site_table_id` → `dt.table_id = tfl.site_table_id`
- 同理: `dt.site_table_id = asl.site_table_id` → `dt.table_id = asl.site_table_id`
### 关键 DDL 发现
- `dwd.dim_table` 主键字段是 `table_id`(不是 `site_table_id`),还有 `table_name`、`site_table_area_name`
- `dwd.dwd_table_fee_log` 和 `dwd.dwd_assistant_service_log` 有 `site_table_id` 字段(事实表侧)
- `dwd.dim_member` 没有 `site_id`,只有 `register_site_id`;没有 `birthday` 字段
### 认证信息
- refresh_token7 天有效,到 2026-02-28: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwic2l0ZV9pZCI6Mjc5MDY4NTQxNTQ0MzI2OSwidHlwZSI6InJlZnJlc2giLCJleHAiOjE3NzIyNjM0NjN9.XYoda5lfxNtTSAGWoLlYhS9cA-hTK9iqK0SqUyn2KV4`
- 刷新 API: `POST http://localhost:8000/api/auth/refresh` body: `{"refresh_token": "..."}`
- 提交执行 API: `POST http://localhost:8000/api/execution/run`(注意不是 `/submit`
- token 文件: `scripts/ops/.monitor_token`
**NEXT STEPS**:
1. **检查轮询进程 20 的输出** — 第六次执行应该已经完成了(已超过 17 分钟),检查 `getProcessOutput(processId=20)` 获取最终结果(看是否有 🏁 完成标记)
2. **如果轮询已完成** — 日志自动保存到 `export/SYSTEM/LOGS/2026-02-21__etl_run_raw_v6.json`,需要分析结果
3. **如果轮询进程已停止** — 检查 `listProcesses()` 确认进程状态,可能需要手动查询 API 获取结果
4. **导出 v6 结果报告** — 创建 `scripts/ops/export_v6_report.py` 导出到 `export/SYSTEM/LOGS/2026-02-21__etl_run_result_v6.md`(参考 `export_v5_report.py` 格式)
5. **如果仍有失败** — 继续修复新发现的 BUG
6. **如果全部成功** — 导出最终 BUG 修复汇总报告
7. **运行 /audit** — 多个 `tasks/` 文件的修改命中高风险路径,需要审计
**FILEPATHS**:
- `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py` — BUG 5+6 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/finance_income_task.py` — BUG 7 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/assistant_daily_task.py` — BUG 1 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/assistant_monthly_task.py` — BUG 2 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/assistant_customer_task.py` — BUG 3 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/member_consumption_task.py` — BUG 4 已修复
- `apps/etl/connectors/feiqiu/tasks/dws/finance_recharge_task.py` — BUG 4 已修复
- `db/etl_feiqiu/schemas/dwd.sql` — DDL 参考
- `db/etl_feiqiu/schemas/dws.sql` — DWS 表 DDL 参考
- `scripts/ops/resubmit_v6.py` — 第六次提交脚本
- `scripts/ops/poll_v6.py` — 第六次轮询脚本(进程 ID 20
- `scripts/ops/export_v5_report.py` — v5 报告导出脚本(可作为 v6 模板)
- `export/SYSTEM/LOGS/2026-02-21__etl_run_result_v5.md` — v5 结果报告
**USER CORRECTIONS AND INSTRUCTIONS**:
- 所有说明性文字使用简体中文
- 输出路径必须通过 `_env_paths.get_output_path()` 从 `.env` 读取,禁止硬编码
- `scripts/ops/` 下的脚本必须 `load_dotenv` 加载根 `.env`
- 提交执行 API 路径是 `/api/execution/run`(不是 `/submit`
- 提交 payload 格式参考 `resubmit_v6.py`(包含 tasks 列表、flow、processing_mode 等字段)
- 改动命中 `tasks/` 高风险路径,完成后需要运行 `/audit`
- 后端服务运行在 `localhost:8000`admin-web 通过 pnpm dev 运行
Files to read:
- `scripts/ops/poll_v6.py` — 轮询脚本,确认进程 20 状态和 execution_id
- `scripts/ops/export_v5_report.py` — v5 报告导出脚本(作为 v6 报告模板)
- `scripts/ops/resubmit_v6.py` — 提交脚本模板(正确的 API payload 格式)
- `export/SYSTEM/LOGS/2026-02-21__etl_run_raw_v6.json` — 第六次执行原始日志(如果轮询已完成保存)
USER QUERIES(most recent first):
1. Output:
Command executed successfully with no output.
Exit Code: 0
2. Output:
Command executed successfully with no output.
Exit Code: 0
---
METADATA:
The previous conversation had 2 messages.
INSTRUCTIONS:
Continue working until the user query has been fully addressed. Do not ask for clarification - proceed with the work based on the context provided.
IMPORTANT: you need to read from the files to Read section
```