* @version : HUOSDK-IDENTITY 1.0 */ namespace huoIdentify\lib\queue\job; use huoIdentify\lib\queue\constant\JobConst; use huolib\queue\job\Fire; use huolib\status\IdentifyStatus; use think\queue\Job; class ReportFire extends Fire { /** * fire方法是消息队列默认调用的方法 * * @param Job $job 当前的任务对象 * @param array|mixed $data 发布任务时自定义的数据 */ public function fire(Job $job, $data) { $_is_job_done = $this->doJob($data); if ($_is_job_done) { /* 如果任务执行成功, 记得删除任务 */ $job->delete(); } else { $_limit_attempts = 2; $_attempts = $job->attempts(); if ($_attempts >= $_limit_attempts) { /* 任务达到最大次数则删除任务不再执行 */ $job->delete(); } else { /* 重新发布任务 */ switch ($_attempts) { case 1: $_delay = JobConst::JOB_ATTEMPTS_SECOND_TIME; break; case 2: $_delay = JobConst::JOB_ATTEMPTS_THIRD_TIME; break; case 3: $_delay = JobConst::JOB_ATTEMPTS_FOURTH_TIME; break; case 4: $_delay = JobConst::JOB_ATTEMPTS_FIFTH_TIME; break; default: $_delay = JobConst::JOB_ATTEMPTS_ONCE_TIME; } $job->release($_delay); /* $_delay为延迟时间,表示该任务延迟$_delay秒后再执行 */ } } } /** * 根据消息中的数据进行实际的业务处理 * * @param array $data 发布任务时自定义的数据 * * @return bool 任务执行的结果 */ public function doJob($data) { $_app_id = isset($data['app_id']) ? $data['app_id'] : 0; $_mem_id = isset($data['mem_id']) ? $data['mem_id'] : 0; $_is_login = isset($data['is_login']) ? $data['is_login'] : 0; if (empty($_app_id) || empty($_mem_id)) { return true; } $_report_class = isset($data['report_class']) ? $data['report_class'] : ''; if (class_exists($_report_class)) { $_rs = (new $_report_class())->reportCommon($_app_id, $_mem_id, $_is_login, true); if (IdentifyStatus::NO_ERROR != $_rs['code']) { return false; } } return true; } }