ufutx.dma/app/Http/Controllers/App/VideoController.php
2026-03-04 14:42:40 +08:00

262 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use App\Jobs\AddErrorLog;
use App\Models\Collaborator;
use App\Models\ServiceUser;
use App\Models\User;
use App\Models\Video;
use App\Models\VideoCollect;
use App\Models\VideoSearch;
use App\Models\VideoVisitor;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class VideoController extends Controller
{
use ResponseJson;
public function searchVideo(Request $request){
try {
$user = auth()->user();
$keyword = $request->get('keyword');
$id = $request->get('video_id');
// if(empty($keyword)){
// return $this->failure('请输入关键词');
// }
$list = Video::query()->join('users','video.user_id','=','users.id')
->when(!empty($keyword),function ($query) use($keyword){
$query->where('users.name','like','%'.$keyword.'%')
->orWhere('video.video_title','like','%'.$keyword.'%')
->orWhere('video.desc','like','%'.$keyword.'%')
->orWhere('video.country','like','%'.$keyword.'%');
})
->when(!empty($id),function ($query) use ($id){
$query->where('video.id',$id);
})
->where('video.status',Video::STATUS_OPEN)
->select('users.avatar','users.sex','users.name','users.mobile','users.birthday','video.*')
->limit(10)
->get();
if(!empty($keyword)){
VideoSearch::create(['user_id'=>$user->id,'keyword'=>$keyword]);
}
foreach ($list as $item){
$item->is_collect = VideoCollect::isCollect($item->id,$user->id);
$service_user = Collaborator::where('user_id',$item->user_id)->first();
if(!empty($service_user)){
$item->name = $service_user->name;
$item->avatar = $service_user->avatar;
}
}
$data = Video::dealAcCid($list);
return $this->success('ok',$data);
}catch (\Exception $e){
AddErrorLog::dispatch('searchVideo file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("搜索异常");
}
}
public function getSearchLog(){
try {
$user = auth()->user();
$search_list = VideoSearch::where('user_id',$user->id)->where('is_del',VideoSearch::DEL_STATUS_NO)
->select('keyword', DB::raw('MAX(id) AS id'))
->groupBy('keyword')
->orderByDesc('id')
->limit(50)->get();
$hot_keyword = VideoSearch::select(DB::raw('count(*) as count'),DB::raw('keyword'))
->groupBy('keyword')->orderByDesc('count')
->limit(20)
->get()?->toArray();
if(!empty($hot_keyword)){
$hot_keyword = get_random_elements($hot_keyword, 7);
sort($hot_keyword);
}
return $this->success('ok',compact('search_list','hot_keyword'));
}catch (\Exception $e){
AddErrorLog::dispatch('getSearchInfo file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function delSearchLog(Request $request){
try {
$user = auth()->user();
$id = $request->get('id');
$is_del_all = $request->get('is_del_all');
if($is_del_all){
VideoSearch::where('user_id',$user->id)->update(['is_del'=>VideoSearch::DEL_STATUS_YES]);
}else{
if(empty($id)){
return $this->failure('id不为空');
}
//软删除所有相关关键词记录
$log = VideoSearch::where('id',$id)->first();
VideoSearch::where('keyword',$log->keyword)->update(['is_del'=>VideoSearch::DEL_STATUS_YES]);
}
return $this->success('ok');
}catch (\Exception $e){
AddErrorLog::dispatch('delSearchLog file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("删除失败");
}
}
public function getVideoList(){
try {
$user = auth()->user();
$list = Video::where('status',Video::STATUS_OPEN)->orderByDesc('id')->paginate();
foreach ($list as $item){
$item->user = User::select('name','birthday','avatar')->find($item->user_id);
if(empty($item->user)){
continue;
}
$service_user = Collaborator::where('user_id',$item->user_id)->first();
if(!empty($service_user)){
$item->user->name = $service_user->name;
$item->user->avatar = $service_user->avatar;
}
$item->user->ac_cid =make_wangyiyun_accid($item->user_id);
//查看当前用户是否收藏视频
$item->is_collect = VideoCollect::isCollect($item->id,$user->id);
}
return $this->success('ok',$list);
}catch (\Exception $e){
AddErrorLog::dispatch('getVideoList file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function getVideoDetail($id){
try {
$detail = Video::findOrfail($id);
$detail->user = User::select('name','birthday','avatar')->find($detail->user_id);
$service_user = Collaborator::where('user_id',$detail->user_id)->first();
if(!empty($service_user)){
$detail->user->name = $service_user->name;
$detail->user->avatar = $service_user->avatar;
}
$detail->ai_img = "https://img.99ppt.com/pic/a81d5ce4-da64-41a8-bdb2-ad19f5a4aad5.png";
$detail->status_img = "https://tva1.sinaimg.cn/large/cbc1qrn7xh648wnlqp4x8q5wchk6dt2yky6yyuv6xw7.jpg";
return $this->success('ok',$detail);
}catch (\Exception $e){
AddErrorLog::dispatch('getVideoDetail file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function collectVideo(Request $request){
try {
$user = auth()->user();
$video_id = $request->input('video_id');
$video_info = Video::find($video_id);
if(empty($video_info)){
return $this->failure('视频错误');
}
$is_cancel = $request->input('is_cancel');
if($is_cancel){
VideoCollect::where('video_id',$video_id)->where('user_id',$user->id)->delete();
}else{
VideoCollect::create(['user_id'=>$user->id,'video_id'=>$video_id,'video_user_id'=>$video_info->user_id]);
}
return $this->success('ok');
}catch (\Exception $e){
AddErrorLog::dispatch('collectVideo file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("收藏失败");
}
}
public function getCollect(Request $request){
try {
$user = auth()->user();
$is_collect_my = $request->input('is_collect_my');
$query = VideoCollect::query();
if($is_collect_my){
// $list = $query->join('users','users.id','=','video_collect.user_id')
// ->select('users.name','users.avatar','users.birthday','video_collect.*')
// ->where('video_collect.video_user_id',$user->id)
// ->paginate();
$list = $query->with('video','user','videoUser')->where('video_user_id',$user->id)
->orderByDesc('id')
->paginate();
foreach ($list as $item){
$item->collect_video = Video::where('user_id',$item->user_id)->orderByDesc('id')->first();
}
}else{
// $list = $query->join('video','video.id','=','video_collect.video_id')
// ->select('video.*')
// ->where('video_collect.user_id',$user->id)
// ->orderByDesc('id')
// ->paginate();
$list = $query->with('video','user','videoUser')->where('user_id',$user->id)
->orderByDesc('id')
->paginate();
}
$list = Video::dealAcCid($list);
return $this->success('ok',$list);
}catch (\Exception $e){
AddErrorLog::dispatch('collectVideo file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("获取失败");
}
}
public function visitor(Request $request){
try {
$user = auth()->user();
$video_id = $request->input('video_id');
if(empty($video_id)){
return $this->failure('视频错误');
}
$video_info = Video::find($video_id);
if(empty($video_info)){
return $this->failure('视频错误');
}
if($video_info->user_id == $user->id){
return $this->success('ok');
}
//访问过只更新访问时间,不再添加记录
$visitor = VideoVisitor::where('user_id',$user->id)->where('video_id',$video_id)->first();
if($visitor){
$visitor->touch();
}else{
VideoVisitor::create(['user_id'=>$user->id,'video_id'=>$video_id,'video_user_id'=>$video_info->user_id]);
}
return $this->success('ok');
}catch (\Exception $e){
AddErrorLog::dispatch('visitor file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("视频错误");
}
}
public function getMyVisitor(){
try {
$user = auth()->user();
$list = VideoVisitor::join('users','users.id','=','video_visitor.user_id')
->select('users.name','users.avatar','users.birthday','video_visitor.*')
->where('video_user_id',$user->id)
->paginate();
foreach ($list as $item){
$item->video = Video::where('user_id',$item->user_id)->orderByDesc('id')->first();
}
$list = Video::dealAcCid($list);
return $this->success('ok',$list);
}catch (\Exception $e){
AddErrorLog::dispatch('getMyVisitor file:'.$e->getFile().' line:'.$e->getLine().' message:'.$e->getMessage())->onQueue('health');
return $this->failure("视频错误");
}
}
}