Files
sexygoat 841cf0442b
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 3m30s
fetch(add): 订单管理-企业设备
2026-01-29 15:43:45 +08:00

226 lines
7.4 KiB
Markdown

# Package Series Allocation Spec Delta
## MODIFIED Requirements
### Requirement: 套餐系列分配列表查询
系统 SHALL 提供套餐系列分配列表查询功能,支持按店铺、系列和状态筛选,返回包含新佣金配置的分配信息。
#### Scenario: 成功获取分配列表
- **WHEN** 用户请求套餐系列分配列表
- **THEN** 系统返回分配列表,每项包含:
- 基本信息: id, series_id, series_name, shop_id, shop_name
- 分配者信息: allocator_shop_id, allocator_shop_name
- 佣金配置: base_commission (mode, value), enable_tier_commission
- 状态和时间: status, created_at, updated_at
- **AND** 响应结构为: `{ list, page, page_size, total, total_pages }`
#### Scenario: 按条件筛选分配列表
- **WHEN** 用户提供筛选条件 (shop_id, series_id, status)
- **THEN** 系统返回符合条件的分配列表
- **AND** 支持分页参数 (page, page_size)
### Requirement: 创建套餐系列分配
系统 SHALL 允许用户创建套餐系列分配,配置基础返佣和可选的梯度返佣规则。
#### Scenario: 创建基础返佣分配
- **WHEN** 用户提交创建请求,包含:
- series_id: 套餐系列ID
- shop_id: 被分配的店铺ID
- base_commission: { mode: "fixed"/"percent", value: number }
- **THEN** 系统创建分配记录
- **AND** 返回完整的分配信息包含 allocator_shop_id 和 allocator_shop_name
#### Scenario: 创建带梯度返佣的分配
- **WHEN** 用户提交创建请求,包含:
- series_id, shop_id, base_commission (同上)
- enable_tier_commission: true
- tier_config: { period_type, tier_type, tiers[] }
- period_type: "monthly"/"quarterly"/"yearly"
- tier_type: "sales_count"/"sales_amount"
- tiers: [{ threshold, mode, value }]
- **THEN** 系统创建分配记录并保存梯度配置
- **AND** 梯度档位按阈值升序存储
#### Scenario: 验证梯度档位阈值递增
- **WHEN** 用户提交的梯度档位阈值不是递增的
- **THEN** 系统返回400错误
- **AND** 错误消息说明阈值必须递增
### Requirement: 更新套餐系列分配
系统 SHALL 允许用户更新现有分配的佣金配置,包括基础返佣和梯度返佣。
#### Scenario: 更新基础返佣配置
- **WHEN** 用户提交更新请求,包含新的 base_commission
- **THEN** 系统更新分配记录
- **AND** 返回更新后的完整信息
#### Scenario: 启用或禁用梯度返佣
- **WHEN** 用户更新 enable_tier_commission 标志
- **THEN** 系统更新配置
- **AND** 如果启用,必须提供有效的 tier_config
- **AND** 如果禁用,tier_config 可以为空
#### Scenario: 更新梯度返佣配置
- **WHEN** 用户提交包含新 tier_config 的更新请求
- **THEN** 系统替换整个梯度配置
- **AND** 验证新档位阈值递增
- **AND** 返回更新后的信息
### Requirement: 删除套餐系列分配
系统 SHALL 允许用户删除套餐系列分配记录。
#### Scenario: 成功删除分配
- **WHEN** 用户请求删除指定ID的分配
- **THEN** 系统删除该分配记录
- **AND** 返回成功响应 (200)
#### Scenario: 删除不存在的分配
- **WHEN** 用户请求删除不存在的分配ID
- **THEN** 系统返回404错误
- **AND** 错误消息说明分配不存在
### Requirement: 获取套餐系列分配详情
系统 SHALL 提供单个分配记录的详细信息查询。
#### Scenario: 成功获取详情
- **WHEN** 用户请求指定ID的分配详情
- **THEN** 系统返回完整的分配信息,包括:
- 所有基本字段
- base_commission 对象
- enable_tier_commission 标志
- tier_config (如果启用了梯度返佣)
### Requirement: 更新套餐系列分配状态
系统 SHALL 允许用户启用或禁用套餐系列分配。
#### Scenario: 切换分配状态
- **WHEN** 用户提交状态更新请求 (status: 1启用/2禁用)
- **THEN** 系统更新分配状态
- **AND** 返回成功响应
#### Scenario: 禁用分配后的行为
- **WHEN** 分配被禁用 (status: 2)
- **THEN** 该分配不再参与佣金计算 (由后端业务逻辑保证)
- **AND** 前端列表中状态显示为"禁用"
## REMOVED Requirements
### Requirement: 定价模式配置
**Reason**: 旧的定价模式 (pricing_mode, pricing_value) 已被新的佣金模型替代
**Migration**: 旧数据通过后端迁移脚本转换为基础返佣配置:
- pricing_mode="fixed" → base_commission.mode="fixed"
- pricing_mode="percentage" → base_commission.mode="percent"
- pricing_value → base_commission.value (需要单位转换)
### Requirement: 一次性佣金配置
**Reason**: 一次性佣金配置 (one_time_commission_*) 已被梯度返佣系统替代
**Migration**: 旧的一次性佣金通过以下方式迁移:
- 如果设置了一次性佣金,转换为单档位的梯度返佣
- trigger → tier_type mapping (first_activation → sales_count, cumulative_recharge → sales_amount)
- threshold → tiers[0].threshold
- amount → tiers[0].value (mode设为fixed)
### Requirement: 计算成本价字段
**Reason**: calculated_cost_price 字段在新模型中不再使用
**Migration**: 该字段不再返回,成本计算由后端业务逻辑内部处理
## ADDED Requirements
### Requirement: 基础返佣配置
系统 SHALL 为每个分配提供基础返佣配置,包含返佣模式和返佣值。
#### Scenario: 固定金额返佣
- **WHEN** base_commission.mode = "fixed"
- **THEN** base_commission.value 表示固定返佣金额(单位:分)
- **AND** 每笔交易返佣该固定金额
#### Scenario: 百分比返佣
- **WHEN** base_commission.mode = "percent"
- **THEN** base_commission.value 表示返佣百分比的千分比 (如200表示20%)
- **AND** 每笔交易返佣 = 交易金额 * (value / 1000)
### Requirement: 梯度返佣配置
系统 SHALL 支持可选的梯度返佣配置,根据周期内的销量或销售额分档返佣。
#### Scenario: 按销量分档返佣
- **WHEN** tier_config.tier_type = "sales_count"
- **THEN** 系统根据周期内的销售数量匹配档位
- **AND** 达到档位阈值后,该档位的返佣规则生效
#### Scenario: 按销售额分档返佣
- **WHEN** tier_config.tier_type = "sales_amount"
- **THEN** 系统根据周期内的销售金额(分)匹配档位
- **AND** 达到档位阈值后,该档位的返佣规则生效
#### Scenario: 月度返佣周期
- **WHEN** tier_config.period_type = "monthly"
- **THEN** 系统按自然月统计销量或销售额
- **AND** 每月初重置计数
#### Scenario: 季度返佣周期
- **WHEN** tier_config.period_type = "quarterly"
- **THEN** 系统按季度统计销量或销售额
- **AND** 每季度初重置计数
#### Scenario: 年度返佣周期
- **WHEN** tier_config.period_type = "yearly"
- **THEN** 系统按年度统计销量或销售额
- **AND** 每年初重置计数
### Requirement: 梯度档位管理
系统 SHALL 支持多个返佣档位,每个档位有独立的阈值和返佣规则。
#### Scenario: 多档位返佣
- **WHEN** 配置了多个档位 (tiers数组)
- **THEN** 系统按阈值从低到高排列档位
- **AND** 当销量/销售额超过某档位阈值时,使用该档位的返佣规则
#### Scenario: 档位阈值唯一性
- **WHEN** 用户提交包含重复阈值的档位
- **THEN** 系统返回400错误
- **AND** 错误消息说明阈值必须唯一
#### Scenario: 档位返佣模式
- **WHEN** 档位的 mode = "fixed"
- **THEN** value 表示固定返佣金额(分)
- **WHEN** 档位的 mode = "percent"
- **THEN** value 表示返佣百分比的千分比