OrderAutoOper.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace addons\shopro\job;
  3. use think\queue\Job;
  4. use think\Log;
  5. use think\Db;
  6. use think\Collection;
  7. use think\exception\HttpResponseException;
  8. use addons\shopro\exception\ShoproException;
  9. use app\admin\model\shopro\order\Order;
  10. use app\admin\model\shopro\order\OrderItem;
  11. use addons\shopro\service\order\OrderOper;
  12. use app\admin\model\shopro\order\Action;
  13. /**
  14. * 订单自动操作
  15. */
  16. class OrderAutoOper extends BaseJob
  17. {
  18. /**
  19. * 订单自动关闭
  20. */
  21. public function autoClose(Job $job, $data){
  22. if (check_env('yansongda', false)) {
  23. set_addon_config('epay', ['version' => 'v3'], false);
  24. \think\Hook::listen('epay_config_init');
  25. }
  26. try {
  27. $order = $data['order'];
  28. // 重新查询订单
  29. $order = Order::unpaid()->where('id', $order['id'])->find();
  30. if ($order) {
  31. Db::transaction(function () use ($order, $data) {
  32. $orderOper = new OrderOper();
  33. $order = $orderOper->close($order, null, 'system');
  34. return $order;
  35. });
  36. }
  37. // 删除 job
  38. $job->delete();
  39. } catch (ShoproException $e) {
  40. // 自定义异常时删除 队列
  41. $job->delete();
  42. format_log_error($e, 'OrderAutoOper.autoClose.sheepException');
  43. } catch (HttpResponseException $e) {
  44. // error_stop 异常时删除 队列
  45. $job->delete();
  46. $data = $e->getResponse()->getData();
  47. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  48. format_log_error($e, 'OrderAutoOper.autoClose.HttpResponseException', $message);
  49. } catch (\Exception $e) {
  50. // 队列执行失败
  51. format_log_error($e, 'OrderAutoOper.autoClose');
  52. }
  53. }
  54. /**
  55. * 订单自动确认收货
  56. */
  57. public function autoConfirm(Job $job, $data) {
  58. try {
  59. $order = $data['order'];
  60. $items = $data['items'];
  61. $itemIds = $items instanceof Collection ? $items->column('id') : array_column($items, 'id');
  62. // 重新查询订单
  63. $order = Order::paid()->where('id', $order['id'])->find(); // 货到付款的 还未付款的订单被排除在外,不会自动收货
  64. if ($order) {
  65. $order = Db::transaction(function () use ($order, $itemIds) {
  66. $orderOper = new OrderOper();
  67. $order = $orderOper->confirm($order, $itemIds, null, 'system');
  68. return $order;
  69. });
  70. }
  71. // 删除 job
  72. $job->delete();
  73. } catch (ShoproException $e) {
  74. // 自定义异常时删除 队列
  75. $job->delete();
  76. format_log_error($e, 'OrderAutoOper.autoConfirm.sheepException');
  77. } catch (HttpResponseException $e) {
  78. // error_stop 异常时删除 队列
  79. $job->delete();
  80. $data = $e->getResponse()->getData();
  81. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  82. format_log_error($e, 'OrderAutoOper.autoConfirm.HttpResponseException', $message);
  83. } catch (\Exception $e) {
  84. // 队列执行失败
  85. format_log_error($e, 'OrderAutoOper.autoConfirm');
  86. }
  87. }
  88. /**
  89. * 订单自动评价
  90. */
  91. public function autoComment(Job $job, $data) {
  92. try {
  93. $order = $data['order'];
  94. $item = $data['item'];
  95. // 重新查询订单
  96. $order = Order::paid()->where('id', $order['id'])->find();
  97. if ($order && $item) {
  98. $order = Db::transaction(function () use ($order, $item) {
  99. $orderOper = new OrderOper();
  100. $comments[] = [
  101. 'item_id' => $item['id'],
  102. 'level' => 5,
  103. ];
  104. // 评价一个订单商品
  105. $order = $orderOper->comment($order, $comments, null, 'system');
  106. return $order;
  107. });
  108. }
  109. // 删除 job
  110. $job->delete();
  111. } catch (ShoproException $e) {
  112. // 自定义异常时删除 队列
  113. $job->delete();
  114. format_log_error($e, 'OrderAutoOper.autoComment.sheepException');
  115. } catch (HttpResponseException $e) {
  116. // error_stop 异常时删除 队列
  117. $job->delete();
  118. $data = $e->getResponse()->getData();
  119. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  120. format_log_error($e, 'OrderAutoOper.autoComment.HttpResponseException', $message);
  121. } catch (\Exception $e) {
  122. // 队列执行失败
  123. format_log_error($e, 'OrderAutoOper.autoComment');
  124. $job->delete();
  125. }
  126. }
  127. }