OrderPayed.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace addons\shopro\job;
  3. use addons\shopro\library\traits\ActivityCache;
  4. use addons\shopro\library\traits\Groupon;
  5. use addons\shopro\library\traits\StockSale;
  6. use addons\shopro\model\GoodsComment;
  7. use addons\shopro\model\Order;
  8. use addons\shopro\model\OrderAction;
  9. use addons\shopro\model\OrderItem;
  10. use think\queue\Job;
  11. /**
  12. * 订单支付完成
  13. */
  14. class OrderPayed extends BaseJob
  15. {
  16. use StockSale, ActivityCache, Groupon;
  17. /**
  18. * 订单支付完成
  19. */
  20. public function payed(Job $job, $data){
  21. try {
  22. $order = $data['order'];
  23. $user = $data['user'];
  24. $order = Order::with('item')->where('id', $order['id'])->find();
  25. // 数据库删订单的问题常见,这里被删的订单直接把队列移除
  26. if ($order) {
  27. \think\Db::transaction(function () use ($order, $user, $data) {
  28. // 订单减库存
  29. $this->realForwardStockSale($order);
  30. // 判断,如果是拼团 真实加入团
  31. if (strpos($order['activity_type'], 'groupon') !== false) {
  32. $this->joinGroupon($order, $user);
  33. }
  34. // 触发订单支付完成事件, 如果这个订单刚好完成拼团,并且是自动发货订单,则这个订单的自动发货事件会比订单支付之后事件早
  35. $data = ['order' => $order];
  36. \think\Hook::listen('order_payed_after', $data);
  37. // 检测有没有自动发货的商品,有就自动发货
  38. $order->checkDispatchAndSend($order, ['user' => $user]);
  39. });
  40. }
  41. // 删除 job
  42. $job->delete();
  43. } catch (\Exception $e) {
  44. // 队列执行失败
  45. $error = json_encode([
  46. 'a' => $e->getLine(),
  47. 'b' => $e->getFile(),
  48. 'c' =>$e->getTrace(),
  49. 'd' => $e->getMessage()
  50. ], JSON_UNESCAPED_UNICODE);
  51. \think\Log::error('queue-' . get_class() . '-payed' . ':执行失败,错误信息:' . $error);
  52. }
  53. }
  54. }