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) { if (!in_array($order->plan_id, $this->coupon->limit_plan_ids)) { return false; } } return true; } public function getId() { return $this->coupon->id; } }