1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- /**
- * RepeatFire.php UTF-8
- * 补单队列消耗
- *
- * @date : 2020/7/29 10:43
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huoOrderRepeat\job;
- use huolib\queue\job\Fire;
- use huolib\status\OrderStatus;
- use huoOrderRepeat\constant\OrderRepeatConstant;
- use huoOrderRepeat\controller\OrderRepeat;
- use think\queue\Job;
- class RepeatFire 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 = get_val($data, 'attempts', OrderRepeatConstant::JOB_REPEAT_MAX_CNT);
- $_attempts = $job->attempts();
- if ($_attempts >= $_limit_attempts) {
- /* 任务达到最大次数则删除任务不再执行 */
- $job->delete();
- } else {
- /* 重新发布任务 */
- switch ($_attempts) {
- case 1:
- $_delay = OrderRepeatConstant::JOB_ATTEMPTS_SECOND_TIME;
- break;
- case 2:
- $_delay = OrderRepeatConstant::JOB_ATTEMPTS_THIRD_TIME;
- break;
- case 3:
- $_delay = OrderRepeatConstant::JOB_ATTEMPTS_FOURTH_TIME;
- break;
- case 4:
- $_delay = OrderRepeatConstant::JOB_ATTEMPTS_FIFTH_TIME;
- break;
- default:
- $_delay = OrderRepeatConstant::JOB_ATTEMPTS_ONCE_TIME;
- }
- // \think\Log::error(['补单尝试次数及时间', $data, time(), $_attempts, $_delay]);
- $job->release($_delay); /* $_delay为延迟时间,表示该任务延迟$_delay秒后再执行 */
- }
- }
- }
- /**
- * 根据消息中的数据进行实际的业务处理
- *
- * @param array $data 发布任务时自定义的数据
- *
- * @return bool 任务执行的结果
- */
- public function doJob($data) {
- $_order_id = isset($data['order_id']) ? $data['order_id'] : '';
- if (empty($_order_id)) {
- /* order_id 为空认为执行成功,否则会重复入队列 */
- return true;
- }
- $_rdata = (new OrderRepeat())->notify($data['order_id']);
- $_code = $_rdata['code'];
- switch ($_code) {
- /* 成功、订单号为空、订单不存在的认为不需要再次执行 */
- case OrderStatus::NO_ERROR:
- case OrderStatus::ORDER_ID_EMPTY:
- case OrderStatus::ORDER_NOT_PAY:
- return true;
- break;
- default:
- return false;
- }
- }
- }
|