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

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。