setName('movie-city-area')->setDescription('电影-城市列表'); } protected function execute(Input $input, Output $output) { $this->doMovieCity(); $this->doMovieCityArea(); } /** * 电影-城市-分区列表 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ private function doMovieCity() { $page = 1; $limit = 100; /** @var MovieRepository $movieRepository */ $movieRepository = app()->make(MovieRepository::class); $movieCityLists = $movieRepository->getMovieCity($page, $limit); if (isset($movieCityLists['code']) && ($movieCityLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) { $this->createMovieCity($movieCityLists['data']['list']); $data = $movieCityLists['data']; $totalPages = $data['paging']['pages'] ?? 0; for ($index = ($page + 1); $index <= $totalPages; $index++) { $movieCityLists = $movieRepository->getMovieCity($index, $limit); if (isset($movieCityLists['code']) && ($movieCityLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) { $this->createMovieCity($movieCityLists['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 createMovieCity($list) { $city_signList = array_column($list, 'city_sign'); $localCityLists = Db::name('movie_city')->whereIn('city_sign', $city_signList)->field('id,city_sign,city_name')->select(); $localCityLists = !empty($localCityLists) ? array_reduce($localCityLists->toArray(), function ($carry, $item) { $carry[$item['city_sign']] = ['id' => $item['id'], 'city_sign' => $item['city_sign'], 'city_name' => $item['city_name']]; return $carry; }, []) : []; foreach ($list as $key => $value) { $params = [ 'city_sign' => $value['city_sign'], 'city_name' => $value['city_name'], 'initial' => $value['initial'], ]; if (!isset($localCityLists[$value['city_sign']])) { $params['create_time'] = time(); Db::name('movie_city')->insert($params); } else { if (md5($value['city_sign'] . $value['city_name']) != md5($localCityLists[$value['city_sign']]['city_name'])) { $params['update_time'] = time(); Db::name('movie_city')->where('id', $localCityLists[$value['city_sign']]['id'])->update($params); } } } } /** * 电影-城市分区列表 * * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ private function doMovieCityArea() { /** @var MovieRepository $movieRepository */ $movieRepository = app()->make(MovieRepository::class); $localCityLists = Db::name('movie_city')->field('id,city_sign,city_name')->select(); foreach ($localCityLists as $key => $value) { $movieAreaLists = $movieRepository->getMovieArea($value['city_sign']); if (isset($movieAreaLists['code']) && ($movieAreaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE) && !empty($movieAreaLists['data']['list'])) { foreach ($movieAreaLists['data']['list'] as $maKey => $maValue) { $params = [ 'parent_id' => $value['id'], 'city_sign' => $value['city_sign'], 'city_name' => $value['city_name'], 'area_code' => $maValue['area_code'], 'area_name' => $maValue['area_name'] ]; $city_area = Db::name('movie_city_area')->where(['parent_id' => $value['id'], 'city_sign' => $value['city_sign'], 'area_code' => $maValue['area_code']])->find(); if (empty($city_area)) { $params['create_time'] = time(); Db::name('movie_city_area')->insert($params); } else { if (md5($maValue['area_code'] . $maValue['area_name']) != md5($city_area['area_code'] . $city_area['area_name'])) { $params['update_time'] = time(); Db::name('movie_city_area')->where('id', $city_area['id'])->update($params); } } } sleep(1); } } } }