line('开始消息队列'); $url = env('NOTICE_URL'); $res = json_decode($this->client->post($url)->getBody()->getContents(), true); if (!$res['result'] || $res['errCode'] != '0000') { $this->error('request err: ' . $res['desc'] ?? ''); return 1; } $arr = $res['data']['notice_list'] ?? []; while ($items = array_splice($arr, 0, 1)) { $ids = array_column($items, 'notice_id'); $data = array_column($items, null, 'notice_id'); if (!$ids) { continue; } $hadIds = Notice::query()->select('id')->whereIn('id', $ids)->get()->toArray(); $hadIds = array_column($hadIds, 'id'); $newIds = array_diff($ids, $hadIds); $notices = []; $time = date('Y-m-d H:i:s'); foreach ($newIds as $id) { $notices[] = [ 'notice_id' => $id, 'raw_content' => json_encode($data[$id]), 'created_at' => $time, ]; } try{ Notice::insert($notices); }catch (\Exception $exception){ $this->error('insert err:'. $exception->getMessage()); } //todo 入队 foreach ($newIds as $id){ \App\Jobs\notice::dispatch($data[$id]); } } return 0; } }