Эх сурвалжийг харах

update: rewrite buy limit

tokumeikoi 2 жил өмнө
parent
commit
838fc7bdba

+ 51 - 0
app/Console/Commands/CheckUser.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Models\User;
+use Illuminate\Console\Command;
+
+class CheckUser extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'check:user';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '用户检查任务';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $this->resetExpiredUserPlan();
+    }
+
+    private function resetExpiredUserPlan($day = 14)
+    {
+        User::where('expired_at', '<', $day * 86400)->update([
+            'plan_id' => NULL,
+            'group_id' => NULL
+        ]);
+    }
+}

+ 1 - 0
app/Console/Kernel.php

@@ -33,6 +33,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('check:order')->everyMinute();
         $schedule->command('check:commission')->everyMinute();
         $schedule->command('check:ticket')->everyMinute();
+        $schedule->command('check:user')->daily();
         // reset
         $schedule->command('reset:traffic')->daily();
         $schedule->command('reset:log')->daily();

+ 1 - 5
app/Http/Controllers/User/OrderController.php

@@ -85,7 +85,7 @@ class OrderController extends Controller
             abort(500, __('Subscription plan does not exist'));
         }
 
-        if ($plan->inventory_limit !== NULL && !$plan->inventory_limit) {
+        if (!$planService->haveCapacity()) {
             abort(500, __('Current product is sold out'));
         }
 
@@ -160,10 +160,6 @@ class OrderController extends Controller
             }
         }
 
-        if (!$planService->decrementInventory()) {
-            abort(500, __('Failed to create order'));
-        }
-
         if (!$order->save()) {
             DB::rollback();
             abort(500, __('Failed to create order'));

+ 23 - 2
app/Http/Controllers/User/PlanController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Models\User;
 use Illuminate\Http\Request;
 use App\Models\Plan;
+use Illuminate\Support\Facades\DB;
 
 class PlanController extends Controller
 {
@@ -23,12 +24,32 @@ class PlanController extends Controller
             return response([
                 'data' => $plan
             ]);
+        } else {
+            $counts = User::select(
+                DB::raw("plan_id"),
+                DB::raw("count(*) as count")
+            )
+                ->where('plan_id', '!=', NULL)
+                ->where(function ($query) {
+                    $query->where('expired_at', '>=', time())
+                        ->orWhere('expired_at', NULL);
+                })
+                ->groupBy("plan_id")
+                ->get()
+                ->keyBy('plan_id');
         }
-        $plan = Plan::where('show', 1)
+        $plans = Plan::where('show', 1)
             ->orderBy('sort', 'ASC')
             ->get();
+        if (isset($counts)) {
+            foreach ($plans as $k => $v) {
+                if (isset($counts[$plans[$k]->id])) {
+                    $plans[$k]->capacity_limit = $plans[$k]->capacity_limit - $counts[$plans[$k]->id]->count;
+                }
+            }
+        }
         return response([
-            'data' => $plan
+            'data' => $plans
         ]);
     }
 }

+ 2 - 2
app/Http/Requests/Admin/PlanSave.php

@@ -27,7 +27,7 @@ class PlanSave extends FormRequest
             'onetime_price' => 'nullable|integer',
             'reset_price' => 'nullable|integer',
             'reset_traffic_method' => 'nullable|integer|in:0,1,2,3,4',
-            'inventory_limit' => 'nullable|integer'
+            'capacity_limit' => 'nullable|integer'
         ];
     }
 
@@ -49,7 +49,7 @@ class PlanSave extends FormRequest
             'reset_price.integer' => '流量重置包金额有误',
             'reset_traffic_method.integer' => '流量重置方式格式有误',
             'reset_traffic_method.in' => '流量重置方式格式有误',
-            'inventory_limit.integer' => '库存限制格式有误'
+            'capacity_limit.integer' => '容纳用户量限制格式有误'
         ];
     }
 }

+ 0 - 5
app/Services/OrderService.php

@@ -249,11 +249,6 @@ class OrderService
                 return false;
             }
         }
-        $planService = new PlanService($order->plan_id);
-        if (!$planService->incrementInventory()) {
-            DB::rollBack();
-            return false;
-        }
         DB::commit();
         return true;
     }

+ 5 - 9
app/Services/PlanService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\Models\Plan;
+use App\Models\User;
 
 class PlanService
 {
@@ -13,15 +14,10 @@ class PlanService
         $this->plan = Plan::lockForUpdate()->find($planId);
     }
 
-    public function incrementInventory(): bool
+    public function haveCapacity(): bool
     {
-        if ($this->plan->inventory_limit === NULL) return true;
-        return $this->plan->increment('inventory_limit');
-    }
-
-    public function decrementInventory(): bool
-    {
-        if ($this->plan->inventory_limit === NULL) return true;
-        return $this->plan->decrement('inventory_limit');
+        if ($this->plan->capacity_limit === 0) return true;
+        $count = User::where('plan_id', $this->plan->plan_id)->count();
+        return $this->plan->capacity_limit - $count;
     }
 }

+ 2 - 2
database/install.sql

@@ -176,7 +176,7 @@ CREATE TABLE `v2_plan` (
                            `onetime_price` int(11) DEFAULT NULL,
                            `reset_price` int(11) DEFAULT NULL,
                            `reset_traffic_method` tinyint(1) DEFAULT NULL,
-                           `inventory_limit` int(11) DEFAULT NULL,
+                           `capacity_limit` int(11) DEFAULT NULL,
                            `created_at` int(11) NOT NULL,
                            `updated_at` int(11) NOT NULL,
                            PRIMARY KEY (`id`)
@@ -379,4 +379,4 @@ CREATE TABLE `v2_user` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
--- 2022-06-28 18:09:08
+-- 2022-07-07 18:23:17

+ 3 - 0
database/update.sql

@@ -589,3 +589,6 @@ ALTER TABLE `v2_mail_log`
 
 ALTER TABLE `v2_plan`
     ADD `inventory_limit` int(11) NULL AFTER `reset_traffic_method`;
+
+ALTER TABLE `v2_plan`
+    CHANGE `inventory_limit` `capacity_limit` int(11) NULL AFTER `reset_traffic_method`;

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/assets/admin/umi.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/theme/v2board/assets/umi.js


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно