OrderPaid.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. //商城,支付完成,冗余到bill表
  57. Db::name('bill')->where([
  58. 'table_name' => 'shopro_order',
  59. 'table_id' => $order['id'],
  60. ])->update([
  61. 'pay_time' => $order['paid_time'],
  62. 'pay_type' => $order['pay_type'],
  63. 'status' => 1, //已支付
  64. ]);
  65. // 触发订单支付完成事件
  66. $data = ['order' => $order, 'user' => $user];
  67. \think\Hook::listen('order_paid_after', $data);//orderPaidAfter
  68. });
  69. }
  70. // 删除 job
  71. $job->delete();
  72. } catch (HttpResponseException $e) {
  73. $data = $e->getResponse()->getData();
  74. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  75. format_log_error($e, 'OrderPaid.paid.HttpResponseException', $message);
  76. } catch (\Exception $e) {
  77. // 队列执行失败
  78. format_log_error($e, 'OrderPaid.paid');
  79. }
  80. }
  81. /**
  82. * 订单选择线下支付(货到付款)完成
  83. */
  84. public function offline(Job $job, $data)
  85. {
  86. try {
  87. $order = $data['order'];
  88. $user = $data['user'];
  89. $order = Order::with('items')->where('id', $order['id'])->find();
  90. $user = User::get($user['id']);
  91. // 数据库删订单的问题常见,这里被删的订单直接把队列移除
  92. if ($order) {
  93. Db::transaction(function () use ($order, $user, $data) {
  94. // 订单减库存
  95. $stockSale = new StockSale();
  96. $stockSale->forwardStockSale($order);
  97. // 处理活动,加入拼团,完成拼团,添加赠品记录等
  98. ActivityFacade::buyOk($order, $user);
  99. // 触发订单选择线下支付(货到付款)完成事件
  100. $data = ['order' => $order, 'user' => $user];
  101. \think\Hook::listen('order_offline_after', $data);
  102. });
  103. }
  104. // 删除 job
  105. $job->delete();
  106. } catch (HttpResponseException $e) {
  107. $data = $e->getResponse()->getData();
  108. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  109. format_log_error($e, 'OrderPaid.offline.HttpResponseException', $message);
  110. } catch (\Exception $e) {
  111. // 队列执行失败
  112. format_log_error($e, 'OrderPaid.offline');
  113. }
  114. }
  115. }