where("media_type",$mediaType) ->where("group_name", "回收站") ->first(); if (!$recycle_group) { $MediaLibraryGroup = new MediaLibraryGroup(); $MediaLibraryGroup->user_id = $userId; $MediaLibraryGroup->group_name = "回收站"; $MediaLibraryGroup->media_type = $mediaType; $MediaLibraryGroup->save(); } $unclassified_group = MediaLibraryGroup::where("user_id", $userId) ->where("media_type",$mediaType) ->where("group_name", "默认分组") ->first(); if (!$unclassified_group) { $MediaLibraryGroup = new MediaLibraryGroup(); $MediaLibraryGroup->user_id = $userId; $MediaLibraryGroup->group_name = "默认分组"; $MediaLibraryGroup->media_type = $mediaType; $MediaLibraryGroup->save(); } $user_group = MediaLibraryGroup::where("user_id", $userId) ->where("group_name", $groupName) ->where("media_type", $mediaType) ->withTrashed() ->first(); if ($user_group) { if ($user_group->deleted_at) { $user_group->restore(); } } else { $MediaLibraryGroup = new MediaLibraryGroup(); $MediaLibraryGroup->user_id = $userId; $MediaLibraryGroup->group_name = $groupName; $MediaLibraryGroup->media_type = $mediaType; $MediaLibraryGroup->save(); } } /** * 重命名分组 * @param int $userId * @param string $groupName * @param int $mediaType * @param int $groupId */ public function renameGroup(int $userId, string $groupName, int $mediaType, int $groupId) { //查询要重命名的分组是否存在 $user_group = MediaLibraryGroup::where("id", $groupId) ->where("user_id", $userId) ->where("media_type", $mediaType) ->withTrashed() ->first(); if ($user_group) { if ($user_group['deleted_at']) { $user_group->restore(); } if ($user_group->group_name == '回收站' || $user_group->group_name == '默认分组') { return; } if ($groupName == "回收站" || $groupName == "默认分组") { return; } //查询是否有同名分组 $same_name_group = MediaLibraryGroup::where("user_id", $userId) ->where("media_type", $mediaType) ->where("group_name", $groupName) ->withTrashed() ->first(); if ($same_name_group) { if ($same_name_group['deleted_at']) { $user_group->restore(); return; } else { return; } } $user_group->group_name = $groupName; $user_group->save(); } } /** * 删除分组(分组下的图片移到回收站) * @param int $userId * @param int $mediaType * @param int $groupId * @throws Exception */ public function deleteGroup(int $userId, int $mediaType, int $groupId) { $user_group = MediaLibraryGroup::where("id", $groupId) ->where("user_id", $userId) ->where("media_type", $mediaType) ->first(); if ($user_group->group_name == '回收站' || $user_group->group_name == '默认分组') { return; } $recycle_group_id = MediaLibraryGroup::where("user_id", $userId) ->where("media_type", $mediaType) ->where("group_name", "回收站") ->value("id"); if ($user_group && $recycle_group_id) { try { DB::beginTransaction(); MediaLibraryMedia::where("user_id", $userId)->where("id", $groupId) ->update(["group_id" => $recycle_group_id]); $user_group->delete(); DB::commit(); } catch (Exception $e) { DB::rollback(); throw new Exception($e); } } } /** * 查询分组列表 * @param int $user_id * @param int $mediaType * @param int|null $group_id * @param null $keyword * @return array */ public function queryGroupList(int $user_id, int $mediaType, int $group_id = null, $keyword = null) { $group_list['data'] = MediaLibraryGroup::withCount("media") ->where("user_id", $user_id) ->when($mediaType, function ($query) use ($mediaType) { $query->where("media_type", $mediaType); }) ->when($group_id, function ($query) use ($group_id) { $query->where("group_id", $group_id); }) ->when($keyword, function ($query) use ($keyword) { $query->where('group_name', 'like', "%$keyword%"); }) ->get()->toArray(); $group_list['total_file'] = MediaLibraryMedia::where("user_id", $user_id) ->where("media_type", $mediaType) ->count(); return $group_list; } /** * 移动到分组(包括移到回收站) * @param $user_id * @param $mediaType * @param $fileList * @param $old_group_id * @param $new_group_id * @throws Exception */ public function moveToGroup($user_id, $mediaType, $old_group_id, $new_group_id,$fileList = null) { if ($old_group_id === $new_group_id) { throw new Exception("新分类和旧分类是同一分类"); } //查询旧分组是否存在 $old_group = null; if ($old_group_id) { $old_group = MediaLibraryGroup::where('id', $old_group_id) ->where('user_id', $user_id) ->where("media_type", $mediaType) ->first(); } $new_group = MediaLibraryGroup::where('id', $new_group_id) ->where('user_id', $user_id) ->where("media_type", $mediaType) ->first(); if ($new_group) { if ($old_group) { if ($old_group->media_type !== $new_group->media_type) { throw new Exception("媒体类型不相同"); } } MediaLibraryMedia::where('user_id', $user_id) ->where("media_type", $mediaType) ->when($old_group_id,function ($query) use($old_group_id){ $query->where('group_id',$old_group_id); }) ->when($fileList,function ($query) use ($fileList){ $query->whereIn('id',$fileList); }) ->update([ "group_id" => $new_group_id, ]); } } /** * 查询分组文件(时间 关键字 名称) * @param $user_id * @param $mediaType * @param $group_id * @param $page * @param null $start_time * @param null $end_time * @param null $keyword * @param null $order_by_created_time * @return mixed */ public function queryFile($user_id, $mediaType, $group_id, $page, $start_time = null, $end_time = null, $keyword = null, $order_by_created_time = null) { $perPage = $this->getPerPage($mediaType); $model = MediaLibraryMedia::where('user_id', $user_id) ->when($group_id, function ($query) use ($group_id) { $query->where("group_id", $group_id); }) ->when($mediaType, function ($query) use ($mediaType) { $query->where("media_type", $mediaType); }) ->when($start_time, function ($query) use ($start_time) { $query->where("created_at", ">=", $start_time); }) ->when($end_time, function ($query) use ($end_time) { $query->where("created_at", "<=", $end_time); }) ->when($keyword, function ($query) use ($keyword) { $query->where("media_name", "like", "%$keyword%"); }) ->when($order_by_created_time, function ($query) use ($order_by_created_time) { $query->orderBy('created_at', $order_by_created_time); }) ->orderBy('id', 'desc'); if($page){ $data = $model->paginate($perPage, ['*'], 'page', $page); }else{ $data['data'] = $model->get(); } return $data; } /** * 获取不同分类的分页数据 * @param $mediaType * @return int */ private function getPerPage($mediaType) { switch ($mediaType) { case 1: case 3: $perPage = 8; break; case 2: $perPage = 16; break; default: $perPage = 10; } return $perPage; } /** * 删除文件(不经回收站或回收站删除,软删除) * @param $user_id * @param $mediaType * @param $file_id_list */ public function deleteFile($user_id, $mediaType, $file_id_list) { MediaLibraryMedia::whereIn('id', $file_id_list) ->where('user_id', $user_id) ->where("media_type", $mediaType) ->delete(); } /** * 通过阿里云ID获取播放URL并写入媒体库 * @param $user_id * @param $video_id * @param $group_id * @param $media_name * @return array * @throws Exception */ public function merchantGetVideoUrl($user_id, $video_id, $group_id, $media_name) { $result = \AliyunService::getPlayInfo($video_id); $play_url = $result['PlayInfoList']['PlayInfo'][0]['PlayURL']; $cover_url = $result['VideoBase']['CoverURL'] ?? ''; //调用媒体库方法写数据库表 $media_library['user_id'] = $user_id; $media_library['group_id'] = $group_id; $media_library['media_name'] = $media_name; $media_library['video_id'] = $video_id; $media_library['current_url'] = $play_url; $media_library['media_type'] = $result['VideoBase']['MediaType'] == "video" ? 3 : 2; $media_library['video_data'] = json_encode($result['PlayInfoList']['PlayInfo'][0]); $this->updateMediaLibrary($media_library); return array("play_url" => $play_url, 'cover_url' => $cover_url); } /** * 写表,上传文件时被调用 * @param $data * @throws Exception */ public function updateMediaLibrary($data) { //查询旧分组是否存在 $group = MediaLibraryGroup::where('id', $data['group_id']) ->where('user_id', $data['user_id']) ->where("media_type", $data['media_type']) ->first(); if (!$group) { throw new Exception("媒体分组不存在或已删除"); } MediaLibraryMedia::create($data); } /** * 保存上传的文件 * @param $user_id * @param $video_id * @param $group_id * @param $media_name * @param $play_url * @param $media_type * @throws Exception */ public function saveMediaInfo($user_id, $video_id, $group_id, $media_name, $play_url, $media_type) { //查询旧分组是否存在 $group = MediaLibraryGroup::where('id', $group_id) ->where('user_id', $user_id) ->where("media_type", $media_type) ->first(); if (!$group) { throw new Exception("媒体分组不存在或已删除"); } $media_library['user_id'] = $user_id; $media_library['group_id'] = $group_id; $media_library['media_name'] = $media_name; $media_library['video_id'] = $video_id; $media_library['current_url'] = $play_url; $media_library['media_type'] = $media_type; MediaLibraryMedia::create($media_library); //提交视频转码作业 if($media_type == 3){ try { $result = \AliyunService::SubmitTranscodeJobs($video_id); }catch ( Exception $e){ return; } } } /** * 移动到新分组 * @param $user_id * @param $file_id * @param $group_name * @param $media_type * @throws Exception */ public function moveToNewGroup($user_id, $file_id, $group_name, $media_type) { //检查文件是否存在 $file = MediaLibraryMedia::where("user_id", $user_id) ->where('id', $file_id) ->first(); //检查文件类型是否与分组相符 if ($file) { if ($file['media_type'] != $media_type) { throw new Exception('分组类型与文件类型不符'); } //检查分组名称是否已存在 $group = MediaLibraryGroup::where('user_id', $user_id) ->where('group_name', $group_name) ->where("media_type", $media_type) ->first(); if ($group) { throw new Exception('分组已经存在'); } try { DB::beginTransaction(); $mediaLibraryGroup = MediaLibraryGroup::create([ "user_id" => $user_id, "media_type" => $media_type, "group_name" => $group_name, ]); $file->update(["group_id" => $mediaLibraryGroup->id]); DB::commit(); } catch (Exception $e) { DB::rollBack(); throw new Exception('操作数据库失败'); } } else { throw new Exception('文件不存在'); } } /** * 添加到新分组 * @param $user_id * @param $file_id * @param $group_name * @param $media_type * @throws Exception */ public function addToNewGroup($user_id, $file_id, $group_name, $media_type) { //检查文件是否存在 $file = MediaLibraryMedia::where('id', $file_id) ->where("user_id", $user_id) ->first(); //检查文件类型是否与分组相符 if ($file) { if ($file['media_type'] != $media_type) { throw new Exception('分组类型与文件类型不符'); } //检查分组名称是否已存在 $group = MediaLibraryGroup::where('user_id', $user_id) ->where('group_name', $group_name) ->where("media_type", $media_type) ->first(); if ($group) { throw new Exception('分组已经存在'); } try { DB::beginTransaction(); $mediaLibraryGroup = MediaLibraryGroup::create([ "user_id" => $user_id, "media_type" => $media_type, "group_name" => $group_name, ]); MediaLibraryMedia::create([ "user_id" => $user_id, "media_type" => $media_type, 'group_id' => $mediaLibraryGroup->id, 'current_url' => $file['current_url'], 'video_id' => $file['video_id'], 'video_data' => $file['video_data'], 'media_name' => $file['media_name'] ]); DB::commit(); } catch (Exception $e) { DB::rollBack(); throw new Exception('操作数据库失败'); } } else { throw new Exception('文件不存在'); } } /** * 修改媒体文件备注信息 * @param $user_id * @param $file_id * @param $media_name * @throws Exception */ public function modifyMediaFileInfo($user_id, $file_id, $media_name) { $media = MediaLibraryMedia::where('user_id', $user_id) ->where("id", (int)$file_id) ->first(); if ($media) { $media->media_name = $media_name; $media->save(); } else { throw new Exception('媒体文件不存在'); } } }