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.
8.7 KiB
8.7 KiB
r2 套件改写 · 矩阵刷新表 + 缺陷用例处置表(票 01 产出)
日期:2026-09-05 | 产物:
e2e-core-r2.py(884 行)/e2e-heavy-r2.py(910 行),原地复制 r2 版本于.scratch/customer-e2e/,结果落customer-e2e-r2/契约权威:.scratch/customer-module/API-SUMMARY.md(73 端点);映射坑位复用 demo 票 10 对照表 静态对账:calls-r2.json(55 调用端点 = 54 命中基准 + 1 预期例外,零未命中)
一、改写映射总表(round-1 → r2)
URL / method 层(34 处调用形态变更)
| round-1 旧形态 | r2 新形态 | 所在流程 |
|---|---|---|
POST /api/customer/workspace/{ws}/page |
POST /api/customer/workspace/page + 表单字段 workspace |
F-01/F-02/F-03/F-09/F-15 |
POST .../workspace/{ws}/board/summary、/board/cards |
POST .../workspace/board/summary、/board/cards + 表单 workspace |
F-02 |
POST /api/customer(新建)×3 |
POST /api/customer/create |
F-04/F-16 |
GET /api/customer/{id}(详情回显) |
GET /api/customer/detail?id= |
F-05 |
PUT /api/customer/{id} ×3 |
POST /api/customer/edit?id=(CAS:version+isBizNegotiated+isChild) |
F-05 |
GET /api/customer/{id}/oplog/page ×6 |
GET /api/customer/oplog/page?id= |
F-05/F-07/F-09/F-10/F-11 |
POST /api/customer/contact ×3 |
POST /api/customer/contact/create |
F-06 |
PUT /api/customer/contact/{cid} |
POST /api/customer/contact/edit?id= |
F-06 |
DELETE /api/customer/contact/{cid} |
POST /api/customer/contact/delete?id= |
F-06 |
GET /api/customer/{id}/detail-head ×6 |
GET /api/customer/detail-head?id= |
F-07/F-08/F-11 |
GET /api/customer/{id}/opportunities |
GET /api/customer/opportunity/page?id= |
F-07 |
POST /api/customer/{id}/follow ×5 |
POST /api/customer/follow/add?id= |
F-08/F-15 |
GET /api/customer/{id}/follow/page ×2 |
GET /api/customer/follow/page?id= |
F-08 |
PUT /api/customer/{id}/follow/{fid}(append-only 探测) |
POST /api/customer/follow/edit?id=(未注册端点,断言非 0) |
F-08 |
| `POST /api/customer/{id}/focus | unfocus | star |
GET /api/customer/{id}/members |
GET /api/customer/member/list?id= |
F-10 |
POST /api/customer/{id}/members ×4 |
POST /api/customer/member/add?id= + memberUserIds 数组表单 |
F-10 |
DELETE /api/customer/{id}/members/{uid} ×2 |
POST /api/customer/member/remove?id=&memberUserId= |
F-10 |
GET /api/customer/transfer/{tid} ×2 |
GET /api/customer/transfer/detail?id= |
F-13 |
GET /api/customer/transfer/{tid}/assignable |
GET /api/customer/transfer/assignable?id=(D-07 缺陷模式) |
F-13 |
POST /api/customer/transfer/{tid}/assign ×5(form 多值) |
POST /api/customer/transfer/assign?id=&customerIds=&assignUserId=(params 多值,List<Long> 绑定,Controller 签名实核) |
F-13 |
POST /api/customer/import/{taskId}/confirm |
POST /api/customer/import/confirm?taskId= |
F-14 |
GET /api/customer/import/{taskId} |
GET /api/customer/import/result?taskId= |
F-14 |
GET /api/customer/import/{taskId}/failures |
GET /api/customer/import/failures?taskId= |
F-14 |
PUT /api/rule/customer/reminder(@RequestBody JSON)×5 |
POST /api/rule/customer/reminder/save(表单五字段) |
F-15 |
参数 / 出参层(4 处语义变更)
| 项 | round-1 | r2 | 依据 |
|---|---|---|---|
| company-lookup 参数名 | keyword |
companyName |
API-SUMMARY §2.3 钉死 |
| 联系人必填 | create 可缺 phone | 补齐 phone(幽灵/待删用例) | ContactDTO 必填 name/jobTitleName/phone(返工冒烟实测) |
| members 出参 role 字段 | roleType(探测式断言) |
role(显式断言,值 OWNER/COLLABORATOR) |
CustomerMemberDTO 改名(demo 票 10 实测) |
| restart_service JVM | 钉死 IDEA JBR 路径 | 候选列表 + PATH java 兜底 | 换机容错 |
import _upload |
固定 importMode | 加 duplicate_strategy 可选形参(默认不传) |
票 02 F8 增量用例 seam |
同形不改(4 族)
- Ownership 族:claim / claim-batch / assign / release-pool / archive / archive-batch / restore(返工前已扁平)
- preference saved-view 族:view/list、view/save(全平台唯一 @RequestBody JSON 例外,§2.14)、set-default、delete
- check 族:check-name、check-credit-code、contact/check-phone、contact/page、contact/search
- import upload / template / page、transfer preview / initiate / page
二、断言语义变更记录(7 处)
| 用例 | round-1 断言 | r2 断言 | 变更原因 |
|---|---|---|---|
| F-07 oplog 白名单 | ⊆ 11 种 | ⊆ 17 种(+CONTACT_×3 / AGREEMENT_×3) | 返工 F10 + 票 12(API-SUMMARY §3,OplogPageParam @Schema 描述仍写 11 种系代码侧滞后,以 17 种真值为准) |
| F-08 append-only | PUT /{id}/follow/{fid} 不成功 |
POST /follow/edit?id=(未注册)非 0 |
端点族形态变化;语义等价强化——任何 follow 编辑口成功 = append-only 被破坏 |
| F-10 负责人首位 | roleType 探测 | role 显式 | 字段改名 |
| F-12 confirmSimilar 缺口复现 | 「无 confirmSimilar 无法仍要创建」(needConfirm 卡死=预期) | 翻转:needConfirm 后带 confirmSimilar=true 重发 → 落库回 id |
返工票 04 销缺口(CustomerQuickCreateDTO.confirmSimilar 已透传) |
| F-16 16.5 查重单例 | 「单例未落地,出厂默认兜底」 | 「单例已落地(返工票 04),RuleBackedCustomerDedupSettingProvider @Primary 读单例」;配置面 get/save 归票 02 | 返工票 04 改变前提 |
| F-06 幽灵客户 | 缺 phone 直发(若必填校验先行会 67001 干扰) | 补 phone,断言聚焦 67002 存在性语义 | 必填实测 |
| D-08(原 round-1 core F-11 越权观察点登记 D-02) | 编号 D-02 | 改编 D-08 | round-1 core 内 D-02 与 heavy F-08 跟进过期 D-02 编号冲突占用;r2 续编消歧(聚合报告归票 06 处理历史编号) |
三、缺陷用例处置表
| 缺陷 | 状态 | r2 用例 | r2 预期 |
|---|---|---|---|
| D-01(P1 关联商机计数) | round-1 后已修 | core F-07 复验断言原样 | 预期转绿(opportunityCount==1) |
| D-02(P2 跟进过期未拦截) | 维持原状 | core F-08 双分支保留(67009→pass / 0→warn+defect) | 可能复现(warn 不阻断) |
| D-03(P2 编辑缺 version 报 67001) | 维持原状 | core F-05 分支保留(67005→pass / 67001+乐观锁→warn+defect) | 可能复现 |
| D-04(P2 fail_reason 超长) | 维持原状 | heavy F-14 伴随 D-05 观测 | 复现不单独断言 |
| D-05(P1 is_biz_negotiated NOT NULL) | 维持原状(API-SUMMARY §5.7) | heavy F-14.11-14.13 缺陷验证模式(FAILED→warn+defect,r1 文案收敛为「复现」) | 预期复现,不阻断 |
| D-06(P1 导入分页查不到本人任务) | 维持原状 | heavy F-14.14 缺陷验证模式 | 预期复现,不阻断 |
| D-07(P1 assignable 超时) | 维持原状 | heavy F-13.10 缺陷验证模式(30s×2 双试,超时→warn+defect;票 04 现场定 heavy 执行深度) | 预期复现,不阻断 |
| 新缺陷 | — | D-xx 从 D-08 续编 | 只报告不修复 |
四、静态验收(票 01 要点 4)——PASS
- grep 零旧契约残留:
'PUT'|'DELETE'方法字面量 0;sess.put|sess.delete0;URL f-string 路径拼接(/api/customer/{、{cid}等)0(7 处初筛命中均为注释与 check detail 文案,非调用形态) - 调用×端点对账:55 调用端点 = 54 命中
dump_api_out.txt+ 1 预期例外(POST /api/customer/follow/edit,append-only 断言的故意未注册端点);零未命中 →calls-r2.json - 客户域 73 端点未覆盖 19 个,其中 10 个 = 票 02 增量范围(agreement×5、dedup get/save、view-form get/save、company-lookup 的 batch-update),9 个为 round-1 即未覆盖的维持项(ping、POST /api/customer/page、contact/detail、列偏好 get/save、claim/assign/release-pool 批量三兄弟、reminder 读端点——旧套件 PUT 读写一体,返工拆分后未补读)——票 06 对账附录显式列出
- 语法:两脚本
py_compilePASS;UTF-8 无 BOM
五、遗留与移交
- 票 02:上述 10 端点新用例 + upload duplicateStrategy 变体 + detail-head viewTouch 副作用断言 + oplog action 值域断言;core F-12 已含 confirmSimilar 主断言,票 02 可引用或细化
- 票 04:core→heavy→增量执行顺序;heavy 六轮执行深度(D-07 计时)现场定
- 未覆盖维持 9 端点是否补测:不进票 02 票面(超出 charting 拍板范围),票 06 报告对账附录如实记录覆盖面即可;若用户要求扩,另起票