AccountOrderFire.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * AccountOrderFire.php UTF-8
  4. *
  5. *
  6. * @date : 2018/6/15 18:41
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : luowei <lw@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huolib\queue\job;
  13. use huo\controller\pay\ApplePay;
  14. use huo\logic\member\AccountLogic;
  15. use huo\model\account\AccountGoodsModel;
  16. use huo\model\account\AccountOrderModel;
  17. use huolib\constant\AccountConst;
  18. use huolib\constant\OrderConst;
  19. use think\Log;
  20. use think\queue\Job;
  21. class AccountOrderFire extends Fire {
  22. /**
  23. * fire方法是消息队列默认调用的方法
  24. *
  25. * @param Job $job 当前的任务对象
  26. * @param array|mixed $data 发布任务时自定义的数据
  27. */
  28. public function fire(Job $job, $data) {
  29. $_is_job_done = $this->doJob($data);
  30. if ($_is_job_done) {
  31. //如果任务执行成功, 记得删除任务
  32. $job->delete();
  33. } else {
  34. if ($job->attempts() > 3) {
  35. /* 记录队列值 */
  36. Log::write(
  37. "func=".__FUNCTION__."&class=".__CLASS__.'&queue='.$job->getQueue().'&name='.$job->getName()
  38. .'&data='.json_encode($data).'&error',
  39. LOG::QUEUE
  40. );
  41. $job->delete();
  42. }
  43. }
  44. }
  45. /**
  46. * 根据消息中的数据进行实际的业务处理
  47. *
  48. * @param array $data 发布任务时自定义的数据
  49. *
  50. * @return bool 任务执行的结果
  51. */
  52. public function doJob($data) {
  53. if (!isset($data['order_info'])) {
  54. return false;
  55. }
  56. $_order_info = $data['order_info'];
  57. if (!isset($_order_info['id'])) {
  58. return false;
  59. }
  60. if (!isset($_order_info['ags_id'])) {
  61. return false;
  62. }
  63. //订单失效
  64. (new AccountOrderModel())->updateData([
  65. 'status' => OrderConst::PAY_STATUS_FAIL,
  66. ], $_order_info['id']);
  67. //小号商品重新上架
  68. (new AccountGoodsModel())->updateData([
  69. 'status' => AccountConst::STATUS_PULL_ON_SHELVES,
  70. ], $_order_info['ags_id']);
  71. return true;
  72. }
  73. }