统一财务统计与线下提号出款口径

This commit is contained in:
yml2213
2026-09-03 20:44:55 +08:00
parent e418a4dfb1
commit 86a9b25d57
12 changed files with 202 additions and 49 deletions
@@ -125,11 +125,33 @@ func (r *Repository) pickupSummary(ctx context.Context, query DashboardQuery) (*
if err := db.Table("admin_pickups").Where("status = ?", "picking_up").Count(&inProgress).Error; err != nil {
return nil, err
}
var pending 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 = ? AND offline_settlement_status = ? AND settle_amount_cent > 0", "platform_managed", "pending").
Scan(&pending).Error; err != nil {
return nil, err
}
var pendingAdjustments 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 = ? AND status = ? AND settle_delta_cent > 0", "platform_managed", "pending").
Scan(&pendingAdjustments).Error; err != nil {
return nil, err
}
return &PickupSummaryDTO{
SettledAmountCent: row.SettledAmountCent + adjustments.SettledAmountCent,
ProfitAmountCent: row.ProfitAmountCent + adjustments.ProfitAmountCent,
CompletedCount: row.CompletedCount,
InProgressCount: inProgress,
PendingAmountCent: pending.AmountCent + pendingAdjustments.AmountCent,
PendingCount: pending.Count + pendingAdjustments.Count,
}, nil
}
@@ -250,7 +272,7 @@ func (r *Repository) summary(ctx context.Context, query DashboardQuery, pickup *
OwnerWalletIncomeAmountCent: settlement.OwnerWalletIncomeAmountCent,
OwnerEffectiveSettlementAmountCent: settlement.OwnerEffectiveSettlementAmountCent,
OfflineSettlementAmountCent: settlement.OfflineSettlementAmountCent,
OfflineSettlementPendingAmountCent: settlement.OfflineSettlementPendingAmountCent,
OfflineSettlementPendingAmountCent: settlement.OfflineSettlementPendingAmountCent + pickup.PendingAmountCent,
SettlementDiffAmountCent: settlement.OwnerShouldIncomeAmountCent - settlement.OwnerEffectiveSettlementAmountCent,
EstimatedIncomeAmountCent: estimated.EstimatedIncomeAmountCent,
SuccessfulPayCount: payment.SuccessfulPayCount,
@@ -260,7 +282,7 @@ func (r *Repository) summary(ctx context.Context, query DashboardQuery, pickup *
PendingRefundCount: payment.PendingRefundCount,
SettledOrderCount: settlement.SettledOrderCount,
PendingSettleOrderCount: estimated.PendingSettleOrderCount,
OfflineSettlementPendingCount: settlement.OfflineSettlementPendingCount,
OfflineSettlementPendingCount: settlement.OfflineSettlementPendingCount + pickup.PendingCount,
FinancialExceptionCount: settlement.FinancialExceptionCount,
}, nil
}
@@ -499,7 +521,7 @@ func (r *Repository) dailyPickupCancelled(ctx context.Context, query DashboardQu
return rows, err
}
// dailyPaidOrders 按实际付款日统计普通租赁订单,并将创建的线下提号视为已付款成交。
// dailyPaidOrders 按实际付款日统计普通租赁订单,并将已完成的线下提号按完成日计入成交。
func (r *Repository) dailyPaidOrders(ctx context.Context, query DashboardQuery) ([]dailyPaidOrderRow, error) {
items := make([]dailyPaidOrderRow, 0)
err := r.db.WithContext(ctx).Table(`(
@@ -508,10 +530,10 @@ func (r *Repository) dailyPaidOrders(ctx context.Context, query DashboardQuery)
WHERE biz_type = 'order_pay' AND status = 'paid' AND paid_at >= ? AND paid_at <= ?
GROUP BY DATE(paid_at)
UNION ALL
SELECT DATE(created_at) AS date, COUNT(id) AS paid_order_count
SELECT DATE(completed_at) AS date, COUNT(id) AS paid_order_count
FROM admin_pickups
WHERE created_at >= ? AND created_at <= ?
GROUP BY DATE(created_at)
WHERE status = 'completed' AND completed_at >= ? AND completed_at <= ?
GROUP BY DATE(completed_at)
) AS daily_paid_orders`, query.StartDate, query.EndDate, query.StartDate, query.EndDate).
Select("date, SUM(paid_order_count) AS paid_order_count").
Group("date").