EpisodeController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace Modules\Video\Http\Controllers;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Modules\Common\Errors\Errors;
  8. use Modules\Common\Exceptions\CommonBusinessException;
  9. use Modules\Common\Services\Qiniu\QiniuTokenService;
  10. use Modules\User\Http\Controllers\UserTrait;
  11. use Modules\Video\Services\VideoService;
  12. class EpisodeController extends CatchController
  13. {
  14. use UserTrait;
  15. use ValidatesRequests;
  16. public function list(Request $request) {
  17. $this->validate($request, [
  18. 'video_id' => 'required'
  19. ]);
  20. $video = VideoService::getVideoByIdOrException($request->input('video_id'));
  21. VideoService::updateVideoChargeInfo($video, $this->getUserContext($request->input('operateUserId')));
  22. $videoSeries = DB::table('video_series')
  23. ->where([
  24. 'video_id' => $request->integer('video_id'),
  25. 'is_enabled' => 1
  26. ])->select('series_name', 'series_sequence', 'video_key', 'duration', 'id', 'video_id')
  27. ->orderBy('series_sequence', 'asc')
  28. ->paginate($request->integer('limit', 15));
  29. /**
  30. * 增加微信审核状态
  31. */
  32. $wechatCheckStatus = null;
  33. if($request->input('need_wechat_status', 0)) {
  34. $serieIds = $videoSeries->pluck('id');
  35. $wechatCheckStatus = DB::table('video_series_wechat_check')
  36. ->whereIn('series_id', $serieIds)
  37. ->where('is_enabled', 1)
  38. ->select('series_id', 'check_status')
  39. ->get()->keyBy('series_id');
  40. }
  41. $wechatCheckStatusMap = config('video.wechat.checkStatus');
  42. foreach ($videoSeries as $series) {
  43. $series->series_name = sprintf('第%s集', $series->series_sequence);
  44. $series->is_charge = $series->series_sequence >= $video->charge_sequence;
  45. $series->duration_str = gmdate('H:i:s', $series->duration);
  46. $series->public_video_url = config('common.qiniu.publicVideoLinkDomain') . DIRECTORY_SEPARATOR . $series->video_key;
  47. $series->download_video_url = QiniuTokenService::getPrivateSourceDownloadUrl(config('common.qiniu.sourceVideoLinkDomain') . DIRECTORY_SEPARATOR .
  48. $series->video_key.'?attname='.urlencode($series->series_name).'.mp4');
  49. $wechat_check_status = $wechatCheckStatus[$series->id]->check_status ?? 0;
  50. $series->wechat_check_status = $wechat_check_status;
  51. $series->wechat_check_status_str = $wechatCheckStatusMap[$wechat_check_status] ?? '';
  52. }
  53. return $videoSeries;
  54. }
  55. public function downloadList(Request $request) {
  56. return $this->list($request);
  57. }
  58. /**
  59. * 添加短剧剧集, 允许覆盖已经存在的播放地址
  60. * @param Request $request
  61. * @return int
  62. * @throws \Illuminate\Validation\ValidationException
  63. */
  64. public function add(Request $request) {
  65. $this->validate($request, [
  66. 'video_id' => 'required',
  67. 'videos' => 'required|array|min:1',
  68. 'videos.*.name' => 'required',
  69. 'videos.*.duration' => 'required|integer|min:1',
  70. 'videos.*.key' => 'required',
  71. ]);
  72. VideoService::getVideoByIdOrException($request->input('video_id'));
  73. $videos = $request->input('videos');
  74. $data = [];
  75. $now = date('Y-m-d H:i:s');
  76. foreach ($videos as $item) {
  77. $sequence = intval(explode('_', $item['name'])[0]);
  78. if($sequence <=0 ) {
  79. CommonBusinessException::throwError(Errors::SERIES_NAME_NOT_OK);
  80. }
  81. $data[$sequence] = [
  82. 'video_id' => $request->input('video_id'),
  83. 'video_key' => $item['key'],
  84. 'series_name' => $item['name'],
  85. 'series_sequence' => $sequence,
  86. 'duration' => $item['duration'],
  87. 'created_at' => $now,
  88. 'updated_at' => $now,
  89. ];
  90. }
  91. $allSequence = DB::table('video_series')->where(['video_id' => $request->input('video_id')])
  92. ->select('series_sequence')->get()->pluck('series_sequence');
  93. foreach ($data as $key=>$item) {
  94. if($allSequence->contains($key)) {
  95. DB::table('video_series')->where([
  96. 'video_id' => $item['video_id'],
  97. 'series_sequence' => $item['series_sequence']
  98. ])->update([
  99. 'video_key' => $item['video_key'], 'series_name' => $item['series_name'],
  100. 'duration' => $item['duration'], 'updated_at' => $item['updated_at'],
  101. ]);
  102. } else {
  103. DB::table('video_series')->insert($item);
  104. }
  105. }
  106. DB::table('videos')
  107. ->where(['id' => $request->input('video_id')])
  108. ->update(['updated_episode_num' => DB::table('video_series')
  109. ->where(['video_id' => $request->input('video_id')])->count(),'updated_at' => $now]);
  110. return 1;
  111. }
  112. }