OrderAutoOper.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace addons\shopro\job\trade;
  3. use addons\shopro\job\BaseJob;
  4. use think\queue\Job;
  5. use think\Db;
  6. use think\exception\HttpResponseException;
  7. use addons\shopro\exception\ShoproException;
  8. use app\admin\model\shopro\trade\Order;
  9. /**
  10. * 订单自动操作
  11. */
  12. class OrderAutoOper extends BaseJob
  13. {
  14. /**
  15. * 订单自动关闭
  16. */
  17. public function autoClose(Job $job, $data)
  18. {
  19. try {
  20. $order = $data['order'];
  21. // 重新查询订单
  22. $order = Order::unpaid()->where('id', $order['id'])->find();
  23. if ($order) {
  24. Db::transaction(function () use ($order, $data) {
  25. // 执行关闭
  26. $order->status = Order::STATUS_CLOSED;
  27. $order->ext = array_merge($order->ext, ['closed_time' => time()]); // 取消时间
  28. $order->save();
  29. });
  30. }
  31. // 删除 job
  32. $job->delete();
  33. } catch (ShoproException $e) {
  34. // 自定义异常时删除 队列
  35. $job->delete();
  36. format_log_error($e, 'TradeOrderAutoOper.autoClose.ShoproException');
  37. } catch (HttpResponseException $e) {
  38. $data = $e->getResponse()->getData();
  39. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  40. format_log_error($e, 'TradeOrderAutoOper.autoClose.HttpResponseException', $message);
  41. } catch (\Exception $e) {
  42. // 队列执行失败
  43. format_log_error($e, 'TradeOrderAutoOper.autoClose');
  44. }
  45. }
  46. }