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.
 
 
 
 
 

4.5 KiB

Answer

Status: resolved(重潜触发点:grill Q10 拍板 A/保守 → 第三轮 fresh 复核翻案,20260902 改票 B = 本期不触发、只留 seam)

A. 三态定义(定稿)

名称 驱动源 本图
1 潜在客户 新建客户成功默认值
2 重潜客户 关联的任一方案卡「提交并报备成功」 ⚠ seam(触发链路本期不可达,见 C;本期不自动触发)
3 已成交客户 关联的任一项目「首次中标赢单」 留 seam 给 A5
  • 只前进不回退(原型 A4-4-1 §1 明文:方案卡失败/报备失败/商机输单/项目结束均不改变阶段)。
  • 不可手动改:阶段条不可点击;无面向前端的 setter API;仅内部 port + 外部回调触发。
  • 父子客户不联动:子客户阶段改变不影响父客户(原型无相关规则)。

B. 存储 + 迁移约束(定稿)

  • customer.customer_stage tinyint default 1(票 02 已落)。
  • 迁移 SQL 形态:UPDATE customer SET customer_stage=? WHERE id=? AND customer_stage < ?(只前进 CAS,天然幂等,无需去重表)。
  • 迁移失败(已是更高阶段)= no-op 静默成功,不报错不写日志。
  • 每次变化:写操作日志(票 07 oplog,操作人=系统 + 注明触发来源)+ 刷新公共头部。

C. 重潜触发点 — 已翻案(grill Q10 拍板 A/保守 → 第三轮 fresh 复核,20260902 用户拍板 B)

原型 A4-4-1(8-26 fresh 复核确认)明文「任一方案卡提交并报备成功后更新为重潜」——是两个条件(提交 + 报备成功)。「报备/推送成功」在商机图是 spin-out 本期不可达(商机图票 07:方案卡状态=草稿1/已提交2/已推送3;推送链路本期不可达,仅 A5 回调特殊路径可达)。

旧拍板(grill Q10=A/保守,已废):曾决定本期先按「方案卡状态=已提交(2)」凑合触发重潜,理由是怕客户阶段永久卡在潜在。

新拍板(第三轮复核,20260902 用户选 B = 严格/不凑合)本期不自动触发潜在→重潜。理由:①原型要的是「提交并报备成功」两个条件,用「已提交」单条件凑合会造出「提交了但报备没成功、客户却已重潜」的错误状态,污染阶段派生字段;②CustomerStagePort.promoteseam 全部保留(契约、只前进 CAS、幂等),只是本期无调用方;③ 待报备成功链路就绪(方案卡「已推送(3)」或 A5 回调)后,由该链路调用 promote(customerId, 2, "scheme_card_reported") 触发重潜,改动是接入调用点、非改状态机。本期客户阶段实际只有「潜在」(字段/枚举/CAS 机制仍按三态建好)。

D. seam 契约(定稿)

// crm-customer 侧暴露的端口(消费方 = crm-opportunity 方案卡 / 未来 A5 项目)
public interface CustomerStagePort {
    /** 提升阶段;只前进,传入更低阶段 = no-op;返回提升后阶段 */
    int promote(Long customerId, int targetStage, String triggerSource);
}
  • triggerSource 示例:scheme_card_reported(方案卡提交并报备成功,本期链路不可达 seam)/ project_won(已成交,A5 seam 占位)。scheme_card_submitted 已弃用(D20 改票 B,不用「已提交」凑合)。
  • crm-opportunity 方案卡状态机在「已提交」迁移边(或收紧后「已推送」边)同步调用此 port(对称 lead→opp port 的同步事务内调用范式;失败抛异常使方案卡事务回滚?→ :阶段提升失败不阻断方案卡提交,记日志降级,见 E)。

E. 失败语义(定稿,重要)

  • 阶段提升失败不阻断主业务:方案卡提交成功但客户阶段提升失败时,方案卡正常提交,阶段提升记日志告警 + 可重试(幂等 no-op 使重试安全)。
  • 理由:客户阶段是派生冗余视图(由业务成功结果驱动),不是主业务的一致性边界;用「尽力而为 + 幂等重试」而非「同步强一致回滚」,避免一个派生字段的失败拖垮方案卡主流程。
  • 对称:lead→opp port 是强一致(建商机失败回滚线索),但那是主业务;customer_stage 是派生,弱一致即可。

F. 回填 / 下游

  • 票 02customer_stage 已含。
  • 票 07:oplog 记录阶段变化(操作人=系统)。
  • 票 01:CONTEXT.md 术语「客户阶段」。