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.
3.9 KiB
3.9 KiB
| status |
|---|
| accepted |
公海规则「绑定商机(数量)」计数出站 seam:PoolRuleOpportunityCountPort(crm-rule 声明,crm-opportunity 实现)
Context
一期记账缺口(gap-report §六,P2):公海规则 detail 出参缺原型 A7-3-2-5-1「绑定商机:N 条」(字段说明:当前规则版本已实际绑定或适用的商机数量)。商机侧无 pool_rule 引用列(无持久绑定可数),运行时 OpportunityPoolRuleMatcher.loadPublished().match(ownerDeptId) 动态匹配(快照式、实时、不锁版本)。a7-heavy 票 03 毕业此缺口,建图时拍板方案 B(动态计数)+ 计数口径钉 match 语义。
方向约束同 ADR-0025:crm-rule → (crm-auth / crm-dict / crm-base) 单向,不得反向依赖 crm-opportunity(pom 明文),而 opportunity 表归 crm-opportunity。
Considered Options
- A:opportunity 加 pool_rule_id 快照列(掉入/分配时落)——需 DDL + 存量回填,语义 = 历史绑定;与运行时 match(实时快照式)双口径并存必漂移。否(同一期票 09 查重规则「引用计数=实时统计不落列」先例)。
- B(选中):出站端口动态计数——crm-rule 声明
PoolRuleOpportunityCountPort,crm-opportunity 实现 adapter,按部门谓词 count。零 DDL 零迁移;口径(哪条规则/发布态/默认排除集)由 crm-rule 自持,实现方只做无语义计数。 - C:crm-rule 直查 opportunity 表——跨域 DB 耦合,违背 seam 精神(同 ADR-0025 选项 B 否决理由)。否。
Decision
- 端口落位 crm-rule:
com.crm.rule.port.outbound.PoolRuleOpportunityCountPort。票面原写「crm-base 定义」,执行改钉 ADR-0025 同构——同消费方(crm-rule)、同方向(下游 provider 实现)的既有出站端口先例;crm-opportunity 本就依赖 crm-rule(消费匹配引擎),DIP 不破坏方向;crm-base 不必承载规则域词汇。 - 端口形状按「部门谓词」两方法:
countByOwnerDepts(deptIds)(部门专用口径)/countOutsideOwnerDepts(excludedDeptIds)(默认规则兜底口径,owner_dept_id 为空或不在排除集)。实现方PoolRuleOpportunityCountAdapter(crm-opportunityadapter包,对称 crm-leadPoolLeadOccupationAdapter)只钉三条数据口径:软删过滤(@TableLogic)、排除已转项目(opp_status=5绝对终态不再受公海规则治理,与UserTransferPort商机域计数同口径)、公海态照常计入(release-pool 保留owner_dept_id作公海可见锚点,claim 守卫即按它匹配——按存量owner_dept_id计数即与运行时一致)。 - 消费口径 crm-rule 自持:仅发布中规则计数——部门专用 =
port.countByOwnerDepts(本版本 deptIds);发布中默认 =port.countOutsideOwnerDepts(发布中专用规则部门并集)(match 兜底语义:不命中任何发布中专用规则的商机数,非全部商机);非默认通用/草稿/停用运行时永不命中 → 0。 - 仅 detail 出参回填
boundOppCount:原型 v29 列表页列头 10 项无「绑定商机」(票面「原型列头在列表页」前提经原型文本库核实不成立),page 不补列不计数。 - 消费注入
ObjectProvider可选,port 缺失(纯 rule 装配)fail-open 展示 0——展示型计数,非 ADR-0025 守卫型 fail-safe。
Consequences
- detail 增量:部门专用 = 1 次 count;默认规则 = 规则查询 + 子表查询 + 1 次 count;page 零增量。
- bruno 文档 detail 出参表 +1 字段(bruno-sync 重生成);e2e(a7-heavy 票 05)断言口径即本 ADR 口径。
- 无 DDL、无迁移、无 README 错误码变更;零 pom 改动(复用既有依赖方向)。
- 决策来源:a7-heavy 票 03(map 建图拍板方案 B + match 口径)+ 执行拍板(端口落位 crm-rule / 公海态计入 / 排除已转项目 / page 不补列 / fail-open)。