OrderPaid.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace addons\shopro\job;
  3. use think\queue\Job;
  4. use think\Db;
  5. use think\exception\HttpResponseException;
  6. use app\admin\model\shopro\order\Order;
  7. use addons\shopro\service\StockSale;
  8. use app\admin\model\shopro\user\User;
  9. use app\admin\model\shopro\order\Invoice as OrderInvoice;
  10. use addons\shopro\service\order\OrderOper;
  11. use addons\shopro\facade\Activity as ActivityFacade;
  12. /**
  13. * 订单自动操作
  14. */
  15. class OrderPaid extends BaseJob
  16. {
  17. /**
  18. * 订单支付完成
  19. */
  20. public function paid(Job $job, $data)
  21. {
  22. try {
  23. $order = $data['order'];
  24. $user = $data['user'];
  25. $order = Order::with('items')->where('id', $order['id'])->find();
  26. $user = User::get($user['id']);
  27. // 数据库删订单的问题常见,这里被删的订单直接把队列移除
  28. if ($order) {
  29. Db::transaction(function () use ($order, $user, $data) {
  30. // 订单减库存
  31. $stockSale = new StockSale();
  32. $stock_rs = $stockSale->forwardStockSale($order);
  33. // 处理发票审核改为等待开具
  34. if ($order->invoice_status == 1) {
  35. $invoice = OrderInvoice::where('order_id', $order->id)->find();
  36. if ($invoice) {
  37. $invoice->status = 'waiting';
  38. $invoice->save();
  39. }
  40. }
  41. // 处理活动,加入拼团,完成拼团,添加赠品记录等
  42. ActivityFacade::buyOk($order, $user);
  43. // 将订单参与活动信息改为已支付
  44. $orderOper = new OrderOper();
  45. $orderOper->activityOrderPaid($order);
  46. //直播间增加销量等数据
  47. if($order['room_log_id'])
  48. {
  49. $room_data = [
  50. 'order_paidnum' => ['inc',1],
  51. 'order_total_amount' => ['inc',$order->pay_fee],
  52. 'goods_sales' => ['inc',$stock_rs['goods_num_sum']],
  53. ];
  54. Db::name('live_room_log')->where('id',$order['room_log_id'])->update($room_data);
  55. }
  56. // 触发订单支付完成事件
  57. $data = ['order' => $order, 'user' => $user];
  58. \think\Hook::listen('order_paid_after', $data);//orderPaidAfter
  59. });
  60. }
  61. // 删除 job
  62. $job->delete();
  63. } catch (HttpResponseException $e) {
  64. $data = $e->getResponse()->getData();
  65. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  66. format_log_error($e, 'OrderPaid.paid.HttpResponseException', $message);
  67. } catch (\Exception $e) {
  68. // 队列执行失败
  69. format_log_error($e, 'OrderPaid.paid');
  70. }
  71. }
  72. /**
  73. * 订单选择线下支付(货到付款)完成
  74. */
  75. public function offline(Job $job, $data)
  76. {
  77. try {
  78. $order = $data['order'];
  79. $user = $data['user'];
  80. $order = Order::with('items')->where('id', $order['id'])->find();
  81. $user = User::get($user['id']);
  82. // 数据库删订单的问题常见,这里被删的订单直接把队列移除
  83. if ($order) {
  84. Db::transaction(function () use ($order, $user, $data) {
  85. // 订单减库存
  86. $stockSale = new StockSale();
  87. $stockSale->forwardStockSale($order);
  88. // 处理活动,加入拼团,完成拼团,添加赠品记录等
  89. ActivityFacade::buyOk($order, $user);
  90. // 触发订单选择线下支付(货到付款)完成事件
  91. $data = ['order' => $order, 'user' => $user];
  92. \think\Hook::listen('order_offline_after', $data);
  93. });
  94. }
  95. // 删除 job
  96. $job->delete();
  97. } catch (HttpResponseException $e) {
  98. $data = $e->getResponse()->getData();
  99. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  100. format_log_error($e, 'OrderPaid.offline.HttpResponseException', $message);
  101. } catch (\Exception $e) {
  102. // 队列执行失败
  103. format_log_error($e, 'OrderPaid.offline');
  104. }
  105. }
  106. }