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

2.7 KiB
Raw Blame History

Why

tb_package_usage 在套餐激活时只快照了套餐名称(package_name),未快照购买时的实付金额。导致 GET /api/admin/assets/{id}/current-packageGET /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 的 GetCurrentPackageGetPackages 填充 DTO PaidAmount 字段

Capabilities

New Capabilities

  • package-usage-paid-amount-snapshot:在套餐使用记录中快照购买实付金额,使资产套餐接口能直接返回购买价格,无需 JOIN 订单表

Modified Capabilities

  • asset-queries:套餐列表和当前套餐接口响应新增 paid_amount 字段

Impact

数据库

  • tb_package_usage 新增字段 paid_amount BIGINTnullable存量回填

代码

层级 文件 改动
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 为 nullpaid_amount 快照为 null字段 nullable
  • 存量 order_id = 0 的记录(企业无订单分配):回填为 null字段保持 nullable