|
@@ -134,13 +134,17 @@ class FundsSummaryService
|
|
|
|
|
|
|
|
private static function withdrawAggregates(Carbon $start, Carbon $end): object
|
|
private static function withdrawAggregates(Carbon $start, Carbon $end): object
|
|
|
{
|
|
{
|
|
|
|
|
+ $balanceLogAlias = self::rawAlias('bl');
|
|
|
|
|
+ $withdrawAlias = self::rawAlias('w');
|
|
|
|
|
+
|
|
|
return self::successfulWithdrawLogs($start, $end)
|
|
return self::successfulWithdrawLogs($start, $end)
|
|
|
- ->selectRaw(<<<'SQL'
|
|
|
|
|
- COALESCE(SUM(ABS(bl.amount)), 0) AS member_withdrawal_amount,
|
|
|
|
|
- COUNT(DISTINCT bl.member_id) AS member_withdrawal_people,
|
|
|
|
|
|
|
+ ->selectRaw(<<<SQL
|
|
|
|
|
+ COALESCE(SUM(ABS({$balanceLogAlias}.`amount`)), 0) AS member_withdrawal_amount,
|
|
|
|
|
+ COUNT(DISTINCT {$balanceLogAlias}.`member_id`) AS member_withdrawal_people,
|
|
|
COALESCE(SUM(CASE
|
|
COALESCE(SUM(CASE
|
|
|
- WHEN w.service_charge > 0
|
|
|
|
|
- THEN ABS(bl.amount) * w.service_charge / NULLIF(w.amount, 0)
|
|
|
|
|
|
|
+ WHEN {$withdrawAlias}.`service_charge` > 0
|
|
|
|
|
+ THEN ABS({$balanceLogAlias}.`amount`) * {$withdrawAlias}.`service_charge`
|
|
|
|
|
+ / NULLIF({$withdrawAlias}.`amount`, 0)
|
|
|
ELSE 0 END), 0
|
|
ELSE 0 END), 0
|
|
|
) AS member_withdraw_deduction_amount
|
|
) AS member_withdraw_deduction_amount
|
|
|
SQL)
|
|
SQL)
|
|
@@ -187,23 +191,27 @@ class FundsSummaryService
|
|
|
{
|
|
{
|
|
|
$withdrawFees = self::successfulWithdrawLogs($start, $end)
|
|
$withdrawFees = self::successfulWithdrawLogs($start, $end)
|
|
|
->where('w.service_charge', '>', 0)
|
|
->where('w.service_charge', '>', 0)
|
|
|
- ->selectRaw("'member_withdraw_deduction' AS category, bl.member_id AS member_id");
|
|
|
|
|
|
|
+ ->selectRaw("'member_withdraw_deduction' AS category")
|
|
|
|
|
+ ->addSelect('bl.member_id as member_id');
|
|
|
$manualPayoutFees = DB::table('payment_orders as po')
|
|
$manualPayoutFees = DB::table('payment_orders as po')
|
|
|
->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
|
|
->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
|
|
|
->where('po.status', PaymentOrderService::STATUS_SUCCESS)
|
|
->where('po.status', PaymentOrderService::STATUS_SUCCESS)
|
|
|
->where('po.fee', '>', 0)
|
|
->where('po.fee', '>', 0)
|
|
|
->whereBetween('po.created_at', [$start, $end])
|
|
->whereBetween('po.created_at', [$start, $end])
|
|
|
- ->selectRaw("'member_withdraw_deduction' AS category, po.member_id AS member_id");
|
|
|
|
|
|
|
+ ->selectRaw("'member_withdraw_deduction' AS category")
|
|
|
|
|
+ ->addSelect('po.member_id as member_id');
|
|
|
$manualDebits = DB::table('balance_logs as bl')
|
|
$manualDebits = DB::table('balance_logs as bl')
|
|
|
->where('bl.change_type', '人工扣款')
|
|
->where('bl.change_type', '人工扣款')
|
|
|
->where('bl.amount', '<', 0)
|
|
->where('bl.amount', '<', 0)
|
|
|
->whereBetween('bl.created_at', [$start, $end])
|
|
->whereBetween('bl.created_at', [$start, $end])
|
|
|
- ->selectRaw("'manual_withdrawal' AS category, bl.member_id AS member_id");
|
|
|
|
|
|
|
+ ->selectRaw("'manual_withdrawal' AS category")
|
|
|
|
|
+ ->addSelect('bl.member_id as member_id');
|
|
|
$manualPayouts = DB::table('payment_orders as po')
|
|
$manualPayouts = DB::table('payment_orders as po')
|
|
|
->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
|
|
->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
|
|
|
->where('po.status', PaymentOrderService::STATUS_SUCCESS)
|
|
->where('po.status', PaymentOrderService::STATUS_SUCCESS)
|
|
|
->whereBetween('po.created_at', [$start, $end])
|
|
->whereBetween('po.created_at', [$start, $end])
|
|
|
- ->selectRaw("'manual_withdrawal' AS category, po.member_id AS member_id");
|
|
|
|
|
|
|
+ ->selectRaw("'manual_withdrawal' AS category")
|
|
|
|
|
+ ->addSelect('po.member_id as member_id');
|
|
|
|
|
|
|
|
$union = $withdrawFees
|
|
$union = $withdrawFees
|
|
|
->unionAll($manualPayoutFees)
|
|
->unionAll($manualPayoutFees)
|
|
@@ -238,6 +246,11 @@ class FundsSummaryService
|
|
|
->whereBetween('bl.created_at', [$start, $end]);
|
|
->whereBetween('bl.created_at', [$start, $end]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static function rawAlias(string $alias): string
|
|
|
|
|
+ {
|
|
|
|
|
+ return '`' . str_replace('`', '``', DB::getTablePrefix() . $alias) . '`';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static function item(string $key, string $label, $amount, $people): array
|
|
private static function item(string $key, string $label, $amount, $people): array
|
|
|
{
|
|
{
|
|
|
return [
|
|
return [
|