OrderPaid.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. $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. $data = ['order' => $order, 'user' => $user];
  48. \think\Hook::listen('order_paid_after', $data);
  49. });
  50. }
  51. // 删除 job
  52. $job->delete();
  53. } catch (HttpResponseException $e) {
  54. $data = $e->getResponse()->getData();
  55. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  56. format_log_error($e, 'OrderPaid.paid.HttpResponseException', $message);
  57. } catch (\Exception $e) {
  58. // 队列执行失败
  59. format_log_error($e, 'OrderPaid.paid');
  60. }
  61. }
  62. /**
  63. * 订单选择线下支付(货到付款)完成
  64. */
  65. public function offline(Job $job, $data)
  66. {
  67. try {
  68. $order = $data['order'];
  69. $user = $data['user'];
  70. $order = Order::with('items')->where('id', $order['id'])->find();
  71. $user = User::get($user['id']);
  72. // 数据库删订单的问题常见,这里被删的订单直接把队列移除
  73. if ($order) {
  74. Db::transaction(function () use ($order, $user, $data) {
  75. // 订单减库存
  76. $stockSale = new StockSale();
  77. $stockSale->forwardStockSale($order);
  78. // 处理活动,加入拼团,完成拼团,添加赠品记录等
  79. ActivityFacade::buyOk($order, $user);
  80. // 触发订单选择线下支付(货到付款)完成事件
  81. $data = ['order' => $order, 'user' => $user];
  82. \think\Hook::listen('order_offline_after', $data);
  83. });
  84. }
  85. // 删除 job
  86. $job->delete();
  87. } catch (HttpResponseException $e) {
  88. $data = $e->getResponse()->getData();
  89. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  90. format_log_error($e, 'OrderPaid.offline.HttpResponseException', $message);
  91. } catch (\Exception $e) {
  92. // 队列执行失败
  93. format_log_error($e, 'OrderPaid.offline');
  94. }
  95. }
  96. }