修复平台代管财务差异
This commit is contained in:
@@ -61,28 +61,47 @@ func (r *Repository) applyDetailFilters(db *gorm.DB, query DetailQuery) *gorm.DB
|
||||
func (r *Repository) financeDetailBaseQuery(ctx context.Context, query DetailQuery) *gorm.DB {
|
||||
db := r.db.WithContext(ctx).Table("rental_orders AS ro").
|
||||
Select(`ro.id AS order_id, ro.order_no, ro.status AS order_status, ro.settlement_status, ro.refund_status,
|
||||
ro.renter_id, COALESCE(ru.phone, '') AS renter_phone, COALESCE(ru.nickname, '') AS renter_nickname,
|
||||
ro.owner_id, COALESCE(ou.phone, '') AS owner_phone, COALESCE(ou.nickname, '') AS owner_nickname,
|
||||
ro.rent_amount_cent AS order_rent_amount_cent, ro.deposit_amount_cent AS order_deposit_amount_cent,
|
||||
COALESCE(oc.rent_amount_cent, 0) AS checkout_rent_amount_cent,
|
||||
COALESCE(oc.renter_refund_amount_cent, 0) AS checkout_renter_refund_cent,
|
||||
COALESCE(oc.owner_income_amount_cent, 0) AS checkout_owner_income_cent,
|
||||
COALESCE(oc.platform_fee_cent, 0) AS checkout_platform_fee_cent,
|
||||
COALESCE(w.owner_wallet_income_amount_cent, 0) AS owner_wallet_income_amount_cent,
|
||||
COALESCE(p.paid_amount_cent, 0) AS paid_amount_cent,
|
||||
COALESCE(p.refunded_amount_cent, 0) AS refunded_amount_cent,
|
||||
COALESCE(p.refunding_amount_cent, 0) AS refunding_amount_cent,
|
||||
COALESCE(p.failed_refund_amount_cent, 0) AS failed_refund_amount_cent,
|
||||
COALESCE(p.paid_amount_cent, 0) - COALESCE(p.refunded_amount_cent, 0) AS channel_net_amount_cent,
|
||||
COALESCE(oc.platform_fee_cent, 0) + ((COALESCE(oc.owner_income_amount_cent, 0) - COALESCE(w.owner_wallet_income_amount_cent, 0))) AS platform_net_amount_cent,
|
||||
COALESCE(oc.owner_income_amount_cent, 0) - COALESCE(w.owner_wallet_income_amount_cent, 0) AS settlement_diff_amount_cent,
|
||||
CASE
|
||||
WHEN COALESCE(p.failed_refund_amount_cent, 0) > 0 THEN 'refund_failed'
|
||||
WHEN COALESCE(p.refunding_amount_cent, 0) > 0 OR ro.refund_status = 'refunding' THEN 'refund_pending'
|
||||
WHEN ABS(COALESCE(oc.owner_income_amount_cent, 0) - COALESCE(w.owner_wallet_income_amount_cent, 0)) >= ? THEN 'settlement_diff'
|
||||
ELSE 'normal'
|
||||
END AS finance_status,
|
||||
ro.created_at, ro.settled_at`, settlementDiffThresholdCent).
|
||||
ro.handoff_mode, ro.settlement_mode,
|
||||
COALESCE(NULLIF(ro.offline_settlement_status, ''), 'none') AS offline_settlement_status,
|
||||
COALESCE(ro.offline_settlement_amount_cent, 0) AS offline_settlement_amount_cent,
|
||||
ro.renter_id, COALESCE(ru.phone, '') AS renter_phone, COALESCE(ru.nickname, '') AS renter_nickname,
|
||||
ro.owner_id, COALESCE(ou.phone, '') AS owner_phone, COALESCE(ou.nickname, '') AS owner_nickname,
|
||||
ro.rent_amount_cent AS order_rent_amount_cent, ro.deposit_amount_cent AS order_deposit_amount_cent,
|
||||
COALESCE(oc.rent_amount_cent, 0) AS checkout_rent_amount_cent,
|
||||
COALESCE(oc.renter_refund_amount_cent, 0) AS checkout_renter_refund_cent,
|
||||
COALESCE(oc.owner_income_amount_cent, 0) AS checkout_owner_income_cent,
|
||||
COALESCE(oc.platform_fee_cent, 0) AS checkout_platform_fee_cent,
|
||||
COALESCE(w.owner_wallet_income_amount_cent, 0) AS owner_wallet_income_amount_cent,
|
||||
CASE WHEN ro.settlement_mode = 'platform_managed'
|
||||
THEN COALESCE(ro.offline_settlement_amount_cent, 0)
|
||||
ELSE COALESCE(w.owner_wallet_income_amount_cent, 0)
|
||||
END AS owner_effective_settlement_amount_cent,
|
||||
COALESCE(p.paid_amount_cent, 0) AS paid_amount_cent,
|
||||
COALESCE(p.refunded_amount_cent, 0) AS refunded_amount_cent,
|
||||
COALESCE(p.refunding_amount_cent, 0) AS refunding_amount_cent,
|
||||
COALESCE(p.failed_refund_amount_cent, 0) AS failed_refund_amount_cent,
|
||||
COALESCE(p.paid_amount_cent, 0) - COALESCE(p.refunded_amount_cent, 0) AS channel_net_amount_cent,
|
||||
COALESCE(oc.platform_fee_cent, 0) + (COALESCE(oc.owner_income_amount_cent, 0) - CASE WHEN ro.settlement_mode = 'platform_managed'
|
||||
THEN COALESCE(ro.offline_settlement_amount_cent, 0)
|
||||
ELSE COALESCE(w.owner_wallet_income_amount_cent, 0)
|
||||
END) AS platform_net_amount_cent,
|
||||
COALESCE(oc.owner_income_amount_cent, 0) - CASE WHEN ro.settlement_mode = 'platform_managed'
|
||||
THEN COALESCE(ro.offline_settlement_amount_cent, 0)
|
||||
ELSE COALESCE(w.owner_wallet_income_amount_cent, 0)
|
||||
END AS settlement_diff_amount_cent,
|
||||
CASE
|
||||
WHEN COALESCE(p.failed_refund_amount_cent, 0) > 0 THEN 'refund_failed'
|
||||
WHEN COALESCE(p.refunding_amount_cent, 0) > 0 OR ro.refund_status = 'refunding' THEN 'refund_pending'
|
||||
WHEN ABS(COALESCE(oc.owner_income_amount_cent, 0) - CASE WHEN ro.settlement_mode = 'platform_managed'
|
||||
THEN COALESCE(ro.offline_settlement_amount_cent, 0)
|
||||
ELSE COALESCE(w.owner_wallet_income_amount_cent, 0)
|
||||
END) >= ? THEN 'settlement_diff'
|
||||
WHEN ro.settlement_mode = 'platform_managed'
|
||||
AND COALESCE(ro.offline_settlement_amount_cent, 0) > 0
|
||||
AND COALESCE(NULLIF(ro.offline_settlement_status, ''), 'none') = 'pending' THEN 'offline_settlement_pending'
|
||||
ELSE 'normal'
|
||||
END AS finance_status,
|
||||
ro.created_at, ro.settled_at, ro.offline_settled_at`, settlementDiffThresholdCent).
|
||||
Joins("LEFT JOIN users AS ru ON ru.id = ro.renter_id").
|
||||
Joins("LEFT JOIN users AS ou ON ou.id = ro.owner_id").
|
||||
Joins("LEFT JOIN (?) AS oc ON oc.order_id = ro.id", acceptedCheckoutSubquery(r.db.WithContext(ctx))).
|
||||
|
||||
Reference in New Issue
Block a user