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.

57 lines
5.2 KiB

3 days ago
# seed-data-manifest:客户 E2E 联调数据清单(票 03 交付物)
> 生成:2026-09-03 22:28 · `seed-customer.py` ALL GREEN(7/7 库检通过,幂等重跑已验证)
> 机器可读:`.scratch/customer-e2e/seed-ids.json`(票 04/05/07 脚本直接读)
## 1. 数据矩阵(17 客户 + 2 商机 + 4 联系人 + 2 跟进)
| key | 客户名称 | 编号 | 用途 | 服务流程 |
|---|---|---|---|---|
| stage1 | e2c-阶段-潜在-甲 | KH202609030006 | stage=1 基线 | F-01/02 看板潜在列 |
| stage2 | e2c-阶段-重潜-乙 | KH202609030007 | **DB 直拨 stage=2** | F-01/02 重潜列 |
| stage3 | e2c-阶段-成交-丙 | KH202609030008 | **DB 直拨 stage=3** | F-01/02 已成交列 |
| star5 | e2c-星级-五星 | KH202609030009 | 星级 5/5 | F-01/02 star/relation 分组 |
| full | e2c-全字段-科技 | KH202609030010 | 全字段+工商组+信用代码 91440101E2CTEST001 | F-05 编辑回显 / F-07 详情 / 联系人母体 |
| simA | e2c-恒信达科技有限公司 | KH202609030011 | 相似对 A | F-04 三层查重 |
| simB | e2c-恒信达科技有限责任公司 | KH202609030012 | 相似对 B | F-04 |
| followFuture | e2c-跟进-待办 | KH202609030013 | API 跟进 next=+1 天 | F-08 待跟进提醒 / F-01 |
| followOld | e2c-提醒-超期 | KH202609030014 | **DB 拨 last_valid_follow_time=30 天前** + 直插过期 follow | F-15 Job 超期 / F-01 FOLLOW_UP_DUE 视图 |
| collab | e2c-协同-样例 | KH202609030015 | **DB 换 owner=曾偲青** + admin 加协同 | F-01 COLLABORATING 视图 |
| member | e2c-成员-样例 | KH202609030016 | 预加成员曾偲青 | F-10 成员增删 |
| transfer1 | e2c-交割-甲 | KH202609030017 | 绑定商机「e2c-联动-交割」 | F-13 交割 owner 联动 |
| transfer2 | e2c-交割-乙 | KH202609030018 | 绑定商机「e2c-联动-进行中」 | F-11 抛公海 67007 拦截 |
| transfer3 | e2c-交割-丙 | KH202609030019 | 纯客户 | F-13 交割分配素材 |
| pool1 | e2c-公海-甲 | KH202609030020 | owner 空 + enter_pool_time | F-01 公海列表 / F-11 领取 |
| pool2 | e2c-公海-乙 | KH202609030021 | 同上 | F-11 批量领取 |
| archived | e2c-已归档 | KH202609030022 | archive_status=2(API 归档) | F-01/F-07 已归档变体 |
商机(API `POST /api/opportunity`,owner=罗伟健,进行中):`e2c-联动-进行中`(750844495993503744→绑定交割-乙)、`e2c-联动-交割`(750844498195513344→绑定交割-甲)。
联系人:张关键(关键联系人+内线+礼品备注,13812340001)、李普通(13812340002)、**王重复(与张关键同号 13812340001 → check-phone 命中样例)**、赵外线(simA 下,13812340003)。
## 2. 造数通道(API vs DB 直插)
- **API**:17 客户(POST /api/customer,confirmSimilar=true)、归档、followFuture 跟进、2 商机 + 2 绑定、4 联系人
- **DB 直插/直拨**(API 不可达,已登记 seed-ids.json dbPatches):stage2/3 直拨(D20 阶段前进 seam 化无 API)、collab owner 换绑(COLLABORATING 视图需要「负责人≠当前用户」)、last_valid_follow_time 30 天前(Job 超期锚点)、过期 follow 直插(API 67009 拒过去时间)
- 字典 code 动态取(dict_item join dict_group.code),不硬编码
## 3. 幂等与并发冲突策略(Not-yet 挂号项拍板)
- **e2c- 前缀命名空间独占**:客户/商机/视图全带 `e2c-` 前缀;**与商机域 seed 的 `e2e-` 前缀隔离**(清理不误伤商机域 15 条 e2e- 商机)
- **策略 = 重跑全量重建**:seed 先物理清 e2c- 命名空间(含从表、商机绑定、经 detail 反查的交割单)再重建;KH 编号只前进不回退,重跑后 id 全变 → **消费方一律从 seed-ids.json 取 id,禁止硬编码**
- 他人联调约定:e2c- 数据视为本 effort 专属,可读引用;被 seed 重跑清掉不补救(manifest 即约定)
- 守卫:customer 全表 <3 行或 e2c- 命中 >60 行 → 疑似连错库中止
## 4. 契约速查(喂票 04/05/06/07)
- 分页 `current`/`size`(BaseParam);返回 `{content,total}`(PageResult)
- **flat 路径清单见 spec-flows §0**(9 Controller 55 端点,禁按 RESTful 推断)
- **`Result<Void>` data=null 非失败**——判 code 即可(api_void 模式)
- 写端点全 form 绑定;**唯一 JSON = PUT /api/rule/customer/reminder**
- POST /api/customer 返回 **CustomerSaveResultDTO**:needConfirm=null=已落库回 id+customerNo;needConfirm=true=相似弹窗未落库(confirmSimilar=true 重发)
- 信用代码 67001=须 18 位数字或大写字母;LocalDateTime form 绑定 ISO **T 分隔**(空格 400)
- 商机 create:opp_source_01=线索转入需关联线索(60001)→ 用 **opp_source_02**;六必填(D-14)
- 跟进:content 空 / nextFollowTime 过去 → 67009;同客户同内容 30s 防重
- 客户编号服务端生成 `KH+yyyyMMdd+4 位`,只前进
-**观察点**:ContactDTO.source 注释引用 contact_source 字典,但 dict_group 24 组**无 contact_source 组**——seed 用 contact_source_01 创建成功(无字典校验),F-06 实测时核对该字段回显与筛选行为,异常则登记
- debug token(verify only);pymysql 每步新连接 autocommit=True(坑㉕);中文 body 一律 Python(坑㉑)