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.
32 lines
2.7 KiB
32 lines
2.7 KiB
|
3 weeks ago
|
# 05 修复:P0-1 池删除守卫(跨模块 seam)
|
||
|
|
|
||
|
|
Type: task
|
||
|
|
Status: resolved
|
||
|
|
Blocked by: 02
|
||
|
|
|
||
|
|
## Question
|
||
|
|
|
||
|
|
按 ticket 02 的裁决修复 P0-1(若判"实现遗漏"):删除公海池前校验"池下无非终态线索"(status ∈ 未分发/待领取/已领取/跟进中 = 1,2,3,4),有活跃线索则拒删并抛 `CODE_POOL_HAS_ACTIVE_LEAD(64005)`;单条 `deletePool()` 与批量 `deletePoolBatch()` 都要守(批量逐条校验,失败项记 `PoolBatchFailReason.HAS_ACTIVE_LEAD`,部分成功)。
|
||
|
|
|
||
|
|
**必须解决的设计点(模块边界铁律)**:crm-rule 不得依赖 crm-lead,但守卫要查 lead 表。候选方案:
|
||
|
|
- **A(预期方向)**:crm-rule 定义出站端口(如 `PoolLeadOccupationPort`,方法 `countActiveLeads(poolId)` 或 `hasActiveLeads(poolId)`),crm-lead 提供 Spring 实现(crm-lead 本就依赖 crm-rule,依赖倒置不破坏方向)。先例:`OpportunityCreationPort`(crm-lead 定义端口等商机实现,方向相反的同型模式)。
|
||
|
|
- B:crm-rule 直接 SQL 查 lead 表——无 Java 依赖但 DB 层耦合,违背 seam 精神,不推荐。
|
||
|
|
- C:删除编排上移 crm-lead——但删除端点在 crm-rule controller,改动面大,不推荐。
|
||
|
|
|
||
|
|
定案 A(或论证推翻)后按仓库规则**出 ADR + 更新 crm-rule/crm-lead 双方 CONTEXT.md**(跨模块 seam 文档化铁律)。
|
||
|
|
|
||
|
|
**验收**:新增单测(有活跃线索拒删 / 仅终态线索放行 / 批量部分成功含 HAS_ACTIVE_LEAD 失败项)+ `mvn test`(crm-rule、crm-lead)全绿 + 改动文件 BOM 扫描。
|
||
|
|
|
||
|
|
## Answer
|
||
|
|
|
||
|
|
已实施完毕(2026-08-19),方案 A 落地:
|
||
|
|
|
||
|
|
- **Port 接口** `crm-rule/src/main/java/com/crm/rule/port/outbound/PoolLeadOccupationPort.java`——`hasActiveLeads(Long poolId): boolean`
|
||
|
|
- **实现** `crm-lead/src/main/java/com/crm/lead/adapter/PoolLeadOccupationAdapter.java`——`@Component`,查 lead 表 `eq(poolId).in(status, 1,2,3,4)` count>0
|
||
|
|
- **deletePool 守卫** `LeadPoolServiceImpl`——`ObjectProvider<PoolLeadOccupationPort>` 可选注入;port=null→fail-safe 抛 `CODE_POOL_INVALID`;port.hasActiveLeads=true→抛 `CODE_POOL_HAS_ACTIVE_LEAD(64005)`
|
||
|
|
- **批量** `deletePoolBatch` 逐条委派 `self.deletePool`(已有逻辑不变),失败项自动按 64005 映射 `PoolBatchFailReason.HAS_ACTIVE_LEAD`(**偿还 ADR-0023 D5 决策债**)
|
||
|
|
- **ADR-0025** + **crm-rule/CONTEXT.md** + **crm-lead/CONTEXT.md** 三件套齐
|
||
|
|
- **单测** 4 例(LeadPoolServiceImplTest):有活跃线索拒删 / port null fail-safe / 放行 / 批量部分失败 HAS_ACTIVE_LEAD
|
||
|
|
- **mvn test**:crm-rule 26 tests 0 failures / crm-lead 70 tests 0 failures / BUILD SUCCESS
|
||
|
|
- **BOM 扫描**:全部通过(UTF-8 无 BOM)
|