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.
|
|
|
|
# 05 · 联系人导入三段式
|
|
|
|
|
|
|
|
|
|
- **Type:** task
|
|
|
|
|
- **Status:** resolved
|
|
|
|
|
- **Blocked by:** 01, 02
|
|
|
|
|
|
|
|
|
|
## Question
|
|
|
|
|
|
|
|
|
|
按 spec 实现联系人导入(对齐客户导入先例 `CustomerImportExecutor` 三段式形态):
|
|
|
|
|
|
|
|
|
|
1. 模板下载(列集 = 6.2 字段:联系人*/职务*/联系电话/是否关键联系人/是否内线/礼品备注/来源…按 spec 定稿)。
|
|
|
|
|
2. 上传预检:Analyzer 校验**前移**(必填 + 字典值域 + 手机号查重 + 客户+姓名+职务疑似重复;迁移 D-05/D-04 教训——NOT NULL 无默认列群必填前移、fail_reason clip500、明细行保留)。
|
|
|
|
|
3. confirm 执行:行级写入 + 失败明细 + 任务终态;策略语义(SKIP/OVERWRITE 是否需要按 spec)。
|
|
|
|
|
4. 导入成功后触发图谱自动更新(调用票 03 的生成引擎;同步/异步按 spec)。
|
|
|
|
|
5. 单测:预检拒/行级失败/成功链路/触发更新。
|
|
|
|
|
|
|
|
|
|
**验收**:`mvn -pl crm-customer -am test` 全绿;本地起服手工三段式冒烟(含一行失败场景明细断言)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Answer
|
|
|
|
|
|
|
|
|
|
**实现**(15 文件,镜像客户导入形态):
|
|
|
|
|
- 实体/Mapper:`ContactImportTask`(customerId 固定目标 + 六计数 + DRAFT/RUNNING/DONE/FAILED 状态机)/`ContactImportFail`(row_num/name/phone/fail_reason clip500)+ 两 `CrmBaseMapper`
|
|
|
|
|
- 判定/执行:`ContactImportAnalyzer`(①逐行静态(必填/11 位/字典值域)→ ②文件内重复组互斥(SKIP 组全失败/OVERWRITE 组内最后一条生效)→ ③客户内手机号查重按 importMode/duplicateStrategy;字典引用判定时回填 RowPlan)+ `task/ContactImportExecutor`(@Async;INSERT 落 D1 档位四列联动 / UPDATE 值变才写 + 职务变化重置 levelSource=1 / 每成功行 writeSystem oplog / 收尾一次 bump)
|
|
|
|
|
- 服务/接口:`ICustomerContactImportService` + `ContactImportServiceImpl`(upload 客户可见性 67002 + 文件守门 + 表头版本锚点 / confirm 重复 67024 / result / failures / page 仅本人 / template RFC 5987)+ `CustomerContactImportController` 六端点(深 tag「A4 客户管理/客户详情/联系人导入」)+ Preview/Result/FailDTO/PageParam
|
|
|
|
|
- 测试底盘:H2 schema 19→21 张(+contact_import_task/contact_import_fail)
|
|
|
|
|
|
|
|
|
|
**票面逐条**:
|
|
|
|
|
1. 模板列集 = spec §3.3 定稿五列(票面 6.2 全列作废;职务/来源用字典 code——值域预检 + 四列联动,区别客户导入联系人 sheet 的名称自由文本)✅
|
|
|
|
|
2. 上传预检前移:必填/11 位手机号/job_title·contact_source 值域/文件内重复组互斥/客户内手机号查重;fail_reason clip500(D-04 教训)✅
|
|
|
|
|
3. confirm 行级部分成功 + 失败明细 + DONE/FAILED 终态;SKIP/OVERWRITE 语义按 spec(SKIP 命中=SUSPECT 不写入)✅
|
|
|
|
|
4. **「触发图谱自动更新(票 03 生成引擎)」随 spec D6 作废**(只有手动边,无自动生成引擎)——导入成功只收尾一次 bump 图谱版本 ✅(替代实现)
|
|
|
|
|
5. 单测 9 例:预检计数(SKIP 语义 insert=1/suspect=2/fail=1)/守门 67023 四连(方式/重复策略/文件类型/表头不符)/可见性 67002 零落库零留档/全链路 OVERWRITE(四列联动 + oplog 2 条 + bump)/unchanged 不触碰手工锁/失败明细含疑似前缀 + 67024 三连/UPDATE 职务变化重置手工锁(levelSource=2→1)/模板反读五列/page 仅本人 ✅
|
|
|
|
|
|
|
|
|
|
**验收**:`mvn -pl crm-customer -am test` 全绿 **218 例**(票 05 新增 9 例);BOM 扫描 230 文件干净。起服手工三段式冒烟归票 07 E2E 承接(先例:票 02/04 单测等价覆盖服务层语义,HTTP 断言由 E2E 补)。
|
|
|
|
|
|
|
|
|
|
ADR-0039;CONTEXT.md 词条「联系人导入(三段式)」。
|