| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?php
- namespace app\command;
- use app\common\repositories\movie\MovieRepository;
- use crmeb\services\ApiResponseService;
- use think\console\Command;
- use think\console\Input;
- use think\console\Output;
- use think\facade\Db;
- class MovieCityAreaCommand extends Command
- {
- protected function configure()
- {
- // 指令配置
- $this->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']);
- }
- }
- }
- }
- /**
- * 电影-城市列表
- *
- * @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);
- }
- }
- }
- }
|