ReportFire.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * ReportFire.php UTF-8
  4. *
  5. * @date : 2021/5/6 17:21
  6. *
  7. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  8. * @author : chenbingling <cbl@huosdk.com>
  9. * @version : HUOSDK-IDENTITY 1.0
  10. */
  11. namespace huoIdentify\lib\queue\job;
  12. use huoIdentify\lib\queue\constant\JobConst;
  13. use huolib\queue\job\Fire;
  14. use huolib\status\IdentifyStatus;
  15. use think\queue\Job;
  16. class ReportFire extends Fire {
  17. /**
  18. * fire方法是消息队列默认调用的方法
  19. *
  20. * @param Job $job 当前的任务对象
  21. * @param array|mixed $data 发布任务时自定义的数据
  22. */
  23. public function fire(Job $job, $data) {
  24. $_is_job_done = $this->doJob($data);
  25. if ($_is_job_done) {
  26. /* 如果任务执行成功, 记得删除任务 */
  27. $job->delete();
  28. } else {
  29. $_limit_attempts = 2;
  30. $_attempts = $job->attempts();
  31. if ($_attempts >= $_limit_attempts) {
  32. /* 任务达到最大次数则删除任务不再执行 */
  33. $job->delete();
  34. } else {
  35. /* 重新发布任务 */
  36. switch ($_attempts) {
  37. case 1:
  38. $_delay = JobConst::JOB_ATTEMPTS_SECOND_TIME;
  39. break;
  40. case 2:
  41. $_delay = JobConst::JOB_ATTEMPTS_THIRD_TIME;
  42. break;
  43. case 3:
  44. $_delay = JobConst::JOB_ATTEMPTS_FOURTH_TIME;
  45. break;
  46. case 4:
  47. $_delay = JobConst::JOB_ATTEMPTS_FIFTH_TIME;
  48. break;
  49. default:
  50. $_delay = JobConst::JOB_ATTEMPTS_ONCE_TIME;
  51. }
  52. $job->release($_delay); /* $_delay为延迟时间,表示该任务延迟$_delay秒后再执行 */
  53. }
  54. }
  55. }
  56. /**
  57. * 根据消息中的数据进行实际的业务处理
  58. *
  59. * @param array $data 发布任务时自定义的数据
  60. *
  61. * @return bool 任务执行的结果
  62. */
  63. public function doJob($data) {
  64. $_app_id = isset($data['app_id']) ? $data['app_id'] : 0;
  65. $_mem_id = isset($data['mem_id']) ? $data['mem_id'] : 0;
  66. $_is_login = isset($data['is_login']) ? $data['is_login'] : 0;
  67. if (empty($_app_id) || empty($_mem_id)) {
  68. return true;
  69. }
  70. $_report_class = isset($data['report_class']) ? $data['report_class'] : '';
  71. if (class_exists($_report_class)) {
  72. $_rs = (new $_report_class())->reportCommon($_app_id, $_mem_id, $_is_login, true);
  73. if (IdentifyStatus::NO_ERROR != $_rs['code']) {
  74. return false;
  75. }
  76. }
  77. return true;
  78. }
  79. }