validate($request, [ 'video_id' => 'required' ]); $video = VideoService::getVideoByIdOrException($request->input('video_id')); VideoService::updateVideoChargeInfo($video, $this->getUserContext($request->input('operateUserId'))); $videoSeries = DB::table('video_series') ->where([ 'video_id' => $request->integer('video_id'), 'is_enabled' => 1 ])->select('series_name', 'series_sequence', 'video_key', 'duration') ->orderBy('series_sequence', 'asc') ->paginate($request->integer('limit', 15)); foreach ($videoSeries as $series) { $series->series_name = sprintf('第%s集', $series->series_sequence); $series->is_charge = $series->series_sequence >= $video->charge_sequence; $series->duration_str = gmdate('H:i:s', $series->duration); $series->public_video_url = QiniuTokenService::getPrivateSourceDownloadUrl( config('common.qiniu.publicVideoLinkDomain') . DIRECTORY_SEPARATOR . $series->video_key); $series->download_video_url = QiniuTokenService::getPrivateSourceDownloadUrl( config('common.qiniu.downloadVideoLinkDomain') . DIRECTORY_SEPARATOR . $series->video_key.'?attname='.urlencode($series->series_name).'.mp4'); } return $videoSeries; } public function downloadList(Request $request) { return $this->list($request); } public function add(Request $request) { $this->validate($request, [ 'video_id' => 'required', 'videos' => 'required|array|min:1', 'videos.*.name' => 'required', 'videos.*.duration' => 'required|integer|min:1', 'videos.*.key' => 'required', ]); VideoService::getVideoByIdOrException($request->input('video_id')); $videos = $request->input('videos'); $data = []; $now = date('Y-m-d H:i:s'); foreach ($videos as $item) { $data[] = [ 'video_id' => $request->input('video_id'), 'video_key' => $item['key'], 'series_name' => $item['name'], 'series_sequence' => intval(explode('_', $item['name'])[0]), 'duration' => $item['duration'], 'created_at' => $now, 'updated_at' => $now, ]; } $allSequence = DB::table('video_series')->where(['video_id' => $request->input('video_id')]) ->select('series_sequence')->get()->pluck('series_sequence'); $alreadySeries = collect($data)->pluck('series_sequence')->intersect($allSequence)->map(function ($item) use ($data) { return collect($data)->keyBy('series_sequence')->get($item)['series_name']; }); if($alreadySeries->isNotEmpty()) { CommonBusinessException::throwError([-1, $alreadySeries->join(', ') . ' 已经存在']); } DB::table('video_series')->insert($data); DB::table('videos') ->where(['id' => $request->input('video_id')]) ->update(['updated_episode_num' => DB::table('video_series') ->where(['video_id' => $request->input('video_id')])->count(),'updated_at' => $now]); return 1; } }