Browse Source

update: add commission distribution

tokumeikoi 3 years ago
parent
commit
edfc4043e8

+ 42 - 13
app/Console/Commands/CheckCommission.php

@@ -59,27 +59,56 @@ class CheckCommission extends Command
 
     public function autoPayCommission()
     {
-        $order = Order::where('commission_status', 1)
+        $orders = Order::where('commission_status', 1)
             ->where('invite_user_id', '!=', NULL)
             ->get();
-        foreach ($order as $item) {
-            $inviter = User::find($item->invite_user_id);
+        foreach ($orders as $order) {
+            DB::beginTransaction();
+            if (!$this->payHandle($order->invite_user_id, $order)) {
+                DB::rollBack();
+                continue;
+            }
+            $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 + $item->commission_balance;
+                $inviter->balance = $inviter->balance + $commissionBalance;
             } else {
-                $inviter->commission_balance = $inviter->commission_balance + $item->commission_balance;
+                $inviter->commission_balance = $inviter->commission_balance + $commissionBalance;
             }
-            DB::beginTransaction();
-            if ($inviter->save()) {
-                $item->commission_status = 2;
-                if (!$item->save()) {
-                    DB::rollBack();
-                    continue;
-                }
-                DB::commit();
+            if (!$inviter->save()) {
+                DB::rollBack();
+                return false;
             }
+            $inviteUserId = $inviter->invite_user_id;
         }
+        return true;
     }
 
 }

+ 5 - 1
app/Http/Controllers/Admin/ConfigController.php

@@ -60,7 +60,11 @@ class ConfigController extends Controller
                     'commission_auto_check_enable' => config('v2board.commission_auto_check_enable', 1),
                     'commission_withdraw_limit' => config('v2board.commission_withdraw_limit', 100),
                     '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' => [
                     'safe_mode_enable' => (int)config('v2board.safe_mode_enable', 0),

+ 4 - 0
app/Http/Requests/Admin/ConfigSave.php

@@ -25,6 +25,10 @@ class ConfigSave extends FormRequest
             'commission_withdraw_limit' => 'nullable|numeric',
             'commission_withdraw_method' => 'nullable|array',
             '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
             'stop_register' => 'in:0,1',
             'email_verify' => 'in:0,1',

File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.css


File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.js


Some files were not shown because too many files changed in this diff