依据:
供应商结算管理功能需求.md(v1.1)、供应商结算管理技术方案.md(v1.0)
关联:../交易订单管理/交易订单管理测试用例.md(结算单由订单「完成支付」生成)
接口 Base Path:/tradeMarket/supplierSettlement;鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块权限的账号已登录(tradeMarket:supplierSettlement:list|query|settle)。宜复用交易订单测试样本并预置结算数据:
| 类型 | 样本 | 要点 |
|---|---|---|
| 供应商 | S1 id=1 按头 fee_method=2,fee_standard=10 |
与订单用例一致 |
| 供应商 | S2 id=2 按额 fee_method=3,费率 1%+0.5% |
快照校验用 |
| 供应商 | S3 id=3 按户 fee_method=1 |
服务费=0 |
| 交易订单+结算 | SS-PEND | 订单已完成;settlement_status=0;order_no 已知 |
| 交易订单+结算 | SS-DONE | settlement_status=1;已有 settle_voucher_url |
| 交易订单 | TO-PAY | order_status=0;用于联调「支付→生成待结算」 |
| 凭证文件 | V-OK | test.jpg ≤10MB;V-BAD |
完成结算 Body 示例:
{
"id": 1,
"settleVoucherUrl": "http://localhost/profile/upload/2026/05/settle.jpg",
"settleVoucherPath": "/profile/upload/2026/05/settle.jpg"
}
界面(UI)测试:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。组件路径:tradeMarket/supplierSettlement/index。
自动化对照:SettlementNoGenerator、SettlementOnPayService、SettlementFeeCalculator(订单包已有);BizSupplierSettlement*(实现后 JUnit5 / MockMvc)。本期后端结算 Controller 待实现,API/UI 用例按技术方案编写。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-GYSJSGL-UT-001 | 结算编号 | 当日首号 | 单元测试 | JUnit5 | §3.1 | 当日无未删结算单 | SettlementNoGenerator.next() |
JSD+yyyyMMdd+001 |
| ZCZX-GYSJSGL-UT-002 | 结算编号 | 递增与左补零 | 单元测试 | JUnit5 | §3.1 | 最大序号 008 |
next() |
末 3 位 009;总长 14 |
| ZCZX-GYSJSGL-UT-003 | 结算编号 | 超 999 拒绝 | 单元测试 | JUnit5 | §3.1 | 当日已满 999 | next() |
抛业务异常 |
| ZCZX-GYSJSGL-UT-004 | 结算编号 | 冲突重试 | 单元测试 | JUnit5+Mockito | 唯一键 | Mock uk_settlement_no 冲突一次 |
重试 next() |
第二次成功或明确失败 |
| ZCZX-GYSJSGL-UT-005 | 结算生成 | 按头快照写入 | 单元测试 | JUnit5+Mockito | §3.5、§5.1 | S1 订单 3 头总金额 10000 | createFromOrder |
fee_method=2;service_fee_amount=30.00;payable_amount=9970.00 |
| ZCZX-GYSJSGL-UT-006 | 结算生成 | 按额快照写入 | 单元测试 | JUnit5+Mockito | §3.5 | S2 订单总金额 10000 | createFromOrder |
fee_method=3;费率字段与 S2 一致;service_fee_amount=150.00 |
| ZCZX-GYSJSGL-UT-007 | 结算生成 | 按户服务费 0 | 单元测试 | JUnit5+Mockito | §3.5 | S3 订单 | createFromOrder |
service_fee_amount=0;payable=total_amount |
| ZCZX-GYSJSGL-UT-008 | 结算生成 | 订单字段冗余一致 | 单元测试 | JUnit5+Mockito | §10.2 | 订单 order_no、头数、金额已知 |
createFromOrder |
order_no、total_heads、total_amount、supplier_id 与订单一致 |
| ZCZX-GYSJSGL-UT-009 | 结算生成 | 初始待结算 | 单元测试 | JUnit5+Mockito | §2.2 | 合法订单 | createFromOrder |
settlement_status=0;凭证、完成时间为空 |
| ZCZX-GYSJSGL-UT-010 | 结算生成 | 幂等 uk_order_id | 单元测试 | JUnit5+Mockito | §4.1、§6.5 | 同 order_id 已有结算 |
再次 createFromOrder |
抛错;不插入第二条 |
| ZCZX-GYSJSGL-UT-011 | 凭证校验 | 缺 url/path | 单元测试 | JUnit5 | §3.7、§6.2 | 无 | validateSettleVoucher 缺字段 |
失败;请上传结算凭证 |
| ZCZX-GYSJSGL-UT-012 | 凭证校验 | 非法后缀 | 单元测试 | JUnit5 | §3.7 | 无 | path 为 .pdf |
失败;格式不符合 |
| ZCZX-GYSJSGL-UT-013 | 凭证校验 | 合法 png | 单元测试 | JUnit5 | §3.7 | 无 | path 以 .png 结尾 |
通过 |
| ZCZX-GYSJSGL-UT-014 | 完成结算 | 事务成功 | 单元测试 | JUnit5+Mockito | §6.3 | SS-PEND;合法凭证 | completeSettle |
settlement_status=1;settle_finish_time 非空;凭证已存 |
| ZCZX-GYSJSGL-UT-015 | 完成结算 | 非待结算拒绝 | 单元测试 | JUnit5+Mockito | §6.4 | SS-DONE | completeSettle |
失败;仅待结算可操作 |
| ZCZX-GYSJSGL-UT-016 | 完成结算 | 关联订单非已完成 | 单元测试 | JUnit5+Mockito | §6.4 | Mock 订单 order_status=0 |
completeSettle |
失败;订单状态不满足 |
| ZCZX-GYSJSGL-UT-017 | 完成结算 | 不回写订单 | 单元测试 | JUnit5+Mockito | §6.6 | SS-PEND | completeSettle 成功 |
未调用订单 update;订单仍为已完成 |
| ZCZX-GYSJSGL-UT-018 | 完成结算 | 条件更新防并发 | 单元测试 | JUnit5+Mockito | §6.5 | Mock update 返回 0 |
completeSettle |
失败;提示已完成或操作无效 |
| ZCZX-GYSJSGL-UT-019 | 列表查询 | 双模糊 AND | 单元测试 | JUnit5+Mockito | §5.1 | 多条样本 | selectList(settlementNo, orderNo) |
SQL 同时 LIKE 两条件 |
| ZCZX-GYSJSGL-UT-020 | 列表查询 | 仅 del_flag=0 | 单元测试 | JUnit5 | §5.1 | 无 | 检查 BizSupplierSettlementMapper.xml 列表 SQL |
del_flag='0';create_time DESC |
| ZCZX-GYSJSGL-UT-021 | 详情 | 收费方式中文 | 单元测试 | JUnit5 | §3.5 | fee_method=2 |
组装详情 | feeMethodName=按头计费(SupplierRules) |
| ZCZX-GYSJSGL-UT-022 | 费用计算 | 与订单共用公式 | 单元测试 | JUnit5 | §3.5 | S1/S2/S3 | SettlementFeeCalculator |
与订单 UT-018~020 结果一致(HALF_UP 2 位) |
自动化已实现:SettlementFeeCalculatorTest、BizTradeOrderServiceImplTest(含 createFromOrder)、SettlementValidationTest(UT-011~013)、BizSupplierSettlementServiceImplTest(UT-014~016、018、021)、BizSupplierSettlementControllerApiTest(API-001、007、010、011、013)。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-GYSJSGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman | §5.2 | 有结算数据 | GET /list |
code=200;≤20 条;createTime 倒序 |
| ZCZX-GYSJSGL-API-002 | 列表 | 结算单编号模糊 | 接口测试 | Postman | §5.1 | 编号含 JSD20260520 |
settlementNo=0520 |
命中对应行 |
| ZCZX-GYSJSGL-API-003 | 列表 | 关联订单编号模糊 | 接口测试 | Postman | §5.1 | 订单号片段已知 | orderNo=0520 |
命中 order_no 匹配行 |
| ZCZX-GYSJSGL-API-004 | 列表 | 组合筛选 AND | 接口测试 | Postman | §5.1 | 同时传两条件 | settlementNo+orderNo |
同时满足才命中 |
| ZCZX-GYSJSGL-API-005 | 列表 | 不含逻辑删除 | 接口测试 | Postman | §5.1 | 某结算 del_flag=2 |
GET /list |
无该 id |
| ZCZX-GYSJSGL-API-006 | 列表 | 列字段完整 | 接口测试 | Postman | §5.2 | SS-PEND、SS-DONE 各一条 | GET /list |
行含编号、创建时间、订单号、供应商名、头数、金额、服务费、应付、状态、凭证、完成时间 |
| ZCZX-GYSJSGL-API-007 | 详情 | 待结算全字段 | 接口测试 | Postman | §7 | SS-PEND | GET /{id} |
含收费快照、feeMethodName;settleVoucher 为空;无 lineList |
| ZCZX-GYSJSGL-API-008 | 详情 | 已完成含凭证 | 接口测试 | Postman | §7 | SS-DONE | GET /{id} |
settlementStatus=1;settleFinishTime 有值;凭证 URL 可访问 |
| ZCZX-GYSJSGL-API-009 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已删 id | 失败或 data 空 |
| ZCZX-GYSJSGL-API-010 | 完成结算 | 合法待结算 | 接口测试 | Postman | §6 | SS-PEND;先 POST /common/upload |
PUT /completeSettle Body 示例 |
code=200;settlementStatus=1;settleFinishTime 非空 |
| ZCZX-GYSJSGL-API-011 | 完成结算 | 缺结算凭证 | 接口测试 | Postman | §3.7 | SS-PEND | 无 settleVoucherUrl |
失败;请上传结算凭证 |
| ZCZX-GYSJSGL-API-012 | 完成结算 | 非法文件后缀 | 接口测试 | Postman | §3.7 | SS-PEND | settleVoucherPath 为 .pdf |
失败;格式不符合 |
| ZCZX-GYSJSGL-API-013 | 完成结算 | 已完成拒绝 | 接口测试 | Postman | §6.5 | SS-DONE | PUT /completeSettle |
失败;已完成无需重复 |
| ZCZX-GYSJSGL-API-014 | 完成结算 | 不存在 id | 接口测试 | Postman | 异常 | 已登录 | id=999999 |
失败 |
| ZCZX-GYSJSGL-API-015 | 完成结算 | 订单已删拒绝 | 接口测试 | Postman | §10.6 | 结算在但订单 del_flag=2(异常数据) |
completeSettle |
失败 |
| ZCZX-GYSJSGL-API-016 | 约束 | 无新增接口 | 接口测试 | Postman | §4、§8.1 | 已登录 | POST / |
404 或方法不允许 |
| ZCZX-GYSJSGL-API-017 | 约束 | 无修改删除 | 接口测试 | Postman | §8.1 | 已登录 | PUT / 改金额;DELETE /{id} |
均不允许 |
| ZCZX-GYSJSGL-API-018 | 联调 | 支付生成待结算 | 接口测试 | Postman | §4.1 | TO-PAY;凭证齐备 | 订单 PUT /tradeOrder/completePay |
结算列表出现新行 settlementStatus=0;uk_order_id 唯一 |
| ZCZX-GYSJSGL-API-019 | 联调 | 一对一不重复 | 接口测试 | Postman | §4.1 | 已对 TO-DONE 完成支付 | 再次对该订单 completePay |
订单侧失败;结算仍 1 条 |
| ZCZX-GYSJSGL-API-020 | 快照 | 改供应商费率不重算 | 接口测试 | Postman | §3.5、§10.4 | SS-PEND 按头生成后 | 改 S1 fee_standard→99;GET /{id} |
service_fee_amount 仍为生成时原值 |
| ZCZX-GYSJSGL-API-021 | 快照 | 按额费率字段 | 接口测试 | Postman | §3.5 | S2 支付生成结算 | GET /{id} |
transactionFeeRate、managementFeeRate 与支付时 S2 一致 |
| ZCZX-GYSJSGL-API-022 | 约束 | 完成结算不回写订单 | 接口测试 | Postman | §6.6 | SS-PEND | completeSettle 后 GET /tradeOrder/{orderId} |
订单仍 orderStatus=1;支付凭证未变 |
| ZCZX-GYSJSGL-API-023 | 端到端 | 支付→结算→完成 | 接口测试 | Postman | §10.7 | TO-PAY 样本齐备 | completePay→list→completeSettle |
每步 code=200;最终 settlementStatus=1 |
| ZCZX-GYSJSGL-API-024 | 端到端 | 平台闭环终点 | 接口测试 | Postman | §14 决策 9 | 上一步已完成结算 | 查本模块列表 | 无后续必办接口;状态已完成 |
| ZCZX-GYSJSGL-API-025 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | GET /list |
401 或统一未登录 |
| ZCZX-GYSJSGL-API-026 | 权限 | 无 list 权限 | 接口测试 | Postman | §11 | 无 list |
GET /list |
无权限失败 |
| ZCZX-GYSJSGL-API-027 | 权限 | 无 settle 权限 | 接口测试 | Postman | §11 | 仅 list/query | PUT /completeSettle |
无权限失败 |
| ZCZX-GYSJSGL-API-028 | 权限 | 无 query 详情 | 接口测试 | Postman | §11 | 仅 list | GET /{id} |
无权限失败 |
| ZCZX-GYSJSGL-API-029 | 响应 | 失败 msg 可读 | 接口测试 | Postman | §12 | 已登录 | 触发缺凭证、已完成重复 | msg 与需求 §12 示例可区分 |
| ZCZX-GYSJSGL-API-030 | 约束 | 详情无订单跳转字段 | 接口测试 | Postman | §3.2、§14 决策 10 | SS-PEND | GET /{id} JSON |
无 orderDetailUrl/tradeOrderRoute 等跳转字段 |
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-GYSJSGL-UI-001 | 列表 | 默认列展示 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;有数据 | 进入「供应商结算管理」 | 列含结算单编号、创建时间、订单编号、供应商、头数、金额、服务费、应付、状态、凭证、完成时间、操作 |
| ZCZX-GYSJSGL-UI-002 | 列表 | 结算单编号筛选 | UI 测试 | Playwright+Chrome | §5.1 | 已知 JSD 片段 |
填编号→搜索 | 仅匹配行 |
| ZCZX-GYSJSGL-UI-003 | 列表 | 关联订单编号筛选 | UI 测试 | Playwright+Chrome | §5.1 | 已知订单号片段 | 填订单号→搜索 | 仅匹配行 |
| ZCZX-GYSJSGL-UI-004 | 列表 | 组合筛选 | UI 测试 | Playwright+Chrome | §5.1 | 两条件均有数据 | 同时填→搜索 | 同时满足才显示 |
| ZCZX-GYSJSGL-UI-005 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.1 | 已筛选 | 搜索→重置 | 条件清空;列表恢复 |
| ZCZX-GYSJSGL-UI-006 | 列表 | 无新增按钮 | UI 测试 | Playwright+Chrome | §4、§8.1 | 有 list 权限 | 看工具栏 | 无「新增」;仅搜索、重置 |
| ZCZX-GYSJSGL-UI-007 | 列表 | 待结算操作按钮 | UI 测试 | Playwright+Chrome | §8.2 | SS-PEND 行 | 看操作列 | 含「完成结算」「查看」;无打印凭证 |
| ZCZX-GYSJSGL-UI-008 | 列表 | 已完成操作按钮 | UI 测试 | Playwright+Chrome | §8.2 | SS-DONE 行 | 看操作列 | 含「打印凭证」「查看」;无完成结算 |
| ZCZX-GYSJSGL-UI-009 | 列表 | 待结算凭证列空 | UI 测试 | Playwright+Chrome | §5.2 | SS-PEND | 看结算凭证列 | 为空或「—」 |
| ZCZX-GYSJSGL-UI-010 | 查看 | 只读含收费快照 | UI 测试 | Playwright+Chrome | §7 | SS-PEND | 点击查看 | 全字段只读;展示收费方式及费率快照;无编辑入口 |
| ZCZX-GYSJSGL-UI-011 | 查看 | 不跳转订单 | UI 测试 | Playwright+Chrome | §3.2、§7 | 任意行 | 打开详情 | 无「查看订单」「跳转订单」链接;订单编号纯文本 |
| ZCZX-GYSJSGL-UI-012 | 查看 | 已完成凭证预览 | UI 测试 | Playwright+Chrome | §7 | SS-DONE | 查看详情 | 结算凭证图可预览;完成时间有值 |
| ZCZX-GYSJSGL-UI-013 | 完成结算 | 弹窗文案 | UI 测试 | Playwright+Chrome | §6.1 | SS-PEND | 点「完成结算」 | 标题为「完成结算支付」 |
| ZCZX-GYSJSGL-UI-014 | 完成结算 | 上传凭证成功 | UI 测试 | Playwright+Chrome | §6.2 | SS-PEND;V-OK | 上传 jpg→确定 | 成功提示;列表状态「已完成」;完成时间有值 |
| ZCZX-GYSJSGL-UI-015 | 完成结算 | 取消不变 | UI 测试 | Playwright+Chrome | §6.2 | SS-PEND | 完成结算→取消 | 仍为待结算 |
| ZCZX-GYSJSGL-UI-016 | 完成结算 | 缺凭证拦截 | UI 测试 | Playwright+Chrome | §3.7 | SS-PEND | 不上传直接确定 | 提示请上传结算凭证 |
| ZCZX-GYSJSGL-UI-017 | 完成结算 | 非法格式拦截 | UI 测试 | Playwright+Chrome | §3.7 | SS-PEND | 上传 V-BAD | 前端或提交失败 |
| ZCZX-GYSJSGL-UI-018 | 完成结算 | 二次确认(若有) | UI 测试 | Playwright+Chrome | §13 建议 | 前端已实现确认框 | 确定前弹窗 | 展示结算单号、供应商、实际应付(宜) |
| ZCZX-GYSJSGL-UI-019 | 完成结算 | 已完成不可再结 | UI 测试 | Playwright+Chrome | §6.5 | SS-DONE | 找「完成结算」按钮 | 无按钮或不可点 |
| ZCZX-GYSJSGL-UI-020 | 打印 | 仅已完成可打 | UI 测试 | Playwright+Chrome | §8.3 | SS-DONE | 打印凭证 | 预览含编号、订单号、供应商、头数、金额、服务费、应付、状态、创建/完成时间、结算凭证图 |
| ZCZX-GYSJSGL-UI-021 | 打印 | 不含订单支付凭证 | UI 测试 | Playwright+Chrome | §8.3 | SS-DONE | 检查打印内容 | 无订单支付凭证、无采购耳标明细 |
| ZCZX-GYSJSGL-UI-022 | 打印 | 待结算不可打 | UI 测试 | Playwright+Chrome | §8.3 | SS-PEND | 找打印按钮 | 无「打印凭证」 |
| ZCZX-GYSJSGL-UI-023 | 端到端 | 订单支付到结算完成 | UI 集成 | Playwright+Chrome | §10.7 | 权限齐备 | 订单模块完成支付→本模块完成结算 | 新待结算行出现→上传凭证→已完成;订单模块仍为已完成 |
| ZCZX-GYSJSGL-UI-024 | 端到端 | 闭环无后续引导 | UI 测试 | Playwright+Chrome | §14 决策 9 | 上一步已完成 | 完成后停留本模块 | 无强制跳转订单页;无「下一步」必办 |
| ZCZX-GYSJSGL-UI-025 | 权限 | 只读角色 | UI 测试 | Playwright+Chrome | §11 | 仅 list/query | 进入模块 | 无「完成结算」;可查看 |
| ZCZX-GYSJSGL-UI-026 | 权限 | 无 settle | UI 测试 | Playwright+Chrome | §11 | 无 settle | SS-PEND 行 | 无「完成结算」按钮 |
| ZCZX-GYSJSGL-UI-027 | 约束 | 金额不可编辑 | UI 测试 | Playwright+Chrome | §8.1 | 查看/列表 | 尝试改服务费、应付 | 无输入框;不可改 |
npm i -D @playwright/test;npx playwright install chrome。use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' };storageState 复用登录态。await page.goto('/tradeMarket/supplierSettlement')。page.getByPlaceholder('结算单编号').fill('JSD') → getByRole('button', { name: '搜索' }).click()。getByRole('button', { name: '完成结算' }).first().click() → locator('input[type=file]').setInputFiles('test.jpg') → 对话框 getByRole('button', { name: '确定' }).click() → 断言列表状态「已完成」。await expect(page.getByRole('link', { name: '查看订单' })).toHaveCount(0)。page.waitForEvent('popup') 或断言打印 DOM 含 settlementNo、payableAmount,不含 payVoucher。| 类别 | 单元 UT | 接口 API | 界面 UI |
|---|---|---|---|
| 正常流程 | UT-005~009、014、021 | API-001~010、018、023~024 | UI-001~005、010、014、020、023~024 |
| 异常流程 | UT-010~013、015~016、018 | API-011~015、029 | UI-015~017、019 |
| 业务约束 | UT-010、017、019~020 | API-016~017、019~022、030 | UI-006、011、021~022、027 |
| 来源与 1:1 | UT-008、010 | API-018~019 | UI-023 |
| 费用快照 | UT-005~007、020、022 | API-020~021 | UI-010 |
| 凭证双轨 | UT-011~013 | API-011~012 | UI-014、016~017、021 |
| 状态与操作矩阵 | UT-009、015 | API-013 | UI-007~009、019、022 |
| 不回写订单 | UT-017 | API-022 | — |
| 不跳转订单 | — | API-030 | UI-011、024 |
| 闭环终点 | — | API-024 | UI-024 |
| 列表筛选 | UT-019~020 | API-002~005 | UI-002~005 |
| 权限/鉴权 | — | API-025~028 | UI-025~026 |
| 打印 §8.3 | — | — | UI-020~022 |
| 无 CRUD | — | API-016~017 | UI-006、027 |
| 需求章节 | 要点 | 主要对应用例 |
|---|---|---|
| §2 状态 | 待结算/已完成;不可逆 | UT-009、015;API-010、013;UI-007~009、019 |
| §3 字段 | 编号、快照、凭证、时间 | UT-001~008、011~013;API-006~008、020~021;UI-001、010、012 |
| §4 来源 | 仅支付生成;不可手工建 | UT-010;API-016~019;UI-006、023 |
| §5 列表 | 双模糊 AND;列 | API-001~006;UI-001~005 |
| §6 完成结算 | 凭证、事务、不回写 | UT-014~018;API-010~015、022;UI-013~019 |
| §7 查看 | 只读;无跳转 | API-007、030;UI-010~012 |
| §8 功能清单 | 无增删改;打印边界 | API-016~017;UI-006、020~022、027 |
| §10 关联订单 | 协同、异常 | API-015、018~019、023;UI-023 |
| §11 权限 | 分权 | API-025~028;UI-025~026 |
| §12 提示语 | 失败可读 | UT-011;API-029;UI-016 |
| §14 决策 | 闭环、不跳转 | API-024、030;UI-011、024 |
| 版本 | 说明 |
|---|---|
| 1.0 | 初版:单元 22、接口 30、UI 27;覆盖正常/异常/约束、单元+接口+UI;Playwright+Chrome;前缀 ZCZX-GYSJSGL;对齐需求 v1.1、技术方案 v1.0 |
| 1.1 | 标注后端已实现用例的自动化类名 |