dingdanquanliucheng/COMPREHENSIVE_TEST_PLAN.md
2026-06-19 23:03:14 +08:00

1124 lines
64 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 订单全流程管理系统 — 完整测试计划
> **日期**: 2026-06-18
> **范围**: 后端 API (FastAPI) + Web Admin (Vue 3) + Web Sales (Vue 3) + 微信小程序
> **目标**: 覆盖系统全部功能模块,识别现有测试缺口,制定分优先级的测试执行计划
---
## 目录
1. [测试目标与策略](#1-测试目标与策略)
2. [测试环境要求](#2-测试环境要求)
3. [模块一:认证与授权](#3-模块一认证与授权)
4. [模块二:订单生命周期](#4-模块二订单生命周期)
5. [模块三:订单取消流程](#5-模块三订单取消流程)
6. [模块四:客户管理](#6-模块四客户管理)
7. [模块五:产品与分类管理](#7-模块五产品与分类管理)
8. [模块六:供应商管理](#8-模块六供应商管理)
9. [模块七:定价引擎](#9-模块七定价引擎)
10. [模块八:物流与配送](#10-模块八物流与配送)
11. [模块九AI 图像识别](#11-模块九ai-图像识别)
12. [模块十:文件管理](#12-模块十文件管理)
13. [模块十一:提醒中心](#13-模块十一提醒中心)
14. [模块十二:报表与统计](#14-模块十二报表与统计)
15. [模块十三:系统管理](#15-模块十三系统管理)
16. [模块十四:系统配置](#16-模块十四系统配置)
17. [模块十五:审计日志](#17-模块十五审计日志)
18. [模块十六WebSocket 实时推送](#18-模块十六websocket-实时推送)
19. [模块十七:微信小程序集成](#19-模块十七微信小程序集成)
20. [模块十八Web Admin 前端](#20-模块十八web-admin-前端)
21. [模块十九Web Sales 前端](#21-模块十九web-sales-前端)
22. [模块二十:跨模块端到端流程](#22-模块二十跨模块端到端流程)
23. [现有测试缺口汇总](#23-现有测试缺口汇总)
24. [测试执行优先级](#24-测试执行优先级)
25. [验收标准](#25-验收标准)
---
## 1. 测试目标与策略
### 1.1 测试目标
| 编号 | 目标 | 说明 |
|------|------|------|
| T-1 | 数据闭环 | 从创建到完成,所有业务数据在各环节完整传递 |
| T-2 | 状态机收敛 | 订单和物流任务的状态转换严格遵循定义的状态机 |
| T-3 | 权限隔离 | 4 种角色 (admin/manager/salesman/driver) 的数据和操作权限严格隔离 |
| T-4 | 配置驱动 | 定价规则、提醒规则等业务规则通过配置驱动,修改即时生效 |
| T-5 | 外部集成 | OCR、快递100、微信推送等外部服务的正确调用和异常处理 |
| T-6 | UI 回归 | 前端各页面的交互流程、数据展示、权限控制正确 |
### 1.2 测试层次
| 层次 | 占比 | 工具 | 说明 |
|------|------|------|------|
| 单元测试 | 40% | pytest | Service/Repository 层隔离测试 |
| API 集成测试 | 35% | pytest + TestClient | 端点级别请求/响应验证 |
| 前端 E2E 测试 | 15% | Playwright | 浏览器级别的用户操作流程 |
| 手动测试 | 10% | 人工 | 微信小程序、外部服务联调 |
### 1.3 角色定义
| 角色 | 代码 | 权限范围 |
|------|------|---------|
| 超级管理员 | admin | 全部功能 |
| 经理 | manager | 审批、报表、主数据管理、物流任务管理 |
| 业务员 | salesman | 创建/编辑/提交订单、客户管理、个人统计 |
| 司机 | driver | 接单、提货、送达、运单管理 |
---
## 2. 测试环境要求
### 2.1 后端测试
- Python 3.10+, pytest, httpx
- 内存 SQLite (单元/API测试) 或 MySQL测试库 (集成测试)
- Redis (WebSocket/Pub-Sub 测试)
- Mock 外部服务: Aliyun OSS, OCR, 快递100, 微信API, LLM
### 2.2 前端测试
- Node.js 18+, Playwright
- web-admin (port 5173), web-sales (port 5174)
- Chromium 浏览器
### 2.3 测试数据
- conftest.py 中已有的 fixtures: make_customer, make_product, make_supplier, make_order, make_task
- 7 个测试用户: admin01, sales01, sales02, manager01, driver01, driver02, secretary01
---
## 3. 模块一:认证与授权
### 3.1 登录功能
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUTH-001 | 管理员正常登录 | admin01/正确密码, role_type=admin | 返回 JWT token, 用户信息 | P0 | ✅ test_admin_login_success |
| AUTH-001b | 业务员正常登录 | sales01/正确密码, role_type=salesman | 返回 JWT token, 用户信息 | P0 | ✅ test_salesman_login_success |
| AUTH-001c | 经理正常登录 | manager01/正确密码, role_type=manager | 返回 JWT token, 用户信息 | P0 | ✅ test_manager_login_success |
| AUTH-001d | 司机正常登录 | driver01/正确密码, role_type=driver | 返回 JWT token, 用户信息 | P0 | ✅ test_driver_login_success |
| AUTH-002 | 密码错误 | admin01/错误密码 | 返回 401, 错误消息 | P0 | ✅ test_wrong_password |
| AUTH-003 | 角色不匹配 | sales01/正确密码, role_type=admin | 返回 401, 角色不匹配 | P0 | ✅ test_role_mismatch |
| AUTH-004 | 禁用用户登录 | 已禁用用户 | 返回 401, 用户已禁用 | P0 | ✅ test_disabled_user |
| AUTH-004b | 不存在的用户 | nonexistent_user | 返回 401 | P1 | ✅ test_nonexistent_user |
| AUTH-004c | 空用户名 | username="" | 返回 422 参数校验失败 | P1 | ❌ **缺失** |
| AUTH-004d | 空密码 | password="" | 返回 422 参数校验失败 | P1 | ❌ **缺失** |
| AUTH-004e | SQL注入尝试 | username="' OR 1=1 --" | 返回 401, 无注入 | P1 | ❌ **缺失** |
### 3.2 Token 管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUTH-005 | 无 Token 访问受保护接口 | 不带 Authorization header | 返回 401 | P0 | ✅ test_no_token_access |
| AUTH-006 | 无效 Token | Authorization: Bearer invalid_token | 返回 401 | P0 | ✅ test_invalid_token |
| AUTH-006b | 过期 Token | 使用已过期的 JWT | 返回 401 | P0 | ✅ test_expired_token |
| AUTH-006c | Token 自动续期 | Token 剩余 <30 天时请求 | 响应头包含 X-New-Token | P1 | **缺失** |
| AUTH-006d | 被注销的 Token | logout 后使用旧 token | 返回 401 | P0 | test_logout_token_invalidated |
| AUTH-006e | 并发 Token 刷新 | 多个请求同时触发续期 | 所有请求成功token 一致 | P2 | **缺失** |
### 3.3 用户信息
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUTH-010 | /me 返回用户菜单 | GET /api/auth/me | 返回用户可见的菜单树 | P0 | test_me_returns_menus |
| AUTH-011 | /me 返回权限列表 | GET /api/auth/me | 返回 permission_codes 列表 | P0 | test_me_returns_permissions |
| AUTH-011b | /me 返回角色信息 | GET /api/auth/me | 包含 role_code 字段 | P1 | test_me_returns_user_info |
### 3.4 微信登录
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUTH-012 | 微信手机号一键登录 | 有效 phone_code | 返回 JWT + 用户信息 | P0 | **缺失** |
| AUTH-012b | 微信登录 - 无效 code | 无效 phone_code | 返回 401 | P1 | **缺失** |
| AUTH-012c | 绑定 OpenID | POST /api/auth/bind-openid | 成功绑定 | P1 | **缺失** |
| AUTH-012d | 通过 wx.code 绑定 OpenID | POST /api/auth/bind-openid-by-code | 成功绑定 | P1 | **缺失** |
### 3.5 权限边界
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUTH-007 | 业务员不能审批订单 | salesman 调用 approve | 返回 403 | P0 | test_salesman_cannot_approve |
| AUTH-007b | 业务员不能管理系统 | salesman 调用 /api/system/* | 返回 403 | P0 | test_salesman_cannot_manage_system |
| AUTH-007c | 司机不能审批订单 | driver 调用 approve | 返回 403 | P0 | test_driver_cannot_approve |
| AUTH-009 | 司机无财务权限 | driver 查看订单财务字段 | 字段被隐藏/脱敏 | P0 | test_driver_no_financial_permissions |
| AUTH-009b | 经理不能管理用户 | manager 调用 /api/system/users | 返回 403 | P0 | test_manager_cannot_manage_users |
| AUTH-009c | 管理员全权限 | admin 调用所有接口 | 全部返回 200 | P0 | test_admin_can_do_everything |
| AUTH-009d | 业务员不能创建物流任务 | salesman 调用 POST /api/logistics/tasks | 返回 403 | P0 | **缺失** |
| AUTH-009e | 司机不能查看报表 | driver 调用 /api/reports/* | 返回 403 | P1 | test_driver_cannot_view_report |
---
## 4. 模块二:订单生命周期
### 4.1 创建订单
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-001 | 创建草稿订单 | 有效订单数据 + 行项 | 返回订单详情, status=draft | P0 | test_create_draft_order |
| ORD-002 | 新客户自动创建 | 订单中包含不存在的客户名+手机 | 自动创建客户记录 | P0 | test_new_customer_auto_created |
| ORD-003 | 利润自动计算 | 有成本价和售价的行项 | profit = 售价总额 - 成本总额 | P0 | test_profit_calculation |
| ORD-004 | 固定佣金保存 | commission_amount=500 | 记录佣金金额 | P1 | **缺失** |
| ORD-005 | 无行项订单拒绝 | items=[] | 返回 400 | P0 | test_create_order_no_items |
| ORD-006 | 数量为零拒绝 | quantity=0 | 返回 400 | P0 | test_create_order_zero_quantity |
| ORD-006b | 负数价格拒绝 | unit_price=-10 | 返回 400 | P1 | **缺失** |
| ORD-006c | 缺少必填字段 | 缺少 customer_name | 返回 422 | P1 | **缺失** |
| ORD-006d | 禁用产品不能下单 | 行项包含已禁用产品 | 返回 400 | P0 | test_disabled_product_cannot_order |
| ORD-006e | 超长备注截断 | remark 10000字 | 正常保存或截断 | P2 | **缺失** |
| ORD-021 | 管理员代业务员创建 | admin 指定 salesman_id | 订单归属指定业务员 | P1 | **缺失** (admin create) |
### 4.2 编辑订单
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-017 | 编辑草稿订单 | 修改行项和金额 | 更新成功金额重算 | P0 | test_edit_draft_order |
| ORD-017b | 编辑非草稿订单 | 编辑 pending_approve 订单 | 返回 400只能编辑草稿 | P0 | **缺失** |
| ORD-017c | 他人订单不能编辑 | sales01 编辑 sales02 的订单 | 返回 403 404 | P0 | **缺失** |
| ORD-017d | 管理员可编辑任意订单 | admin 编辑任意业务员订单 | 更新成功 | P1 | **缺失** |
### 4.3 提交审批
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-007 | 提交草稿订单 | POST /{id}/submit | status pending_approve | P0 | test_submit_order_success |
| ORD-008 | 重复提交拒绝 | pending_approve 订单再次提交 | 返回 400 | P0 | test_double_submit |
| ORD-018 | 保存并提交 | 创建时直接提交 | status pending_approve | P1 | **缺失** |
### 4.4 审批流程
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-009 | 审批通过 | manager 审批 pending_approve 订单 | status approved, 写入审批日志 | P0 | test_approve_order_success |
| ORD-010 | 审批拒绝 | manager 拒绝 pending_approve 订单 | status rejected, 写入拒绝原因 | P0 | test_reject_order_success |
| ORD-010b | 审批非待审订单 | 审批 draft 订单 | 返回 400 | P0 | test_approve_non_pending_order |
| ORD-010c | 业务员不能审批 | salesman 调用审批接口 | 返回 403 | P0 | test_salesman_cannot_approve |
| ORD-019 | 审批详情显示利润 | 审批详情页 | 显示利润计算明细 | P1 | **缺失** |
| ORD-020 | 拒绝后通知业务员 | 拒绝订单 | 业务员收到提醒通知 | P1 | **缺失** |
### 4.5 供应商文本
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-011 | 生成供应商文本 | approved 订单生成文本 | 返回生成的文本内容 | P0 | test_generate_supplier_text |
| ORD-012 | 确认供应商文本 | 确认文本 | status pending_factory, 记录日志 | P0 | test_confirm_supplier_text |
| ORD-013 | 未审批订单不能确认文本 | 对非 approved 订单确认 | 返回 400 | P0 | test_confirm_text_not_approved |
### 4.6 状态流转
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-022 | 完整状态流转 | draftpendingapprovedpending_factory | 每步状态正确 | P0 | test_full_status_flow |
| ORD-022b | 手动变更状态 | POST /{id}/status | 管理员可手动推进状态 | P1 | **缺失** |
| ORD-022c | 非法状态转换 | pending_factory draft | 返回 400 | P0 | **缺失** |
### 4.7 订单查询
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ORD-014 | 订单列表查询 | GET /api/orders | 返回分页列表 | P0 | test_list_orders |
| ORD-014b | 按状态筛选 | ?status=draft | 只返回 draft 订单 | P1 | **缺失** |
| ORD-014c | 按客户名筛选 | ?customer_name= | 匹配客户名 | P1 | **缺失** |
| ORD-014d | 按日期范围筛选 | ?start_date=&end_date= | 匹配日期范围 | P1 | **缺失** |
| ORD-014e | 分页参数 | ?page=2&page_size=10 | 返回第2页10条 | P1 | **缺失** |
| ORD-015 | 业务员查看详情-无财务字段 | salesman 查看详情 | 隐藏成本/利润字段 | P0 | test_salesman_order_detail_no_finance |
| ORD-016 | 经理查看详情-含财务字段 | manager 查看详情 | 显示成本/利润字段 | P0 | test_manager_order_detail_with_finance |
---
## 5. 模块三:订单取消流程
### 5.1 直接取消
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CAN-001 | 取消草稿订单 | 取消 draft 订单 | status canceled | P0 | test_cancel_draft_order |
| CAN-002 | 取消待审批订单 | 取消 pending_approve 订单 | status canceled | P0 | test_cancel_pending_approve_order |
| CAN-007 | 重复取消拒绝 | 对已取消订单再次取消 | 返回 400 | P0 | test_already_canceled_order |
| CAN-008 | 取消必须填原因 | 不填 cancel_reason | 返回 400 | P0 | test_cancel_reason_required |
### 5.2 审批后取消 (取消审批流)
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CAN-003 | 已审批订单申请取消 | 提交取消申请 | status cancel_pending | P0 | test_approved_order_cancel_request |
| CAN-005 | 管理员批准取消 | manager 批准 | status canceled | P0 | test_cancel_approved_by_manager |
| CAN-006 | 管理员拒绝取消 | manager 拒绝 | status 恢复原状态 | P0 | test_cancel_rejected_by_manager |
### 5.3 履行阶段取消
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CAN-004 | 履行阶段申请取消 | pending_factory 订单申请取消 | status cancel_pending | P0 | test_fulfillment_cancel_request |
| CAN-009 | 履行取消批准 | 批准履行阶段取消 | status canceled | P0 | test_fulfillment_cancel_approved |
| CAN-010 | 履行取消拒绝 | 拒绝履行阶段取消 | status 恢复 | P0 | test_fulfillment_cancel_rejected |
| CAN-011 | 取消审计日志 | 取消操作 | 记录操作日志 | P0 | test_cancel_audit_log |
| CAN-011b | 已完成订单不能取消 | 完成的订单申请取消 | 返回 400 | P1 | **缺失** |
---
## 6. 模块四:客户管理
### 6.1 CRUD 操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CUS-001 | 创建客户 | 有效数据 | 创建成功, 返回详情 | P0 | test_create_customer_success |
| CUS-002 | 重复客户检测 | 同名+同手机号 | 返回 400 或提示重复 | P0 | test_duplicate_customer_name_mobile |
| CUS-003 | 手机号必填 | mobile 为空 | 返回 422 | P0 | test_customer_mobile_required |
| CUS-003b | 无效手机号格式 | mobile="abc" | 返回 422 | P1 | **缺失** |
| CUS-004 | 列表筛选 | ?name=张&phone=138 | 筛选正确 | P1 | test_filter_customers_by_name |
| CUS-004b | 按结算方式筛选 | ?settlement=月结 | 筛选正确 | P1 | **缺失** |
| CUS-004c | 按客户类型筛选 | ?type=企业 | 筛选正确 | P1 | **缺失** |
| CUS-005 | 客户详情 | GET /{id} | 返回完整客户信息 | P1 | test_customer_detail |
| CUS-005b | 更新客户 | PUT /{id} | 更新成功 | P1 | **缺失** |
### 6.2 权限与数据隔离
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CUS-008 | 业务员只能看自己的客户 | salesman 查询 | 只返回自己的客户 | P0 | test_salesman_only_see_own_customers |
| CUS-008b | 管理员看全部客户 | admin 查询 | 返回所有客户 | P0 | test_admin_see_all_customers |
| CUS-008c | 经理看全部客户 | manager 查询 | 返回所有客户 | P1 | **缺失** |
### 6.3 批量导入
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CUS-006 | 下载导入模板 | GET /import-template | 返回 Excel 文件 | P1 | **缺失** |
| CUS-006b | 批量导入客户 | POST /import 上传 Excel | 成功导入, 返回统计 | P1 | **缺失** |
| CUS-006c | 导入重复客户 | Excel 中含已有客户 | 跳过或更新, 报告结果 | P1 | **缺失** |
| CUS-006d | 导入格式错误 | Excel 格式不正确 | 返回错误提示 | P1 | **缺失** |
### 6.4 删除操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CUS-007 | 软删除客户 | DELETE /{id} | deleted=1, 不再列表显示 | P1 | **缺失** |
| CUS-007b | 硬删除客户 | DELETE /{id}/permanent | 物理删除 | P1 | **缺失** |
| CUS-007c | 有活跃订单的客户不能硬删 | 硬删有订单的客户 | 返回 400 | P0 | **缺失** |
| CUS-007d | 批量删除 | POST /batch-delete | 批量软/硬删除 | P1 | **缺失** |
### 6.5 客户欠款
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CUS-009 | 月结客户标记 | 查看月结客户详情 | is_monthly=true | P1 | test_monthly_customer_flag |
| CUS-010 | 欠款信息展示 | 客户详情含欠款 | 显示欠款金额和到期日 | P1 | **缺失** |
---
## 7. 模块五:产品与分类管理
### 7.1 分类管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PROD-001 | 创建分类 | 有效数据 | 创建成功 | P1 | test_create_category_success |
| PROD-002 | 分类编码重复 | 重复 code | 返回 400 | P1 | test_duplicate_category_code |
| PROD-003 | 禁用分类 | 禁用已有产品的分类 | 禁用成功 | P1 | test_disable_category |
| PROD-003b | 硬删除有产品的分类 | DELETE permanent | 返回 400 | P1 | **缺失** |
| PROD-003c | 批量删除分类 | POST batch-delete | 批量删除 | P1 | **缺失** |
### 7.2 产品管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PROD-004 | 创建产品 | 有效数据 + 规格 | 创建成功, 含规格列表 | P1 | test_create_product_success |
| PROD-005 | 产品列表筛选 | 多条件筛选 | 筛选正确 | P1 | test_product_list_filter |
| PROD-006 | 产品详情 | GET /{id} | 返回产品+规格列表 | P1 | test_product_detail |
| PROD-007 | 禁用产品标记 | 查看禁用产品 | disabled=true | P1 | test_disabled_product_flag |
| PROD-007b | 产品多规格 | 添加多个规格 | 规格列表正确 | P1 | **缺失** |
| PROD-007c | 设置默认规格 | PUT specifications/default | 默认规格更新 | P1 | **缺失** |
| PROD-007d | 硬删除有定价规则的产品 | DELETE permanent | 返回 400 | P1 | **缺失** |
### 7.3 产品快照
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PROD-008 | 历史订单快照不变 | 修改产品后查看历史订单 | 订单行项数据保持不变 | P0 | **缺失** |
---
## 8. 模块六:供应商管理
### 8.1 CRUD 操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| FAC-001 | 创建供应商 | 有效数据 | 创建成功 | P1 | test_create_supplier_success |
| FAC-002 | 供应商列表筛选 | 多条件筛选 | 筛选正确 | P1 | test_supplier_list_filter |
| FAC-002b | 供应商详情 | GET /{id} | 返回完整信息 | P1 | test_supplier_detail |
| FAC-002c | 更新供应商 | PUT /{id} | 更新成功 | P1 | **缺失** |
| FAC-002d | 软删除供应商 | DELETE /{id} | deleted=1 | P1 | **缺失** |
| FAC-002e | 硬删除有订单的供应商 | DELETE /{id}/permanent | 返回 400 | P1 | **缺失** |
| FAC-002f | 批量删除供应商 | POST /batch-delete | 批量删除 | P1 | **缺失** |
---
## 9. 模块七:定价引擎
### 9.1 定价规则
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PRICE-001 | 创建面积定价规则 | pricing_type=area | 规则创建成功 | P0 | **缺失** (独立测试) |
| PRICE-002 | 创建重量定价规则 | pricing_type=kg | 规则创建成功 | P0 | **缺失** |
| PRICE-003 | 创建按件定价规则 | pricing_type=unit | 规则创建成功 | P1 | **缺失** |
| PRICE-004 | 创建按米定价规则 | pricing_type=linear_m | 规则创建成功 | P1 | **缺失** |
| PRICE-005 | 更新定价规则 | PUT /{id} | 更新成功 | P1 | **缺失** |
| PRICE-006 | 删除定价规则 | DELETE /{id} | 软删除成功 | P1 | **缺失** |
| PRICE-007 | 按产品查询定价规则 | GET /{product_id} | 返回该产品的规则 | P1 | **缺失** |
### 9.2 报价计算
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PRICE-010 | 面积报价计算 | =1m, =2m, 单价=10 | 面积=2㎡, 总价=20 | P0 | **缺失** |
| PRICE-011 | 重量报价计算 | 重量=5kg, 单价=8 | 总价=40 | P0 | **缺失** |
| PRICE-012 | 附加费计算(按面积) | surcharge_method=per_sqm | 附加费 = 面积 × 单价 | P0 | **缺失** |
| PRICE-013 | 附加费计算(按件) | surcharge_method=per_piece | 附加费 = 数量 × 单价 | P1 | **缺失** |
| PRICE-014 | 附加费计算(按米) | surcharge_method=per_linear_m | 附加费 = 米数 × 单价 | P1 | **缺失** |
| PRICE-015 | 附加费计算(阈值) | surcharge_method=per_sqm_threshold | 超阈值部分计费 | P1 | **缺失** |
| PRICE-016 | 含税计算 | tax_inclusive=true | 价格已含税 | P0 | **缺失** |
| PRICE-017 | 不含税计算 | tax_inclusive=false, tax_rate=0.13 | 价格 + 13% | P0 | **缺失** |
| PRICE-018 | 客户等级定价 | price_tier=tier1 | 使用 tier1 价格 | P1 | **缺失** |
| PRICE-019 | 条件公式计算 | $input.xxx 的公式 | 公式正确求值 | P0 | **缺失** |
| PRICE-020 | 无定价规则的产品 | 无规则产品报价 | 返回错误或默认值 | P1 | **缺失** |
### 9.3 供应商成本
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PRICE-030 | 创建供应商成本 | 有效数据 | 创建成功 | P1 | **缺失** |
| PRICE-031 | 查询供应商成本 | GET /supplier-costs?product_id= | 返回成本列表 | P1 | **缺失** |
| PRICE-032 | 更新供应商成本 | PUT /{id} | 更新成功 | P1 | **缺失** |
| PRICE-033 | 删除供应商成本 | DELETE /{id} | 软删除成功 | P1 | **缺失** |
### 9.4 价格等级
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| PRICE-040 | 创建价格等级 | 有效数据 | 创建成功 | P1 | **缺失** |
| PRICE-041 | 查询价格等级 | GET /price-tiers?product_id= | 返回等级列表 | P1 | **缺失** |
| PRICE-042 | 更新价格等级 | PUT /{id} | 更新成功 | P1 | **缺失** |
| PRICE-043 | 删除价格等级 | DELETE /{id} | 软删除成功 | P1 | **缺失** |
---
## 10. 模块八:物流与配送
### 10.1 物流任务管理 (管理员/经理)
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| TASK-001 | 创建物流任务 | 有效数据 | 任务创建, status=pending | P0 | test_create_task_success |
| TASK-001b | 无效订单创建任务 | 不存在的 order_id | 返回 400 | P0 | test_create_task_invalid_order |
| TASK-001c | 任务列表查询 | GET /api/logistics/tasks | 返回分页列表 | P1 | **缺失** |
| TASK-001d | 任务详情 | GET /api/logistics/tasks/{id} | 返回任务详情 | P1 | **缺失** |
| TASK-001e | 更新运单号 | PUT /{id}/tracking | tracking_number 更新 | P1 | **缺失** |
| TASK-001f | 取消物流任务 | POST /{id}/cancel | status canceled | P1 | **缺失** |
### 10.2 司机任务操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| TASK-002 | 司机只能看自己的任务 | driver 查询 | 只返回自己的任务 | P0 | test_driver_only_see_own_tasks |
| TASK-003 | 司机详情无财务字段 | driver 查看详情 | 隐藏财务信息 | P0 | test_driver_task_detail_no_financial |
| TASK-004 | 接受任务 | POST /accept | status accepted | P0 | test_accept_task_success |
| TASK-005 | 重复接单拒绝 | 对已接受任务再次 accept | 返回 400 | P0 | test_double_accept |
| TASK-006 | 提货 | POST /pickup | status picked_up | P0 | test_pickup_success |
| TASK-007 | 无照片提货 | photo | 返回 400 或允许 | P1 | test_pickup_without_photo |
| TASK-008 | 送达确认 | POST /deliver | status delivered | P0 | test_deliver_success |
| TASK-009 | 非法状态操作 | pending 状态直接 deliver | 返回 400 | P0 | test_pickup_from_wrong_status / test_deliver_from_wrong_status |
| TASK-010 | 司机不能看他人任务 | driver 查看其他司机任务 | 返回 403 或空 | P0 | test_driver_cannot_see_other_tasks |
| TASK-011 | 提货撤回 | 提货后撤回 | status 回退 | P2 | **缺失** |
| TASK-012 | 完整任务流程 | pendingacceptedpicked_updelivered | 每步状态正确 | P0 | test_full_task_flow |
| TASK-012b | 任务状态同步订单 | 任务完成后订单状态更新 | 订单状态同步 | P0 | test_task_creation_updates_order |
### 10.3 运单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| TASK-013 | OCR 识别运单号 | POST /recognize-waybill | 返回识别的运单号 | P1 | **缺失** |
| TASK-013b | 批量提交运单号 | POST /{id}/waybills | 批量创建运单记录 | P1 | **缺失** |
| TASK-013c | 查询运单列表 | GET /{id}/waybills | 返回运单列表 | P1 | **缺失** |
| TASK-013d | 删除运单 | DELETE /{id}/waybills/{wid} | 删除运单记录 | P1 | **缺失** |
### 10.4 物流轨迹
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| LOG-001 | 手动添加物流轨迹 | POST /{order_id}/trace | 轨迹记录创建 | P1 | **缺失** |
| LOG-002 | 查询物流轨迹 | GET /{order_id}/trace | 返回轨迹列表 | P1 | **缺失** |
| LOG-003 | 物流超时提醒 | 超过配置天数 | 生成超时提醒 | P1 | **缺失** |
| LOG-004 | 不重复生成超时提醒 | 已有提醒的物流 | 不重复创建 | P1 | **缺失** |
| LOG-005 | 快递100集成查询 | 查询第三方物流 | 返回轨迹节点 | P1 | **缺失** |
---
## 11. 模块九AI 图像识别
### 11.1 OCR 识别
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AI-001 | 图片识别成功 | POST /ai/recognize | 返回识别结果 | P1 | 仅DB级别, 未调API |
| AI-002 | 识别失败处理 | 无效图片URL | 返回错误提示 | P1 | **缺失** |
| AI-005 | 低置信度识别 | 识别结果 confidence < 0.6 | 标记为低置信度 | P1 | 仅DB级别 |
### 11.2 人工校正
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AI-003 | 人工校正识别结果 | POST /{log_id}/correct | 更新识别结果 | P1 | 仅DB级别 |
| AI-004 | 确认识别结果入库 | 确认后创建订单 | 订单创建成功 | P1 | **缺失** |
### 11.3 文本解析
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AI-006 | 文本解析订单 | POST /ai/parse-order (text) | 返回解析结果 | P1 | **缺失** |
| AI-006b | 图片解析订单 | POST /ai/parse-order (image) | 返回解析结果 | P1 | **缺失** |
| AI-006c | 空文本解析 | text="" | 返回错误 | P1 | **缺失** |
### 11.4 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AI-007 | 秘书可访问 AI | secretary 调用 | 返回 200 | P1 | test_secretary_can_access_ai |
| AI-007b | 业务员不能访问 AI 识别 | salesman 调用 /recognize | 返回 403 | P1 | test_salesman_cannot_access_ai |
| AI-007c | 业务员可调用文本解析 | salesman 调用 /parse-order | 返回 200 | P1 | **缺失** |
---
## 12. 模块十:文件管理
### 12.1 文件上传
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| FILE-001 | 获取上传凭证 | POST /upload-token | 返回 OSS 上传凭证 | P1 | 接受200或404 |
| FILE-002 | 上传图片 | 上传 jpg/png | 上传成功 | P1 | 接受200或404 |
| FILE-003 | 上传视频 | 上传 mp4 | 上传成功 | P1 | 接受200或404 |
| FILE-004 | 文件过大拒绝 | 上传 >10MB 文件 | 返回 400 | P1 | ❌ **缺失** |
| FILE-005 | OSS 服务异常 | 模拟 OSS 故障 | 返回 500 + 友好提示 | P2 | ❌ **缺失** |
### 12.2 文件关联
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| FILE-006 | 保存附件关联 | POST /attachments | biz_type + biz_id 关联成功 | P1 | ⚠️ 弱断言 |
| FILE-006b | 查询关联附件 | GET /attachments?biz_type=&biz_id= | 返回附件列表 | P1 | ❌ **缺失** |
| FILE-006c | 本地开发上传 | POST /local-upload | 文件保存到本地 | P1 | ❌ **缺失** |
### 12.3 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| FILE-007 | 未认证不能上传 | 不带 token | 返回 401 | P1 | ✅ test_unauthenticated_upload |
---
## 13. 模块十一:提醒中心
### 13.1 欠款提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ARR-001 | 发货模式生成欠款 | arrears_generate_mode=shipped | 发货后生成欠款记录 | P0 | ⚠️ 仅验证配置 |
| ARR-002 | 送达模式生成欠款 | arrears_generate_mode=delivered | 送达后生成欠款记录 | P0 | ⚠️ 仅验证配置 |
| ARR-003 | 未到节点不生成欠款 | 未发货/未送达 | 无欠款记录 | P1 | ❌ **缺失** |
| ARR-004 | 结算欠款 | settle arrears | 欠款状态更新 | P1 | ✅ test_settle_arrears |
| ARR-005 | 超期欠款提醒 | 欠款超过到期日 | 生成超期提醒 | P0 | ❌ **缺失** |
| ARR-009 | 欠款起算类型切换 | 切换 arrears_reminder_start_type | 新类型生效 | P1 | ❌ **缺失** |
### 13.2 沉默客户提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ARR-006 | 沉默客户检测 | 超过 inactive_customer_days | 生成沉默客户提醒 | P1 | ⚠️ 仅配置检查 |
| ARR-007 | 阈值配置 | 设置 inactive_order_amount_threshold | 阈值生效 | P1 | ✅ test_inactive_customer_threshold |
| ARR-010 | 提醒指向业务员 | 检测到沉默客户 | 提醒发送给对应业务员 | P1 | ❌ **缺失** |
### 13.3 物流超时提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| LOG-003 | 物流超时检测 | 超过 logistics_timeout_days | 生成超时提醒 | P1 | ❌ **缺失** |
### 13.4 提醒管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ARR-008 | 标记已读 | POST /{id}/read | is_read=true | P1 | ✅ test_mark_reminder_read |
| ARR-008b | 提醒列表查询 | GET /api/reminders | 分页列表 | P1 | ✅ test_reminder_list |
| ARR-008c | 提醒统计 | GET /api/reminders/dashboard | 返回统计摘要 | P1 | ❌ **缺失** |
| ARR-008d | 按类型筛选 | ?type=arrears | 只返回欠款提醒 | P1 | ❌ **缺失** |
| ARR-008e | 按状态筛选 | ?status=unread | 只返回未读提醒 | P1 | ❌ **缺失** |
### 13.5 手动触发检测
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ARR-011b | 触发全部检测 | POST /check-all | 执行所有检测 | P1 | ❌ **缺失** |
| ARR-011c | 触发欠款检测 | POST /arrears/check | 执行欠款检测 | P1 | ❌ **缺失** |
| ARR-011d | 触发沉默客户检测 | POST /inactive-customers/check | 执行检测 | P1 | ❌ **缺失** |
| ARR-011e | 触发物流超时检测 | POST /logistics-timeout/check | 执行检测 | P1 | ❌ **缺失** |
| ARR-011f | 业务员不能触发检测 | salesman 调用 check | 返回 403 | P1 | ❌ **缺失** |
### 13.6 微信推送
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ARR-011 | 微信订阅消息推送 | 订单状态变更 | 发送微信模板消息 | P2 | ❌ **缺失** |
| ARR-011g | 推送失败处理 | 微信API异常 | 记录错误, 不阻塞主流程 | P2 | ❌ **缺失** |
---
## 14. 模块十二:报表与统计
### 14.1 绩效报表
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| REP-001 | 月度报表查询 | stat_type=monthly | 返回月度统计 | P0 | ✅ test_monthly_report |
| REP-002 | 季度报表查询 | stat_type=quarterly | 返回季度统计 | P1 | ❌ **缺失** |
| REP-003 | 年度报表查询 | stat_type=yearly | 返回年度统计 | P1 | ❌ **缺失** |
| REP-004 | 按品类统计 | ?category_id= | 返回品类统计 | P1 | ✅ test_category_report |
| REP-004b | 按业务员筛选 | ?salesman_id= | 返回该业务员统计 | P1 | ❌ **缺失** |
| REP-004c | 排除电商订单 | ?exclude_ecommerce=true | 不含电商订单 | P1 | ❌ **缺失** |
| REP-004d | 默认统计类型 | 不传 stat_type | 返回默认类型 | P1 | ✅ test_default_stat_type |
### 14.2 报表导出
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| REP-007 | 导出 CSV | GET /export?format=csv | 返回 CSV 文件 | P1 | ✅ test_export_report |
| REP-007b | 导出 XLSX | GET /export?format=xlsx | 返回 XLSX 文件 | P1 | ❌ **缺失** |
| REP-008 | 报表金额校验 | 对比报表和原始数据 | 金额一致 | P1 | ❌ **缺失** |
### 14.3 报表审计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| REP-009 | 报表审计查询 | GET /reports/audit | 返回审计数据 | P1 | ❌ **缺失** |
| REP-009b | 异常佣金检测 | 佣金率 >15% 或 <1% | 标记异常 | P1 | **缺失** |
### 14.4 业务员统计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| REP-010 | 业务员仪表盘 | GET /salesman/dashboard | 返回统计摘要 | P1 | **缺失** |
| REP-010b | //月统计 | ?period=day/week/month | 返回对应周期统计 | P1 | **缺失** |
| REP-010c | TOP 客户排名 | 查询 top_customers | 返回排名列表 | P1 | **缺失** |
### 14.5 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| REP-005 | 业务员不能查看报表 | salesman 调用 /reports/performance | 返回 403 | P0 | test_salesman_cannot_view_report |
| REP-006 | 司机不能查看报表 | driver 调用 | 返回 403 | P1 | test_driver_cannot_view_report |
| REP-006b | 经理可查看报表 | manager 调用 | 返回 200 | P1 | test_manager_can_view_report |
| REP-006c | 管理员可查看报表 | admin 调用 | 返回 200 | P1 | test_admin_can_view_report |
| REP-006d | 业务员不能导出报表 | salesman 调用 /export | 返回 403 | P1 | test_salesman_cannot_export_report |
---
## 15. 模块十三:系统管理
### 15.1 用户管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| SYS-001 | 创建用户 | 有效数据 | 创建成功 | P0 | test_create_user_success |
| SYS-002 | 用户名重复 | 重复 username | 返回 400 | P0 | test_duplicate_username |
| SYS-003 | 无效角色ID | role_id 不存在 | 返回 400 | P1 | **缺失** |
| SYS-004 | 禁用用户 | POST /status | enabled=false | P0 | test_disable_user |
| SYS-005 | 重置密码 | POST /reset-password | 密码重置成功 | P0 | test_reset_password |
| SYS-015 | 用户列表 | GET /system/users | 返回用户列表 | P1 | test_user_list |
| SYS-016 | 用户列表筛选 | ?name=&role=&status= | 筛选正确 | P1 | **缺失** |
| SYS-016b | 删除用户 | DELETE /{id} | 物理删除 | P1 | **缺失** |
| SYS-016c | 永久删除用户 | DELETE /{id}/permanent | 物理删除 | P1 | **缺失** |
| SYS-016d | 批量删除用户 | POST /batch-delete | 批量删除 | P1 | **缺失** |
| SYS-016e | 不能删除自己 | admin 删除自己 | 返回 400 | P1 | **缺失** |
### 15.2 角色管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| SYS-006 | 创建角色 | 有效数据 | 创建成功 | P1 | test_create_role_success |
| SYS-007 | 角色编码重复 | 重复 role_code | 返回 400 | P1 | test_duplicate_role_code |
| SYS-008 | 禁用有用户的角色 | 禁用有用户的角色 | 返回 400 或警告 | P1 | **缺失** |
| SYS-008b | 角色列表 | GET /system/roles | 返回角色列表 | P1 | test_role_list |
| SYS-008c | 删除角色 | DELETE /{id} | 物理删除 | P1 | **缺失** |
| SYS-008d | 永久删除角色 | DELETE /{id}/permanent | 物理删除 | P1 | **缺失** |
| SYS-008e | 批量删除角色 | POST /batch-delete | 批量删除 | P1 | **缺失** |
### 15.3 菜单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| SYS-009 | 创建菜单 | 有效数据 | 创建成功 | P1 | test_create_menu_success |
| SYS-010 | 权限编码重复 | 重复 permission_code | 返回 400 | P1 | test_duplicate_permission_code |
| SYS-011 | 菜单父级设为自身 | parent_id = 自身 id | 返回 400 | P1 | **缺失** |
| SYS-011b | 菜单树查询 | GET /system/menus | 返回树形结构 | P1 | test_menu_tree |
| SYS-011c | 更新菜单 | PUT /{id} | 更新成功 | P1 | **缺失** |
### 15.4 角色-菜单授权
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| SYS-012 | 保存角色菜单 | PUT /{role_id}/menus | 关联成功 | P0 | test_save_role_menus |
| SYS-012b | 查询角色菜单 | GET /{role_id}/menus | 返回菜单列表 | P1 | **缺失** |
| SYS-012c | 角色菜单覆盖更新 | 重新分配菜单 | 旧关联删除, 新关联建立 | P1 | **缺失** |
### 15.5 权限边界
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| SYS-013 | 业务员不能访问系统管理 | salesman 调用 /api/system/* | 返回 403 | P0 | test_salesman_cannot_access_system |
| SYS-013b | 司机不能访问系统管理 | driver 调用 /api/system/* | 返回 403 | P0 | test_driver_cannot_access_system |
| SYS-013c | 经理不能管理用户 | manager 调用 /api/system/users | 返回 403 | P0 | test_manager_cannot_manage_users |
| SYS-013d | 管理员全权限 | admin 调用所有接口 | 全部 200 | P0 | test_admin_full_access |
| SYS-014 | 权限变更审计 | 修改角色权限 | 记录审计日志 | P1 | **缺失** |
---
## 16. 模块十四:系统配置
### 16.1 配置读写
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CFG-001 | 查询配置项 | GET /configs/{key} | 返回配置值 | P1 | test_query_config |
| CFG-002 | 更新配置项 | PUT /configs/{key} | 更新成功 | P1 | test_update_config |
| CFG-003 | 查询不存在的配置 | GET /不存在的key | 返回默认值或 404 | P1 | test_query_nonexistent_config |
| CFG-004 | 更新物流超时天数 | key=logistics_timeout_days | 更新成功 | P1 | test_update_logistics_timeout |
| CFG-005 | 更新沉默客户天数 | key=inactive_customer_days | 更新成功 | P1 | test_update_inactive_customer_days |
| CFG-006 | 更新金额阈值 | key=inactive_order_amount_threshold | 更新成功 | P1 | test_update_amount_threshold |
| CFG-007 | 配置即时生效 | 更新配置后不重启 | 新配置立即生效 | P1 | **缺失** |
### 16.2 安全问题
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| CFG-008 | 配置接口应有认证 | 不带 token 访问 | **应返回 401** (当前无认证) | P0 | **已跳过 - 安全缺口** |
| CFG-009 | 业务员不能修改配置 | salesman PUT | **应返回 403** (当前无认证) | P0 | **已跳过 - 安全缺口** |
---
## 17. 模块十五:审计日志
### 17.1 审计记录
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUD-001 | 订单创建审计 | 创建订单 | 写入审计日志 | P0 | **断言被注释** |
| AUD-002 | 审批操作审计 | 审批订单 | 写入审计日志 | P0 | **断言被注释** |
| AUD-003 | 取消操作审计 | 取消订单 | 写入审计日志 | P0 | **断言被注释** |
| AUD-004 | 司机操作审计 | 接单/提货/送达 | 写入审计日志 | P1 | **缺失** |
| AUD-005 | OSS 上传审计 | 上传文件 | 写入审计日志 | P2 | **缺失** |
| AUD-006 | 配置变更审计 | 修改配置 | 写入审计日志 | P1 | **缺失** |
| AUD-007 | 审计日志前后值对比 | 查看审计详情 | before/after JSON 正确 | P1 | **缺失** |
### 17.2 审计查询
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUD-008 | 审计日志列表 | GET /audit-logs | 返回分页列表 | P1 | test_audit_log_list |
| AUD-008b | 按操作类型筛选 | ?action=order.create | 筛选正确 | P1 | test_audit_log_filter |
| AUD-008c | 按时间范围筛选 | ?start_date=&end_date= | 筛选正确 | P1 | **缺失** |
| AUD-008d | 按操作人筛选 | ?user_id= | 筛选正确 | P1 | **缺失** |
### 17.3 安全问题
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| AUD-009 | 审计日志接口应有认证 | 不带 token 访问 | **应返回 401** (当前无认证) | P0 | **已跳过 - 安全缺口** |
| AUD-009b | 业务员不能查看审计 | salesman 调用 | **应返回 403** | P1 | **已跳过** |
---
## 18. 模块十六WebSocket 实时推送
### 18.1 连接管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WS-001 | 建立 WebSocket 连接 | 带有效 token | 连接成功 | P1 | **缺失** |
| WS-002 | 无效 token 连接 | 带无效 token | 连接拒绝 | P1 | **缺失** |
| WS-003 | 连接状态查询 | GET /ws/status | 返回活跃连接列表 | P2 | **缺失** |
### 18.2 消息推送
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WS-004 | 新提醒推送 | 创建提醒 | WebSocket 收到推送 | P1 | **缺失** |
| WS-005 | 订单状态变更推送 | 订单审批通过 | 相关用户收到推送 | P1 | **缺失** |
| WS-006 | 多客户端接收 | 同一用户多窗口 | 所有窗口收到推送 | P2 | **缺失** |
---
## 19. 模块十七:微信小程序集成
### 19.1 登录
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WX-001 | 微信授权登录 | wx.login + 手机号 | 登录成功, 返回 token | P0 | 需手动测试 |
| WX-002 | 密码登录 | 用户名+密码 | 登录成功 | P0 | 需手动测试 |
| WX-003 | 登录态保持 | 重启小程序 | 自动登录 | P1 | 需手动测试 |
### 19.2 经理端
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WX-010 | 经理仪表盘 | 打开 dashboard | 显示统计数据 | P1 | 需手动测试 |
| WX-011 | 审批列表 | 打开 approve-list | 显示待审批列表 | P0 | 需手动测试 |
| WX-012 | 审批详情 | 打开 approve-detail | 显示订单详情+审批按钮 | P0 | 需手动测试 |
| WX-013 | 审批操作 | 点击通过/拒绝 | 操作成功 | P0 | 需手动测试 |
| WX-014 | 订单列表 | 打开 order-list | 显示订单列表 | P1 | 需手动测试 |
| WX-015 | 创建物流任务 | 打开 task-create | 创建任务成功 | P1 | 需手动测试 |
| WX-016 | 供应商文本 | 打开 supplier-text | 显示/生成文本 | P1 | 需手动测试 |
### 19.3 司机端
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WX-020 | 任务列表 | 打开 task-list | 显示我的任务 | P0 | 需手动测试 |
| WX-021 | 任务详情 | 打开 task-detail | 显示任务信息 | P0 | 需手动测试 |
| WX-022 | 接受任务 | 点击接单 | status accepted | P0 | 需手动测试 |
| WX-023 | 提货 | 点击提货+拍照 | status picked_up | P0 | 需手动测试 |
| WX-024 | 送达 | 点击送达 | status delivered | P0 | 需手动测试 |
| WX-025 | 物流轨迹 | 查看 order-tracking | 显示轨迹信息 | P1 | 需手动测试 |
| WX-026 | 运单识别 | 拍照识别运单号 | OCR 返回运单号 | P1 | 需手动测试 |
### 19.4 通用
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WX-030 | 个人中心 | 打开 my | 显示用户信息 | P1 | 需手动测试 |
| WX-031 | 退出登录 | 点击退出 | 清除 token, 返回登录 | P1 | 需手动测试 |
| WX-032 | 订阅消息授权 | 首次操作时 | 弹出授权弹窗 | P1 | 需手动测试 |
| WX-033 | 角色 Tab 切换 | 经理/司机切换 | Tab 栏正确变化 | P1 | 需手动测试 |
---
## 20. 模块十八Web Admin 前端
### 20.1 登录与导航
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-001 | 管理员登录 | 输入用户名密码 | 登录成功, 跳转 dashboard | P0 | admin-login.spec.js |
| WEB-A-002 | 密码错误 | 输入错误密码 | 显示错误提示 | P0 | admin-login.spec.js |
| WEB-A-003 | 退出登录 | 点击退出 | 清除 token, 跳转登录 | P0 | admin-login.spec.js |
| WEB-A-004 | 侧边栏导航 | 点击各菜单 | 正确跳转 | P1 | **缺失** |
| WEB-A-005 | 响应式侧边栏 | 窗口 <1200px | 侧边栏自动折叠 | P2 | **缺失** |
| WEB-A-006 | 通知铃铛 | 有新提醒 | 铃铛显示未读数 | P2 | **缺失** |
### 20.2 工作台
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-010 | 仪表盘数据加载 | 打开 dashboard | 显示统计卡片 | P1 | **缺失** |
| WEB-A-011 | 待审批数量 | 查看 dashboard | 数量正确 | P1 | **缺失** |
| WEB-A-012 | 最近审批列表 | 查看 dashboard | 列表正确 | P1 | **缺失** |
### 20.3 审批中心
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-020 | 审批列表加载 | 打开 approvals | 显示待审批列表 | P0 | **缺失** |
| WEB-A-021 | 审批筛选 | 按类型/订单号筛选 | 筛选正确 | P1 | **缺失** |
| WEB-A-022 | 审批详情 | 点击审批项 | 显示完整订单信息 | P0 | **缺失** |
| WEB-A-023 | 审批通过 | 点击通过 | 操作成功, 刷新列表 | P0 | **缺失** (Playwright) |
| WEB-A-024 | 审批拒绝 | 点击拒绝+填原因 | 操作成功 | P0 | **缺失** (Playwright) |
| WEB-A-025 | 利润明细展示 | 查看审批详情 | 显示利润计算 | P1 | **缺失** |
### 20.4 订单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-030 | 订单列表 | 打开 orders | 显示订单列表 | P0 | admin-orders.spec.js |
| WEB-A-031 | 订单状态筛选 | 按状态筛选 | 筛选正确 | P1 | admin-orders.spec.js |
| WEB-A-032 | 订单详情 | 点击订单 | 显示详情弹窗 | P0 | admin-orders.spec.js |
| WEB-A-033 | 管理员创建订单 | 打开 order-create | 表单加载正常 | P1 | **缺失** |
| WEB-A-034 | 管理员代创建订单 | 选择业务员+填写表单 | 创建成功 | P1 | **缺失** |
| WEB-A-035 | AI 智能填充 | 粘贴订单文本 | 自动填充表单 | P2 | **缺失** |
| WEB-A-036 | 订单状态推进 | 推进到下一状态 | 状态更新成功 | P1 | **缺失** |
### 20.5 主数据管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-040 | 客户管理 Tab | 切换到客户 | 显示客户列表 | P1 | **缺失** |
| WEB-A-041 | 产品分类管理 | 切换到分类 | 显示分类列表 | P1 | **缺失** |
| WEB-A-042 | 产品管理 | 切换到产品 | 显示产品+规格 | P1 | **缺失** |
| WEB-A-043 | 供应商管理 | 切换到供应商 | 显示供应商列表 | P1 | **缺失** |
| WEB-A-044 | 批量导入客户 | 上传 Excel | 导入成功 | P1 | **缺失** |
### 20.6 定价规则
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-050 | 定价规则列表 | 打开 pricing-rules | 显示规则列表 | P1 | **缺失** |
| WEB-A-051 | 创建定价规则 | 填写表单 | 创建成功 | P1 | **缺失** |
| WEB-A-052 | 帮助文档 | 点击帮助按钮 | 显示字段说明 | P2 | **缺失** |
### 20.7 系统管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-060 | 用户管理 Tab | 切换到用户 | 显示用户列表 | P1 | **缺失** |
| WEB-A-061 | 角色管理 Tab | 切换到角色 | 显示角色列表 | P1 | **缺失** |
| WEB-A-062 | 菜单管理 Tab | 切换到菜单 | 显示菜单树 | P1 | **缺失** |
| WEB-A-063 | 角色菜单授权 | 选择角色+勾选菜单 | 保存成功 | P1 | **缺失** |
### 20.8 其他页面
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-A-070 | 配置管理页面 | 打开 config | 显示配置项 | P1 | **缺失** |
| WEB-A-071 | 审计日志页面 | 打开 audit | 显示日志列表 | P1 | **缺失** |
| WEB-A-072 | 提醒中心页面 | 打开 reminders | 显示提醒列表 | P1 | **缺失** |
| WEB-A-073 | 报表页面 | 打开 reports/performance | 显示报表 | P1 | **缺失** |
| WEB-A-074 | 报表导出 | 点击导出 | 下载文件 | P1 | **缺失** |
| WEB-A-075 | AI 识别页面 | 打开 ai-recognition | 页面加载正常 | P2 | **缺失** |
| WEB-A-076 | 司机任务页面 | 打开 driver/tasks | 显示任务列表 | P1 | **缺失** |
---
## 21. 模块十九Web Sales 前端
### 21.1 登录与导航
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-S-001 | 业务员登录 | 输入用户名密码 | 登录成功, 跳转 dashboard | P0 | **缺失** (Playwright) |
| WEB-S-002 | Token 验证 | 无效 token | 跳转登录 | P0 | **缺失** |
| WEB-S-003 | 角色守卫 | salesman 访问 | 跳转登录或 403 | P1 | **缺失** |
| WEB-S-004 | 移动端 Tab | 窗口 <768px | 显示底部 Tab | P2 | **缺失** |
### 21.2 工作台
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-S-010 | 仪表盘数据 | 打开 dashboard | 显示 6 个统计卡片 | P1 | **缺失** |
| WEB-S-011 | 最近订单列表 | 查看 dashboard | 显示最近 8 条订单 | P1 | **缺失** |
| WEB-S-012 | 待处理提醒 | 查看 dashboard | 显示待处理提醒 | P1 | **缺失** |
### 21.3 订单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-S-020 | 创建订单页面 | 打开 orders/create | 表单加载正常 | P0 | sales-order-create.spec.js |
| WEB-S-021 | 填写订单信息 | 输入客户+产品 | 数据正确 | P0 | sales-order-create.spec.js |
| WEB-S-022 | 添加行项 | 添加产品行 | 行项正确 | P0 | sales-order-create.spec.js |
| WEB-S-023 | 提交订单 | 点击提交 | 提交成功 | P0 | sales-order-create.spec.js |
| WEB-S-024 | 利润计算 | 填写数据 | 利润自动计算 | P0 | sales-order-create.spec.js |
| WEB-S-025 | AI 文本解析 | 粘贴文本 | 自动填充 | P1 | **缺失** |
| WEB-S-026 | 订单列表 | 打开 orders | 显示订单列表 | P0 | **缺失** |
| WEB-S-027 | 订单筛选 | 按状态/客户筛选 | 筛选正确 | P1 | **缺失** |
| WEB-S-028 | 订单详情 | 点击订单 | 显示详情 | P0 | **缺失** |
| WEB-S-029 | 编辑订单 | 编辑草稿订单 | 编辑成功 | P1 | **缺失** |
| WEB-S-030 | 取消订单 | 取消+填原因 | 取消成功 | P1 | **缺失** |
| WEB-S-031 | 提交审批 | 提交草稿订单 | 提交成功 | P1 | **缺失** |
### 21.4 客户管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-S-040 | 客户列表 | 打开 customers | 显示客户列表 | P1 | **缺失** |
| WEB-S-041 | 创建客户 | 填写表单 | 创建成功 | P1 | **缺失** |
| WEB-S-042 | 客户搜索 | 输入姓名/手机 | 搜索正确 | P1 | **缺失** |
### 21.5 提醒与统计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| WEB-S-050 | 提醒中心 | 打开 reminders | 显示提醒列表 | P1 | **缺失** |
| WEB-S-051 | 标记已读 | 点击标记 | 已读状态更新 | P1 | **缺失** |
| WEB-S-052 | 销售统计 | 打开 statistics | 显示统计图表 | P1 | **缺失** |
| WEB-S-053 | 周期切换 | //月切换 | 数据更新 | P1 | **缺失** |
| WEB-S-054 | TOP 客户排名 | 查看统计 | 显示排名表 | P2 | **缺失** |
---
## 22. 模块二十:跨模块端到端流程
### 22.1 完整订单生命周期
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-001 | 创建订单 | salesman 创建 | status=draft | P0 | test_full_order_lifecycle |
| E2E-002 | 提交审批 | salesman 提交 | status=pending_approve | P0 | |
| E2E-003 | 经理审批 | manager 通过 | status=approved | P0 | |
| E2E-004 | 生成供应商文本 | manager 生成+确认 | status=pending_factory | P0 | |
| E2E-005 | 创建物流任务 | manager 创建 | 任务 status=pending | P0 | |
| E2E-005b | 司机接单 | driver accept | 任务 status=accepted | P0 | |
| E2E-005c | 司机提货 | driver pickup | 任务 status=picked_up | P0 | |
| E2E-005d | 司机送达 | driver deliver | 任务 status=delivered | P0 | |
### 22.2 取消流程
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-008 | 草稿直接取消 | 创建取消 | status=canceled | P0 | test_cancel_draft_e2e |
| E2E-009 | 审批后取消 | 创建提交审批申请取消批准 | status=canceled | P0 | test_cancel_approved_e2e |
| E2E-010 | 履行阶段取消 | 完整流程到 pending_factory申请取消批准 | status=canceled | P1 | **缺失** |
### 22.3 审批拒绝重提
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-011 | 拒绝后重新提交 | 创建提交拒绝编辑重新提交审批通过 | 最终 approved | P0 | test_reject_and_resubmit |
### 22.4 欠款生成
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-006 | 送达后生成欠款 | 完整流程送达检查欠款 | 欠款记录生成 | P0 | **缺失** |
### 22.5 报表生成
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-007 | 报表查看和导出 | 完成订单查看报表导出 | 数据一致 | P1 | **缺失** |
### 22.6 提醒流程
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| E2E-012 | 提醒生命周期 | 生成查看标记已读 | 流程完整 | P1 | test_reminder_lifecycle |
### 22.7 跨角色数据隔离
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|----------|--------|------|---------|--------|---------|
| ISO-001 | 业务员订单隔离 | sales01 sales02 各创建订单 | 各自只能看自己的 | P0 | **缺失** (独立) |
| ISO-002 | 司机任务隔离 | driver01 driver02 各有任务 | 各自只能看自己的 | P0 | **缺失** (独立) |
| ISO-003 | 客户数据隔离 | 业务员创建客户 | 只有自己的可见 | P0 | 部分覆盖 |
| ISO-004 | 管理员看全部 | admin 查询各模块 | 可见所有数据 | P0 | 部分覆盖 |
| ISO-005 | 经理看全部 | manager 查询各模块 | 可见所有数据 | P1 | **缺失** (独立) |
---
## 23. 现有测试缺口汇总
### 23.1 关键缺口 (P0 级)
| 缺口 | 影响 | 建议 |
|------|------|------|
| **定价引擎无独立测试** | 核心业务逻辑未验证 | 新建 test_pricing.py, 覆盖所有定价计算场景 |
| **配置/审计接口无认证** | 安全漏洞 | API 层添加认证中间件 |
| **审计日志断言被注释** | 无法验证审计功能 | 恢复断言, 确保审计日志写入 |
| **产品快照测试缺失** | 历史数据可能被篡改 | 新建快照不变性测试 |
| **E2E-006 欠款生成** | 核心财务流程未覆盖 | 新建端到端欠款测试 |
| **弱断言测试** (~8个) | 测试形同虚设 | 修复所有 `in (200, 404)` 和注释断言 |
### 23.2 重要缺口 (P1 级)
| 缺口 | 影响 | 建议 |
|------|------|------|
| **客户批量导入** | 批量操作未测试 | 新建导入测试 |
| **物流轨迹全模块** | 5个用例完全缺失 | 新建 test_logistics_trace.py |
| **微信登录** | 小程序入口未测试 | 新建微信登录测试 (mock) |
| **WebSocket 推送** | 实时功能未测试 | 新建 WebSocket 测试 |
| **报表季度/年度** | 统计维度不完整 | 扩展报表测试 |
| **前端 Playwright** | 仅覆盖 12/37 页面 | 逐步补充前端 E2E |
### 23.3 一般缺口 (P2 级)
| 缺口 | 影响 | 建议 |
|------|------|------|
| **单元测试** | 测试金字塔倒置 | 补充 Service 层单元测试 |
| **并发测试** | 竞态条件风险 | 补充并发场景测试 |
| **性能测试** | 大数据量未验证 | 后续阶段补充 |
| **微信小程序端** | 无自动化测试 | 手动测试或小程序自动化框架 |
---
## 24. 测试执行优先级
### 第一阶段:修复现有测试 (1-2天)
1. 恢复 test_audit.py 中被注释的断言
2. 修复 `in (200, 404)` `in (200, 500)` 弱断言
4. 确保所有现有测试通过
### 第二阶段:补充 P0 缺口 (3-5天)
1. 🔧 新建 test_pricing.py 定价引擎完整测试
2. 🔧 修复配置/审计接口认证
3. 🔧 新建产品快照不变性测试
4. 🔧 新建欠款生成端到端测试
5. 🔧 新建数据隔离专项测试
### 第三阶段:补充 P1 缺口 (5-7天)
1. 🔧 新建客户批量导入测试
2. 🔧 新建物流轨迹测试
3. 🔧 新建微信登录测试 (mock)
4. 🔧 新建 WebSocket 推送测试
5. 🔧 补充报表季度/年度测试
6. 🔧 补充触发检测接口测试
7. 🔧 补充订单筛选/分页测试
### 第四阶段:前端 E2E 补充 (5-7天)
1. 🔧 补充 Web Admin 核心页面 Playwright 测试
2. 🔧 补充 Web Sales 核心页面 Playwright 测试
3. 🔧 跨角色 E2E 流程测试
### 第五阶段:完善测试 (持续)
1. 🔧 补充 Service 层单元测试
2. 🔧 补充并发/边界场景
3. 🔧 微信小程序手动测试清单
4. 🔧 性能基准测试 (可选)
---
## 25. 验收标准
| 级别 | 标准 |
|------|------|
| **P0 测试** | 100% 通过率, 0 个跳过 |
| **P1 测试** | 95% 通过率 |
| **P2 测试** | 80% 通过率 |
| **缺陷** | 0 个阻塞/严重缺陷, 重要缺陷 3 |
| **覆盖率** | 后端 API 覆盖率 85%, 核心模块 95% |
| **弱断言** | 0 `in (200, 404)` 模式, 0 个注释断言 |
---
## 附录:测试用例统计
| 模块 | 现有测试 | 缺失测试 | 总计 |
|------|---------|---------|------|
| 认证与授权 | 18 | 12 | 30 |
| 订单生命周期 | 22 | 14 | 36 |
| 订单取消 | 12 | 1 | 13 |
| 客户管理 | 10 | 12 | 22 |
| 产品管理 | 10 | 6 | 16 |
| 供应商管理 | 7 | 5 | 12 |
| 定价引擎 | 0 | 24 | 24 |
| 物流配送 | 16 | 14 | 30 |
| AI 识别 | 6 | 7 | 13 |
| 文件管理 | 6 | 5 | 11 |
| 提醒中心 | 10 | 16 | 26 |
| 报表统计 | 8 | 12 | 20 |
| 系统管理 | 18 | 14 | 32 |
| 系统配置 | 10 | 2 | 12 |
| 审计日志 | 10 | 8 | 18 |
| WebSocket | 0 | 6 | 6 |
| 微信小程序 | 0 | 20 | 20 |
| Web Admin 前端 | 7 | 30 | 37 |
| Web Sales 前端 | 5 | 20 | 25 |
| 端到端流程 | 12 | 8 | 20 |
| **合计** | **~175** | **~236** | **~411** |