31 lines
1.3 KiB
Go
31 lines
1.3 KiB
Go
package adminfinance
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func acceptedCheckoutSubquery(db *gorm.DB) *gorm.DB {
|
|
latest := db.Table("order_checkouts").Select("MAX(id) AS id").Where("status = ?", "accepted").Group("order_id")
|
|
return db.Table("order_checkouts AS oc").
|
|
Select("oc.*").
|
|
Joins("JOIN (?) AS latest ON latest.id = oc.id", latest)
|
|
}
|
|
|
|
func orderPaymentSubquery(db *gorm.DB) *gorm.DB {
|
|
return db.Table("payment_orders").
|
|
Select(`order_id,
|
|
COALESCE(SUM(CASE WHEN biz_type = 'order_pay' AND status = 'paid' THEN amount_cent ELSE 0 END), 0) AS paid_amount_cent,
|
|
COALESCE(SUM(CASE WHEN biz_type IN ? AND status = 'refunded' THEN amount_cent ELSE 0 END), 0) AS refunded_amount_cent,
|
|
COALESCE(SUM(CASE WHEN biz_type IN ? AND status = 'refunding' THEN amount_cent ELSE 0 END), 0) AS refunding_amount_cent,
|
|
COALESCE(SUM(CASE WHEN biz_type IN ? AND status = 'failed' THEN amount_cent ELSE 0 END), 0) AS failed_refund_amount_cent`,
|
|
refundBizTypes(), refundBizTypes(), refundBizTypes()).
|
|
Group("order_id")
|
|
}
|
|
|
|
func ownerWalletIncomeSubquery(db *gorm.DB) *gorm.DB {
|
|
return db.Table("wallet_ledger").
|
|
Select("order_id, COALESCE(SUM(amount_cent), 0) AS owner_wallet_income_amount_cent").
|
|
Where("direction = ? AND biz_type IN ? AND order_id IS NOT NULL", "in", []string{"owner_income", "deposit_compensation"}).
|
|
Group("order_id")
|
|
}
|