|
@@ -7,9 +7,11 @@ use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
|
|
class FundsSummaryService
|
|
class FundsSummaryService
|
|
|
{
|
|
{
|
|
|
- public static function summary(string $startDate, string $endDate): array
|
|
|
|
|
|
|
+ public static function summary(?string $startDate = null, ?string $endDate = null): array
|
|
|
{
|
|
{
|
|
|
- [$start, $end] = self::dateRange($startDate, $endDate);
|
|
|
|
|
|
|
+ [$start, $end] = $startDate !== null && $endDate !== null
|
|
|
|
|
+ ? self::dateRange($startDate, $endDate)
|
|
|
|
|
+ : [null, null];
|
|
|
$balance = self::balanceAggregates($start, $end);
|
|
$balance = self::balanceAggregates($start, $end);
|
|
|
$withdraw = self::withdrawAggregates($start, $end);
|
|
$withdraw = self::withdrawAggregates($start, $end);
|
|
|
$paymentOrder = self::paymentOrderAggregates($start, $end);
|
|
$paymentOrder = self::paymentOrderAggregates($start, $end);
|
|
@@ -79,15 +81,16 @@ class FundsSummaryService
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static function balanceAggregates(Carbon $start, Carbon $end): object
|
|
|
|
|
|
|
+ private static function balanceAggregates(?Carbon $start, ?Carbon $end): object
|
|
|
{
|
|
{
|
|
|
- return DB::table('balance_logs')
|
|
|
|
|
- ->whereBetween('created_at', [$start, $end])
|
|
|
|
|
|
|
+ $query = DB::table('balance_logs')
|
|
|
->whereIn('change_type', [
|
|
->whereIn('change_type', [
|
|
|
'充值', '三方充值', '人工充值', '人工扣款',
|
|
'充值', '三方充值', '人工充值', '人工扣款',
|
|
|
'比比返', '笔笔返', '返水', '回水',
|
|
'比比返', '笔笔返', '返水', '回水',
|
|
|
'注册赠送', '优惠活动', '即充即送', '充值返现', '老用户回归',
|
|
'注册赠送', '优惠活动', '即充即送', '充值返现', '老用户回归',
|
|
|
- ])
|
|
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ return self::applyDateRange($query, 'created_at', $start, $end)
|
|
|
->selectRaw(<<<'SQL'
|
|
->selectRaw(<<<'SQL'
|
|
|
COALESCE(SUM(CASE
|
|
COALESCE(SUM(CASE
|
|
|
WHEN change_type = '充值' AND amount > 0 THEN amount ELSE 0 END), 0
|
|
WHEN change_type = '充值' AND amount > 0 THEN amount ELSE 0 END), 0
|
|
@@ -132,7 +135,7 @@ class FundsSummaryService
|
|
|
->first();
|
|
->first();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static function withdrawAggregates(Carbon $start, Carbon $end): object
|
|
|
|
|
|
|
+ private static function withdrawAggregates(?Carbon $start, ?Carbon $end): object
|
|
|
{
|
|
{
|
|
|
$balanceLogAlias = self::rawAlias('bl');
|
|
$balanceLogAlias = self::rawAlias('bl');
|
|
|
$withdrawAlias = self::rawAlias('w');
|
|
$withdrawAlias = self::rawAlias('w');
|
|
@@ -151,16 +154,17 @@ class FundsSummaryService
|
|
|
->first();
|
|
->first();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static function paymentOrderAggregates(Carbon $start, Carbon $end): object
|
|
|
|
|
|
|
+ private static function paymentOrderAggregates(?Carbon $start, ?Carbon $end): object
|
|
|
{
|
|
{
|
|
|
$pay = PaymentOrderService::TYPE_PAY;
|
|
$pay = PaymentOrderService::TYPE_PAY;
|
|
|
$payout = PaymentOrderService::TYPE_PAYOUT;
|
|
$payout = PaymentOrderService::TYPE_PAYOUT;
|
|
|
$manualPayout = PaymentOrderService::TYPE_SELF_PAYOUT;
|
|
$manualPayout = PaymentOrderService::TYPE_SELF_PAYOUT;
|
|
|
|
|
|
|
|
- return DB::table('payment_orders')
|
|
|
|
|
|
|
+ $query = DB::table('payment_orders')
|
|
|
->where('status', PaymentOrderService::STATUS_SUCCESS)
|
|
->where('status', PaymentOrderService::STATUS_SUCCESS)
|
|
|
- ->whereIn('type', [$pay, $payout, $manualPayout])
|
|
|
|
|
- ->whereBetween('created_at', [$start, $end])
|
|
|
|
|
|
|
+ ->whereIn('type', [$pay, $payout, $manualPayout]);
|
|
|
|
|
+
|
|
|
|
|
+ return self::applyDateRange($query, 'created_at', $start, $end)
|
|
|
->selectRaw(<<<SQL
|
|
->selectRaw(<<<SQL
|
|
|
COALESCE(SUM(CASE WHEN type = {$pay} AND fee > 0 THEN fee ELSE 0 END), 0)
|
|
COALESCE(SUM(CASE WHEN type = {$pay} AND fee > 0 THEN fee ELSE 0 END), 0)
|
|
|
AS third_party_fee_amount,
|
|
AS third_party_fee_amount,
|
|
@@ -187,29 +191,26 @@ class FundsSummaryService
|
|
|
*
|
|
*
|
|
|
* @return array{member_withdraw_deduction:int, manual_withdrawal:int}
|
|
* @return array{member_withdraw_deduction:int, manual_withdrawal:int}
|
|
|
*/
|
|
*/
|
|
|
- private static function combinedPeople(Carbon $start, Carbon $end): array
|
|
|
|
|
|
|
+ private static function combinedPeople(?Carbon $start, ?Carbon $end): array
|
|
|
{
|
|
{
|
|
|
$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")
|
|
->selectRaw("'member_withdraw_deduction' AS category")
|
|
|
->addSelect('bl.member_id as member_id');
|
|
->addSelect('bl.member_id as member_id');
|
|
|
- $manualPayoutFees = DB::table('payment_orders as po')
|
|
|
|
|
|
|
+ $manualPayoutFees = self::applyDateRange(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)
|
|
|
|
|
- ->whereBetween('po.created_at', [$start, $end])
|
|
|
|
|
|
|
+ ->where('po.fee', '>', 0), 'po.created_at', $start, $end)
|
|
|
->selectRaw("'member_withdraw_deduction' AS category")
|
|
->selectRaw("'member_withdraw_deduction' AS category")
|
|
|
->addSelect('po.member_id as member_id');
|
|
->addSelect('po.member_id as member_id');
|
|
|
- $manualDebits = DB::table('balance_logs as bl')
|
|
|
|
|
|
|
+ $manualDebits = self::applyDateRange(DB::table('balance_logs as bl')
|
|
|
->where('bl.change_type', '人工扣款')
|
|
->where('bl.change_type', '人工扣款')
|
|
|
- ->where('bl.amount', '<', 0)
|
|
|
|
|
- ->whereBetween('bl.created_at', [$start, $end])
|
|
|
|
|
|
|
+ ->where('bl.amount', '<', 0), 'bl.created_at', $start, $end)
|
|
|
->selectRaw("'manual_withdrawal' AS category")
|
|
->selectRaw("'manual_withdrawal' AS category")
|
|
|
->addSelect('bl.member_id as member_id');
|
|
->addSelect('bl.member_id as member_id');
|
|
|
- $manualPayouts = DB::table('payment_orders as po')
|
|
|
|
|
|
|
+ $manualPayouts = self::applyDateRange(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)
|
|
|
|
|
- ->whereBetween('po.created_at', [$start, $end])
|
|
|
|
|
|
|
+ ->where('po.status', PaymentOrderService::STATUS_SUCCESS), 'po.created_at', $start, $end)
|
|
|
->selectRaw("'manual_withdrawal' AS category")
|
|
->selectRaw("'manual_withdrawal' AS category")
|
|
|
->addSelect('po.member_id as member_id');
|
|
->addSelect('po.member_id as member_id');
|
|
|
|
|
|
|
@@ -236,14 +237,24 @@ class FundsSummaryService
|
|
|
return $result;
|
|
return $result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static function successfulWithdrawLogs(Carbon $start, Carbon $end)
|
|
|
|
|
|
|
+ private static function successfulWithdrawLogs(?Carbon $start, ?Carbon $end)
|
|
|
{
|
|
{
|
|
|
- return DB::table('balance_logs as bl')
|
|
|
|
|
|
|
+ $query = DB::table('balance_logs as bl')
|
|
|
->join('withdraws as w', 'w.id', '=', 'bl.related_id')
|
|
->join('withdraws as w', 'w.id', '=', 'bl.related_id')
|
|
|
->where('w.status', 1)
|
|
->where('w.status', 1)
|
|
|
->where('bl.change_type', '提现')
|
|
->where('bl.change_type', '提现')
|
|
|
- ->where('bl.amount', '<', 0)
|
|
|
|
|
- ->whereBetween('bl.created_at', [$start, $end]);
|
|
|
|
|
|
|
+ ->where('bl.amount', '<', 0);
|
|
|
|
|
+
|
|
|
|
|
+ return self::applyDateRange($query, 'bl.created_at', $start, $end);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static function applyDateRange($query, string $column, ?Carbon $start, ?Carbon $end)
|
|
|
|
|
+ {
|
|
|
|
|
+ if ($start !== null && $end !== null) {
|
|
|
|
|
+ $query->whereBetween($column, [$start, $end]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $query;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static function rawAlias(string $alias): string
|
|
private static function rawAlias(string $alias): string
|