归档一次性佣金配置落库与累计触发修复,同步规范文档到主 specs
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
- 归档 fix-one-time-commission-config-and-accumulation 到 archive/2026-01-29-* - 同步 delta specs 到主规范(one-time-commission-trigger、commission-calculation) - 新增累计触发逻辑文档和测试用例 - 修复一次性佣金配置落库和累计充值更新逻辑
This commit is contained in:
@@ -22,13 +22,28 @@
|
||||
|
||||
系统 SHALL 支持"累计充值"触发条件:当卡/设备的累计充值金额 ≥ 配置阈值时触发一次性佣金。
|
||||
|
||||
**关键修复**:每次支付成功后必须更新累计充值金额,确保累计值能正确递增并达到阈值。
|
||||
|
||||
#### Scenario: 累计达到阈值
|
||||
|
||||
- **WHEN** 卡之前累计充值 200 元,本次充值 150 元,配置阈值 300 元
|
||||
- **THEN** 累计 350 元 ≥ 300 元,系统发放一次性佣金
|
||||
- **THEN** 系统更新累计充值为 350 元
|
||||
- **AND** 累计 350 元 ≥ 300 元,系统发放一次性佣金
|
||||
- **AND** 标记 first_commission_paid = true
|
||||
|
||||
#### Scenario: 累计未达到阈值
|
||||
|
||||
- **WHEN** 卡之前累计充值 100 元,本次充值 100 元,配置阈值 300 元
|
||||
- **THEN** 累计 200 元 < 300 元,系统不发放一次性佣金
|
||||
- **THEN** 系统更新累计充值为 200 元
|
||||
- **AND** 累计 200 元 < 300 元,系统不发放一次性佣金
|
||||
|
||||
#### Scenario: 每次支付都更新累计值
|
||||
|
||||
- **WHEN** 卡累计充值为 50 元
|
||||
- **AND** 连续发生 3 次充值:100 元、150 元、80 元
|
||||
- **THEN** 第 1 次充值后累计 150 元
|
||||
- **AND** 第 2 次充值后累计 300 元
|
||||
- **AND** 第 3 次充值后累计 380 元
|
||||
|
||||
---
|
||||
|
||||
@@ -50,12 +65,39 @@
|
||||
|
||||
一次性佣金的触发条件和金额 SHALL 从 ShopSeriesAllocation 配置获取。
|
||||
|
||||
**关键修复**:配置必须能够通过 ShopSeriesAllocation 创建/更新接口正确落库并生效。
|
||||
|
||||
#### Scenario: 获取触发条件和金额
|
||||
|
||||
- **WHEN** 触发一次性佣金检查
|
||||
- **THEN** 系统从卡关联的 ShopSeriesAllocation 获取 one_time_commission_trigger(触发类型)、one_time_commission_threshold(阈值)、one_time_commission_amount(金额)
|
||||
- **THEN** 系统从卡关联的 ShopSeriesAllocation 获取 one_time_commission_trigger(触发类型)、one_time_commission_threshold(阈值)、one_time_commission_mode(模式)、one_time_commission_value(金额/比例)
|
||||
|
||||
#### Scenario: 固定类型配置
|
||||
|
||||
- **WHEN** 创建 ShopSeriesAllocation 时设置 one_time_commission_type = "fixed"
|
||||
- **AND** 设置 one_time_commission_mode = "fixed",one_time_commission_value = 5000(50 元)
|
||||
- **THEN** 系统将配置正确写入数据库
|
||||
- **AND** 查询该配置时能正确返回所有一次性佣金字段
|
||||
|
||||
#### Scenario: 梯度类型配置
|
||||
|
||||
- **WHEN** 创建 ShopSeriesAllocation 时设置 one_time_commission_type = "tiered"
|
||||
- **AND** 提供梯度档位配置:[{threshold: 100, mode: "fixed", value: 2000}, {threshold: 300, mode: "percent", value: 10}]
|
||||
- **THEN** 系统将主配置写入 tb_shop_series_allocation
|
||||
- **AND** 将档位配置写入 tb_shop_series_one_time_commission_tier
|
||||
- **AND** 查询该配置时能正确返回主配置和关联的档位列表
|
||||
|
||||
#### Scenario: 更新梯度配置
|
||||
|
||||
- **WHEN** 更新 ShopSeriesAllocation 的梯度配置
|
||||
- **AND** 新档位配置与旧配置不同
|
||||
- **THEN** 系统先删除旧档位数据(WHERE allocation_id = ?)
|
||||
- **AND** 再批量插入新档位数据
|
||||
- **AND** 查询时返回最新的档位配置
|
||||
|
||||
#### Scenario: 无一次性佣金配置
|
||||
- **WHEN** 卡关联的系列分配未配置一次性佣金(one_time_commission_amount = 0)
|
||||
|
||||
- **WHEN** 卡关联的系列分配未启用一次性佣金(enable_one_time_commission = false)
|
||||
- **THEN** 不发放一次性佣金
|
||||
|
||||
---
|
||||
@@ -67,3 +109,32 @@
|
||||
#### Scenario: 发放给归属店铺
|
||||
- **WHEN** 卡归属店铺 A,触发一次性佣金
|
||||
- **THEN** 佣金入账到店铺 A 的钱包
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 配置参数校验
|
||||
|
||||
系统 MUST 在创建/更新 ShopSeriesAllocation 时校验一次性佣金配置的完整性。
|
||||
|
||||
#### Scenario: 启用一次性佣金必须提供配置
|
||||
|
||||
- **WHEN** 创建 ShopSeriesAllocation 时设置 enable_one_time_commission = true
|
||||
- **AND** 未提供 one_time_commission_config
|
||||
- **THEN** 系统返回错误:一次性佣金配置无效(错误码 40101)
|
||||
|
||||
#### Scenario: 固定类型必须提供 mode 和 value
|
||||
|
||||
- **WHEN** 一次性佣金类型为 "fixed"
|
||||
- **AND** one_time_commission_mode 或 one_time_commission_value 为空
|
||||
- **THEN** 系统返回错误:一次性佣金模式/金额缺失(错误码 40102/40103)
|
||||
|
||||
#### Scenario: 梯度类型必须提供 tiers
|
||||
|
||||
- **WHEN** 一次性佣金类型为 "tiered"
|
||||
- **AND** tiers 配置为空或 null
|
||||
- **THEN** 系统返回错误:梯度佣金档位配置缺失(错误码 40104)
|
||||
|
||||
#### Scenario: 梯度档位配置校验
|
||||
|
||||
- **WHEN** 提供的梯度档位缺少必填字段(threshold_value、commission_mode、commission_value)
|
||||
- **THEN** 系统返回错误:梯度佣金档位配置无效(错误码 40105)
|
||||
|
||||
Reference in New Issue
Block a user