info(date('H:i') . ' 开始执行'); $this->start(); $this->info(date('H:i') . ' 结束执行'); return 0; } public function start() { $curTime = time(); while (true) { if ((time() - $curTime) >= 60) break; $dataJson = RedisModel::rPop(JuxingAdAccount::JUXING_STAR_LIVE_SYNC_ADVID_LIST); if (empty($dataJson)) { sleep(2); continue; } $data = json_decode($dataJson, true); if (!isset($data['advertiserId'], $data['stTime'], $data['enTime'])) { # 输出错误日志 Log::error('数据参数不合法', $data, 'Star:LiveTaskDataSync'); continue; } $this->getTaskData($data); } } public function getTaskData($data) { $advertiserId = $data['advertiserId']; $stTime = $data['stTime']; $enTime = $data['enTime']; $accessToken = JuxingAdAccount::getAccessToken($advertiserId); $juxing = new JuXing($accessToken); $param = [ 'advertiser_id' => $advertiserId, 'start_time' => $stTime, 'end_time' => $enTime ]; $listGenerator = $this->generator($juxing, $param); foreach ($listGenerator as $list) { foreach ($list as $datum) { $this->allotmentData($advertiserId, $datum); } } } public function generator($juxing, $param) { $failRecord = []; $pageNumber = 1; $totalPage = 1; do { $param['page_num'] = $pageNumber; $param['page_size'] = $this->limit; $rst = $juxing->investData()->starLiveTaskList($param); if (isset($rst['code']) && ($rst['code'] == 0)) { yield $rst['data']['star_live_task_detail_resp']; $totalPage = ceil($rst['data']['total']/$this->limit); $pageNumber ++; } else { if (isset($failRecord[$pageNumber])) { $failRecord[$pageNumber] ++; } else { $failRecord[$pageNumber] = 0; } if ($failRecord[$pageNumber] > 5) { Log::error('请求接口错误', $param, 'Star:LiveTaskDataSync'); break; } } // 控频 sleep(1); } while($pageNumber <= $totalPage); } public function allotmentData($advertiserId, $datum) { # 插入任务入库队列 $taskItem = [ 'advertiser_id' => $advertiserId, 'data' => $datum ]; RedisModel::lPush(JxStarLiveTaskList::JUXING_STAR_LIVE_TASK_INDB_LIST, json_encode($taskItem)); # 输出记录日志 // Log::info('入库任务数据入队列成功', $taskItem, 'Star:LiveTaskDataSync'); # 插入获取订单队列 $taskId = $datum['task_id'] ?? null; $getOrderItem = [ 'advertiser_id' => $advertiserId, 'task_id' => $taskId ]; RedisModel::lPush(JxStarLiveTaskList::JUXING_STAR_LIVE_ORDER_SYNC_TASKID_LIST, json_encode($getOrderItem)); # 输出记录日志 // Log::info('获取星直播订单入队列成功', $getOrderItem, 'Star:LiveTaskDataSync'); } }