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.1 KiB

08 方案推送规则模块(crm-rule 全缺码补齐)

Type: task Status: resolved(2026-09-07) Blocked by: 06

Question

按 gap-report 拍板 P0,新建方案推送规则模块(素材 matrix-a7-3-upper.md §推送规则,端点族同构 OpportunityStageTemplate):

  1. /api/rule/opp-push-rule 下 8 端点:page / detail / save-draft / publish / copy / disable / delete / versions——版本化状态机复用既有实现模式(同族唯一草稿+唯一发布中、发布后原版转停用、复制=独立新编码 V1.0 草稿、仅草稿可删)。
  2. DTO 字段(截图提取):ruleCode PUSH_RULE_XX / ruleName / versionNo / status / applyScope(两档+条件式档可选)/ ruleDesc + 4 步骤配置 JSON:
    • ①基础推送信息:推送节点名称、方案卡模板引用(锁定模板版本)
    • ②字段校验:规则列表[{字段名称/字段来源/字段类型/校验规则/失败处理方式}]
    • ③字段映射:[{字段名称/对应字段/推送方式}]
    • ④创建/关联项目:创建方式(自动/交互/关联已有)、重复规则引用(引用查重规则并锁定版本,为票 09 的引用来源)、名称规则、备注变量
  3. Controller tag 直接写对:「A7 后台管理/业务规则/商机规则/方案推送规则」。
  4. bruno-sync.config.json 不需加 sourceRoots(crm-rule 已含);确认 menuBindings。

Answer

resolved(2026-09-07)。8 端点全落地,V-CONFIG 第四实例(extends {@link VersionedConfigSupport} 同款状态机)。

落地清单(crm-rule,10 文件)

  • 实体 OpportunityPushRule(表 opportunity_push_rule:rule_code/rule_name/version_no/status/apply_scope/condition_type/condition_value/is_default/rule_desc/push_config text)+ Mapper
  • DTO(内嵌 PushConfig 4 步骤结构化对象:BasicInfo/FieldValidationItem/FieldMappingItem/ProjectCreation)/ VersionDTO(D-22 剥审计)/ PageParam
  • IOpportunityPushRuleService + Impl(无运行时查询缝:执行侧未建)
  • Controller /api/rule/opp-push-rule 8 端点(page/detail/save-draft/publish/copy/disable/delete/versions)+ 深 tag「A7 后台管理/业务规则/商机规则/方案推送规则」
  • OpportunityPushRulePermissionInitializer(@Order(21) 仅菜单,「商机管理/方案推送规则」)
  • OpportunityRuleConstants 追加:前缀 PUSH_RULE_ / 适用范围 1,2 / 创建方式三值 / 错误码 64025–64030

关键裁决与语义偏差存证

  1. 适用范围两档 = 1全部商机 / 2条件式(非阶段模板的部门档语义):条件式档必填 conditionType+conditionValue(原型示例「项目阶段='投标阶段'」存 condition_value;条件字段值域归前端配置器,服务层不强校验字典)。
  2. 推送配置 4 步骤单 push_config JSON 列(无子表):DTO 结构化出入参 ⇄ 服务层 ObjectMapper 序列化;序列化失败拒绝保存、反序列化失败防御为空不阻塞浏览;page 不回显(大 JSON 不进列表,明细走 detail);方案卡引用锁版本行 id(V-CONFIG 11 同款)、查重规则引用 dedupRuleId 为票 09 引用来源(票 09 落地后补存在性校验)。
  3. 发布校验:步骤①必配 + 方案卡模板引用版本行存在 + 同名称发布中唯一(跨规则编码族——原型「同族同名单版本间不可重复」的落地解读,64029)+ 创建方式三值域(64030)。
  4. 默认顶替分组收敛:同 applyScope(条件式含同 conditionType+conditionValue)内发布中默认唯一,异于阶段模板全局唯一(原型「同适用范围中设默认」)。
  5. 执行次数不出参:按版本累计、执行侧归商机域未建(同构票 06「绑定商机」列已知裁决),执行侧落地后补统计源与运行时查询缝。
  6. bruno-sync:crm-rule 已在 sourceRoots(未动);menuBindings 无商机规则条目(同阶段模板/方案卡模板口径,未加)。
  7. 验收:BOM 117 文件 0 / compile EXIT=0 / crm-rule 175 测试全绿(新增 OpportunityPushRuleServiceImplTest 23 个规格验证)/ 未提交 git。