mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 17:31:49 +08:00 
			
		
		
		
	update: rewrite buy limit
This commit is contained in:
		
							
								
								
									
										51
									
								
								app/Console/Commands/CheckUser.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								app/Console/Commands/CheckUser.php
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -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')); | ||||
|   | ||||
| @@ -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 | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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' => '容纳用户量限制格式有误' | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user