EpisodeController.php 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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\User\Models\User;
  12. use Modules\Video\Services\VideoService;
  13. class EpisodeController extends CatchController
  14. {
  15. use UserTrait;
  16. use ValidatesRequests;
  17. public function list(Request $request) {
  18. $this->validate($request, [
  19. 'video_id' => 'required'
  20. ]);
  21. $video = VideoService::getVideoByIdOrException($request->input('video_id'));
  22. VideoService::updateVideoChargeInfo($video, $this->getUserContext($request->input('operateUserId')));
  23. $videoSeries = DB::table('video_series')
  24. ->where([
  25. 'video_id' => $request->integer('video_id'),
  26. 'is_enabled' => 1
  27. ])->select('series_name', 'series_sequence', 'video_key', 'duration')
  28. ->orderBy('series_sequence', 'asc')
  29. ->paginate($request->integer('limit', 15));
  30. foreach ($videoSeries as $series) {
  31. $series->series_name = sprintf('第%s集', $series->series_sequence);
  32. $series->is_charge = $series->series_sequence >= $video->charge_sequence;
  33. $series->duration_str = gmdate('H:i:s', $series->duration);
  34. $series->public_video_url = QiniuTokenService::getPrivateSourceDownloadUrl(
  35. config('common.qiniu.publicVideoLinkDomain') . DIRECTORY_SEPARATOR . $series->video_key);
  36. $series->download_video_url = QiniuTokenService::getPrivateSourceDownloadUrl(
  37. config('common.qiniu.downloadVideoLinkDomain') . DIRECTORY_SEPARATOR .
  38. $series->video_key.'?attname='.urlencode($series->series_name).'.mp4');
  39. }
  40. return $videoSeries;
  41. }
  42. public function downloadList(Request $request) {
  43. return $this->list($request);
  44. }
  45. public function add(Request $request) {
  46. $this->validate($request, [
  47. 'video_id' => 'required',
  48. 'videos' => 'required|array|min:1',
  49. 'videos.*.name' => 'required',
  50. 'videos.*.duration' => 'required|integer|min:1',
  51. 'videos.*.key' => 'required',
  52. ]);
  53. VideoService::getVideoByIdOrException($request->input('video_id'));
  54. $videos = $request->input('videos');
  55. $data = [];
  56. $now = date('Y-m-d H:i:s');
  57. foreach ($videos as $item) {
  58. $data[] = [
  59. 'video_id' => $request->input('video_id'),
  60. 'video_key' => $item['key'],
  61. 'series_name' => $item['name'],
  62. 'series_sequence' => intval(explode('_', $item['name'])[0]),
  63. 'duration' => $item['duration'],
  64. 'created_at' => $now,
  65. 'updated_at' => $now,
  66. ];
  67. }
  68. $allSequence = DB::table('video_series')->where(['video_id' => $request->input('video_id')])
  69. ->select('series_sequence')->get()->pluck('series_sequence');
  70. $alreadySeries = collect($data)->pluck('series_sequence')->intersect($allSequence)->map(function ($item) use ($data) {
  71. return collect($data)->keyBy('series_sequence')->get($item)['series_name'];
  72. });
  73. if($alreadySeries->isNotEmpty()) {
  74. CommonBusinessException::throwError([-1, $alreadySeries->join(', ') . ' 已经存在']);
  75. }
  76. DB::table('video_series')->insert($data);
  77. DB::table('videos')
  78. ->where(['id' => $request->input('video_id')])
  79. ->update(['updated_episode_num' => DB::table('video_series')
  80. ->where(['video_id' => $request->input('video_id')])->count(),'updated_at' => $now]);
  81. return 1;
  82. }
  83. }