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_VIDEO_SYNC_ADVID_LIST); if (empty($dataJson)) { sleep(2); continue; } $data = json_decode($dataJson, true); if (!isset($data['advertiserId'], $data['timeRange'])) { # 输出错误日志 Log::error('数据参数不合法', $data, 'Star:VideoPostOrderDataSync'); continue; } $this->getPostOrderData($data); // 控频 sleep(1); } } public function getPostOrderData($data) { $advertiserId = $data['advertiserId']; $timeRange = $data['timeRange']; $accessToken = JuxingAdAccount::getAccessToken($advertiserId); $juxing = new JuXing($accessToken); $rst = $juxing->investData()->taskList([ 'advertiser_id' => $advertiserId, 'create_start_time' => $timeRange['st'], 'create_end_time' => $timeRange['en'] ]); if (!isset($rst['code']) || ($rst['code'] != 0)) { # 输出错误日志并异常处理 $msg = $rst['message'] ?? null; Log::error('请求接口错误:'.$msg, $data, 'Star:VideoPostOrderDataSync'); return false; } $rstData = $rst['data']['details'] ?? []; if (empty($rstData)) { # 输出记录日志 Log::info('请求返回任务数据为空', $data, 'Star:VideoPostOrderDataSync'); return true; } foreach ($rstData as $datum) { $this->allotmentData($advertiserId, $datum); } return 0; } public function allotmentData($advertiserId, $datum) { # 提取订单数据 $orderDetailResults = $datum['order_detail_results'] ?? []; unset($datum['order_detail_results']); # 插入任务入库队列 $taskItem = [ 'advertiser_id' => $advertiserId, 'data' => $datum ]; RedisModel::lPush(JxStarVideoTaskList::JUXING_STAR_VIDEO_TASK_INDB_LIST, json_encode($taskItem)); # 输出记录日志 // Log::info('入库任务数据入队列成功', $taskItem, 'Star:VideoPostOrderDataSync'); # 插入订单入库队列 if (empty($orderDetailResults)) { # 输出记录日志 Log::info('请求返回任务中订单数据为空', $datum, 'Star:VideoPostOrderDataSync'); return true; } $taskId = $datum['task_id'] ?? null; foreach ($orderDetailResults as $orderDetail) { # 加上日志过滤规则 $starReleaseTime = $orderDetail['star_release_time'] ? date('Y-m-d', strtotime($orderDetail['star_release_time'])) : null; if (empty($starReleaseTime)) { Log::info('该订单没有发布时间', $orderDetail, 'Star:VideoPostOrderDataSync'); continue; } if ($starReleaseTime < date('Y-m-d', strtotime("-{$this->runDays} day"))) { continue; } $orderItem = [ 'advertiser_id' => $advertiserId, 'task_id' => $taskId, 'data' => $orderDetail ]; RedisModel::lPush(JxStarVideoOrderList::JUXING_STAR_VIDEO_ORDER_INDB_LIST, json_encode($orderItem)); # 输出记录日志 // Log::info('入库订单数据入队列成功', $orderDetail, 'Star:VideoPostOrderDataSync'); } return 0; } }