Files
huang 91c9bbfeb8
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m35s
feat: 实现账号与佣金管理模块
新增功能:
- 店铺佣金查询:店铺佣金统计、店铺佣金记录列表、店铺提现记录
- 佣金提现审批:提现申请列表、审批通过、审批拒绝
- 提现配置管理:配置列表、新增配置、获取当前生效配置
- 企业管理:企业列表、创建、更新、删除、获取详情
- 企业卡授权:授权列表、批量授权、批量取消授权、统计
- 客户账号管理:账号列表、创建、更新状态、重置密码
- 我的佣金:佣金统计、佣金记录、提现申请、提现记录

数据库变更:
- 扩展 tb_commission_withdrawal_request 新增提现单号等字段
- 扩展 tb_account 新增 is_primary 字段
- 扩展 tb_commission_record 新增 shop_id、balance_after
- 扩展 tb_commission_withdrawal_setting 新增每日提现次数限制
- 扩展 tb_iot_card、tb_device 新增 shop_id 冗余字段
- 新建 tb_enterprise_card_authorization 企业卡授权表
- 新建 tb_asset_allocation_record 资产分配记录表
- 数据迁移:owner_type 枚举值 agent 统一为 shop

测试:
- 新增 7 个单元测试文件覆盖各服务
- 修复集成测试 Redis 依赖问题
2026-01-21 18:20:44 +08:00

4.4 KiB
Raw Blame History

ADDED Requirements

Requirement: 新增企业客户

系统 SHALL 提供新增企业客户的接口,同时自动创建企业账号。

接口POST /api/admin/enterprises

请求参数

  • owner_shop_id归属代理商ID可选不填为平台自营
  • enterprise_name:企业名称(必填)
  • enterprise_code:企业编号(必填,唯一)
  • legal_person:法人代表
  • contact_name:联系人姓名(必填)
  • contact_phone:联系人电话(必填)
  • login_phone:登录手机号(必填,作为企业账号)
  • password:登录密码(必填)
  • business_license:营业执照号
  • provincecitydistrictaddress:地址信息

响应字段

  • 企业信息enterprise
  • 账号信息account

Scenario: 创建企业并自动创建账号

  • WHEN 创建企业客户
  • THEN 创建企业记录
  • AND 自动创建企业账号UserType=4, EnterpriseID=企业ID
  • AND 使用事务确保原子性

Scenario: 企业编号唯一性校验

  • WHEN 创建企业时企业编号已存在
  • THEN 返回错误:企业编号已存在

Scenario: 登录手机号唯一性校验

  • WHEN 创建企业时登录手机号已被其他账号使用
  • THEN 返回错误:手机号已被使用

Scenario: 指定归属店铺

  • WHEN 指定 owner_shop_id
  • THEN 验证店铺存在且当前用户有权限
  • AND 设置企业归属该店铺

Requirement: 查询企业客户列表

系统 SHALL 提供查询企业客户列表的接口。

接口GET /api/admin/enterprises

请求参数

  • pagepage_size:分页
  • enterprise_name:企业名称(模糊查询)
  • login_phone:登录手机号(模糊查询)
  • contact_phone:联系人电话(模糊查询)
  • owner_shop_id归属代理商ID
  • status状态0=禁用, 1=启用)

响应字段

  • 企业信息id, enterprise_name, enterprise_code, contact_name, contact_phone
  • 归属信息owner_shop_id, owner_shop_name
  • 账号信息login_phone
  • 状态信息status, status_name
  • 地址信息province, city, district, address

Scenario: 平台用户查看所有企业

  • WHEN 平台用户请求企业列表
  • THEN 返回所有企业

Scenario: 代理商用户查看归属企业

  • WHEN 代理商用户请求企业列表
  • THEN 只返回 owner_shop_id 在自己+下级店铺范围内的企业

Scenario: 关联查询登录手机号

  • WHEN 返回企业列表
  • THEN 通过关联账号表获取 login_phone

Requirement: 编辑企业信息

系统 SHALL 提供编辑企业信息的接口。

接口PUT /api/admin/enterprises/:id

请求参数

  • id企业ID路径参数
  • 可编辑字段owner_shop_id, enterprise_name, enterprise_code, legal_person, contact_name, contact_phone, business_license, 地址信息

注意:修改联系人电话不影响账号的登录手机号。

Scenario: 编辑企业基本信息

  • WHEN 编辑企业信息
  • THEN 更新企业记录
  • AND 不影响关联账号

Scenario: 修改企业编号时校验唯一性

  • WHEN 修改企业编号
  • THEN 验证新编号不与其他企业冲突

Scenario: 修改归属店铺

  • WHEN 修改 owner_shop_id
  • THEN 验证目标店铺存在且当前用户有权限

Requirement: 启用/禁用企业

系统 SHALL 提供启用或禁用企业的接口,同步影响企业账号。

接口PUT /api/admin/enterprises/:id/status

请求参数

  • id企业ID路径参数
  • status状态0=禁用, 1=启用)

Scenario: 禁用企业

  • WHEN 禁用企业
  • THEN 更新企业状态为禁用
  • AND 同步禁用企业关联的账号

Scenario: 启用企业

  • WHEN 启用企业
  • THEN 更新企业状态为启用
  • AND 同步启用企业关联的账号

Requirement: 修改企业账号密码

系统 SHALL 提供修改企业账号密码的接口。

接口PUT /api/admin/enterprises/:id/password

请求参数

  • id企业ID路径参数
  • password:新密码(必填)

Scenario: 重置企业账号密码

  • WHEN 修改企业账号密码
  • THEN 查找企业关联的账号
  • AND 更新账号密码bcrypt加密

Scenario: 权限校验

  • WHEN 修改密码
  • THEN 验证当前用户有权限操作该企业