# Shop Package Allocation (单套餐分配) Specification

## ADDED Requirements

### Requirement: 单套餐分配列表查询

系统 SHALL 提供单套餐分配记录的查询功能。

#### Scenario: 查询所有单套餐分配

- **WHEN** 管理员访问单套餐分配管理页面
- **THEN** 系统显示单套餐分配列表
- **AND** 每条记录包含：分配ID、套餐ID、套餐编码、套餐名称
- **AND** 显示被分配的店铺ID和店铺名称
- **AND** 显示覆盖的成本价（cost_price，单位：分）
- **AND** 显示原计算成本价（calculated_cost_price，供参考）
- **AND** 显示关联的系列分配ID
- **AND** 显示状态、创建时间、更新时间
- **AND** 支持分页，每页最多100条记录

#### Scenario: 按店铺筛选

- **WHEN** 管理员选择特定店铺ID筛选
- **THEN** 系统返回该店铺的所有单套餐分配记录

#### Scenario: 按套餐筛选

- **WHEN** 管理员选择特定套餐ID筛选
- **THEN** 系统返回该套餐的所有分配记录

#### Scenario: 按状态筛选

- **WHEN** 管理员选择状态（启用/禁用）筛选
- **THEN** 系统返回符合状态条件的分配记录

### Requirement: 创建单套餐分配

系统 SHALL 允许管理员为店铺分配特定套餐并设置成本价。

#### Scenario: 成功创建单套餐分配

- **WHEN** 管理员选择套餐ID、店铺ID
- **AND** 设置覆盖的成本价（必填，最小值为0）
- **AND** 提交分配
- **THEN** 系统创建单套餐分配记录
- **AND** 计算并保存原计算成本价（基于系列分配规则）
- **AND** 返回创建的分配详情，包括关联的系列分配ID

#### Scenario: 重复分配检查

- **WHEN** 管理员为同一店铺分配已分配过的套餐
- **THEN** 系统返回错误提示"该套餐已分配给此店铺"

#### Scenario: 店铺和套餐验证

- **WHEN** 管理员使用不存在的店铺ID或套餐ID
- **THEN** 系统返回错误提示"店铺或套餐不存在"

### Requirement: 查看单套餐分配详情

系统 SHALL 允许管理员查看单个分配记录的详细信息。

#### Scenario: 查询存在的分配记录

- **WHEN** 管理员通过分配ID查询详情
- **THEN** 系统返回该分配记录的完整信息
- **AND** 包含套餐完整信息、店铺信息、定价信息

#### Scenario: 查询不存在的分配记录

- **WHEN** 管理员查询不存在的分配ID
- **THEN** 系统返回404错误

### Requirement: 更新单套餐分配

系统 SHALL 允许管理员更新单套餐分配的成本价。

#### Scenario: 成功更新成本价

- **WHEN** 管理员修改覆盖的成本价
- **AND** 提交更新
- **THEN** 系统更新成本价
- **AND** 返回更新后的分配详情

#### Scenario: 成本价验证

- **WHEN** 管理员设置成本价小于0
- **THEN** 系统返回验证错误"成本价必须大于等于0"

### Requirement: 删除单套餐分配

系统 SHALL 允许管理员删除单套餐分配记录。

#### Scenario: 成功删除分配

- **WHEN** 管理员删除单套餐分配记录
- **THEN** 系统删除该分配记录
- **AND** 该店铺将无法再以此定价售卖该套餐
- **AND** 返回成功状态

#### Scenario: 删除正在使用的分配

- **WHEN** 管理员删除正在被订单使用的分配记录
- **THEN** 系统可能返回警告或阻止删除（根据业务规则）

### Requirement: 单套餐分配状态管理

系统 SHALL 支持单套餐分配的启用/禁用状态管理。

#### Scenario: 启用分配

- **WHEN** 管理员将禁用状态的分配切换为启用
- **THEN** 系统更新状态为启用（status=1）
- **AND** 该店铺可以使用此定价售卖套餐

#### Scenario: 禁用分配

- **WHEN** 管理员将启用状态的分配切换为禁用
- **THEN** 系统更新状态为禁用（status=2）
- **AND** 该店铺将无法使用此定价售卖套餐

### Requirement: 成本价优先级规则

系统 SHALL 实现单套餐分配成本价覆盖系列分配规则。

#### Scenario: 单套餐分配优先

- **WHEN** 店铺同时拥有系列分配和单套餐分配
- **THEN** 系统使用单套餐分配的成本价
- **AND** 原计算成本价（calculated_cost_price）保存系列分配规则计算的价格，供参考

#### Scenario: 仅系列分配

- **WHEN** 店铺只有系列分配，没有单套餐分配
- **THEN** 系统使用系列分配规则计算成本价

### Requirement: 关联系列分配追踪

系统 SHALL 追踪单套餐分配与系列分配的关联关系。

#### Scenario: 记录关联的系列分配

- **WHEN** 创建单套餐分配时
- **THEN** 系统记录关联的系列分配ID（allocation_id）
- **AND** 用于追溯定价来源

### Requirement: 权限控制

系统 SHALL 对单套餐分配管理功能实施权限控制。

#### Scenario: 未认证用户访问

- **WHEN** 未登录用户访问单套餐分配接口
- **THEN** 系统返回401未认证错误

#### Scenario: 无权限用户访问

- **WHEN** 已登录但无权限的用户访问单套餐分配接口
- **THEN** 系统返回403无权访问错误

#### Scenario: 仅管理员可操作

- **WHEN** 非管理员用户尝试创建、更新或删除单套餐分配
- **THEN** 系统返回403无权访问错误
