11 KiB
11 KiB
- [P20260219-084845] 2026-02-19 08:48:45 +0800
- summary: CONTEXT TRANSFER: We are continuing a conversation that had gotten too long. Here is a summary: --- ## TASK 1: Admin-web…
- prompt:
CONTEXT TRANSFER: We are continuing a conversation that had gotten too long. Here is a summary:
---
## TASK 1: Admin-web 同步检查与 Bug 修复(ETL 重构后)
- **STATUS**: done
- **USER QUERIES**: 1 (from earlier context transfer)
- **DETAILS**: 在大量 ETL 重构后,全面检查并修复了 admin-web 前端与后端的同步问题。共 12 处修复,构建验证通过。
- **FILEPATHS**: `apps/backend/app/config.py`, `apps/backend/app/services/cli_builder.py`, `apps/backend/app/schemas/tasks.py`, `apps/admin-web/src/api/tasks.ts`, `apps/admin-web/src/pages/LogViewer.tsx`, `apps/admin-web/src/pages/TaskConfig.tsx`, `apps/admin-web/src/types/index.ts`, `apps/admin-web/src/components/ScheduleTab.tsx`, `apps/admin-web/src/store/authStore.ts`, `apps/admin-web/vite.config.ts`
---
## TASK 2: ETL 执行深度分析 + Bug 修复
- **STATUS**: done
- **USER QUERIES**: 2-6 (from earlier context transfer)
- **DETAILS**: 用户从 admin-web 执行 api_full 任务,16.8 秒就"完成",用户质疑。深度分析发现 5 个关键问题并全部修复。
- **FILEPATHS**: `apps/etl/connectors/feiqiu/tasks/ods/ods_json_archive_task.py`, `apps/etl/connectors/feiqiu/tasks/verification/base_verifier.py`, `apps/admin-web/src/pages/LogViewer.tsx`, `scripts/ops/fix_admin_site_id.py`
---
## TASK 3: Admin-web 全面 UI 优化
- **STATUS**: in-progress
- **USER QUERIES**: 7-12 (across context transfers), plus current conversation queries
- **DETAILS**: 用户要求全面优化 admin-web 所有页面。大部分页面已完成优化。当前正在进行 TaskSelector 的重大重构。
### 已完成的子任务:
1. **skip-quality 移除** — 从 `TaskConfig.tsx` 移除了 `skipQuality` state、Checkbox UI、useEffect 依赖
2. **is_common 字段全链路** — 后端 `TaskDefinition` dataclass 添加 `is_common: bool = True`,`TaskItem` 响应模型、API 序列化、前端类型、TaskSelector 排序+标签显示全部打通
3. **后端任务注册表同步** — `DWS_RETENTION_CLEANUP` / `DWS_MV_REFRESH_FINANCE_DAILY` / `DWS_MV_REFRESH_ASSISTANT_DAILY` 已替换为 `DWS_MAINTENANCE`;不常用任务标记为 `is_common=False`(DWD_QUALITY_CHECK, DWS_ML_MANUAL_IMPORT, DWS_MAINTENANCE, 全部 UTILITY 任务)
4. **fetch_before_verify 范围修正** — 前端限制为仅 `verify_only` 模式显示
5. **ods_use_local_json CLI 映射** — `cli_builder.py` 添加 `--data-source offline` 生成逻辑
6. **DWD 表选择移入 TaskSelector** — 从独立 DwdTableSelector Card 移入 TaskSelector 内部,作为 DWD_LOAD_FROM_ODS 的子选项
7. **dwd_only_tables 生效** — `task_executor._run_subprocess` 新增 `extra_env` 参数,注入 `DWD_ONLY_TABLES` 环境变量
8. **后端 sync-check 端点** — 新增 `GET /api/tasks/sync-check`,通过子进程调用 ETL 获取真实任务列表并对比差异
9. **前端 API 层更新** — `tasks.ts` 已重写,新增 `fetchFlows()`, `checkTaskSync()`, `fetchDwdTablesRich()`, 以及类型定义 `FlowDef`, `ProcessingModeDef`, `SyncCheckResult`, `DwdTableItem`
### 当前正在进行的重构(被截断):
用户要求 4 项重大改造:
**A. TaskSelector 按业务域全链路展示(最重要,核心改造)**
- 当前问题:DWD 层只有 `DWD_LOAD_FROM_ODS` 一个通用任务,导致业务域下 ODS → DWD 断层
- 目标交互:每个业务域(如"助教")下展示完整链路:ODS 任务 → DWD 表(该域的) → DWS/INDEX 任务
- DWD 表作为该域的"中间环节"自然嵌入,选中 DWD 表 = 过滤 DWD_LOAD_FROM_ODS 的装载范围
- 后端数据已就绪:`TaskDefinition` 有 `domain` 和 `layer` 字段,`DwdTableDefinition` 也有 `domain` 字段,两者的 domain 值一致(助教、结算、台桌、会员、商品、团购、库存、财务、指数、工具、通用)
- **尚未实现**——`TaskSelector.tsx` 需要完全重写
**B. 同步检查 UI**
- 后端端点已完成(`/api/tasks/sync-check`)
- 前端 API 调用已完成(`checkTaskSync()`)
- **尚未实现**——需要在任务选择 Card 的 title 旁边加同步状态指示器,有差异时显示警告 Badge,点击打开 Modal/新页面展示差异详情
**C. 任务选择按钮优化**
- **尚未实现**——需要在"全选"前加"全选常用"按钮(只选 `is_common=true` 的任务),"反选"后加"清空"按钮
**D. Flow 定义从 API 动态加载**
- 后端端点已存在(`GET /api/tasks/flows`)
- 前端 API 调用已完成(`fetchFlows()`)
- **尚未实现**——`TaskConfig.tsx` 中的 `FLOW_DEFINITIONS` 和 `PROCESSING_MODES` 需要改为从 API 加载,本地定义作 fallback
- **NEXT STEPS**:
* 重写 `apps/admin-web/src/components/TaskSelector.tsx`:按业务域全链路展示(ODS 任务 → DWD 表 → DWS/INDEX 任务),每个域一个 Collapse 面板,内部按层分组显示
* 在 TaskSelector 中集成同步检查:title 旁加 Badge,点击展示差异 Modal
* 在 TaskSelector 中添加"全选常用"和"清空"按钮
* 修改 `apps/admin-web/src/pages/TaskConfig.tsx`:将 `FLOW_DEFINITIONS` 和 `PROCESSING_MODES` 改为从 `fetchFlows()` API 动态加载,本地定义作 fallback;确保 TaskSelector 的 props 传递正确
* 构建验证:`pnpm run build`(cwd: `apps/admin-web`)
- **FILEPATHS**:
- `apps/admin-web/src/components/TaskSelector.tsx`
- `apps/admin-web/src/pages/TaskConfig.tsx`
- `apps/admin-web/src/api/tasks.ts`(已完成更新)
- `apps/admin-web/src/types/index.ts`
- `apps/backend/app/routers/tasks.py`(已完成 sync-check 端点)
- `apps/backend/app/services/task_registry.py`(已完成 is_common + DWS_MAINTENANCE)
- `apps/backend/app/services/cli_builder.py`(已完成 ods_use_local_json 映射)
- `apps/backend/app/services/task_executor.py`(已完成 extra_env 注入)
---
## USER CORRECTIONS AND INSTRUCTIONS:
- 所有说明性文字使用简体中文
- 后端用 `uv run` 启动(不是直接 `python`)
- 前端用 `pnpm` 管理
- 后端进程运行在端口 8000(`uv run uvicorn app.main:app --reload --port 8000`,cwd: `apps/backend`)
- 前端进程运行在端口 5174(`pnpm run dev`,cwd: `apps/admin-web`)
- ETL 项目实际路径是 `apps/etl/connectors/feiqiu/`
- 脚本执行规范:优先编写 Python 脚本再执行,避免 PowerShell 复杂逻辑
- `skip-quality` 参数在 ETL CLI 中不存在,已从前端移除
- 连接器和 Store ID 的交互是 TreeSelect 树形多选(已实现)
- pnpm build 需要 `Set-Location apps\admin-web; pnpm run build 2>&1`(cwd 参数在此环境中不可靠)
- 已有测试 bug:`test_cli_args.py::TestBuildCliOverrides::test_data_source_online_sets_run_key` 失败(`force_full` 属性缺失),非本次修改引起
- `--overlap-seconds` 默认值不一致(CLI 3600 vs 前端 600)是有意的,保持现状
- DWS/INDEX 层校验被跳过是设计如此(verifier 未实现),业务任务正常执行
- 业务域全链路交互:每个域(如助教)应包含 ODS → DWD 表 → DWS/INDEX 的完整路径,DWD 表作为中间环节嵌入
---
## Files to read
- `apps/admin-web/src/components/TaskSelector.tsx`
- `apps/admin-web/src/pages/TaskConfig.tsx`
- `apps/admin-web/src/api/tasks.ts`
- `apps/admin-web/src/types/index.ts`
- `apps/backend/app/services/task_registry.py`
- `apps/backend/app/routers/tasks.py`
USER QUERIES(most recent first):
1. - 加一个自动化检查脚本(比如 CI 中对比两边的任务列表),避免手动同步遗漏。这个好,加入这个功能,放在 任务选择 title 旁边,若有差异则提醒。点击后打开新页面展示差异。- 任务选择 全选之前加入按钮:全选常用任务。反选后面加入按钮 清空。- 把前端的 FLOW_DEFINITIONS 改为从 API 动态加载,本地定义仅作 fallback。- 现在的交互还是不对:如果按照现在的方案,以业务场景分类,则每一层都应包含 ODS - DWD - DWS(index)全路径。比如助教类,就会有从ODS一直到DWS和index的全部相关任务。所以,DWD方面还要优化,这样的交互应该是合理的吧?
2. Output:
Command executed successfully with no output.
Exit Code: 0
3. Output:
Command executed successfully with no output.
Exit Code: 0
4. - 加一个自动化检查脚本(比如 CI 中对比两边的任务列表),避免手动同步遗漏。这个好,加入这个功能,放在 任务选择 title 旁边,若有差异则提醒。点击后打开新页面展示差异。- 任务选择 全选之前加入按钮:全选常用任务。反选后面加入按钮 清空。- 把前端的 FLOW_DEFINITIONS 改为从 API 动态加载,本地定义仅作 fallback。- 现在的交互还是不对:如果按照现在的方案,以业务场景分类,则每一层都应包含 ODS - DWD - DWS(index)全路径。比如助教类,就会有从ODS一直到DWS和index的全部相关任务。所以,DWD方面还要优化,这样的交互应该是合理的吧?
5. Output:
Hook execution failed with exit code 1.
Error output:
[AUDIT REMINDER] Pending audit detected (root-file, dir:admin-web, dir:backend, dir:etl, dir:miniprogram, dir:db, db-schema-change). Run /audit (Manual: Run /audit hook) to sync docs & write audit artifacts. (rate limit: 15min)
Exit Code: 1
6. Output:
Command executed successfully with no output.
Exit Code: 0
7. Output:
Command executed successfully with no output.
Exit Code: 0
8. 把"DWD 表选择"从独立的 DwdTableSelector 改为 DWD 任务卡片内的"表过滤"子选项,并且真正让它生效。这个方案OK。并在修改后,再思考下,页面如何优化布局。其他的这些问题,分别给出你的参考意见。
9. Output:
Hook execution failed with exit code 1.
Error output:
[AUDIT REMINDER] Pending audit detected (root-file, dir:admin-web, dir:backend, dir:etl, dir:miniprogram, dir:db, db-schema-change). Run /audit (Manual: Run /audit hook) to sync docs & write audit artifacts. (rate limit: 15min)
Exit Code: 1
10. Output:
Command executed successfully with no output.
Exit Code: 0
11. Output:
Command executed successfully with no output.
Exit Code: 0
12. 任务选择 和 DWD 表选择 从功能的表达上看,是不是有点问题?如果有DWD表选择,也应该有ODS表选择。但表选择和DWD的任务是不是又有些冲突?另外,之前调试是否忽略了一些问题,回忆一下?
13. Output:
Command executed successfully with no output.
Exit Code: 0
14. Output:
Command executed successfully with no output.
Exit Code: 0
15. Output:
Command executed successfully with no output.
Exit Code: 0
16. 还有哪些内容不存在(任务、参数、配置)?都帮我检查下。
17. Output:
Command executed successfully with no output.
Exit Code: 0
18. Output:
Command executed successfully with no output.
Exit Code: 0
---
METADATA:
The previous conversation had 10 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