## 1. 数据库迁移

- [x] 1.1 创建迁移文件，在 `tb_order_item` 新增 `cost_price BIGINT NOT NULL DEFAULT 0` 字段
- [x] 1.2 创建迁移文件，在 `tb_package_usage` 新增 `retail_amount BIGINT NULLABLE` 字段
- [x] 1.3 在迁移文件中添加存量数据回填 SQL：`tb_package_usage.retail_amount` 从关联订单 `total_amount` 回填（`order_id != 0` 的记录）
- [x] 1.4 执行迁移，验证两个字段已成功添加到数据库

## 2. 数据模型更新

- [x] 2.1 在 `internal/model/order.go` 的 `OrderItem` 结构体中新增 `CostPrice int64` 字段（GORM tag + 中文注释）
- [x] 2.2 在 `internal/model/package.go` 的 `PackageUsage` 结构体中新增 `RetailAmount *int64` 字段（GORM tag + 中文注释）
- [x] 2.3 在 `internal/model/dto/asset_dto.go` 的 `AssetPackageResponse` 中新增 `RetailAmount *int64` 字段（json tag `retail_amount,omitempty` + description）

## 3. 修正 Admin 下单价格语义

- [x] 3.1 在 `internal/service/order/service.go` 中，修正各场景的 `totalAmount` 赋值：始终使用 `retailTotalAmount`，不再被 `buyerTotalCost` 覆盖（覆盖平台代购、代理自购、代理代购、平台代扣四个子场景）
- [x] 3.2 在 `internal/service/order/service.go` 中，修正 `buildOrderItems`：`UnitPrice` 改从零售价 map 取值，`CostPrice` 从成本价 map 取值（需同时传入两个 map）
- [x] 3.3 在 `internal/service/order/service.go` 中，修正 `createOrderWithWalletPayment`：钱包扣款金额改用 `order.ActualPaidAmount`，不再使用 `order.TotalAmount`
- [ ] 3.4 验证：通过 PostgreSQL MCP 查询新建的后台代购订单，确认 `total_amount` = 零售价，`actual_paid_amount` = 成本价，`order_item.unit_price` = 零售单价，`order_item.cost_price` = 成本单价

## 4. 修正套餐激活时的价格快照

- [x] 4.1 在 `internal/service/order/service.go` 的 `activateMainPackage()` 中，写入 `PackageUsage.RetailAmount = order.TotalAmount`
- [x] 4.2 在 `internal/service/order/service.go` 的 `activateAddonPackage()` 中，写入 `PackageUsage.RetailAmount = order.TotalAmount`
- [x] 4.3 在 `internal/task/auto_purchase.go` 的 `activateMainPackage()` 中，写入 `PackageUsage.RetailAmount = order.TotalAmount`
- [x] 4.4 在 `internal/task/auto_purchase.go` 的 `activateAddonPackage()` 中，写入 `PackageUsage.RetailAmount = order.TotalAmount`
- [ ] 4.5 验证：通过 PostgreSQL MCP 查询新激活的套餐使用记录，确认 `retail_amount` = 零售价，`paid_amount` = 成本价

## 5. 资产套餐接口按角色过滤成本价

- [x] 5.1 修改 `internal/service/asset/service.go` 的 `GetPackages()` 签名，新增 `callerAccountType string` 参数；当 `callerAccountType != "platform"` 时，`AssetPackageResponse.PaidAmount` 置为 nil
- [x] 5.2 修改 `internal/service/asset/service.go` 的 `GetCurrentPackage()` 签名，新增 `callerAccountType string` 参数；同上过滤逻辑
- [x] 5.3 在两个方法中，将 `PackageUsage.RetailAmount` 赋值给 `AssetPackageResponse.RetailAmount`
- [x] 5.4 修改 `internal/handler/admin/asset.go` 的 `Packages()` 方法：从 middleware 读取调用方账号类型，传入 `GetPackages()`
- [x] 5.5 修改 `internal/handler/admin/asset.go` 的 `CurrentPackage()` 方法：从 middleware 读取调用方账号类型，传入 `GetCurrentPackage()`
- [ ] 5.6 验证：用平台账号调用 `/api/admin/assets/{identifier}/packages`，确认响应包含 `paid_amount` 和 `retail_amount`；用代理账号调用，确认响应只有 `retail_amount`，无 `paid_amount`

## 6. 验证 C 端订单价格展示

- [x] 6.1 通过 PostgreSQL MCP 查询一条后台代购订单，确认 `total_amount` 已为零售价（历史数据为成本价，已知；新建订单需运行时验证）
- [ ] 6.2 调用 `GET /api/c/v1/orders?identifier=xxx`，确认列表中 `total_amount` 展示零售价
- [ ] 6.3 调用 `GET /api/c/v1/orders/:id`，确认详情中 `total_amount` 和套餐 `price` 均为零售价
