SOP-204:资金池提现工作流测试

资金池提现工作流的标准操作规程;用于验证客户资金池提现功能从发起到审批的完整流程。

文档元数据

  • 文档类型:SOP / Checklist
  • 适用场景http://localhost:3000/crm/customer 客户管理 + 资金池提现工作流
  • 创建者:QA / 自动化工程
  • 最近更新时间:2025-12-22
  • 相关接口定义crm.swagger.jsonCashServiceWorkflowService 模块(特别是 POST /api/v1/cash/withdrawGET /api/v1/flows

前置条件

条件 检查方式
本地或测试环境可访问 http://localhost:3000 浏览器打开,页面未返回 500/404
已使用有权限的用户登录(admin / asdfasdf3) 登录接口/前端登录流程成功,能加载左侧导航
客户资金池有余额可提现 客户详情显示资金池余额 > 0
提现工作流已配置 工作流系统正常运行

任务矩阵(Excel Checklist 行模板)

每个任务独立一个表格,依次执行并记录状态;状态列可直接粘贴到 Excel 以打勾 [ ][x]

任务 T1:登录系统

入口:http://localhost:3000

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:打开浏览器 浏览器启动成功 浏览器窗口打开 屏幕截图 [ ] 步骤 2
步骤2:输入 URL http://localhost:3000 页面开始加载,显示登录页面 地址栏显示正确 URL 屏幕截图 [ ] 步骤 3
步骤3:输入用户名 用户名:admin 用户名输入框显示 admin 输入框内容正确 屏幕截图 [ ] 步骤 4
步骤4:输入密码 密码:asdfasdf3 密码输入框显示密码(已遮罩) 输入框有内容 屏幕截图 [ ] 步骤 5
步骤5:点击登录 登录成功,跳转到 CRM 主页 左侧导航栏显示,页面无错误 屏幕截图 [ ] T2

登录页面

CRM 主页

任务 T2:查找有资金池余额的客户

前置条件:T1 成功且当前在 CRM 主页

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:点击客户菜单 进入客户列表页面 页面 URL 变为 /crm/customer 屏幕截图 [ ] 步骤 2
步骤2:查看客户列表 显示客户列表,包含资金池余额列 表格显示客户信息和余额 屏幕截图 [ ] 步骤 3
步骤3:识别有余额的客户 找到资金池余额 > 0 的客户(如 ss 客户,余额 ¥11,000.00) 客户列表中显示余额数据 屏幕截图 [ ] T3

客户列表

客户数据示例: - 客户编号:KH20251216-0001 - 客户简称:ss - 资金池余额:¥11,000.00

任务 T3:发起提现申请

前置条件:T2 成功且已找到有余额的客户

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:打开提现弹窗 点击客户行或提现按钮 打开提现弹窗 弹窗显示,标题为提现相关 屏幕截图 [ ] 步骤 2
步骤2:查看资金池余额信息 显示各项余额明细 弹窗显示挂账、资金池、垫款等余额 屏幕截图 [ ] 步骤 3
步骤3:输入提现金额 提现金额:5000 金额输入框显示 5000 输入框内容正确 屏幕截图 [ ] 步骤 4
步骤4:点击提现按钮 提交成功,显示成功提示 提示"提交成功",并显示跳转链接 屏幕截图 [ ] T4

提现弹窗

提现弹窗显示信息: - 挂账:¥11,000.00 - 资金池:¥11,000.00 - 垫款:¥0.00 - 政策补差:¥0.00 - 后返:¥0.00 - 未认领:¥0.00

输入提现金额

提现成功提示

任务 T4:查看工作流

前置条件:T3 成功提交提现申请

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:点击跳转链接 点击成功提示中的"点击此处"链接 跳转到工作流列表页面 页面 URL 变为 /crm/flows 屏幕截图 [ ] 步骤 2
步骤2:查看工作流列表 显示工作流列表,第一条为刚创建的提现工作流 列表顶部显示"资金池提现"工作流 屏幕截图 [ ] 步骤 3
步骤3:打开工作流详情 点击工作流行 打开工作流详情抽屉 抽屉显示完整工作流信息 屏幕截图 [ ] T5

工作流列表

任务 T5:验证工作流详情

前置条件:T4 成功打开工作流详情

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:查看工作流基本信息 显示工作流 ID、发起人、发起时间 详情页显示完整信息 屏幕截图 [ ] 步骤 2
步骤2:查看客户信息 显示客户姓名、负责人、电话等 客户信息区域显示正确 屏幕截图 [ ] 步骤 3
步骤3:查看资金池信息 显示总余额、垫款余额 资金池区域显示正确金额 屏幕截图 [ ] 步骤 4
步骤4:查看交易概览 显示销售员、交易日期、交易编号、状态、总金额等 交易概览区域显示完整信息 屏幕截图 [ ] 步骤 5
步骤5:查看操作按钮 显示"驳回"和"通过"按钮 底部显示操作按钮 屏幕截图 [ ] 步骤 6
步骤6:切换到审批历史 点击"审批历史"标签 显示审批历史记录 历史记录列表显示 屏幕截图 [ ] 步骤 7
步骤7:切换到评论备注 点击"评论备注"标签 显示评论输入框和评论列表 评论区域显示正常 屏幕截图 [ ] T6

工作流详情 - 审批详情

工作流详情内容验证: - 工作流ID:cd6f0590-23ba-400d-906a-9b62a16b9070 - 发起人:超级管理员 - 发起时间:2025年12月22日星期一晚上11点54分 - 客户信息: - 姓名:ss - 负责人:邵丽莎 - 电话:456 - 资金池: - 总余额:¥11,000.00 - 垫款余额:¥0.00

工作流详情 - 交易概览

交易概览验证: - 销售员:未分配 - 交易日期:2025/12/22 - 交易编号:TO20251222-0010 - 交易ID:153 - 状态:进行中 - 总金额:¥5,000.00 - 实际总金额:¥0 - 折扣:0.00%

审批历史

审批历史说明: - 显示所有审批记录 - 包含审批人、角色、时间、操作结果 - 绿色标识"已批准",红色标识"已驳回"

评论备注

评论备注功能: - 可查看所有相关评论 - 可添加新的评论 - 支持审批意见记录

任务 T6:执行审批操作(通过)

前置条件:T5 成功查看工作流详情,当前用户有审批权限

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:确认审批信息 查看工作流所有信息 所有信息正确无误 人工检查 屏幕截图 [ ] 步骤 2
步骤2:点击通过按钮 弹出确认对话框(可选) 对话框显示或直接提交 屏幕截图 [ ] 步骤 3
步骤3:确认提交 审批成功,显示成功提示 Toast提示"审批成功" 屏幕截图 [ ] 步骤 4
步骤4:验证工作流状态 刷新或重新打开工作流 状态变为"已完成" 工作流列表或详情显示状态 屏幕截图 [ ] 步骤 5
步骤5:验证审批历史 查看审批历史标签 显示绿色"已批准"记录 审批历史列表中有记录 屏幕截图 [ ] T7

注意事项: - 审批通过后,资金池余额会立即扣减 - 审批操作不可撤销,请谨慎操作 - 审批意见会记录在审批历史中

任务 T7:执行审批操作(驳回)- 可选

前置条件:有一个待审批的提现工作流,当前用户有审批权限

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:点击驳回按钮 弹出驳回对话框 对话框显示,要求输入驳回原因 屏幕截图 [ ] 步骤 2
步骤2:输入驳回原因 驳回原因:提现金额超出可用余额 原因输入成功 输入框显示内容 屏幕截图 [ ] 步骤 3
步骤3:确认驳回 驳回成功,显示成功提示 Toast提示"已驳回" 屏幕截图 [ ] 步骤 4
步骤4:验证工作流状态 刷新或重新打开工作流 状态变为"已拒绝" 工作流列表或详情显示状态 屏幕截图 [ ] 步骤 5
步骤5:验证审批历史 查看审批历史标签 显示红色"已拒绝"记录及原因 审批历史列表中有记录 屏幕截图 [ ]

驳回原因示例: - "提现金额超出可用余额" - "客户资料不完整,需补充" - "需要先完成合同签订" - "提现申请信息有误,请核实"

注意事项: - 驳回原因必填,不能为空 - 驳回后资金池余额不变 - 被驳回的工作流需要重新发起 - 驳回原因会通知给发起人

任务 T8:验证资金变化

前置条件:T6 审批通过操作完成

Action Steps Input / Payload 预期结果 验证方式 证据 状态 下游任务
步骤1:返回客户列表 点击客户菜单 进入客户列表页面 URL变为/crm/customer 屏幕截图 [ ] 步骤 2
步骤2:查找提现客户 查找客户简称"ss" 找到对应客户行 客户列表中显示 屏幕截图 [ ] 步骤 3
步骤3:查看资金池余额 资金池余额应减少5000 余额从¥11,000变为¥6,000 屏幕截图 [ ] 步骤 4
步骤4:查看资金流水 点击资金流水菜单或客户详情 显示提现记录 流水记录中有提现条目 屏幕截图 [ ]

预期资金变化: - 提现前:资金池 ¥11,000.00 - 提现金额:¥5,000.00 - 提现后:资金池 ¥6,000.00

API 参考(必须遵循的接口)

接口 方法 说明 关键字段 & 数据格式
/api/v1/cash/withdraw POST 创建提现申请 body 需要提现金额、客户 ID 等信息
/api/v1/flows GET 获取工作流列表 返回工作流列表,包含状态、类型等信息
/api/v1/flows/{flowId} GET 获取工作流详情 返回完整工作流信息,包含申请信息、审批历史等
/api/v1/flows/{flowId}/approve POST 审批通过工作流 body 包含审批意见等信息
/api/v1/flows/{flowId}/reject POST 驳回工作流 body 包含驳回原因等信息

参见完整定义:crm.swagger.jsonCashServiceWorkflowService 模块

进度采集模板(机器辅助/人手填报)

Task ID Status Evidence Operator Timestamp Notes
T1 [x] sop-204-01-login-page.png, sop-204-02-dashboard.png qa-bot 2025-12-22T15:47:00 "登录成功"
T2 [x] sop-204-03-customer-list.png qa-bot 2025-12-22T15:50:00 "找到有余额客户"
T3 [x] sop-204-06-withdraw-dialog.png, sop-204-07-withdraw-amount-entered.png, sop-204-08-withdraw-success.png qa-bot 2025-12-22T15:53:00 "提现申请已提交"
T4 [x] sop-204-09-workflow-list.png qa-bot 2025-12-22T15:54:00 "工作流已创建"
T5 [x] sop-204-10-workflow-detail.png, sop-204-11-workflow-detail-scrolled.png, sop-204-12-workflow-approval-history.png, sop-204-13-workflow-comments.png qa-bot 2025-12-22T15:56:00 "工作流详情验证通过"
T6 [ ] 待补充审批通过截图 qa-approver "审批通过操作"
T7 [ ] 待补充驳回截图(可选) qa-approver "审批驳回操作(可选)"
T8 [ ] 待补充资金变化截图 qa-bot "验证资金变化"

Tip:监控系统可定时读取 Task ID + Status 列;每次 status 变更都写入对应 EvidenceTimestamp 以供追踪。

异常与恢复

常见问题排查

问题1:客户无资金池余额

现象:提现弹窗显示资金池余额为0或不足

原因: - 客户未充值或充值未到账 - 资金已被其他操作占用 - 数据同步延迟

解决方案: 1. 检查客户充值记录,确认是否有充值记录 2. 查看资金流水,确认余额变动情况 3. 等待数据同步或联系技术支持刷新缓存 4. 先进行充值操作(参考SOP-203)

问题2:提现金额验证失败

现象:点击提现按钮后提示"金额不合法"或类似错误

原因: - 提现金额超过可用余额 - 提现金额小于最小提现金额 - 输入了非数字字符 - 输入了负数或零

解决方案: 1. 检查输入的金额是否为正数 2. 确认金额不超过资金池可用余额 3. 确认金额符合最小提现要求 4. 重新输入有效金额

问题3:工作流未创建

现象:点击提现后显示成功,但未跳转到工作流页面或工作流列表中找不到

原因: - 网络请求失败 - 后端服务异常 - 权限不足 - 工作流配置错误

解决方案: 1. 打开浏览器开发者工具(F12) 2. 查看 Console 面板是否有错误信息 3. 查看 Network 面板,检查 API 请求状态 4. 记录错误信息和请求 ID 5. 联系技术支持或后端开发人员 6. 检查用户是否有创建工作流的权限

问题4:工作流详情无法打开

现象:点击工作流行后,详情抽屉未打开或显示空白

原因: - 工作流 ID 不正确 - 用户无查看权限 - 数据加载失败 - 前端渲染错误

解决方案: 1. 刷新页面重试 2. 检查浏览器 Console 是否有错误 3. 确认当前用户有查看该工作流的权限 4. 尝试双击行或查找其他打开方式 5. 联系技术支持

问题5:审批按钮不可用

现象:审批按钮显示为灰色或点击无反应

原因: - 当前用户无审批权限 - 工作流状态不是待审批 - 工作流已被其他人审批 - 按钮权限配置错误

解决方案: 1. 检查当前用户角色和权限 2. 查看工作流状态是否为"进行中" 3. 刷新页面查看最新状态 4. 联系管理员配置审批权限 5. 检查审批历史,确认是否已被审批

问题6:审批操作失败

现象:点击通过/驳回后显示错误提示

错误信息示例: - "审批失败,请稍后重试" - "权限不足" - "工作流已完成,无法操作" - "网络错误"

解决方案: 1. 记录完整的错误信息 2. 检查网络连接 3. 刷新页面重试 4. 如果是权限问题,联系管理员 5. 如果是状态问题,查看工作流最新状态 6. 联系技术支持,提供: - 工作流 ID - 错误信息 - 操作时间 - 用户信息

问题7:资金未扣减

现象:审批通过后,资金池余额未减少

原因: - 数据同步延迟 - 后端处理失败但审批成功 - 缓存未刷新 - 业务逻辑错误

解决方案: 1. 等待3-5分钟后刷新页面 2. 查看资金流水,确认是否有扣款记录 3. 检查工作流状态,确认是否真的审批成功 4. 查看审批历史的详细信息 5. 联系技术支持,提供: - 客户 ID - 工作流 ID - 审批时间 - 预期扣减金额

错误日志记录

发生异常时,请记录以下信息:

信息项 说明 获取方式
错误时间 精确到秒 系统时间
用户信息 用户名、角色 当前登录用户
操作步骤 发生错误前的操作 回忆并记录
错误信息 完整的错误提示 截图或复制文本
浏览器信息 浏览器类型和版本 浏览器设置
Console日志 浏览器控制台错误 F12 → Console
Network日志 网络请求失败信息 F12 → Network
工作流ID 相关工作流的ID 工作流详情页
客户信息 客户编号、名称 客户列表或详情

数据回滚

如果审批操作出现问题需要回滚:

联系方式: 1. 技术支持邮箱:support@example.com 2. 紧急联系电话:XXX-XXXX-XXXX 3. 工单系统:提交详细的问题描述

回滚流程: 1. 记录完整的错误信息和相关ID 2. 通过工单系统提交回滚申请 3. 技术支持审核后执行数据库操作 4. 验证回滚结果 5. 重新执行正确的操作

测试数据示例

成功案例

提现请求

{
  "customerId": 123,
  "amount": 5000,
  "sourceType": "fund_pool"
}

预期工作流响应

{
  "id": "cd6f0590-23ba-400d-906a-9b62a16b9070",
  "type": "withdraw",
  "status": "pending",
  "amount": 5000.00,
  "customerId": 123,
  "customerName": "ss",
  "initiator": "超级管理员",
  "createdAt": "2025-12-22T15:54:00Z"
}

相关工作流

  • SOP-203:客户充值(前置操作,确保有余额可提现)
  • SOP-301:钱包划拨(资金池相关操作)
  • SOP-302:钱包退款(资金池相关操作)

审批流程说明

📋 配置的审批流程(根据 withdraw_prod.yaml)

根据系统配置文档 docs/workflows.md,资金池提现的审批流程应为:

发起申请 → 部门审批 → 中台审批 → 财务审批 → 总部审批 → 抄送

标准审批步骤

步骤 审批人 说明
1. 部门审批 连续多级部门负责人 逐级向上审批(如:邓攀 → 符小兰 → 陈卓钰)
2. 中台审批 中台负责人 中台部门负责人审批
3. 财务审批 财务人员 财务部门审批
4. 总部审批 尹博 总部最终审批
5. 抄送 媒介 + 财务 抄送相关人员

🔍 实际审批情况验证

测试用例:工作流 ID cd6f0590-23ba-400d-906a-9b62a16b9070

审批历史查询结果: - ✅ 只显示 1条 审批记录 - 审批人:超级管理员(管理员) - 审批时间:2025-12-22 23:54:10 - 审批结果:已批准 - 工作流状态:已完成

审批历史详情

分析结论: 1. ⚠️ 超级管理员可能拥有特殊权限,可以直接批准工作流而无需经过多级审批 2. ⚠️ 审批历史只显示最终审批记录,中间审批节点未显示在历史中 3. ✅ 审批功能正常工作,工作流状态正确流转 4. ❓ 需要用普通用户发起提现申请来验证完整的多级审批流程

建议: - 使用普通销售人员账户发起提现申请 - 观察审批流程是否按照配置的5个步骤执行 - 验证每个审批节点的审批人是否符合配置

工作流状态流转

发起申请 → 创建工作流(进行中) → 审批操作 → 完成/驳回
                ↓
           待审批状态
                ↓
        ┌───────┴──��────┐
        ↓               ↓
    审批通过         审批驳回
        ↓               ↓
    已完成状态      已驳回状态

详细步骤说明

步骤1:发起提现申请

  • 操作人:客户负责人或有权限的用户
  • 入口:客户列表 → 客户详情 → 提现按钮
  • 操作:输入提现金额,点击提现按钮
  • 结果:系统创建工作流,跳转到工作流页面

步骤2:查看工作流详情

  • 操作:在工作流列表中找到刚创建的提现工作流
  • 查看内容
  • 审批详情:包含客户信息、资金池信息、交易概览
  • 审批历史:显示所有审批记录(已批准/已驳回)
  • 评论备注:可查看和添加评论

审批历史标签

评论备注标签

审批历史详情

步骤3:审批操作

3.1 审批通过

权限要求: - 当前用户必须是审批人或有审批权限 - 工作流状态为"进行中"(PENDING)

操作步骤: 1. 在工作流详情页面,点击底部"通过"按钮 2. 系统弹出确认对话框(可选择是否添加审批意见) 3. 点击确认提交 4. 系统执行提现操作,扣减资金池余额 5. 工作流状态更新为"已完成"(SUCCESS) 6. 发起人收到审批通过通知

API调用

POST /api/v1/flows/{flowId}/action
Content-Type: application/json

{
  "action": "approve",
  "event": "{flow.event}",
  "comment": "审批意见(可选)"
}

预期结果: - 成功提示:"审批成功" - 工作流状态变为"已完成" - 审批历史显示绿色"已批准"记录 - 资金池余额减少对应提现金额 - 发起人收到审批通过通知

关键代码逻辑

// 审批通过处理
const handleApprove = async () => {
  const response = await fetch(`/api/v1/flows/${review?.flowId}/action`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      action: "approve",
      event: flow.event,
      comment: approvalComment || "",
    }),
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.message || "审批失败");
  }

  toast.success("审批成功");
  onActionComplete?.();
};

3.2 审批驳回

权限要求: - 当前用户必须是审批人或有审批权限 - 工作流状态为"进行中"(PENDING)

操作步骤: 1. 在工作流详情页面,点击底部"驳回"按钮 2. 系统弹出驳回对话框,要求输入驳回原因(必填) 3. 输入驳回原因(例如:"提现金额超出可用余额") 4. 点击确认提交 5. 工作流状态更新为"已驳回"(REJECTED) 6. 发起人收到驳回通知及原因

API调用

POST /api/v1/flows/{flowId}/action
Content-Type: application/json

{
  "action": "reject",
  "event": "{flow.event}",
  "comment": "驳回原因(必填)"
}

预期结果: - 成功提示:"已驳回" - 工作流状态变为"已驳回" - 审批历史显示红色"已驳回"记录 - 资金池余额不变 - 发起人收到驳回通知及原因

关键代码逻辑

// 审批驳回处理
const handleReject = async () => {
  // 验证驳回原因不能为空
  if (!rejectReason.trim()) {
    toast.error("请输入驳回原因");
    return;
  }

  const response = await fetch(`/api/v1/flows/${review?.flowId}/action`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      action: "reject",
      event: flow.event,
      comment: rejectReason,  // 驳回原因必填
    }),
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.message || "驳回失败");
  }

  toast.success("已驳回");
  setShowRejectDialog(false);
  onActionComplete?.();
};

步骤4:查看审批结果

审批历史记录包含: - 审批人姓名和角色 - 审批时间 - 审批操作(通过/驳回) - 审批意见或驳回原因 - 审批状态标识(绿色✓已批准/红色✗已驳回)

状态说明: - 进行中:工作流已创建,等待审批 - 已完成:审批通过,提现操作已完成 - 已驳回:审批驳回,需要重新发起 - 已取消:发起人主动取消(仅创建者可操作)

撤销工作流

创建者可以撤销自己发起的未完成工作流:

权限要求: - 当前用户是工作流创建者 - 工作流状态为"进行中"(未审批完成)

操作步骤: 1. 在工作流列表页,找到自己发起的工作流 2. 点击"撤销"按钮 3. 确认撤销操作 4. 工作流状态更新为"已取消"

关键判断逻辑

// 判断是否可以撤销
const canCancel = current?.id === flow.creatorId &&
  flow.status !== 'FINISHED' &&
  flow.status !== 'SUCCESS' &&
  flow.status !== 'CANCELED';

注意事项

  1. 提现金额不能超过资金池可用余额
  2. 提现申请创建后,在审批完成前,资金池余额会被冻结
  3. 驳回的提现申请需要重新发起
  4. 审批权限由系统管理员配置
  5. 提现记录会保留在资金流水中,可供后续查询

验收标准

  • [x] 能够成功登录系统
  • [x] 能够找到有资金池余额的客户
  • [x] 能够成功发起提现申请
  • [x] 提现申请能够创建对应的工作流
  • [x] 工作流详情显示正确的客户信息、金额信息
  • [x] 工作流详情显示正确的交易概览信息
  • [x] 能够查看审批历史和评论备注
  • [x] 审批按钮显示正常(驳回、通过)
  • [ ] 能够成功执行审批通过操作
  • [ ] 能够成功执行审批驳回操作
  • [ ] 审批后资金池余额正确变化
  • [x] 所有截图清晰可见,包含关键信息

文档版本:v1.0 最后更新:2025-12-22 维护者:QA Team