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.

133 lines
11 KiB

1 week ago
# 票 07 · E2E 核心域实测结果(草稿章节)
> 运行时间:2026-08-28 14:54:55 · 数据基线:seed 12 条 + F01 新建 1 条 · 判定纪律见 map「判定纪律」
| 流程 | 用例 | 结论 | 证据 |
|---|---|---|---|
| F01 | convertible-leads 下拉接口 | ✅ | 返回 0 条可关联线索 |
| F01 | 必填校验(缺商机名称) | ✅ | 被拒: 系统内部错误,请稍后重试 |
| F01 | 新建商机 | ✅ | id=748556158666539008 |
| F01 | 初始负责人=当前用户 | ✅ | owner=744842565802524672 |
| F01 | 初始 oppStatus(U01 观察口径) | ✅ | 实测=2(PRD §3.1 取值域内;seed 同现象=2 推进中) |
| F01 | 新建后出现在 MINE 视图 | ✅ | MINE 命中 1 条 |
| F02 | A/MANAGE 视图 total=13 | ✅ | 期望 13(seed 校验值+F01 新建) |
| F02 | A/MINE 视图 total=5 | ✅ | 期望 5(seed 校验值+F01 新建) |
| F02 | A/PUBLIC_POOL 视图 total=2 | ✅ | 期望 2(seed 校验值+F01 新建) |
| F02 | A/FOLLOWED 视图 total=1 | ✅ | 期望 1(seed 校验值+F01 新建) |
| F02 | A/RECENT 初始(未上报前) | ✅ | total=0(空即符合「仅记录访问过的」) |
| F02 | A/PARTICIPATED | ✅ | total=0(观察值;seed 无团队成员样例,范围口径记录) |
| F02 | B/MINE 范围(公海态不计 MINE) | ✅ | total=4(期望 4:B 造 5 条-1 已入公海) |
| F02 | A/MINE 不含 B 商机(范围互斥) | ✅ | 混入: [] |
| F02 | keyword 筛选生效 | ✅ | 命中 2(应仅智慧园区 2 条-F01 无关词) |
| F02 | statusIn=1 筛选(公海态) | ✅ | total=2(期望 2) |
| F02 | page 出参回显列存在性 | ✅ | schemeCardStatus/stageStayDays/lastFollowTime 均在 |
| F02 | 有卡/有跟进商机的回显值非空 | ✅ | A2 行三列全有值 |
| F02 | 公海视图回显入池原因 poolReason | ✅ | poolReason=pool_reason_02 poolStageNameSnapshot=None |
| F03 | MANAGE summary 合计=7 vs page(=推进态(status2))=7 | ✅ | 口径: =推进态(status2) |
| F03 | board/cards 首批限量+翻页不重不漏 | ✅ | 首页=['748556125825138688'] 次页=['748556131550363648'] |
| F03 | PUBLIC_POOL summary 合计=7 vs page(=公海态(status1))=2 | ⚠ | 口径: 不吻合(全库推进态=7) |
| F04 | view-touch 上报 | ✅ | |
| F04 | detail 出参全性(PRD §7.9) | ⚠ | null 字段: 节点停留天数,下阶段名,方案卡状态,方案预算,是否关注,最近跟进 |
| F04 | detail.followed(A 已关注 B1,非 A2) | ✅ | A2.followed=None |
| F04 | RECENT 出现刚访问的商机 | ✅ | recent ids 前3=['748556125825138688', '748556126794022912'] |
| F04 | RECENT 倒序(后访问在前) | ✅ | A1 idx=0 A2 idx=1(A1 后 touch 应更靠前) |
| F05 | 编辑回写 | ✅ | |
| F05 | remark 已更新 | ✅ | remark=E2E改备注-14:54:55 |
| F05 | 暂缓态编辑受限(负路径) | ⚠ | 暂缓态仍可编辑!code=0 |
| F06 | unfocus 后 FOLLOWED=0 | ✅ | total=0 |
| F06 | focus 后 FOLLOWED=1 且 detail.followed=true | ⚠ | FOLLOWED=1 followed=None |
| F06 | focus-batch 两条 → FOLLOWED=3 | ✅ | total=3 |
| F06 | B 视角关注 A 商机(跨部门可见性) | ✅ | B_FOLLOWED=1 |
| F07 | 写跟进 | ✅ | id=748556179256377344 |
| F07 | 跟进分页 +1 | ✅ | 2 → 3 |
| F07 | lastFollowTime/lastValidFollowTime 刷新(回收锚点) | ✅ | last=None valid=2026-08-28 14:54:55 |
| F07 | delete 后分页 -1 | ✅ | 3 → 2 |
| F08 | file/upload(MinIO 直传) | ✅ | fileId=748556181395472384 name=e2e-attach.txt |
| F08 | add→list 出现 | ✅ | list 1 条 |
| F08 | 资料类型/出参结构 | ✅ | 字段示例: ['bizId', 'bizType', 'createTime', 'creatorId', 'deleteKey', 'deleted', 'fileId', 'id', 'materialType', 'oppId'] |
| F08 | delete 后消失 | ✅ | |
| F08 | 下载端点探测 /api/file/download | ✅ | HTTP 200(若 404 按缺陷候选核源码) |
| F09 | selectable-templates 含发布中模板 | ✅ | 1 条,templateId=748508098259320832 |
| F09 | valuesJson 装配(seed 卡 fields 骨架) | ✅ | fields=8 动态项=6 |
| F09 | 一客户一卡约束(同客户重复建卡被拒) | ✅ | 被拒: 该客户在本商机下已有方案卡(一客户一卡),请直接编辑原卡 |
| F09 | 新建方案卡草稿 | ✅ | cardId=748556187674345472 |
| F09 | 草稿态 cardStatus=1 | ✅ | cardStatus=1 |
| F09 | 草稿可编辑(card_status<3)+ 预算回写 | ✅ | budget=130000.0 |
| F09 | 提交后 cardStatus 推进 | ✅ | cardStatus=2 |
| F09 | 提交后主表 schemeBudget/schemeCardStatus 回显(P0-4 锚点) | ⚠ | 主表 budget=None cardStatus=None(多卡取值口径观察) |
| F09 | 多卡列表口径(2 张卡并列) | ✅ | 2 张 |
| F10 | 勘察次数自动生成(P1-2 拍板) | ⚠ | 不传 surveySeq 被拒——次数需调用方传,与拍板不符 |
| F10 | 新增勘察(传 surveySeq) | ✅ | id=748556192556515328 |
| F10 | 勘察次数自动生成(P1-2) | ✅ | surveySeq 列表=['survey_seq_01'] |
| F10 | 补充说明必填(P1-3 负路径) | ⚠ | 未拦截空说明! |
| F10 | 删除后次数重算(口径观察) | ✅ | 删后 surveySeq=['survey_seq_02'] |
| F11 | customer/list(seed DB 补入的关联客户) | ✅ | 2 条 |
| F11 | 出参结构(角色/快照/主要意向标记) | ✅ | role=customer_role_01 snapshot=园科集团(seed快照) primary=1 |
| F11 | primaryCustomerSnapshot 与 detail 回显一致 | ✅ | detail.primary=园科集团(快照) |
| F11 | 端点探测 /api/opportunity/customer/add | ❌ | HTTP 404 |
| F11 | 端点探测 /api/opportunity/customer/search | ❌ | HTTP 404 |
| F11 | 端点探测 /api/opportunity/customer/set-primary | ❌ | HTTP 404 |
| F12 | team/list | ✅ | 1 条(seed 无样例) |
| F12 | 端点探测 /api/opportunity/team/add | ❌ | HTTP 404 |
| F12 | 端点探测 /api/opportunity/team/delete | ❌ | HTTP 404 |
| F12 | 端点探测 /api/opportunity/team/update | ❌ | HTTP 404 |
| F12 | PARTICIPATED 视图(成员联动口径,无样例记录观察) | ✅ | total=0 |
| F14 | 暂缓 E4: 2→3 | ✅ | oppStatus=3 |
| F14 | 受限态出边(§3.3):暂缓不可直接关闭 | ⚠ | 竟成功!0 |
| F14 | 数据修正后回到暂缓态 | ✅ | oppStatus=3 |
| F14 | CAS 守卫(§3.4):前置态已变再提交 | ✅ | 被拒: 当前状态不允许此操作 |
| F14 | 取消暂缓 E5: 3→2 | ✅ | |
| F14 | 关闭 E6: 2→4 | ✅ | |
| F14 | 受限态出边:已关闭不可 resume | ✅ | 当前状态不允许此操作 |
| F14 | 重启 E7: 4→2 | ✅ | |
| F14 | 抛公海 E3: 2→1(公海 total) | ✅ | PUBLIC_POOL=4(期望 2+2) |
| F14 | poolReason 枚举落库+公海回显(§3.5) | ✅ | poolReason=pool_reason_02 |
| F14 | 领取 E1: 1→2 + 负责人变更 | ✅ | status=2 owner=744842566742048768 |
| F14 | 批量领取 | ✅ | |
| F14 | 分配 E2: 1→2 指定负责人 | ✅ | owner=744842565802524672 |
| F14 | 批量分配 | ✅ | |
| F14 | 批量关闭 | ✅ | |
| F14 | 移交 E9(自环换 owner) | ✅ | owner=744842566742048768 |
| F14 | U02 禁领规则草稿 | ✅ | id=748556215721656320 |
| F14 | U02 禁领版本发布 | ✅ | |
| F14 | U02 禁领负路径:领取被拒 | ⚠ | 禁领版发布后仍可领取! |
| F14 | 停用禁领版后恢复领取 | ✅ | |
| F14 | 切阶段前进(progress 当前节点变化) | ✅ | 当前节点={'nodeId': '747831302870269952', 'seqNo': 2, 'stageDictCode': 'OPP_STAGE_02', 'customNodeName': None, 'workGoal': None, 'isFixed': 0, 'nodeState': 'CURRENT'} |
| F14 | 切阶段回退 | ✅ | |
| F14 | 非法 toStageId 负路径 | ✅ | 目标阶段节点不存在或已被删除 |
| F13 | oplog/page(A2 经历 release/close/reopen/handover 应有多条) | ⚠ | 2 条 |
| F13 | oplog 字段(实体/字段/旧值/新值/说明 P1-5) | ✅ | keys=['bizRef', 'createTime', 'creatorId', 'deleted', 'entityName', 'fieldName', 'id', 'logType'] |
| F13 | oplog 覆盖内容(流转是否留痕观察) | ⚠ | 2 条: [('ROW_CHANGE', None), ('ROW_CHANGE', None)] |
| F13 | stage/history(切阶段 2 次应留痕) | ✅ | 2 条 |
| F13 | progress 节点名+完成状态(U08) | ✅ | 5 节点 |
| F13 | 工作目标文本存在性(U08 宽断言) | ⚠ | goal=False |
| F15 | save 视图 | ✅ | viewId=17367f4ea8184b82bc2ef10e9b648341 |
| F15 | list 查到新视图 | ✅ | |
| F15 | 同 viewId 重复 save(upsert 语义实测) | ✅ | 同 id 条数=1 name=e2e-A-改名视图 |
| F15 | set-default 回显默认标记 | ✅ | isDefault=True |
| F15 | scopeKey 维度隔离(lead 视图不串 opportunity 域;list 出参无 scopeKey 回显) | ✅ | lead names=['e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图', 'e2e-A-lead域视图'] / opportunity n |
| F15 | delete 后消失 | ✅ | |
| F15 | B 的 seed 视图不受影响 | ✅ | B 视图 1 条 |
## 缺陷清单(P0/P1/P2 初判,只记录不修复)
1. **[P2] F01 · 必填校验以系统异常(500 类)实现而非参数错误提示** —— 系统内部错误,请稍后重试
2. **[P2] F03 · PUBLIC_POOL 看板合计未按该视图状态口径过滤(summary=7,视图内目标态商机=2)** —— sum=7 page(statusIn=1)=2
3. **[P2] F04 · detail 联动字段未回显: ['节点停留天数', '下阶段名', '方案卡状态', '方案预算', '是否关注', '最近跟进']** —— {"id": "748556126794022912", "createTime": "2026-08-28 14:54:48", "updateTime": "2026-08-28 14:54:48", "oppName": "e2e-A-推进-智慧园区二期", "oppSource": "opp_source_02", "oppType": "", "industryCode": "gov", "bidForm": "bid_form_01", "localityType": "locality_type_01", "partyAClear": 1, "partyA": "E2E甲方·A-推进-智慧园区二期", "provinceCode": "", "cityCode": "", "remark": "票05 seed 造数样例(前端联调数据)", "projectAmount":
4. **[P1] F05 · 暂缓态商机编辑未被拦截** —— {"code": 0, "success": true, "message": "success", "data": null}
5. **[P2] F08 · attachment/add 可选参数 bizType 缺省即 50001(接口 optional vs 表 biz_type NOT NULL 契约矛盾)** —— 日志: Field 'biz_type' doesn't have a default value
6. **[P2] F09 · 方案卡提交后主表预算未回显(多卡时取值口径需人工核 P2-3)** ——
7. **[P2] F10 · 勘察次数需调用方传入(add 必填 surveySeq),与「次数自动生成」拍板不符** ——
8. **[P2] F10 · 现场勘察补充说明未强制必填** ——
9. **[P1] F11 · 添加关联客户(原型 A3-1-1-2-4 有按钮) 无对应端点(404)** —— /api/opportunity/customer/add
10. **[P1] F11 · 客户搜索(添加弹窗第一步) 无对应端点(404)** —— /api/opportunity/customer/search
11. **[P1] F11 · 设为主要意向客户(原型 A3-1-1-1-2) 无对应端点(404)** —— /api/opportunity/customer/set-primary
12. **[P1] F12 · 添加团队成员(原型 A3-1-1-1-8 +添加成员) 无对应端点(404)** —— /api/opportunity/team/add
13. **[P1] F12 · 移除团队成员 无对应端点(404)** —— /api/opportunity/team/delete
14. **[P1] F12 · 编辑团队成员角色 无对应端点(404)** —— /api/opportunity/team/update
15. **[P1] F14 · 暂缓态可直接关闭(迁移边约束缺失)** ——
16. **[P1] F14 · 禁领规则版本未生效(allowFreeClaim=0 仍可自由领取)** ——
17. **[P2] F13 · oplog 未覆盖全部操作(A2 经历 release/assign/close/reopen/handover 等仅 2 条留痕)** —— [('ROW_CHANGE', None), ('ROW_CHANGE', None)]
## SKIP