MovieCinemaCommand.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. }
  44. }
  45. }
  46. }
  47. /**
  48. * 电影-影院列表
  49. *
  50. * @param $list
  51. * @return void
  52. * @throws \think\db\exception\DataNotFoundException
  53. * @throws \think\db\exception\DbException
  54. * @throws \think\db\exception\ModelNotFoundException
  55. */
  56. private function createMovieCinema($list)
  57. {
  58. $cinema_signList = array_column($list, 'cinema_sign');
  59. $localCinema_nameLists = Db::name('movie_cinema')->whereIn('cinema_sign', $cinema_signList)->field('id,cinema_sign,cinema_name,address,tel')->select();
  60. $localCinema_nameLists = !empty($localCinema_nameLists) ? array_reduce($localCinema_nameLists->toArray(), function ($carry, $item) {
  61. $carry[$item['cinema_sign']] = [
  62. 'id' => $item['id'], 'cinema_sign' => $item['cinema_sign'], 'cinema_name' => $item['cinema_name'],
  63. 'address' => $item['address'], 'tel' => $item['tel']
  64. ];
  65. return $carry;
  66. }, []) : [];
  67. foreach ($list as $key => $value) {
  68. $params = [
  69. 'cinema_sign' => $value['cinema_sign'],
  70. 'cinema_name' => $value['cinema_name'],
  71. 'address' => $value['address'],
  72. 'tel' => trim($value['tel']),
  73. 'longitude' => $value['longitude'],
  74. 'latitude' => $value['latitude'],
  75. 'city_sign' => $value['city_sign'],
  76. 'city_name' => $value['city_name'],
  77. 'area_sign' => $value['area_sign'],
  78. 'area_name' => $value['area_name']
  79. ];
  80. if (!isset($localCinema_nameLists[$value['cinema_sign']])) {
  81. $params['create_time'] = time();
  82. Db::name('movie_cinema')->insert($params);
  83. } else {
  84. $localCinema_name = $localCinema_nameLists[$value['cinema_sign']];
  85. if (md5($value['cinema_sign'] . $value['cinema_name'] . $value['address'] . $value['tel'])
  86. != md5($localCinema_name['cinema_sign'] . $localCinema_name['cinema_name'] . $localCinema_name['address'] . $localCinema_name['tel'])) {
  87. $params['update_time'] = time();
  88. Db::name('movie_cinema')->where('id', $localCinema_name['id'])->update($params);
  89. }
  90. }
  91. }
  92. }
  93. }