
QiuSWandClaude Opus 5
7c43dc6029
feat(server): 放开未开始采集任务的取消 (#297)
批量建单后无法中途叫停:删除只放行 failed,pending 一条都撤不掉,只能等设备
逐个跑完。图搜成功率并不高,批量越大越需要叫停。
新增 cancelled 终态,与 PurchaseTaskStatusCancelled 的既有约定对齐。
- pending → cancelled;running 拒绝取消。running 正在设备上操作 PDD,中途打断
后页面停在哪一步不可控,会影响下一个任务归位(#292 已为此付过代价)。语义是
「停止后续,当前这个跑完」。
- 取消与 Claim 的互斥点是同一条件更新。关键:Claim 领取时并不改 status,只写
device_id 和租约,因此条件里必须带 lease_expires_at,否则会把刚被领走的任务
误取消。
- 批量逐条更新、不包在一个事务里:一条因并发领取而跳过,不应回滚已成功取消的
其它任务。超出单批上限时以 HasMore 如实上报,不静默截断。
- status 的 CHECK 约束只认旧五值,GORM 在 MySQL 上不改写既有 CHECK,按同文件
ensureMySQLDirectSelectConstraint 的手法补幂等 DROP/ADD。cancelled 并入
syncGuardSlots 终态分支以满足 active_slot / device_run_slot 两个约束。
实施:sonnet 子代理,改动经独立复核与重跑验证。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
2026-09-16 16:28:07 +08:00
..
2026-09-11 16:20:26 +08:00
2026-09-16 16:28:07 +08:00
2026-09-02 23:12:48 +08:00
2026-08-15 14:24:45 +08:00