Files
junhong_cmp_fiber/openspec/specs/commission-calculation/spec.md
huang e87513541b
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
feat: 实现一次性佣金功能
- 新增佣金计算服务,支持一次性佣金和返佣计算
- 新增 ShopSeriesOneTimeCommissionTier 模型和存储层
- 新增两个数据库迁移:一次性佣金表和订单佣金字段
- 更新 Commission 模型,新增佣金来源和关联字段
- 更新 CommissionRecord 存储层,支持一次性佣金查询
- 更新 MyCommission 服务,集成一次性佣金计算逻辑
- 更新 ShopCommission 服务,支持一次性佣金统计
- 新增佣金计算异步任务处理器
- 更新 API 路由,新增一次性佣金相关端点
- 归档 OpenSpec 变更文档,同步规范到主规范库
2026-01-29 09:36:12 +08:00

74 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
## ADDED Requirements
### Requirement: 订单支付后触发佣金计算
系统 SHALL 在订单支付成功后自动触发佣金计算。计算通过异步任务执行。
#### Scenario: 支付成功触发计算
- **WHEN** 订单支付状态变为已支付
- **THEN** 系统发送佣金计算异步任务
#### Scenario: 重复支付不重复计算
- **WHEN** 订单已计算过佣金commission_status=2
- **THEN** 系统不重复触发计算
---
### Requirement: 成本价差收入计算
系统 SHALL 为代理链上的每一级代理计算成本价差收入。终端销售代理收入 = 售价 - 成本价;中间层级代理收入 = 下级成本价 - 自己成本价。
#### Scenario: 单级代理
- **WHEN** 一级代理销售套餐,售价 100 元,成本价 80 元
- **THEN** 一级代理获得 20 元100 - 80成本价差收入
#### Scenario: 多级代理
- **WHEN** 三级代理销售套餐,售价 100 元,各级成本价为:平台 50 → 一级 60 → 二级 70 → 三级 80
- **THEN** 三级获得 20 元100 - 80二级获得 10 元80 - 70一级获得 10 元70 - 60平台获得 10 元60 - 50
#### Scenario: 成本价相同
- **WHEN** 某级代理成本价等于下级成本价
- **THEN** 该级代理成本价差收入为 0不创建佣金记录
---
### Requirement: 佣金直接入账
成本价差收入 SHALL 直接入账到店铺钱包,无冻结期。
#### Scenario: 佣金入账
- **WHEN** 计算出代理的成本价差收入
- **THEN** 系统直接增加店铺钱包余额,创建佣金记录和钱包交易记录
#### Scenario: 记录入账后余额
- **WHEN** 佣金入账
- **THEN** CommissionRecord.balance_after 记录入账后的钱包余额
---
### Requirement: 更新累计充值金额
订单支付成功后系统 SHALL 更新卡/设备的累计充值金额。
#### Scenario: 单卡订单更新累计充值
- **WHEN** 单卡订单支付成功,金额 100 元
- **THEN** IotCard.accumulated_recharge 增加 10000 分
#### Scenario: 设备订单更新累计充值
- **WHEN** 设备订单支付成功,金额 300 元
- **THEN** Device.accumulated_recharge 增加 30000 分
---
### Requirement: CommissionRecord 模型简化
系统 MUST 简化 CommissionRecord 模型,移除冻结相关字段。
#### Scenario: 新佣金记录字段
- **WHEN** 创建佣金记录
- **THEN** 包含shop_id, order_id, iot_card_id, device_id, commission_source, amount, balance_after, status, released_at, remark
#### Scenario: 佣金来源类型
- **WHEN** 创建佣金记录
- **THEN** commission_source 为以下之一cost_diff成本价差、one_time一次性佣金、tier_bonus梯度奖励