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.0 KiB
3.0 KiB
Type: grilling Status: resolved Blocked by: 03
Question
crm-rule 里已存在的 ProjectRule(项目规则)如何被 crm-project 消费?它约束什么(阶段超期提醒?公海回收?负责人分配?)现有字段是什么、Initializer 种了哪些默认值、权限点如何挂。定清 crm-project → crm-rule 的读取接缝,避免重复造规则域。
依赖 03(状态机定后才知道规则挂在哪些阶段)。用 /grilling,先读 crm-rule 的 ProjectRule 实体与 Initializer。
Answer (resolved)
crm-project 消费 ProjectRule 五区块定稿
读取方式 = 选项1 Port/接口
crm-rule 暴露 inbound port ProjectRuleQueryPort(返回结构化 DTO,非裸 JSON),crm-project 依赖接口注入。依赖方向 project→rule 清晰、类型安全。crm-project 是纯读方,写方=crm-rule(单例行 id=1,ProjectRuleInitializer 植入骨架)。
五区块消费边界(本期做 vs spin-out)
| 区块 | JSON 列 | 消费点 | 本期 | 说明 |
|---|---|---|---|---|
| ①阶段别名 | stageAliasJson |
列表/看板列头、详情阶段名展示 | ✅ 做 | 纯读展示,loadStageAlias();看板列头别名优先、空回退 stage 字典名(对齐 opportunity custom_node_name 范式) |
| ②拉群人员 | poolMemberJson |
项目建群拉 7 角色 | ⚠️ spin-out | 依赖企微群能力(同 06 群聊详情 Tab),本期无集成,Port 契约预留 |
| ③冲突拉群 | conflictPullJson |
stage 0 冲突待处理拉群 + 2 触发条件(≥2方/异地报备) | ⚠️ spin-out | 同上,拉群依赖企微;冲突检测/入 stage 0 做,但拉群动作 spin-out |
| ④阶段提醒 | stageRemindJson |
阶段流转发提醒 | ⚠️ spin-out | 依赖通知推送能力,本期未定 |
| ⑤标底认定 | bidConfigJson |
招投标/赢单登记算标底等级+分成 | 🤔 部分做 | 等级判定(A+~SQ)本期做(招投标准备/赢单页字段,纯读规则);分成%计算 spin-out(依赖薪酬/绩效模块) |
本期实际落地 = ①阶段别名 + ⑤标底等级判定(读侧);②③④拉群/提醒 + ⑤分成计算 = spin-out,Port 方法签名先留、实现留桩。
Port 契约草案(06 细化)
interface ProjectRuleQueryPort {
List<StageAliasDTO> loadStageAlias(); // ① 本期
BidConfigDTO loadBidConfig(String bidType); // ⑤ 等级判定本期;分成字段留 DTO 不消费
// 以下 spin-out,签名预留:
List<PoolMemberDTO> loadPoolMembers(); // ②
ConflictPullDTO loadConflictPull(); // ③
List<StageRemindDTO> loadStageRemind(); // ④
}
遗留给 06(不阻塞 05)
- ProjectRuleQueryPort 归 crm-rule inbound 包的具体位置 + DTO 定义 → 06 落。
- 冲突检测逻辑(触发条件判定)在 crm-project 哪一层做(建项目时 or 方案卡回调时)→ 06。
- spin-out 区块的桩实现策略(Noop vs 抛未实现)→ 06。