OrderObserver.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Observers;
  3. use App\Components\Helpers;
  4. use App\Models\Coupon;
  5. use App\Models\Order;
  6. use App\Services\OrderService;
  7. use Arr;
  8. class OrderObserver
  9. {
  10. public function updated(Order $order): void
  11. {
  12. $changes = $order->getChanges();
  13. if (Arr::exists($changes, 'status')) {
  14. // 本地订单-在线订单 关闭互联
  15. if ($changes['status'] === -1) {
  16. $payment = $order->payment;
  17. if ($payment) {
  18. // 关闭在线订单
  19. $payment->close();
  20. // 退回优惠券
  21. if ($order->coupon_id && $this->returnCoupon($order->coupon)) {
  22. Helpers::addCouponLog('订单超时未支付,自动退回', $order->coupon_id, $order->goods_id, $order->id);
  23. }
  24. }
  25. }
  26. // 本地订单-在线订单 支付成功互联
  27. if ($changes['status'] === 2 && $order->getOriginal('status') !== 3) {
  28. (new OrderService($order))->receivedPayment();
  29. }
  30. }
  31. // 套餐订单-流量包订单互联
  32. if (Arr::exists($changes, 'is_expire') && $changes['is_expire'] === 1) {
  33. // 过期生效中的加油包
  34. Order::userActivePackage($order->user_id)->update(['is_expire' => 1]);
  35. // 检查该订单对应用户是否有预支付套餐
  36. $prepaidOrder = Order::userPrepay($order->user_id)->oldest()->first();
  37. if ($prepaidOrder) {
  38. (new OrderService($prepaidOrder))->activatePrepaidPlan();
  39. }
  40. }
  41. }
  42. // 返回优惠券
  43. private function returnCoupon(Coupon $coupon): bool
  44. {
  45. if ($coupon && $coupon->type !== 3) {
  46. return $coupon->update(['usable_times' => $coupon->usable_times + 1, 'status' => 0]);
  47. }
  48. return false;
  49. }
  50. }