From 6ce988a3daa02db8b76eb0483ef8e9a0a3690caf Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 3 Oct 2026 10:44:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E5=8D=B3=E8=B7=91=E8=BF=81=E7=A7=BB=E3=80=81=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E5=8F=A3=E5=BE=84=E4=B8=8E=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E7=94=A8=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ docs/自动化与资料收集规划.md | 17 +++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 73d12a8..7d7d02c 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,11 @@ python3 -c 'import secrets; print(secrets.token_urlsafe(32))' 进程重启会把内存里丢失的 pending/running 任务标成中断,避免前端被假活跃批次锁死。 +登录任务列表支持分页(20/50/100/200/500)与状态筛选;表格支持跨页勾选、表头的 +「选择全部 N 条(含其他页)」用于按筛选条件批量操作,以及「清空失败」一键清理。 +批量删除**会跳过 pending/running**:要停止在跑的批次请用「停止」,不要删除 +(删掉会让批次线程找不到记录)。 + ## 运行测试 ```bash diff --git a/docs/自动化与资料收集规划.md b/docs/自动化与资料收集规划.md index 684443b..e1f8bc8 100644 --- a/docs/自动化与资料收集规划.md +++ b/docs/自动化与资料收集规划.md @@ -1105,9 +1105,10 @@ pending_material(待用户补资料) ← 模板有必填字段时的 - **P1a 已上线**(2026-10-02),只做「帮你把失效 CK 找出来」,零风险; - **P1b 已上线**(2026-10-02):20 个失效账号实测 20/20 重登成功、零极验;当前 30 条/轮、约 97% 成功率,待重登积压约 3.6k 正在消化; -- **P0 已过半**(2026-10-02):适配层 + 迁移 0039 已完成并真机验证(三桶判定全对、3.3ms、540 个重复订单号正确拦下), - **但只有底层适配层:无接口、无页面,且生产开关仍是 `false`、迁移未在生产跑**。 - 接口与页面按 §6.4 的调用点(用户填订单号时)随 P2 一起上; +- **P0 已过半**(2026-10-02):适配层 + 迁移 0039 已完成并真机验证(三桶判定全对、3.3ms、540 个重复订单号正确拦下)。 + `psycopg` 与迁移 0039 已随 2026-10-03 的部署上线(`external_order_cache` 表已在生产建好)。 + **仍缺接口与页面**,且 `ORDER_SITE_LOOKUP_ENABLED=false` —— 运营还查不了订单; + 接口/页面按 §6.4 的调用点(用户填订单号时)随 P2 一起上; - **P1b 提到 P1a 之后**:原计划等一到两周观察期,但线上数据已把三个前提验证完了 —— 检测结果与人工/直连逐条一致、误判路径已封(三类判定 + 自动暂停)、失效性质查清(会话过期而非凭证问题)。不联动的话,巡检每天翻出失效清单却没人兑现修复,1,356 个账号只会越积越多; - **P0 随时可做**:只动本系统,order_site 侧代码改动量为 0; - **P1b 开关仍默认关闭**,按 §7.4.7 三段上线:小规模实测 → 限量开 → 全量; @@ -1355,6 +1356,9 @@ OSS_PREFIX=collect `_as_utc()`(`services/yyb_service.py` 与 `services/automation/scheduler.py` 各有一份)补时区。 SQL 里用绑定参数比较不受影响,只有 Python 侧比较需要注意 —— P0 判缓存过期时会再遇到; - **每个阶段独立可发布**,新作业/新功能一律**开关默认关闭**; +- **迁移是应用启动时自动跑的**(`database.init_db()` → `run_migrations()` → `alembic upgrade head`)。 + 所以「部署」就等于「跑迁移」,**不要**再手动执行一遍;同时也意味着**迁移写坏了会挡住整个应用启动**, + 必须保持幂等(先 `sa.inspect` 查存在再改)。想先看效果可在本地 dev 库跑; - **⚠️ 动手前先核实外部库的真实表结构,别信文档和早期分析**(P0 踩过一次,差点白干): 规划 §6.2 写的 `orders.order_no`(PK) 在真实库里**根本不存在**,实际是 `platform_order_id`(且**非唯一**,541 组重复)。同一订单号下还有「发货方内部行 + @@ -1380,10 +1384,11 @@ OSS_PREFIX=collect | uvicorn worker 数 | **`--workers 1`**(单容器单进程) | 进程内调度线程安全,**不需要分布式锁**;调度器在 lifespan 里启停 | | 生产路径 | `/root/live-hub-py`,容器 `live-hub-py-douyu-login-1` | 部署 = `git pull` + `./deploy.sh` | | 鉴权 | **无全局中间件**,逐路由 `Depends(get_current_user)` | 公开路由只要不挂依赖;新路由要在 `main.py` 注册 | -| PG 驱动 | `psycopg[binary]` 已加入 `pyproject.toml` + `uv.lock`(2026-10-02);**生产镜像尚未重建** | 部署 P0 时会随镜像重建装上;临时验证已在容器里手工装过 | +| PG 驱动 | `psycopg[binary]` 已进 `pyproject.toml` + `uv.lock`,**已随镜像上线**(2026-10-03,容器实测 3.3.6) | 部署时随镜像装上 | | 只读 PG | `livehub_ro` @ `order_site-postgres-1:5432`,`.env` 已配(容器内 3 个 `ORDER_SITE_*` 均可见) | 适配层直接用 `ORDER_SITE_DATABASE_URL`;**`LOOKUP_ENABLED` 仍是 `false`** | | OSS | 桶 `live-hub-assets`(私有+版本控制)、RAM `live-hub-oss`、`.env` 已配 | P2 用 `oss2`;**不要用 HeadBucket** | -| 迁移 head / 测试基线 | `20261002_0039` / 328 条(2026-10-02) | 见 C.1;生产库**尚未**跑 0039 | +| 迁移 head / 测试基线 | `20261002_0039` / 338 条(2026-10-03) | 见 C.1;**应用启动会自动跑迁移**,0039 已在生产应用 | +| 时区 | 库/`NOW()` 都是 UTC(`--default-time-zone=+00:00`),接口返回 `+00:00`,前端转北京时间 | **别把 `SELECT NOW()` 当真实时间**,详见 README「时区口径」 | ### C.4 P1a 施工单(✅ 已按此完成,8 步) @@ -1425,7 +1430,7 @@ OSS_PREFIX=collect **⚠️ 上线前还需做(P0 未完的部分)** 1. `ORDER_SITE_LOOKUP_ENABLED` 仍为 `false`(默认关闭)—— 要正式启用需改生产 `.env` 并重启; -2. 生产库还没跑迁移 0039,`external_order_cache` 表不存在(缓存写入会 warning 降级,不影响主流程); +2. ~~生产库还没跑迁移 0039~~ ✅ **已于 2026-10-03 部署时自动应用**(`external_order_cache` 表已存在,psycopg 3.3.6 随镜像装上); 3. **P0 目前只有适配层,没有接口和页面** —— 运营还查不了。按 §12 排期,接口/页面可随 P2 收集链接一起上(用户填订单号时调用)。 ### C.5 其余阶段的施工顺序(粗粒度)