| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- namespace app\command;
- use app\common\repositories\movie\CinemaRepository;
- 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 MovieCinemaCommand extends Command
- {
- protected function configure()
- {
- // 指令配置
- $this->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']);
- }
- }
- }
- }
- /**
- * 电影-影院列表
- *
- * @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);
- }
- }
- }
- }
- }
|