SettleFire.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * SettleFire.php UTF-8
  4. * 提现队列处理
  5. *
  6. * @date : 2018/10/10 11:44
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HuoMp 1.0
  11. */
  12. namespace huolib\queue\job;
  13. use huo\controller\finance\Settle;
  14. use huolib\status\SettleStatus;
  15. use think\Log;
  16. use think\queue\Job;
  17. class SettleFire extends Fire {
  18. static $g_i = 0;
  19. /**
  20. * fire方法是消息队列默认调用的方法
  21. *
  22. * @param Job $job 当前的任务对象
  23. * @param array|mixed $data 发布任务时自定义的数据
  24. */
  25. public function fire(Job $job, $data) {
  26. if ($job->attempts() > 1) {
  27. $job->delete();
  28. }
  29. self::$g_i++;
  30. $_is_job_done = $this->doJob($data);
  31. $runtime = round(microtime(true) - THINK_START_TIME, 10);
  32. echo $runtime.' '.self::$g_i;
  33. if ($_is_job_done) {
  34. //如果任务执行成功, 记得删除任务
  35. $job->delete();
  36. // print("<info>Hello Job has been done and deleted"."</info>\n");
  37. } else {
  38. if ($job->attempts() > 3) {
  39. //通过这个方法可以检查这个任务已经重试了几次了
  40. // print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
  41. $job->delete();
  42. // 也可以重新发布这个任务
  43. // print("<info>Hello Job will be availabe again after 2s."."</info>\n");
  44. //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
  45. }
  46. }
  47. }
  48. /**
  49. * 根据消息中的数据进行实际的业务处理
  50. *
  51. * @param array $data 发布任务时自定义的数据
  52. *
  53. * @return bool 任务执行的结果
  54. */
  55. public function doJob($data) {
  56. $_rs = (new Settle())->withdrawQueue($data);
  57. if (SettleStatus::NO_ERROR != $_rs['code']) {
  58. Log::write(
  59. "func=".__FUNCTION__."&class=".__CLASS__."step=".self::$g_i."&msg=".json_encode($_rs),
  60. LOG::QUEUE
  61. );
  62. // return false;
  63. }
  64. return true;
  65. }
  66. }