doge 1 hari lalu
induk
melakukan
2c8c1ea360
1 mengubah file dengan 22 tambahan dan 9 penghapusan
  1. 22 9
      app/Services/FundsSummaryService.php

+ 22 - 9
app/Services/FundsSummaryService.php

@@ -134,13 +134,17 @@ class FundsSummaryService
 
     private static function withdrawAggregates(Carbon $start, Carbon $end): object
     {
+        $balanceLogAlias = self::rawAlias('bl');
+        $withdrawAlias = self::rawAlias('w');
+
         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
-                    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
                 ) AS member_withdraw_deduction_amount
             SQL)
@@ -187,23 +191,27 @@ class FundsSummaryService
     {
         $withdrawFees = self::successfulWithdrawLogs($start, $end)
             ->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')
             ->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
             ->where('po.status', PaymentOrderService::STATUS_SUCCESS)
             ->where('po.fee', '>', 0)
             ->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')
             ->where('bl.change_type', '人工扣款')
             ->where('bl.amount', '<', 0)
             ->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')
             ->where('po.type', PaymentOrderService::TYPE_SELF_PAYOUT)
             ->where('po.status', PaymentOrderService::STATUS_SUCCESS)
             ->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
             ->unionAll($manualPayoutFees)
@@ -238,6 +246,11 @@ class FundsSummaryService
             ->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
     {
         return [