All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m19s
- 新增迁移 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 订单表
50 lines
2.7 KiB
Markdown
50 lines
2.7 KiB
Markdown
## 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
|