MovieCinemaCommand.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace app\command;
  3. use app\common\repositories\movie\CinemaRepository;
  4. use app\common\repositories\movie\MovieRepository;
  5. use crmeb\services\ApiResponseService;
  6. use think\console\Command;
  7. use think\console\Input;
  8. use think\console\Output;
  9. use think\facade\Db;
  10. class MovieCinemaCommand extends Command
  11. {
  12. protected function configure()
  13. {
  14. // 指令配置
  15. $this->setName('movie-cinema')->setDescription('电影-获取影院列表');
  16. }
  17. protected function execute(Input $input, Output $output)
  18. {
  19. $this->doMovieCinema();
  20. }
  21. /**
  22. * 电影-获取影院列表
  23. * @return void
  24. * @throws \think\db\exception\DataNotFoundException
  25. * @throws \think\db\exception\DbException
  26. * @throws \think\db\exception\ModelNotFoundException
  27. */
  28. private function doMovieCinema()
  29. {
  30. $page = 1;
  31. $limit = 100;
  32. /** @var MovieRepository $movieRepository */
  33. $movieRepository = app()->make(MovieRepository::class);
  34. $cinemaLists = $movieRepository->getCinema($page, $limit);
  35. if (isset($cinemaLists['code']) && ($cinemaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) {
  36. $this->createMovieCinema($cinemaLists['data']['list']);
  37. $data = $cinemaLists['data'];
  38. $totalPages = $data['paging']['pages'] ?? 0;
  39. for ($index = ($page + 1); $index <= $totalPages; $index++) {
  40. $cinemaLists = $movieRepository->getCinema($index, $limit);
  41. if (isset($cinemaLists['code']) && ($cinemaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) {
  42. $this->createMovieCinema($cinemaLists['data']['list']);
  43. sleep(1);
  44. }
  45. }
  46. }
  47. }
  48. /**
  49. * 电影-影院列表
  50. *
  51. * @param $list
  52. * @return void
  53. * @throws \think\db\exception\DataNotFoundException
  54. * @throws \think\db\exception\DbException
  55. * @throws \think\db\exception\ModelNotFoundException
  56. */
  57. private function createMovieCinema($list)
  58. {
  59. $cinema_signList = array_column($list, 'cinema_sign');
  60. $localCinema_nameLists = Db::name('movie_cinema')->whereIn('cinema_sign', $cinema_signList)->field('id,cinema_sign,cinema_name,address,tel')->select();
  61. $localCinema_nameLists = !empty($localCinema_nameLists) ? array_reduce($localCinema_nameLists->toArray(), function ($carry, $item) {
  62. $carry[$item['cinema_sign']] = [
  63. 'id' => $item['id'], 'cinema_sign' => $item['cinema_sign'], 'cinema_name' => $item['cinema_name'],
  64. 'address' => $item['address'], 'tel' => $item['tel']
  65. ];
  66. return $carry;
  67. }, []) : [];
  68. foreach ($list as $key => $value) {
  69. $params = [
  70. 'cinema_sign' => $value['cinema_sign'],
  71. 'cinema_name' => $value['cinema_name'],
  72. 'address' => $value['address'],
  73. 'tel' => trim($value['tel']),
  74. 'longitude' => $value['longitude'],
  75. 'latitude' => $value['latitude'],
  76. 'city_sign' => $value['city_sign'],
  77. 'city_name' => $value['city_name'],
  78. 'area_sign' => $value['area_sign'],
  79. 'area_name' => $value['area_name']
  80. ];
  81. if (!isset($localCinema_nameLists[$value['cinema_sign']])) {
  82. $params['create_time'] = time();
  83. Db::name('movie_cinema')->insert($params);
  84. } else {
  85. $localCinema_name = $localCinema_nameLists[$value['cinema_sign']];
  86. if (md5($value['cinema_sign'] . $value['cinema_name'] . $value['address'] . $value['tel'])
  87. != md5($localCinema_name['cinema_sign'] . $localCinema_name['cinema_name'] . $localCinema_name['address'] . $localCinema_name['tel'])) {
  88. $params['update_time'] = time();
  89. Db::name('movie_cinema')->where('id', $localCinema_name['id'])->update($params);
  90. }
  91. }
  92. }
  93. }
  94. }