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.
58 lines
5.4 KiB
58 lines
5.4 KiB
|
1 week ago
|
# 07 — E2E 实测:商机核心域主流程
|
||
|
|
|
||
|
|
Type: task
|
||
|
|
Status: resolved
|
||
|
|
Blocked by: 05
|
||
|
|
|
||
|
|
## Question
|
||
|
|
|
||
|
|
按 `spec-flows.md`(票 04 冻结版)执行核心域全部主流程的 API 级实测(Python 脚本 `.scratch/opportunity-e2e/e2e-core.py`,复用 seed 数据与 debug token):
|
||
|
|
|
||
|
|
- 流程覆盖:四视图 + 自定义视图(浏览 + **F15 全 CRUD**,票 04 U07 改判)→ 新建商机(直接创建,含 `convertible-leads` 关联线索下拉接口)→ 详情各子表读 → 写跟进(回收锚点刷新)→ 切阶段(连跳/回退)→ 方案卡建/改/提交 → 现场勘察 → 团队成员增改 → 暂缓/取消暂缓 → 抛公海/领取 → 关闭/重启 → 移交;
|
||
|
|
- 每流程按票 04 拍的断言深度断言,三档结论(✅ / ⚠ / ❌);**判 ❌ 前必须核对 flat 实际路径**(地图「判定纪律」);
|
||
|
|
- **前置(票 04 U04 决议)**:MinIO 凭据已提供(admin),执行前设 `CRM_MINIO_AK/SK` 环境变量重启后端,F08 附件流程不 SKIP;
|
||
|
|
- 原型期望与实现不一致处:截取请求/响应证据,入缺陷清单(P0/P1/P2 初判)。
|
||
|
|
|
||
|
|
产出:`e2e-core.py` + 报告章节草稿 `.scratch/opportunity-e2e/report-core.md`。只记录不修复。
|
||
|
|
|
||
|
|
## Answer
|
||
|
|
|
||
|
|
(20260828 实测完成 + 同日 F08 补跑)产出 `e2e-core.py`(六轮迭代,✅53→81;F08 补跑修复后 ✅81→86)+ `report-core.md` + `e2e-core-result.json`。核心域 F01-F15 全部实测,最终 **✅ 86 / ⚠ 12 / ❌ 6 · 缺陷 17 条(P1×9 / P2×8)· SKIP 0**。复现:`python seed-opportunity.py && python e2e-core.py`。
|
||
|
|
|
||
|
|
### 缺陷清单(只记录不修复)
|
||
|
|
|
||
|
|
**P1(9 条)**
|
||
|
|
1. F11 添加关联客户无对应端点(404)——原型 A3-1-1-2-4 有按钮(`/api/opportunity/customer/add`)
|
||
|
|
2. F11 客户搜索无对应端点(404)——添加弹窗第一步(`/api/opportunity/customer/search`)
|
||
|
|
3. F11 设为主要意向客户无对应端点(404)——原型 A3-1-1-1-2(`/api/opportunity/customer/set-primary`)
|
||
|
|
4. F12 添加团队成员无对应端点(404)——原型 A3-1-1-1-8 +添加成员(`/api/opportunity/team/add`)
|
||
|
|
5. F12 移除团队成员无对应端点(404)
|
||
|
|
6. F12 编辑团队成员角色无对应端点(404)
|
||
|
|
7. F05 暂缓态商机编辑未被拦截(PRD §3.3 受限出边违反,code=0 成功)
|
||
|
|
8. F14 暂缓态可直接关闭(迁移边约束缺失,§3.3 违反)
|
||
|
|
9. F14 禁领规则版本未生效(allowFreeClaim=0 发布后仍可自由领取)
|
||
|
|
|
||
|
|
**P2(7 条)**
|
||
|
|
10. F01 新建必填校验以系统异常(500 类「系统内部错误」)实现而非参数错误提示
|
||
|
|
11. F03 PUBLIC_POOL 看板合计未按视图状态口径过滤(summary=7 vs 视图内公海态=2)
|
||
|
|
12. F04 detail 联动字段未回显:节点停留天数/下阶段名/方案卡状态/方案预算/是否关注/最近跟进(PRD §7.9)
|
||
|
|
13. F09 方案卡提交后主表 schemeBudget/schemeCardStatus 未回显(多卡取值口径待人工核 P2-3;与 12 同根因)
|
||
|
|
14. F10 勘察次数需调用方传入(add 必填 surveySeq),与「次数自动生成」拍板(P1-2)不符
|
||
|
|
15. F10 现场勘察补充说明未强制必填(与拍板 P1-3 相反:空说明竟成功)
|
||
|
|
16. F13 oplog 未覆盖流转操作(A2 历经 release/claim/assign/close/reopen/handover 仅 2 条 ROW_CHANGE 留痕且 fieldName=null)
|
||
|
|
17. F08 attachment/add 可选参数 bizType 缺省即 50001(Controller 声明 optional vs 表 biz_type NOT NULL 无默认,契约矛盾;正路径须显式传值域 OPP/FOLLOW_UP/SITE_SURVEY/SCHEME_CARD)
|
||
|
|
|
||
|
|
### 契约事实(供票 08/10/11)
|
||
|
|
|
||
|
|
- 规则族:`ruleCode` 系统生成只读(入参侧忽略),识别/反查用 ruleName;`publish`=保存并发布(form 绑定完整 DTO,只传 id 报 64008「规则名称不能为空」);`save-draft` 是 Result<Void>(data=null),反查草稿按 ruleName+status=1
|
||
|
|
- 方案卡:selectable-templates 元素模板 ID 字段=`templateId`(无 id);customerId 写入必填 + 一客户一卡约束(66009);草稿与已提交均可编辑(card_status<3);submit 校验模板必填动态字段(66007)
|
||
|
|
- 编辑:`/api/opportunity/edit` 为 OpportunityDTO 整体 form 绑定——detail 全量回传时 LocalDateTime 值须 ISO 格式(空格→T),否则 40001 类型转换失败
|
||
|
|
- 自定义视图:`/api/preference/view/save` JSON body + `scopeKey` 是 @RequestParam(save/set-default/delete 都要 params 传);save 为 upsert 语义;list 出参不回显 scopeKey 字段
|
||
|
|
- 勘察:surveySeq 必填(调用方传);surveyDesc 非必填(实测与拍板相反)
|
||
|
|
- 状态机:CAS 守卫生效(前置态已变被拒「当前状态不允许此操作」);已关闭不可 resume ✓;E1-E9 主边全通过
|
||
|
|
- U01 复核:新建初始 oppStatus=2(推进中),与 seed 现象一致
|
||
|
|
|
||
|
|
### F08 补跑(20260828 凭据到位,SKIP 已清零)
|
||
|
|
|
||
|
|
用户提供的凭据实锤 **AK=admin / SK=Itc@123456**(消息里的「minio」实指 MinIO 密码;minio/minioadmin 均被服务端 InvalidAccessKeyId 拒绝)。后端带 `$env:CRM_MINIO_AK='admin'; $env:CRM_MINIO_SK='Itc@123456'` 重启后,脚本注入 `E2E_MINIO_AK/SK` 重跑 F08 全链:upload(MinIO 直传)→ attachment/add → list → delete → download 全部 ✅。新事实:FileInfoDTO 出参主键=`fileId`(String);缺陷 17 见上(bizType 契约矛盾,P2)。复现:凭据注入后 `python e2e-core.py F08`(自动走全链分支)。
|