Files
junhong_cmp_fiber/openspec/specs/agent-fund-summary/spec.md
2026-04-09 14:53:48 +08:00

3.1 KiB
Raw Blame History

agent-fund-summary Specification

Purpose

代理商资金概况列表,聚合展示代理的预充值钱包(主钱包)和佣金钱包余额信息,供平台和代理多层级查看资金概况。

ADDED Requirements

Requirement: 代理商资金概况列表

系统 SHALL 提供 GET /api/admin/shops/fund-summary 接口,返回分页的代理商资金概况列表,同时包含预充值钱包(主钱包)和佣金钱包的余额信息。

响应字段ShopFundSummaryItem

  • shop_id:店铺 ID
  • shop_name:店铺名称
  • shop_code:店铺编码
  • username:主账号用户名
  • phone:主账号手机号
  • main_balance:预充值钱包余额(分)
  • main_frozen_balance:预充值钱包冻结余额(分)
  • total_commission:累计佣金总额(分)
  • withdrawn_commission:已提现佣金(分)
  • unwithdraw_commission:未提现佣金(分)
  • frozen_commission:冻结中佣金(分)
  • withdrawing_commission:提现中佣金(分)
  • available_commission:可提现佣金(分)
  • created_at:店铺创建时间

查询参数ShopFundSummaryListReq

  • page:页码(默认 1
  • page_size:每页数量(默认 20最大 100
  • shop_name:店铺名称模糊查询
  • username:主账号用户名模糊查询

实现要求

  • 主钱包余额通过 AgentWalletStore.GetShopMainWalletBatch 批量查询,避免 N+1
  • 若代理暂无主钱包记录(未充值),main_balancemain_frozen_balance 返回 0
  • main_frozen_balance 字段为未来预留(当前业务无主钱包冻结场景,值恒为 0前端可暂不展示
  • 数据权限:列表查询走 Shop 表的数据权限过滤(SubordinateShopIDs)。平台人员返回全部代理;代理账号返回自己 + 所有下级店铺(而不是只返回自己一条)

Scenario: 平台人员查看所有代理资金概况

  • WHEN 平台人员请求 GET /shops/fund-summary
  • THEN 系统返回所有代理的分页列表,每条包含 main_balance 和佣金钱包字段

Scenario: 无下级代理的账号查看自己的资金概况

  • WHEN 无下级代理的代理账号请求 GET /shops/fund-summary
  • THEN 系统按数据权限过滤,只返回该代理自己的一条记录

Scenario: 有下级代理的顶级代理查看资金概况

  • WHEN 一个拥有多个下级代理的顶级代理账号请求 GET /shops/fund-summary
  • THEN 系统返回自己 + 所有下级代理店铺的资金概况列表(按 SubordinateShopIDs 过滤)

Scenario: 代理暂无主钱包时返回零值

  • WHEN 代理从未充值,tb_agent_wallet 中无该店铺的 wallet_type=main 记录
  • THEN main_balancemain_frozen_balance 返回 0其余字段正常返回

Scenario: 按店铺名称过滤

  • WHEN 传入 shop_name=张三
  • THEN 系统只返回店铺名称包含"张三"的代理记录

Scenario: 企业账号无权访问

  • WHEN 企业账号请求此接口
  • THEN 系统返回 403 错误,消息为"企业账号无权访问代理资金功能"