# Shop Series Allocation Specification Delta ## MODIFIED Requirements ### Requirement: Shop Series Allocation Data Model 套餐系列分配的数据模型SHALL重构为更细粒度的佣金配置结构,移除旧的 `base_commission` 模式,采用独立的一次性佣金和强制充值配置字段。 **字段定义**: - `id` (number) - 分配ID - `series_id` (number) - 套餐系列ID - `series_name` (string) - 套餐系列名称 - `series_code` (string) - 套餐系列编码 - `shop_id` (number) - 被分配的店铺ID - `shop_name` (string) - 被分配的店铺名称 - `allocator_shop_id` (number) - 分配者店铺ID,0表示平台分配 - `allocator_shop_name` (string) - 分配者店铺名称 - `enable_one_time_commission` (boolean) - 是否启用一次性佣金 - `one_time_commission_amount` (number) - 该代理能拿的一次性佣金金额上限(分) - `one_time_commission_threshold` (number, optional) - 一次性佣金触发阈值(分) - `one_time_commission_trigger` (string, optional) - 一次性佣金触发类型: "first_recharge" | "accumulated_recharge" - `enable_force_recharge` (boolean) - 是否启用强制充值 - `force_recharge_amount` (number, optional) - 强制充值金额(分) - `force_recharge_trigger_type` (number, optional) - 强充触发类型: 1(单次充值) | 2(累计充值) - `status` (number) - 状态 (1:启用, 2:禁用) - `created_at` (string) - 创建时间 - `updated_at` (string) - 更新时间 **创建请求字段** (`CreateShopSeriesAllocationRequest`): - `series_id` (number, required) - 套餐系列ID - `shop_id` (number, required) - 被分配的店铺ID - `one_time_commission_amount` (number, required) - 一次性佣金金额上限(分) - `enable_one_time_commission` (boolean, optional) - 是否启用一次性佣金 - `one_time_commission_threshold` (number, optional) - 一次性佣金触发阈值(分) - `one_time_commission_trigger` (string, optional) - 一次性佣金触发类型 - `enable_force_recharge` (boolean, optional) - 是否启用强制充值 - `force_recharge_amount` (number, optional) - 强制充值金额(分) - `force_recharge_trigger_type` (number, optional) - 强充触发类型 **更新请求字段** (`UpdateShopSeriesAllocationRequest`): - 所有字段均为可选,允许部分更新 - `enable_one_time_commission` (boolean, optional) - `one_time_commission_amount` (number, optional) - `one_time_commission_threshold` (number, optional) - `one_time_commission_trigger` (string, optional) - `enable_force_recharge` (boolean, optional) - `force_recharge_amount` (number, optional) - `force_recharge_trigger_type` (number, optional) - `status` (number, optional) #### Scenario: 创建系列分配并启用一次性佣金 - **GIVEN** 平台管理员登录系统 - **AND** 系统中存在ID为1的套餐系列和ID为100的店铺 - **WHEN** 创建系列分配时提供以下配置: - `series_id`: 1 - `shop_id`: 100 - `one_time_commission_amount`: 5000 - `enable_one_time_commission`: true - `one_time_commission_threshold`: 10000 - `one_time_commission_trigger`: "first_recharge" - **THEN** 系统SHALL创建系列分配记录 - **AND** 响应数据中 `allocator_shop_id` 为 0(平台分配) - **AND** 响应数据中包含所有一次性佣金配置字段 #### Scenario: 创建系列分配并启用强制充值 - **GIVEN** 代理商A登录系统,shop_id为50 - **AND** 系统中存在ID为2的套餐系列和ID为101的下级代理店铺 - **WHEN** 创建系列分配时提供以下配置: - `series_id`: 2 - `shop_id`: 101 - `one_time_commission_amount`: 3000 - `enable_force_recharge`: true - `force_recharge_amount`: 15000 - `force_recharge_trigger_type`: 1 (单次充值) - **THEN** 系统SHALL创建系列分配记录 - **AND** 响应数据中 `allocator_shop_id` 为 50(代理商A) - **AND** 响应数据中包含所有强制充值配置字段 #### Scenario: 更新系列分配的一次性佣金配置 - **GIVEN** 系统中存在ID为10的系列分配 - **WHEN** 更新该分配时提供以下字段: - `one_time_commission_amount`: 8000 (从5000更新到8000) - `one_time_commission_threshold`: 20000 - **THEN** 系统SHALL更新指定字段 - **AND** 其他字段保持不变 - **AND** 响应数据中 `updated_at` 字段更新为当前时间 #### Scenario: 更新系列分配的强制充值配置 - **GIVEN** 系统中存在ID为10的系列分配 - **WHEN** 更新该分配时提供以下字段: - `enable_force_recharge`: true - `force_recharge_amount`: 25000 - `force_recharge_trigger_type`: 2 (累计充值) - **THEN** 系统SHALL更新强制充值配置 - **AND** 响应数据中包含更新后的强制充值字段 #### Scenario: 查询系列分配列表并显示分配者信息 - **GIVEN** 系统中存在多个系列分配,部分由平台创建,部分由代理商创建 - **WHEN** 查询系列分配列表 (GET /api/admin/shop-series-allocations) - **THEN** 系统SHALL返回所有分配记录 - **AND** 每条记录包含 `allocator_shop_id` 和 `allocator_shop_name` - **AND** 平台创建的分配记录中 `allocator_shop_id` 为 0 #### Scenario: 按分配者店铺ID筛选系列分配 - **GIVEN** 系统中存在多个系列分配 - **WHEN** 使用查询参数 `allocator_shop_id=50` - **THEN** 系统SHALL返回所有由店铺ID为50的代理商创建的分配记录 ## REMOVED Requirements ### Requirement: Base Commission Configuration 旧版的 `base_commission` 配置模式已被移除,不再使用 `BaseCommissionConfig` 类型。 **Reason**: 新的佣金配置模型更加灵活和细粒度,将一次性佣金配置分散到独立字段中,便于查询和管理。 **Migration**: 现有使用 `base_commission` 字段的代码需要迁移到新的字段结构。如果有历史数据,需要后端提供数据迁移方案。 ### Requirement: Tiered Commission Configuration 旧版的 `TierCommissionConfig` (周期性梯度返佣) 配置已被移除。 **Reason**: 系列分配层面不再支持复杂的梯度返佣配置,改为在系列级别统一配置一次性佣金梯度。 **Migration**: 梯度佣金配置现在在套餐系列级别 (`PackageSeries.one_time_commission_config.tiers`) 进行管理。 ## ADDED Requirements ### Requirement: Allocator Information Tracking 系统SHALL记录系列分配的创建者(分配者)信息,包括分配者店铺ID和名称。 #### Scenario: 平台创建的分配标记为平台分配 - **GIVEN** 平台管理员登录系统 - **WHEN** 创建系列分配 - **THEN** 系统SHALL自动设置 `allocator_shop_id` 为 0 - **AND** `allocator_shop_name` 为 "平台" 或相应的平台标识 #### Scenario: 代理商创建的分配记录代理商信息 - **GIVEN** 代理商A登录系统,shop_id为50,shop_name为"代理商A" - **WHEN** 创建系列分配给下级代理 - **THEN** 系统SHALL自动设置 `allocator_shop_id` 为 50 - **AND** `allocator_shop_name` 为 "代理商A" ### Requirement: Series Code in Allocation Response 系统SHALL在系列分配响应数据中包含套餐系列编码 (`series_code`)。 #### Scenario: 获取系列分配详情时包含系列编码 - **GIVEN** 系统中存在ID为10的系列分配,关联系列编码为"SERIES001" - **WHEN** 请求获取该分配的详情 (GET /api/admin/shop-series-allocations/10) - **THEN** 响应数据中SHALL包含 `series_code` 字段 - **AND** 其值为 "SERIES001"