MovieCinemaCommand.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. // 写入影院数据
  37. $this->createMovieCinema($cinemaLists['data']['list']);
  38. $data = $cinemaLists['data'];
  39. $totalPages = $data['paging']['pages'] ?? 0;
  40. for ($index = ($page + 1); $index <= $totalPages; $index++) {
  41. // 请求第三方影院接口获取影院列表
  42. $cinemaLists = $movieRepository->getCinema($index, $limit);
  43. if (isset($cinemaLists['code']) && ($cinemaLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) {
  44. // 写入影院数据
  45. $this->createMovieCinema($cinemaLists['data']['list']);
  46. }
  47. }
  48. }
  49. }
  50. /**
  51. * 电影-影院列表
  52. *
  53. * @param $list
  54. * @return void
  55. * @throws \think\db\exception\DataNotFoundException
  56. * @throws \think\db\exception\DbException
  57. * @throws \think\db\exception\ModelNotFoundException
  58. */
  59. private function createMovieCinema($list)
  60. {
  61. $cinema_signList = array_column($list, 'cinema_sign');
  62. $localCinema_nameLists = Db::name('movie_cinema')->whereIn('cinema_sign', $cinema_signList)->field('id,cinema_sign,cinema_name,address,tel')->select();
  63. $localCinema_nameLists = !empty($localCinema_nameLists) ? array_reduce($localCinema_nameLists->toArray(), function ($carry, $item) {
  64. $carry[$item['cinema_sign']] = [
  65. 'id' => $item['id'], 'cinema_sign' => $item['cinema_sign'], 'cinema_name' => $item['cinema_name'],
  66. 'address' => $item['address'], 'tel' => $item['tel']
  67. ];
  68. return $carry;
  69. }, []) : [];
  70. foreach ($list as $key => $value) {
  71. $params = [
  72. 'cinema_sign' => $value['cinema_sign'],
  73. 'cinema_name' => $value['cinema_name'],
  74. 'address' => $value['address'],
  75. 'tel' => trim($value['tel']),
  76. 'longitude' => $value['longitude'],
  77. 'latitude' => $value['latitude'],
  78. 'city_sign' => $value['city_sign'],
  79. 'city_name' => $value['city_name'],
  80. 'area_sign' => $value['area_sign'],
  81. 'area_name' => $value['area_name']
  82. ];
  83. if (!isset($localCinema_nameLists[$value['cinema_sign']])) {
  84. $params['create_time'] = time();
  85. Db::name('movie_cinema')->insert($params);
  86. } else {
  87. $localCinema_name = $localCinema_nameLists[$value['cinema_sign']];
  88. if (md5($value['cinema_sign'] . $value['cinema_name'] . $value['address'] . $value['tel'])
  89. != md5($localCinema_name['cinema_sign'] . $localCinema_name['cinema_name'] . $localCinema_name['address'] . $localCinema_name['tel'])) {
  90. $params['update_time'] = time();
  91. Db::name('movie_cinema')->where('id', $localCinema_name['id'])->update($params);
  92. }
  93. }
  94. }
  95. }
  96. }