setName('movie-cinema')->setDescription('电影-获取影院列表'); } protected function execute(Input $input, Output $output) { $this->doMovieCinema(); } /** * 电影-获取影院列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ private function doMovieCinema() { $page = 1; $limit = 100; /** @var MovieRepository $movieRepository */ $movieRepository = app()->make(MovieRepository::class); $cinemaLists = $movieRepository->getCinema($page, $limit); if (isset($cinemaLists['code']) && ($cinemaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) { $this->createMovieCinema($cinemaLists['data']['list']); $data = $cinemaLists['data']; $totalPages = $data['paging']['pages'] ?? 0; for ($index = ($page + 1); $index <= $totalPages; $index++) { $cinemaLists = $movieRepository->getCinema($index, $limit); if (isset($cinemaLists['code']) && ($cinemaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) { $this->createMovieCinema($cinemaLists['data']['list']); sleep(1); } } } } /** * 电影-影院列表 * * @param $list * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ private function createMovieCinema($list) { $cinema_signList = array_column($list, 'cinema_sign'); $localCinema_nameLists = Db::name('movie_cinema')->whereIn('cinema_sign', $cinema_signList)->field('id,cinema_sign,cinema_name,address,tel')->select(); $localCinema_nameLists = !empty($localCinema_nameLists) ? array_reduce($localCinema_nameLists->toArray(), function ($carry, $item) { $carry[$item['cinema_sign']] = [ 'id' => $item['id'], 'cinema_sign' => $item['cinema_sign'], 'cinema_name' => $item['cinema_name'], 'address' => $item['address'], 'tel' => $item['tel'] ]; return $carry; }, []) : []; foreach ($list as $key => $value) { $params = [ 'cinema_sign' => $value['cinema_sign'], 'cinema_name' => $value['cinema_name'], 'address' => $value['address'], 'tel' => trim($value['tel']), 'longitude' => $value['longitude'], 'latitude' => $value['latitude'], 'city_sign' => $value['city_sign'], 'city_name' => $value['city_name'], 'area_sign' => $value['area_sign'], 'area_name' => $value['area_name'] ]; if (!isset($localCinema_nameLists[$value['cinema_sign']])) { $params['create_time'] = time(); Db::name('movie_cinema')->insert($params); } else { $localCinema_name = $localCinema_nameLists[$value['cinema_sign']]; if (md5($value['cinema_sign'] . $value['cinema_name'] . $value['address'] . $value['tel']) != md5($localCinema_name['cinema_sign'] . $localCinema_name['cinema_name'] . $localCinema_name['address'] . $localCinema_name['tel'])) { $params['update_time'] = time(); Db::name('movie_cinema')->where('id', $localCinema_name['id'])->update($params); } } } } }