Files
huang 2b3a9cb33f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m19s
feat: 新增套餐使用记录实付金额快照字段 paid_amount
- 新增迁移 000129:tb_package_usage 添加 paid_amount BIGINT 字段,存量数据通过 JOIN tb_order 回填
- PackageUsage Model 新增 PaidAmount *int64 字段
- 4 个写入点(order service 主套餐/加油包、auto_purchase 主套餐/加油包)赋值 order.ActualPaidAmount
- AssetPackageResponse DTO 新增 paid_amount 字段
- GetCurrentPackage / GetPackages 填充 paid_amount,接口直接返回购买价格无需 JOIN 订单表
2026-04-18 10:19:21 +08:00

50 lines
2.7 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.
## Why
`tb_package_usage` 在套餐激活时只快照了套餐名称(`package_name`),未快照购买时的实付金额。导致 `GET /api/admin/assets/{id}/current-package``GET /api/admin/assets/{id}/packages` 两个接口无法返回价格信息,也无法在不 JOIN 订单表的情况下展示历史购买价格。
## What Changes
- **新增数据库字段**`tb_package_usage.paid_amount BIGINT`单位分nullable用于快照购买时的实付金额
- **新增数据库迁移**`000129_add_paid_amount_to_package_usage`,含存量数据回填(通过 `order_id` JOIN `tb_order`
- **Model 更新**`PackageUsage` 结构体新增 `PaidAmount *int64` 字段
- **写入点赋值4处**
- `internal/service/order/service.go` `activateMainPackage()` — 主套餐激活
- `internal/service/order/service.go` `activateAddonPackage()` — 加油包激活
- `internal/task/auto_purchase.go` `activateMainPackage()` — 自动购包主套餐
- `internal/task/auto_purchase.go` `activateAddonPackage()` — 自动购包加油包
- **DTO 更新**`AssetPackageResponse` 新增 `PaidAmount *int64` 字段
- **Service 查询更新**Asset Service 的 `GetCurrentPackage``GetPackages` 填充 DTO `PaidAmount` 字段
## Capabilities
### New Capabilities
- `package-usage-paid-amount-snapshot`:在套餐使用记录中快照购买实付金额,使资产套餐接口能直接返回购买价格,无需 JOIN 订单表
### Modified Capabilities
- `asset-queries`:套餐列表和当前套餐接口响应新增 `paid_amount` 字段
## Impact
**数据库**
- `tb_package_usage` 新增字段 `paid_amount BIGINT`nullable存量回填
**代码**
| 层级 | 文件 | 改动 |
|------|------|------|
| Model | `internal/model/package.go` | `PackageUsage` 新增 `PaidAmount *int64` |
| Service | `internal/service/order/service.go` | 主套餐 + 加油包激活各加一行赋值 |
| Service | `internal/task/auto_purchase.go` | 自动购包主套餐 + 加油包各加一行赋值 |
| DTO | `internal/model/dto/asset_dto.go` | `AssetPackageResponse` 新增 `PaidAmount *int64` |
| Service | `internal/service/asset/service.go` | `GetCurrentPackage` + `GetPackages` 填充 DTO 字段 |
| 迁移 | `migrations/000129_add_paid_amount_to_package_usage.{up,down}.sql` | 加字段 + 回填 |
**API**
- `GET /api/admin/assets/{id}/current-package`:响应新增 `paid_amount`(分)
- `GET /api/admin/assets/{id}/packages`:响应 items 新增 `paid_amount`(分)
**特殊情况**
- 线下支付订单:`actual_paid_amount` 为 null`paid_amount` 快照为 null字段 nullable
- 存量 `order_id = 0` 的记录(企业无订单分配):回填为 null字段保持 nullable