1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- <?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;
- }
- }
|