修复后台分页刷新并优化财务查询

This commit is contained in:
yml2213
2026-08-30 21:56:22 +08:00
parent 327a03672a
commit 6561f925e0
7 changed files with 40 additions and 53 deletions
@@ -98,42 +98,29 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
return nil, err
}
var withdrawalPaid struct {
AmountCent int64
FeeAmountCent int64
ActualAmountCent int64
Count int64
// 付款、处理中、待审核三类提现在一次条件聚合中完成,避免同一张表重复扫描。
var withdrawal struct {
PaidAmountCent int64
PaidFeeAmountCent int64
PaidActualAmountCent int64
PaidCount int64
PendingAmountCent int64
PendingCount int64
ReviewAmountCent int64
ReviewCount int64
}
if err := db.Table("withdrawal_requests").
Select(`COALESCE(SUM(amount_cent), 0) AS amount_cent,
COALESCE(SUM(fee_cent), 0) AS fee_amount_cent,
COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent,
COUNT(id) AS count`).
Where("status = ?", "completed").
Where("paid_at >= ? AND paid_at <= ?", query.StartDate, query.EndDate).
Scan(&withdrawalPaid).Error; err != nil {
return nil, err
}
var withdrawalPending struct {
ActualAmountCent int64
Count int64
}
if err := db.Table("withdrawal_requests").
Select(`COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent, COUNT(id) AS count`).
Where("status = ?", "processing").
Scan(&withdrawalPending).Error; err != nil {
return nil, err
}
var withdrawalReview struct {
ActualAmountCent int64
Count int64
}
if err := db.Table("withdrawal_requests").
Select(`COALESCE(SUM(actual_amount_cent), 0) AS actual_amount_cent, COUNT(id) AS count`).
Where("status = ?", "pending").
Scan(&withdrawalReview).Error; err != nil {
if err := db.Table("withdrawal_requests").Select(`
COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN amount_cent ELSE 0 END), 0) AS paid_amount_cent,
COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN fee_cent ELSE 0 END), 0) AS paid_fee_amount_cent,
COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN actual_amount_cent ELSE 0 END), 0) AS paid_actual_amount_cent,
COALESCE(SUM(CASE WHEN status = 'completed' AND paid_at >= ? AND paid_at <= ? THEN 1 ELSE 0 END), 0) AS paid_count,
COALESCE(SUM(CASE WHEN status = 'processing' THEN actual_amount_cent ELSE 0 END), 0) AS pending_amount_cent,
COALESCE(SUM(CASE WHEN status = 'processing' THEN 1 ELSE 0 END), 0) AS pending_count,
COALESCE(SUM(CASE WHEN status = 'pending' THEN actual_amount_cent ELSE 0 END), 0) AS review_amount_cent,
COALESCE(SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END), 0) AS review_count`,
query.StartDate, query.EndDate, query.StartDate, query.EndDate,
query.StartDate, query.EndDate, query.StartDate, query.EndDate).
Scan(&withdrawal).Error; err != nil {
return nil, err
}
@@ -150,22 +137,22 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
}
return &DisbursementSummaryDTO{
PaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent + withdrawalPaid.ActualAmountCent + manualPaid.AmountCent,
PaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count + withdrawalPaid.Count + manualPaid.Count,
PendingPaymentAmountCent: offlinePending.AmountCent + pickupPending.AmountCent + pickupAdjustmentPending.AmountCent + withdrawalPending.ActualAmountCent,
PendingPaymentCount: offlinePending.Count + pickupPending.Count + pickupAdjustmentPending.Count + withdrawalPending.Count,
PaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent + withdrawal.PaidActualAmountCent + manualPaid.AmountCent,
PaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count + withdrawal.PaidCount + manualPaid.Count,
PendingPaymentAmountCent: offlinePending.AmountCent + pickupPending.AmountCent + pickupAdjustmentPending.AmountCent + withdrawal.PendingAmountCent,
PendingPaymentCount: offlinePending.Count + pickupPending.Count + pickupAdjustmentPending.Count + withdrawal.PendingCount,
OfflineSettlementPaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent,
OfflineSettlementPaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count,
OfflineSettlementPendingAmountCent: offlinePending.AmountCent,
OfflineSettlementPendingCount: offlinePending.Count,
WithdrawalAmountCent: withdrawalPaid.AmountCent,
WithdrawalFeeAmountCent: withdrawalPaid.FeeAmountCent,
WithdrawalPaidAmountCent: withdrawalPaid.ActualAmountCent,
WithdrawalPaidCount: withdrawalPaid.Count,
WithdrawalPendingAmountCent: withdrawalPending.ActualAmountCent,
WithdrawalPendingCount: withdrawalPending.Count,
WithdrawalReviewAmountCent: withdrawalReview.ActualAmountCent,
WithdrawalReviewCount: withdrawalReview.Count,
WithdrawalAmountCent: withdrawal.PaidAmountCent,
WithdrawalFeeAmountCent: withdrawal.PaidFeeAmountCent,
WithdrawalPaidAmountCent: withdrawal.PaidActualAmountCent,
WithdrawalPaidCount: withdrawal.PaidCount,
WithdrawalPendingAmountCent: withdrawal.PendingAmountCent,
WithdrawalPendingCount: withdrawal.PendingCount,
WithdrawalReviewAmountCent: withdrawal.ReviewAmountCent,
WithdrawalReviewCount: withdrawal.ReviewCount,
ManualPaidAmountCent: manualPaid.AmountCent,
ManualPaidCount: manualPaid.Count,
}, nil