mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 19:31:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Services;
 | 
						|
 | 
						|
use App\Models\Coupon;
 | 
						|
use App\Models\Order;
 | 
						|
use Illuminate\Support\Facades\DB;
 | 
						|
 | 
						|
class CouponService
 | 
						|
{
 | 
						|
    public $order;
 | 
						|
 | 
						|
    public function __construct($code)
 | 
						|
    {
 | 
						|
        $this->coupon = Coupon::where('code', $code)->first();
 | 
						|
        if (!$this->coupon) {
 | 
						|
            abort(500, '优惠券无效');
 | 
						|
        }
 | 
						|
        if ($this->coupon->limit_use <= 0 && $this->coupon->limit_use !== NULL) {
 | 
						|
            abort(500, '优惠券已无可用次数');
 | 
						|
        }
 | 
						|
        if (time() < $this->coupon->started_at) {
 | 
						|
            abort(500, '优惠券还未到可用时间');
 | 
						|
        }
 | 
						|
        if (time() > $this->coupon->ended_at) {
 | 
						|
            abort(500, '优惠券已过期');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function use(Order $order)
 | 
						|
    {
 | 
						|
        switch ($this->coupon->type) {
 | 
						|
            case 1:
 | 
						|
                $order->discount_amount = $this->coupon->value;
 | 
						|
                break;
 | 
						|
            case 2:
 | 
						|
                $order->discount_amount = $order->total_amount * ($this->coupon->value / 100);
 | 
						|
                break;
 | 
						|
        }
 | 
						|
        if ($this->coupon->limit_use !== NULL) {
 | 
						|
            $this->coupon->limit_use = $this->coupon->limit_use - 1;
 | 
						|
            if (!$this->coupon->save()) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if ($this->coupon->limit_plan_ids) {
 | 
						|
            $limitPlanIds = json_decode($this->coupon->limit_plan_ids);
 | 
						|
            if (!in_array($order->plan_id, $limitPlanIds)) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getId()
 | 
						|
    {
 | 
						|
        return $this->coupon->id;
 | 
						|
    }
 | 
						|
}
 |