feat: 强化用量计费状态机,新增钱包每日消费汇总分类账

- 将 usage.billing_status 默认值从 settled 改为 pending,完善
  pending -> settled/void 的状态转换逻辑,确保终态不可逆
- 新增 WalletDailyUsageLedger 模型和聚合服务,按账单日汇总
  每个钱包的消费金额、请求数和 token 用量
- 前端钱包中心页面集成每日消费流水展示,支持与充值记录混合
  排序和分页
- 新增两个数据库迁移:修复历史数据状态一致性、创建每日汇总表
- 补充计费状态机单元测试

Closes #218

Co-authored-by: LewisPen <LewisPen@nyadoo.com>
This commit is contained in:
fawney19
2026-03-11 15:05:11 +08:00
parent 6235c772ac
commit 04ab4bd9f2
25 changed files with 1212 additions and 121 deletions

View File

@@ -35,6 +35,21 @@ export function walletTransactionCategoryLabel(category: string | null | undefin
return labels[category] || category
}
export function dailyUsageCategoryLabel(isToday = false): string {
return isToday ? '今日消费' : '每日消费'
}
export function formatTokenCount(value: number | null | undefined): string {
const amount = Number(value ?? 0)
if (amount >= 1_000_000) {
return `${(amount / 1_000_000).toFixed(amount >= 10_000_000 ? 0 : 1)}M`
}
if (amount >= 1_000) {
return `${(amount / 1_000).toFixed(amount >= 10_000 ? 0 : 1)}K`
}
return `${Math.round(amount)}`
}
export function walletTransactionReasonLabel(reasonCode: string | null | undefined): string {
const labels: Record<string, string> = {
topup_admin_manual: '人工充值',