OrderObserver.php 1.5 KB

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