海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.6 KiB

4 years ago
  1. <?php
  2. namespace App\Listeners;
  3. use App\Common\OrderStatus;
  4. use App\Events\OrderUpdated;
  5. use App\Models\Agent;
  6. use App\Models\OrderProductItem;
  7. use App\Models\Supplier;
  8. use App\Service\SmsService;
  9. use App\Traits\SmsTraits;
  10. use Illuminate\Contracts\Queue\ShouldQueue;
  11. use Illuminate\Queue\InteractsWithQueue;
  12. use Illuminate\Support\Facades\Log;
  13. class OrderEventSubscriber
  14. {
  15. public function onOrderUpdated($event)
  16. {
  17. if (env('SMS_SWITCH', '') == true) {
  18. $order = $event->order;
  19. $sms = new SmsService();
  20. //退款通知
  21. if ($order->isDirty('status') && $order->status == OrderStatus::REFUNDING) {
  22. $mobile = Agent::query()->where('id',$order->agent_id)->value('contact_phone');
  23. $sms->send('refund', [$order->order_no, SmsTraits::$systeaNameText['agent']], [$mobile]);
  24. }
  25. //付款通知
  26. if ($order->isDirty('status') && ($order->status == OrderStatus::PAY_EARNEST || $order->status == OrderStatus::PAID)) {
  27. //通知代理商
  28. $mobile = Agent::query()->where('id',$order->agent_id)->value('contact_phone');
  29. if (!empty($mobile)) {
  30. $sms->send('order', [$order->order_no, SmsTraits::$systeaNameText['agent']], [$mobile]);
  31. }
  32. //通知供应商
  33. $supplierIds = OrderProductItem::query()->with('supplier')->where('order_id', $order->id)->distinct()->pluck('supplier_id');
  34. $phone = Supplier::query()->whereIn('id', $supplierIds)->pluck('contact_phone')->toArray();
  35. if (!empty($phone)) {
  36. $sms->send('order', [$order->order_no, SmsTraits::$systeaNameText['supplier']], $phone);//供应商
  37. }
  38. }
  39. //核销
  40. if ($order->isDirty('status') && $order->status == OrderStatus::SUCCESS) {
  41. //通知用户
  42. if (!empty($order->mobile)) {
  43. $sms->send('verify', [$order->order_no, SmsTraits::$systeaNameText['user']], [$order->mobile]);//用户
  44. }
  45. //通知供应商
  46. $supplierIds = OrderProductItem::query()->with('supplier')->where('order_id', $order->id)->distinct()->pluck('supplier_id');
  47. $phone = Supplier::query()->whereIn('id', $supplierIds)->pluck('contact_phone')->toArray();
  48. if(!empty($phone)) {
  49. $sms->send('verify', [$order->order_no, SmsTraits::$systeaNameText['supplier']], $phone);//供应商
  50. }
  51. //通知代理商
  52. $mobile = Agent::query()->where('id',$order->agent_id)->value('contact_phone');
  53. if (!empty($mobile)) {
  54. $sms->send('verify', [$order->order_no, SmsTraits::$systeaNameText['agent']], [$mobile]);//代理商
  55. }
  56. }
  57. }
  58. }
  59. /**
  60. * 为订阅者注册监听器
  61. *
  62. * @param Illuminate\Events\Dispatcher $events
  63. */
  64. public function subscribe($events)
  65. {
  66. $events->listen(
  67. OrderUpdated::class,
  68. OrderEventSubscriber::class . '@onOrderUpdated'
  69. );
  70. }
  71. }