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 订单表
2.7 KiB
2.7 KiB
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_idJOINtb_order) - Model 更新:
PackageUsage结构体新增PaidAmount *int64字段 - 写入点赋值(4处):
internal/service/order/service.goactivateMainPackage()— 主套餐激活internal/service/order/service.goactivateAddonPackage()— 加油包激活internal/task/auto_purchase.goactivateMainPackage()— 自动购包主套餐internal/task/auto_purchase.goactivateAddonPackage()— 自动购包加油包
- DTO 更新:
AssetPackageResponse新增PaidAmount *int64字段 - Service 查询更新:Asset Service 的
GetCurrentPackage和GetPackages填充 DTOPaidAmount字段
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