update: add commission distribution

This commit is contained in:
tokumeikoi 2021-09-18 20:53:34 +09:00
parent ab9abf5b93
commit edfc4043e8
5 changed files with 56 additions and 19 deletions

View File

@ -59,27 +59,56 @@ class CheckCommission extends Command
public function autoPayCommission() public function autoPayCommission()
{ {
$order = Order::where('commission_status', 1) $orders = Order::where('commission_status', 1)
->where('invite_user_id', '!=', NULL) ->where('invite_user_id', '!=', NULL)
->get(); ->get();
foreach ($order as $item) { foreach ($orders as $order) {
$inviter = User::find($item->invite_user_id);
if (!$inviter) continue;
if ((int)config('v2board.withdraw_close_enable', 0)) {
$inviter->balance = $inviter->balance + $item->commission_balance;
} else {
$inviter->commission_balance = $inviter->commission_balance + $item->commission_balance;
}
DB::beginTransaction(); DB::beginTransaction();
if ($inviter->save()) { if (!$this->payHandle($order->invite_user_id, $order)) {
$item->commission_status = 2; DB::rollBack();
if (!$item->save()) { continue;
DB::rollBack();
continue;
}
DB::commit();
} }
$order->commission_status = 2;
if (!$order->save()) {
DB::rollBack();
continue;
}
DB::commit();
} }
} }
public function payHandle($inviteUserId, Order $order)
{
if ((int)config('v2board.commission_distribution_enable', 0)) {
$level = 3;
$commissionShareLevels = [
0 => (int)config('v2board.commission_distribution_l1'),
1 => (int)config('v2board.commission_distribution_l2'),
2 => (int)config('v2board.commission_distribution_l3')
];
} else {
$level = 3;
$commissionShareLevels = [
0 => 100
];
}
for ($l = 0; $l < $level; $l++) {
$inviter = User::find($inviteUserId);
if (!$inviter) continue;
if (!$commissionShareLevels[$l]) continue;
$commissionBalance = $order->commission_balance * $commissionShareLevels[$l];
if ((int)config('v2board.withdraw_close_enable', 0)) {
$inviter->balance = $inviter->balance + $commissionBalance;
} else {
$inviter->commission_balance = $inviter->commission_balance + $commissionBalance;
}
if (!$inviter->save()) {
DB::rollBack();
return false;
}
$inviteUserId = $inviter->invite_user_id;
}
return true;
}
} }

View File

@ -60,7 +60,11 @@ class ConfigController extends Controller
'commission_auto_check_enable' => config('v2board.commission_auto_check_enable', 1), 'commission_auto_check_enable' => config('v2board.commission_auto_check_enable', 1),
'commission_withdraw_limit' => config('v2board.commission_withdraw_limit', 100), 'commission_withdraw_limit' => config('v2board.commission_withdraw_limit', 100),
'commission_withdraw_method' => config('v2board.commission_withdraw_method', Dict::WITHDRAW_METHOD_WHITELIST_DEFAULT), 'commission_withdraw_method' => config('v2board.commission_withdraw_method', Dict::WITHDRAW_METHOD_WHITELIST_DEFAULT),
'withdraw_close_enable' => config('v2board.withdraw_close_enable', 0) 'withdraw_close_enable' => config('v2board.withdraw_close_enable', 0),
'commission_distribution_enable' => config('v2board.commission_distribution_enable', 0),
'commission_distribution_l1' => config('v2board.commission_distribution_l1'),
'commission_distribution_l2' => config('v2board.commission_distribution_l2'),
'commission_distribution_l3' => config('v2board.commission_distribution_l3')
], ],
'site' => [ 'site' => [
'safe_mode_enable' => (int)config('v2board.safe_mode_enable', 0), 'safe_mode_enable' => (int)config('v2board.safe_mode_enable', 0),

View File

@ -25,6 +25,10 @@ class ConfigSave extends FormRequest
'commission_withdraw_limit' => 'nullable|numeric', 'commission_withdraw_limit' => 'nullable|numeric',
'commission_withdraw_method' => 'nullable|array', 'commission_withdraw_method' => 'nullable|array',
'withdraw_close_enable' => 'in:0,1', 'withdraw_close_enable' => 'in:0,1',
'commission_distribution_enable' => 'in:0,1',
'commission_distribution_l1' => 'nullable|numeric',
'commission_distribution_l2' => 'nullable|numeric',
'commission_distribution_l3' => 'nullable|numeric',
// site // site
'stop_register' => 'in:0,1', 'stop_register' => 'in:0,1',
'email_verify' => 'in:0,1', 'email_verify' => 'in:0,1',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long