Files
junhong_cmp_fiber/openspec/specs/package-series-management/spec.md
huang b52cb9a078
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m27s
fix: 修复梯度佣金档位字段缺失,补全授权接口响应字段及强充有效状态
- OneTimeCommissionTierDTO 补充 operator 字段映射
- GrantCommissionTierItem 补充 dimension/stat_scope 字段(从全局配置合并)
- 系列授权列表/详情补充强充锁定状态和强充金额的有效值计算
- 同步 OpenSpec 主规范并归档变更文档
2026-03-05 11:23:28 +08:00

137 lines
5.5 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 允许平台管理员创建套餐系列,包含系列编码、系列名称、描述信息。系列编码 MUST 全局唯一(排除已删除记录)。新创建的套餐系列默认为启用状态。
#### Scenario: 成功创建套餐系列
- **WHEN** 管理员提交有效的套餐系列信息(系列编码、系列名称)
- **THEN** 系统创建套餐系列记录,返回创建的套餐系列详情,状态为启用(1)
#### Scenario: 系列编码重复
- **WHEN** 管理员提交的系列编码已存在(未删除)
- **THEN** 系统返回错误 "系列编码已存在"
#### Scenario: 缺少必填字段
- **WHEN** 管理员未提供系列编码或系列名称
- **THEN** 系统返回参数验证错误
---
### Requirement: 查询套餐系列列表
系统 SHALL 提供套餐系列列表查询功能,支持按系列名称模糊搜索、按状态筛选。结果 MUST 分页返回,按创建时间倒序排列。
#### Scenario: 查询所有套餐系列
- **WHEN** 管理员请求套餐系列列表,不带筛选条件
- **THEN** 系统返回所有未删除的套餐系列,分页显示
#### Scenario: 按名称搜索
- **WHEN** 管理员提供系列名称关键字
- **THEN** 系统返回名称包含该关键字的套餐系列
#### Scenario: 按状态筛选
- **WHEN** 管理员指定状态筛选(启用/禁用)
- **THEN** 系统只返回匹配状态的套餐系列
---
### Requirement: 查询套餐系列详情
系统 SHALL 允许管理员查询单个套餐系列的详细信息。
#### Scenario: 查询存在的套餐系列
- **WHEN** 管理员请求指定 ID 的套餐系列详情
- **THEN** 系统返回该套餐系列的完整信息
#### Scenario: 查询不存在的套餐系列
- **WHEN** 管理员请求不存在或已删除的套餐系列 ID
- **THEN** 系统返回 "套餐系列不存在" 错误
---
### Requirement: 更新套餐系列
系统 SHALL 允许管理员更新套餐系列的基本信息(系列名称、描述)。系列编码创建后 MUST NOT 允许修改。
#### Scenario: 成功更新套餐系列
- **WHEN** 管理员提交有效的更新信息
- **THEN** 系统更新套餐系列记录,返回更新后的详情
#### Scenario: 尝试修改系列编码
- **WHEN** 管理员尝试修改系列编码
- **THEN** 系统忽略系列编码字段,不进行修改
#### Scenario: 更新不存在的套餐系列
- **WHEN** 管理员更新不存在的套餐系列
- **THEN** 系统返回 "套餐系列不存在" 错误
---
### Requirement: 删除套餐系列
系统 SHALL 允许管理员删除套餐系列(软删除)。
#### Scenario: 成功删除套餐系列
- **WHEN** 管理员删除指定的套餐系列
- **THEN** 系统软删除该记录,后续查询不再返回
#### Scenario: 删除不存在的套餐系列
- **WHEN** 管理员删除不存在的套餐系列
- **THEN** 系统返回 "套餐系列不存在" 错误
---
### Requirement: 启用/禁用套餐系列
系统 SHALL 允许管理员切换套餐系列的启用状态。
#### Scenario: 启用套餐系列
- **WHEN** 管理员将禁用的套餐系列设置为启用
- **THEN** 系统更新状态为启用(1)
#### Scenario: 禁用套餐系列
- **WHEN** 管理员将启用的套餐系列设置为禁用
- **THEN** 系统更新状态为禁用(2)
#### Scenario: 状态未变化
- **WHEN** 管理员设置的状态与当前状态相同
- **THEN** 系统正常返回成功,不产生错误
---
### Requirement: 套餐系列一次性佣金规则配置
系统 SHALL 在套餐系列层面配置一次性佣金的完整规则,包括触发条件、阈值、金额/梯度、时效、强充配置。梯度配置(`commission_type=tiered`)中每个档位 MUST 支持通过 `operator` 字段设置阈值比较运算符(`>``>=``<``<=`),默认值为 `>=`
#### Scenario: 配置首充规则
- **WHEN** 创建或更新套餐系列
- **AND** 设置一次性佣金规则:`trigger_type = first_recharge``threshold = 10000`100元`commission_amount = 2000`20元
- **THEN** 系统保存该规则配置
#### Scenario: 配置累计充值规则
- **WHEN** 创建或更新套餐系列
- **AND** 设置一次性佣金规则:`trigger_type = accumulated_recharge``threshold = 20000`200元`commission_amount = 4000`40元
- **THEN** 系统保存该规则配置
#### Scenario: 配置梯度规则(含 operator
- **WHEN** 创建或更新套餐系列,`commission_type = tiered`
- **AND** 梯度配置包含 `operator` 字段:`[{operator: ">=" , dimension: "sales_count", stat_scope: "self", threshold: 100, amount: 1000}, {operator: "<", dimension: "sales_count", stat_scope: "self", threshold: 50, amount: 500}]`
- **THEN** 系统保存完整梯度配置(含 operator
- **AND** 查询详情时响应中 `tiers` 包含 `operator` 字段
#### Scenario: 配置梯度规则(不传 operator向后兼容
- **WHEN** 创建或更新套餐系列,`commission_type = tiered`
- **AND** 梯度配置未提供 `operator` 字段:`[{dimension: "sales_count", stat_scope: "self", threshold: 100, amount: 1000}]`
- **THEN** 系统保存梯度配置,`operator` 存储为空值(计算引擎 fallback 到 `>=`
- **AND** 查询详情时响应中 `tiers``operator` 字段不出现omitempty
#### Scenario: 查询系列详情包含规则
- **WHEN** 查询套餐系列详情
- **THEN** 返回完整的一次性佣金规则配置,梯度档位包含 `operator``dimension``stat_scope``threshold``amount`