MovieOrderCommand.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace app\command;
  3. use app\common\repositories\movie\MovieRepository;
  4. use crmeb\services\ApiResponseService;
  5. use think\console\Command;
  6. use think\console\Input;
  7. use think\console\Output;
  8. use think\facade\Db;
  9. class MovieOrderCommand extends Command
  10. {
  11. protected function configure()
  12. {
  13. // 指令配置
  14. $this->setName('movie-order')->setDescription('电影-订单');
  15. }
  16. protected function execute(Input $input, Output $output)
  17. {
  18. $this->doMovieOrder();
  19. }
  20. /**
  21. * 电影-订单
  22. * @return void
  23. * @throws \think\db\exception\DataNotFoundException
  24. * @throws \think\db\exception\DbException
  25. * @throws \think\db\exception\ModelNotFoundException
  26. */
  27. private function doMovieOrder()
  28. {
  29. $page = 1;
  30. $limit = 100;
  31. /** @var MovieRepository $movieOrderRepository */
  32. $movieOrderRepository = app()->make(MovieRepository::class);
  33. $filmLists = $movieOrderRepository->getOrderListAll($page, $limit);
  34. if (isset($filmLists['code']) && ($filmLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) {
  35. $this->createMovieFilm($filmLists['data']['list']);
  36. $data = $filmLists['data'];
  37. $totalPages = $data['paging']['pages'] ?? 0;
  38. for ($index = ($page + 1); $index <= $totalPages; $index++) {
  39. $filmLists = $movieRepository->getFilm($index, $limit);
  40. if (isset($filmLists['code']) && ($filmLists['code'] == ApiResponseService::DEFAULT_SUCCESS_CODE)) {
  41. $this->createMovieFilm($filmLists['data']['list']);
  42. }
  43. }
  44. }
  45. }
  46. /**
  47. * 电影-获取影片列表
  48. *
  49. * @param $list
  50. * @return void
  51. * @throws \think\db\exception\DataNotFoundException
  52. * @throws \think\db\exception\DbException
  53. * @throws \think\db\exception\ModelNotFoundException
  54. */
  55. private function createMovieFilm($list)
  56. {
  57. $film_signList = array_column($list, 'film_sign');
  58. $localFilm_nameLists = Db::name('movie_film')->whereIn('film_sign', $film_signList)->field('id,film_sign,film_name,publish_date')->select();
  59. $localFilm_nameLists = !empty($localFilm_nameLists) ? array_reduce($localFilm_nameLists->toArray(), function ($carry, $item) {
  60. $carry[$item['film_sign']] = [
  61. 'id' => $item['id'], 'film_sign' => $item['film_sign'], 'film_name' => $item['film_name'], 'publish_date' => $item['publish_date']
  62. ];
  63. return $carry;
  64. }, []) : [];
  65. $time = strtotime(date('Y-m-d'));
  66. foreach ($list as $key => $value) {
  67. $publish_date = strtotime($value['publish_date']);
  68. $params = [
  69. 'film_sign' => $value['film_sign'],
  70. 'film_name' => $value['film_name'],
  71. 'publish_date' => $publish_date,
  72. 'language' => trim($value['language']),
  73. 'type' => $value['type'],
  74. 'duration' => $value['duration'],
  75. 'version' => $value['version'],
  76. 'grade' => $value['grade'],
  77. 'hots' => $value['hots'],
  78. 'cover_img' => $value['cover_img'],
  79. 'video' => $value['video'],
  80. 'detail_img' => json_encode($value['detail_img'], JSON_FORCE_OBJECT),
  81. 'director' => json_encode($value['director'], JSON_FORCE_OBJECT),
  82. 'actors' => json_encode($value['actors'], JSON_FORCE_OBJECT),
  83. 'intro' => $value['intro'],
  84. 'is_show' => intval(($publish_date <= $time))
  85. ];
  86. if (!isset($localFilm_nameLists[$value['film_sign']])) {
  87. $params['create_time'] = time();
  88. Db::name('movie_film')->insert($params);
  89. } else {
  90. $localFilm_name = $localFilm_nameLists[$value['film_sign']];
  91. if (md5($value['film_sign'] . $value['film_name'] . $value['publish_date'])
  92. != md5($localFilm_name['film_sign'] . $localFilm_name['film_name'] . $localFilm_name['publish_date'])) {
  93. $params['update_time'] = time();
  94. Db::name('movie_film')->where('id', $localFilm_name['id'])->update($params);
  95. }
  96. }
  97. }
  98. }
  99. }