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.

44 lines
4.1 KiB

3 days ago
# 04 · 已知缺口:查重设置页端点 + QuickCreate.confirmSimilar
2 days ago
- **Status:** resolved
3 days ago
- **Type:** task
- **Blocked by:** 02-style-unify
## 目标
两个规格内小缺口补齐(R8)。
## A. 查重设置页端点(a7-3-3-2 前端页面无接口支撑)
- crm-rule 新增 `GET /api/rule/customer/dedup`(读当前配置)+ `POST /api/rule/customer/dedup/save`(表单绑定);
- 配置实体复用既有 DedupRule 单例(票09 已做服务端种子),对称 `CustomerReminderRuleController` 改造后形态;
- 权限:客户管理设置菜单权限点(与提醒规则同款);
- tag:`A7 后台管理/客户管理设置/查重设置`。
## B. QuickCreateDTO 加 confirmSimilar
- 商机弹窗快建客户命中相似客户时"仍要创建"透传字段(D3 已有 confirmPhone 同款形态);
- `CustomerQuickCreateParam``confirmSimilar: Boolean`(默认 false),命中相似且未确认 → 仍抛 670xx 提示码(沿用既有 check-name 口径)。
## 验收
- 两模块 mvn test 绿,新端点有单测;
- API-SUMMARY §5 已知缺口清单这两条销账。
2 days ago
## Answer
**A · 查重设置页端点** — 已实施,票面前提修正:crm-rule 内并不存在"既有 DedupRule 单例"(票面所引"票09 已做服务端种子"未落地,`DefaultCustomerDedupSettingProvider` 注释即言"单例未建前给出厂值"),故按对称 reminder 范式**从零建栈**:
- 单例 `customer_dedup_rule`(单行 id=1)五字段:masterEnabled(总开关仅控名称/电话)/ nameEnabled + nameMatchMode(1 精确 2 模糊)+ similarityThreshold(0–100,出厂 80)/ phoneEnabled;**统一社会信用代码为系统强制规则,无配置列、消费侧恒开**(a7-3-3-2 §3)。
- `CustomerDedupRuleInitializer`(@Order 20)首装种子(全开+模糊+80,幂等键=单例行存在);保存=全量覆盖即生效,校验 matchMode∈{1,2}、threshold∈[0,100] → 64023,开关缺省→0、方式缺省→模糊、阈值缺省→80。
- 契约 `GET /api/rule/customer/dedup` + `POST /api/rule/customer/dedup/save`(表单绑定,零 @RequestBody/PutMapping);tag `A7 后台管理/客户管理设置/查重设置`
- 权限:`CustomerDedupRulePermissionInitializer`(@Order 19)seedModule 菜单「客户查重设置」挂「客户管理」目录(仅菜单不种子 button,与提醒规则同款)。
**B · QuickCreateDTO.confirmSimilar** — `CustomerQuickCreateDTO``confirmSimilar`(Boolean,默认 false),quickCreate 经既有 copyProperties 透传进 create 链路;命中相似且未确认 → `needConfirm=true + similarHits`(未落库)。票面两处引用勘误:① "confirmPhone 同款形态(D3)"——全仓无 confirmPhone,上游图 D3 为客户双轴建模,实际参照 `CustomerCreateDTO.confirmSimilar` 既有形态;② "仍抛 670xx 提示码"——按既有 check-name 口径实施为 needConfirm 返回(非异常),R8 原文即"透传"。
**消费侧(上游 D4-rev2 拍板 B)**:`RuleBackedCustomerDedupSettingProvider`(@Primary)读单例驱动 seam——master∧单项→名称/电话开关、阈值/匹配方式透传、单例缺失回退 `Default` 出厂值;新增 `CustomerNameMatchMode` 枚举 + `CustomerDedupService` EXACT 分支(trim + 大小写不敏感全等,LIMIT 20,复用 mapHits 可见性脱敏;标准化全套随 D21 迭代)。匹配方式消费边界 = 新增/编辑内建查重(导入路径维持模糊,D4-rev2 范围外)。
**测试与验收**:`mvn test -pl crm-customer,crm-rule -am` 全绿——crm-rule **152**(+6:ServiceImpl 4 + Initializer 2)、crm-customer **144**(+9:Provider 映射 6 + quickCreate needConfirm/confirm 集成 2 + 精确模式 1);BOM 扫描 clean。API-SUMMARY §2.12 重写(reminder + dedup 两栈)、§2.3/§2.4 更新、§5 缺口 1/2 销账;crm-rule/CONTEXT.md 新增「客户查重设置」段。
**中途修复**:Provider 漏 `import lombok.RequiredArgsConstructor`(mvn 编译期暴露);单例缺失分支漏 fallback 兜底(singletonMissing 用例红 → 两个开关方法补 fallback 分支)。