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.7 KiB
4.7 KiB
09 项目查重规则模块(crm-rule 全缺码补齐)
Type: task Status: resolved(2026-09-07) Blocked by: 06
Question
按 gap-report 拍板 P0,新建项目查重规则模块(素材 matrix-a7-3-lower.md §一):
/api/rule/opp-dedup-rule下 8 端点:同版本化族(page/detail/save-draft/publish/copy/disable/delete/versions)。- DTO 字段:ruleCode DUP_RULE_XX / ruleName / versionNo / status / applyScopeType(1 全部商机 2 按项目属地 3 按所属公司) / applyScopeValue(本地项目/南京公司…)/ isDefault / ruleDesc + 4 步骤向导 JSON:
- ①触发场景:triggerScenarios[](商机转项目/直接创建项目)、projectStatuses[](进行中/已中止暂停/已关闭/已结项)
- ②关联项目检索:searchConditions[{field/source/matchMode(完全一致|名称相似)/threshold}],默认 4 行=项目名称/项目区域/主要意向客户/甲方
- ③异常关系分析:analysisRules[{seq/expression(且或+括号嵌套 JSON)/conclusion}],研判结论枚举 6 项
- ④处理策略:strategies{intercept[]/confirm[]/normal[]}(适用研判结论多选)
- 引用计数:被方案推送规则(票 08)引用锁定版本时维护 reference_count 按版本统计(原型「执行次数」列按「引用次数」理解——票 06 拍板项 3 默认值);草稿不可被引用。
- Controller tag 直接写对:「A7 后台管理/业务规则/商机规则/项目查重规则」。
Answer
resolved(2026-09-07)。8 端点全落地,V-CONFIG 第五实例(extends VersionedConfigSupport 同款状态机)。
落地清单(crm-rule,9 新建 + 2 修改):
- 实体
OpportunityDedupRule(表 opportunity_dedup_rule:rule_code/rule_name/version_no/status/apply_scope_type/apply_scope_value/is_default/rule_desc/wizard_config text)+ Mapper - DTO(内嵌
WizardConfig4 步骤结构:triggerScenarios/projectStatuses/searchConditions[SearchCondition]/analysisRules[AnalysisRule]/strategies[Strategies])/ VersionDTO(含 referenceCount)/ PageParam IOpportunityDedupRuleService+ Impl(无运行时查询缝:查重执行侧未建)- Controller
/api/rule/opp-dedup-rule8 端点 + 深 tag「A7 后台管理/业务规则/商机规则/项目查重规则」 OpportunityDedupRulePermissionInitializer(@Order(22) 仅菜单,「商机管理/项目查重规则」)OpportunityRuleConstants追加:前缀 DUP_RULE_ / 适用范围三档 / 触发场景与匹配方式值域 / 错误码 64031–64034- 修改:
OpportunityPushRule实体加 dedup_rule_id 冗余列 + Impl 三分支提取落列 / 推送规则 validateForPublish 补查重引用校验
关键裁决与语义偏差存证:
- 适用范围三档 = 1全部商机(可设默认)/ 2按项目属地(applyScopeValue 必填)/ 3按所属公司;「是否默认[仅适用对象=全部时]」按原型钉死为服务层校验(非全部商机档设默认拒绝,64031),恢复阶段模板同款约束(票 08 推送规则因「同适用范围中设默认」语义未加此拦)。
- 4 步骤向导单 wizard_config JSON 列(无子表):同票 08 push_config 范式(DTO 结构化互转/序列化失败拒绝保存/损坏防御为空/page 不回显);条件表达式 expression 为嵌套 JSON 串透传(且/或+括号嵌套,结构由前端配置器定义,执行侧解析);触发场景/匹配方式值域常量钉死(OPP_TO_PROJECT/DIRECT_CREATE/EXACT/SIMILAR),研判结论 6 项与项目状态多选存 code 不强校验(配置器约束)。
- 引用计数 = 实时统计不落列:票 06 拍板项 3「查重『执行次数』=引用次数」——出参 referenceCount = 引用本规则版本的推送规则行数(page 一次 in 查询分组计数 / detail·versions 逐版本 count;deleted 逻辑删自动排除;含草稿引用)。实现中发现票 08 设计缺口:dedupRuleId 仅存 pushConfig JSON 无法 SQL 统计,已补推送规则实体 dedup_rule_id 冗余列(保存三分支自步骤④提取落列、复制随行),JSON 与列双写。
- 「草稿不可被正式引用」(PRD):推送规则 validateForPublish 补校验——projectCreation.dedupRuleId 非空时须存在且发布中(64030),兑现票 08 Answer 承诺项。
- 无名称唯一发布校验(原型无此约束,名称不参与查重匹配)——与推送规则(64029)刻意差异。
- 默认顶替分组收敛:同 applyScopeType(属地档含同 applyScopeValue)内发布中默认唯一。
- 验收:BOM 127 文件 0 / 全仓 mvn test BUILD SUCCESS(crm-rule 190 测试:新增 DedupRuleServiceImplTest 15 + PushRule 补 dedupRuleId 校验回归 1)/ 未提交 git。