You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

19 lines
1.4 KiB

4 weeks ago
---
status: accepted
---
# 线索定时任务:失效 Job 先于回收 Job 执行
crm-lead 有两个每日定时任务(统一每日 02:00 全库扫):失效 Job(M 到期 → 过期失效)和回收 Job(N 到期无跟进 → 退回待领取)。一条「已领取/跟进中」线索可能同时命中两个 deadline,二者副作用相反(失效保留 owner、可激活恢复;回收清空 owner、不可逆)。我们**固定失效 Job 先跑、回收 Job 后跑**:失效把状态改成「过期失效」后,回收 Job 的 `WHERE status IN ('已领取','跟进中')` 天然扫不到它,两者不再竞争。
## Considered Options
- **回收先跑**:到期没跟进就先退公海,哪怕它同时也该失效——被否,因为回收会不可逆地丢掉 owner,管理员再激活也找不回原持有人。
- **失效先跑(选中)**:失效是更强的终止语义,「谁持有」这个历史应被冻结保留;失效可被管理员激活连 owner 一起恢复,给了一条找回原持有人的后路。
## Consequences
- 同一条线索两个 deadline 同时过期时,最终态确定为「过期失效(保留 owner)」,而非「待领取(清 owner)」。
- 若将来两个 Job 拆成独立调度/独立进程,必须保留「失效先完成、回收后开始」的顺序保证,否则本决策失效。
- 决策来源:`.scratch/clue-module/线索业务-PRD.md` §6.7(2026-08-13 grill #4)。