refactor: 出库时间更名为首次购买套餐时间,换货新资产不再按换货完成时间记录
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 38s

- 字段 outbound_at → first_purchase_at,记录表 tb_asset_outbound_record → tb_asset_first_purchase_record,接口 /outbound-records → /first-purchase-records,筛选参数与导出列同步更名
- 换货后的新资产不因换货写入,在当前世代真正支付套餐订单时才记录;记录来源只保留 order / backfill,去掉换货单字段
- 迁移 000266 重命名列、表、索引与约束;同步 Spec、设计、任务与前端接口变更说明

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
邹进
2026-10-27 16:47:02 +09:00
parent 909f4d0ec2
commit 62ec94adec
46 changed files with 570 additions and 560 deletions

View File

@@ -56,7 +56,7 @@ type AutoPurchaseHandler struct {
priorityEvents priorityapp.PriorityEventWriter
auditWriter *audit.Writer
silenceSetter *packagesilenceapp.Setter
outboundRecorder *packagesilenceapp.OutboundRecorder
firstPurchaseRecorder *packagesilenceapp.FirstPurchaseRecorder
}
// SetSilenceSetter 注入沉默期设置用例;自动购包是无人参与路径,只用套餐默认沉默期。
@@ -64,9 +64,9 @@ func (h *AutoPurchaseHandler) SetSilenceSetter(setter *packagesilenceapp.Setter)
h.silenceSetter = setter
}
// SetOutboundRecorder 注入资产出库时间写入用例。
func (h *AutoPurchaseHandler) SetOutboundRecorder(recorder *packagesilenceapp.OutboundRecorder) {
h.outboundRecorder = recorder
// SetFirstPurchaseRecorder 注入资产首次购买套餐时间写入用例。
func (h *AutoPurchaseHandler) SetFirstPurchaseRecorder(recorder *packagesilenceapp.FirstPurchaseRecorder) {
h.firstPurchaseRecorder = recorder
}
// NewAutoPurchaseHandler 创建充值后自动购包处理器
@@ -626,9 +626,9 @@ func (h *AutoPurchaseHandler) activatePackages(
}
}
}
if createdUsage && h.outboundRecorder != nil {
// 出库时间:资产当前世代第 1 次购买套餐的支付时间
return h.outboundRecorder.RecordForOrderInTx(ctx, tx, order)
if createdUsage && h.firstPurchaseRecorder != nil {
// 首次购买套餐时间:资产当前世代第 1 次购买套餐的支付时间
return h.firstPurchaseRecorder.RecordForOrderInTx(ctx, tx, order)
}
return nil
}