支持提号完成后财务调整

This commit is contained in:
yml2213
2026-08-16 19:52:12 +08:00
parent 786d20e9cd
commit 80e55ba281
15 changed files with 1272 additions and 111 deletions
@@ -18,6 +18,31 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
Scan(&offlinePaid).Error; err != nil {
return nil, err
}
var pickupPaid struct {
AmountCent int64
Count int64
}
if err := db.Table("admin_pickups").
Select(`COALESCE(SUM(settle_amount_cent), 0) AS amount_cent, COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("offline_settlement_status = ?", "settled").
Where("offline_settled_at >= ? AND offline_settled_at <= ?", query.StartDate, query.EndDate).
Scan(&pickupPaid).Error; err != nil {
return nil, err
}
var pickupAdjustmentPaid struct {
AmountCent int64
Count int64
}
if err := db.Table("admin_pickup_financial_adjustments").
Select(`COALESCE(SUM(settle_delta_cent), 0) AS amount_cent, COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("status = ?", "settled").
Where("settle_delta_cent > 0").
Where("settled_at >= ? AND settled_at <= ?", query.StartDate, query.EndDate).
Scan(&pickupAdjustmentPaid).Error; err != nil {
return nil, err
}
var offlinePending struct {
AmountCent int64
@@ -31,6 +56,30 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
Scan(&offlinePending).Error; err != nil {
return nil, err
}
var pickupPending struct {
AmountCent int64
Count int64
}
if err := db.Table("admin_pickups").
Select(`COALESCE(SUM(settle_amount_cent), 0) AS amount_cent, COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("offline_settlement_status = ?", "pending").
Where("settle_amount_cent > 0").
Scan(&pickupPending).Error; err != nil {
return nil, err
}
var pickupAdjustmentPending struct {
AmountCent int64
Count int64
}
if err := db.Table("admin_pickup_financial_adjustments").
Select(`COALESCE(SUM(settle_delta_cent), 0) AS amount_cent, COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("status = ?", "pending").
Where("settle_delta_cent > 0").
Scan(&pickupAdjustmentPending).Error; err != nil {
return nil, err
}
var withdrawalPaid struct {
AmountCent int64
@@ -84,12 +133,12 @@ func (r *Repository) disbursementSummary(ctx context.Context, query DashboardQue
}
return &DisbursementSummaryDTO{
PaidAmountCent: offlinePaid.AmountCent + withdrawalPaid.ActualAmountCent + manualPaid.AmountCent,
PaidCount: offlinePaid.Count + withdrawalPaid.Count + manualPaid.Count,
PendingPaymentAmountCent: offlinePending.AmountCent + withdrawalPending.ActualAmountCent,
PendingPaymentCount: offlinePending.Count + withdrawalPending.Count,
OfflineSettlementPaidAmountCent: offlinePaid.AmountCent,
OfflineSettlementPaidCount: offlinePaid.Count,
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,
OfflineSettlementPaidAmountCent: offlinePaid.AmountCent + pickupPaid.AmountCent + pickupAdjustmentPaid.AmountCent,
OfflineSettlementPaidCount: offlinePaid.Count + pickupPaid.Count + pickupAdjustmentPaid.Count,
OfflineSettlementPendingAmountCent: offlinePending.AmountCent,
OfflineSettlementPendingCount: offlinePending.Count,
WithdrawalAmountCent: withdrawalPaid.AmountCent,
@@ -119,6 +168,33 @@ func (r *Repository) dailyDisbursements(ctx context.Context, query DashboardQuer
Scan(&offlineRows).Error; err != nil {
return nil, err
}
pickupOfflineRows := make([]dailyDisbursementSourceRow, 0)
if err := db.Table("admin_pickups").
Select(`DATE(offline_settled_at) AS date,
COALESCE(SUM(settle_amount_cent), 0) AS amount_cent,
COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("offline_settlement_status = ?", "settled").
Where("offline_settled_at >= ? AND offline_settled_at <= ?", query.StartDate, query.EndDate).
Group("DATE(offline_settled_at)").
Scan(&pickupOfflineRows).Error; err != nil {
return nil, err
}
pickupAdjustmentRows := make([]dailyDisbursementSourceRow, 0)
if err := db.Table("admin_pickup_financial_adjustments").
Select(`DATE(settled_at) AS date,
COALESCE(SUM(settle_delta_cent), 0) AS amount_cent,
COUNT(id) AS count`).
Where("settlement_mode = ?", "platform_managed").
Where("status = ?", "settled").
Where("settle_delta_cent > 0").
Where("settled_at >= ? AND settled_at <= ?", query.StartDate, query.EndDate).
Group("DATE(settled_at)").
Scan(&pickupAdjustmentRows).Error; err != nil {
return nil, err
}
offlineRows = append(offlineRows, pickupOfflineRows...)
offlineRows = append(offlineRows, pickupAdjustmentRows...)
withdrawalRows := make([]dailyDisbursementSourceRow, 0)
if err := db.Table("withdrawal_requests").
@@ -149,8 +225,8 @@ func (r *Repository) dailyDisbursements(ctx context.Context, query DashboardQuer
date := dailyDateKey(row.Date)
item := rowsByDate[date]
item.Date = date
item.OfflineSettlementPaidAmountCent = row.AmountCent
item.OfflineSettlementPaidCount = row.Count
item.OfflineSettlementPaidAmountCent += row.AmountCent
item.OfflineSettlementPaidCount += row.Count
rowsByDate[date] = item
}
for _, row := range withdrawalRows {