OrderPaidEventQueueJob.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2017/9/18
  6. * Time: 下午3:46
  7. */
  8. namespace app\Jobs;
  9. use app\common\events\order\AfterOrderPaidEvent;
  10. use app\common\facades\Setting;
  11. use app\common\models\OrderCreatedJob;
  12. use app\common\models\OrderPaidJob;
  13. use Illuminate\Contracts\Queue\ShouldQueue;
  14. use Illuminate\Bus\Queueable;
  15. use Illuminate\Queue\SerializesModels;
  16. use Illuminate\Queue\InteractsWithQueue;
  17. use Illuminate\Support\Facades\DB;
  18. use app\common\models\Order;
  19. class OrderPaidEventQueueJob implements ShouldQueue
  20. {
  21. use InteractsWithQueue, Queueable, SerializesModels;
  22. /**
  23. * @var Order
  24. */
  25. protected $orderId;
  26. /**
  27. * OrderPaidEventQueueJob constructor.
  28. * @param $orderId
  29. */
  30. public function __construct($orderId)
  31. {
  32. $queueCount = Order::queueCount();
  33. if ($queueCount) {
  34. $this->queue = 'order:' . ($orderId % Order::queueCount());
  35. }
  36. $this->orderId = $orderId;
  37. }
  38. /**
  39. * Execute the job.
  40. *
  41. * @return void
  42. */
  43. public function handle()
  44. {
  45. \Log::info('订单'.$this->orderId.'paid任务开始执行');
  46. DB::transaction(function () {
  47. $orderId = $this->orderId;
  48. \YunShop::app()->uniacid = null;
  49. $order = Order::find($orderId);
  50. \YunShop::app()->uniacid = $order->uniacid;
  51. Setting::$uniqueAccountId = $order->uniacid;
  52. if(!$order->orderPaidJob){
  53. $order->setRelation('orderPaidJob',new OrderPaidJob(['order_id'=>$order->id]));
  54. $order->orderPaidJob->save();
  55. }
  56. if ($order->orderPaidJob->status == 'finished') {
  57. \Log::error('订单付款事件触发失败',"{$orderId}orderPaidJob记录已存在");
  58. return;
  59. }
  60. $order->orderPaidJob->status = 'finished';
  61. $order->orderPaidJob->save();
  62. $event = new AfterOrderPaidEvent($order);
  63. app('events')->safeFire($event,$order->id);
  64. });
  65. \Log::info('订单'.$this->orderId.'paid任务执行完成');
  66. }
  67. }