短视频接口部分

208 阅读7分钟

短视频接口初步规划

  1. 发布视频
  2. 删除视频
  3. 获取热门搜索
  4. 搜索视频
  5. 清除搜索历史
  6. 获取搜索历史
  7. 短视频详情
  8. 对视频进行评论
  9. 评论列表
  10. 删除评论
  11. 回复评论
  12. 查看评论回复
  13. 删除评论回复
  14. 短视频音乐列表
  15. 关注用户和取消用户
  16. 用户主页
  17. 作者关注
  18. 作者粉丝
  19. 七牛云上传
  20. 点赞和取消点赞
  21. 获取用户点赞视频列表
  22. 收藏和取消收藏
  23. 获取用户收藏视频列表
  24. 同城的视频列表、关注的视频列表、 推荐的视频列表
  25. 系统设置的关键词
  26. 搜索用户
  27. 获取系统配置、前端也可以直接上传
  28. 版本号
  29. 检测更新
  30. 获取分类列表
  31. 获取分类视频列表
  32. 获取其他用户信息
  33. 获取用户视频列表
  34. 获取用户关注列表
  35. 获取用户粉丝列表

其他

  1. 更新用户资料
  2. 广告接口
  3. 点赞和取消点赞评论
  4. 启动图
  5. 协议
  6. 发送验证码
  7. 用户登录
  8. 用户注册
  9. 获取用户信息
  10. 验证用户Token信息
  11. 用户退出登录
  12. 客服聊天消息等
<?php
namespace app\api\controller;

 
 
use jplt\Pinyin;
use  jplt\Dates;
use  think\Config;
 
use think\facade\Db;

use app\common\lib\Show;
use app\common\model\mysql\LogicUser;
// 引入七牛鉴权类
use Qiniu\Auth;
// 引入七牛上传类
use Qiniu\Storage\UploadManager;

class Video extends BaseController
{
 

//    protected $noNeedLogin = [//        'getDefaultVideoList',//        'index',//        'getCommentList',//        'heartComment',//        'searchVideo',//        'searchAuthor',//        'goods_details',//        'collage',//        'search',//        'On_shelf',//        'end_shelf',//        'goods_list'//////    ];
 
<<<<<<< HEAD
 
=======
>>>>>>> dev-wang
    /**
     * 上传视频
     *
     * @ApiTitle    (发布视频)
     * @ApiSummary  (发布视频)
     * @ApiAuthor  (接口作者)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/video.Video/addVideo)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="file", type="string", required=true, description="视频路径")
     * @ApiParams   (name="title", type="string", required=true, description="标题")
     * @ApiParams   (name="content", type="string", required=true, description="内容")
     * @ApiParams   (name="longitude", type="string", required=true, description="经度")
     * @ApiParams   (name="latitude", type="string", required=true, description="纬度")
     * @ApiParams   (name="city", type="string", required=true, description="城市")
     *
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
     */
    public function qiniu() {
        
      	require_once APP_PATH . '../vendor/qiniu/php-sdk/autoload.php';
        // 七牛云配置信息
        $accessKey = Config::get("qiniu.accessKey");
        $secretKey = Config::get("qiniu.secretKey");
        $bucketName = Config::get("qiniu.bucket");
        $bucketurl = Config::get("qiniu.bucketurl");
        //默认file
        $fileName = Config::get("qiniu.fileName");
 
        $file = $this->request->file($fileName);
        if (empty($file)) {
            $this->error('请选择要上传的文件');
        }

        // 要上传图片的本地路径
        $filePath = $file->getRealPath();
        $ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
        //后缀
        // 上传到七牛后保存的文件名
        $key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;


        // 构建鉴权对象
        $auth = new Auth($accessKey, $secretKey);
        $uptoken = $token = $auth->uploadToken($bucketName);

        $uploadMgr = new UploadManager();

        list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);
        if ($err !== null) {
            $this->error('上传失败');
        } else {
            $key = 'http://'.$bucketurl.'/'.$ret['key'];
            $data['url'] = $key;
            $this->success('上传成功',$data);
        }


    }
    /**
     * 发布视频
     *
     * @ApiTitle    (发布视频)
     * @ApiSummary  (发布视频)
     * @ApiAuthor  (接口作者)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/video.Video/addVideo)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="file", type="string", required=true, description="视频路径")
     * @ApiParams   (name="title", type="string", required=true, description="标题")
     * @ApiParams   (name="content", type="string", required=true, description="内容")
     * @ApiParams   (name="longitude", type="string", required=true, description="经度")
     * @ApiParams   (name="latitude", type="string", required=true, description="纬度")
     * @ApiParams   (name="city", type="string", required=true, description="城市")
     *
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
     */	 

     
      public function  videoMusics() {
          
        $page = input('page');
        $title = input('title');
        $limit = input('limit');
       
        // $video_musics["count"]= Db::table("jm_video_musics")
        // ->where("title|author","like","%".$title."%")
        // ->where("status",1)  
        // ->order("sort desc")
        // ->count(); 
       $video_musics = Db::table("jm_video_musics")
        ->where("title|author","like","%".$title."%")
       ->where("status",1)    
       ->order("sort desc")
       ->page($page,$limit)
       ->select();
       
             $url="http://dspzbdshop.jp893.com";
        foreach ($video_musics as $key => &$value) {
        
            $value["musics_file"]=$url.$value["musics_file"];
            $value["cover_image"]=$url.$value["cover_image"];
            //  $video_musics[$key]["musics_file"]= $value["musics_file"];
            //  $video_musics[$key]["cover_image"]= $value["cover_image"];
             // code...
        }
              return Show::successData($video_musics); 
      
    }
    /*addVideo 发布视频*/
    public function addVideo() {
        
        
        $file = input('file');
        $title = input('title');
        $content = input('content');
        $longitude = input('longitude');
        $latitude = input('latitude');
        $city = input('city');
        $privacy = input('privacy');
        $cover = input('cover');
             $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
        // $pa = new PhpAnalysis('utf-8','utf-8',true);
        // $pa->LoadDict(); 
        // $pa->SetSource($content);  
        // $tags = $pa->GetFinallyKeywords(); 
        $data = [
            'file' => $file,
            'title' => $title,
            'content' => $content,
            'user_id' => $user["uid"],
            'location' => '',
            'longitude' => $longitude,
            'latitude' => $latitude,
            // 'keywords' => $tags,
            'keywords' => "",
            'privacy' => $privacy,
            'cover' => $cover,
            'createtime' => time(),
            'city' => $city 
        ];
        $res = Db::table('jm_video')->insert($data);
        if($res){
            return Show::successData(); 
        } else {
            return json(["msg"=>"失败","code"=>0]);
        }
    }
    /**
     * 视频列表
     *
     * @ApiTitle    (视频列表)
     * @ApiSummary  (视频列表)
     * @ApiAuthor  (接口作者)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/video.Video/addVideo)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="file", type="string", required=true, description="视频路径")
     * @ApiParams   (name="title", type="string", required=true, description="标题")
     * @ApiParams   (name="content", type="string", required=true, description="内容")
     * @ApiParams   (name="longitude", type="string", required=true, description="经度")
     * @ApiParams   (name="latitude", type="string", required=true, description="纬度")
     * @ApiParams   (name="city", type="string", required=true, description="城市")
     *
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
     */
    public function VideoList() {

        $type = input('type');
        $page = input('page');
        $limit = input('limit'); 
     
       $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失1败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败2","code"=>0]);
            }
     
        switch ($type) {
            case "1":
                //推荐 heart 点赞量  star 收藏量 views 浏览量  后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

                $list = Db::table("jm_video")
                ->alias('video')
                ->join('logic_user user','user.id = video.user_id','left')
                ->field('video.*,user.nickname,user.head_portrait')
                ->order('star desc,heart desc,views desc')
                ->where('is_recommended','=',1)//修改
                ->where('privacy','in','1')//修改1
                ->page($page,$limit)
                ->select();

                foreach ($list as $key => &$value) {
                      //直播信息
                // $list["wch_live"] =  Db::name('wch_live')
                // ->where("user_id",$value["user_id"]) 
                // ->where("status",'1') 
                // ->find();
                    if(empty($value["nickname"])){
                        unset($list[$key]);
                    }else{
                        
                        if (!empty($user)) {
                            //   是否点赞
                            $value["is_heart"] = (Db::table('jm_video_heart')
                            ->where("video_id",$value["id"])
                            ->where("user_id",$user['id'])
                            ->count()>0)?1:0;
                            //是否收藏
                            $value["is_star"] = (Db::table('jm_video_star')
                            ->where("video_id",$value["id"])
                            ->where("user_id",$user['id'])
                            ->count()>0)?1:0;
                            //是否关注
                            // $value["is_user_follow"] = (Db::table('jm_user_follow')
                            // ->where("follower_id",$value["user_id"])
                            // ->where("user_id",$user['id'])
                            // ->count()>0)?1:0;
                        } else {
    
                            //   是否点赞
                            $value["is_heart"] = 0;
                            //是否收藏
                            $value["is_star"] = 0;
                            //是否关注
                            // $value["is_user_follow"] = 0;
    
                        }
                    }
                }


                break;
            case "2":
                //视频表左关联关注表\判断是否是我关注的人 时间来
                // var_dump($user);die;
               
                if (empty($user)) {
                    $this->error('您还没有登录哦,请重试。');
                }
                $list = Db::table("jm_video")
                ->alias('video')
                ->join('logic_user user','user.id = video.user_id','left')
                ->join('logic_user_follow user_follow','user_follow.follower_id = video.user_id','left')
                ->field('video.*,user.nickname,user.head_portrait')
                ->order('createtime desc,star desc,heart desc,views desc')
                ->where("user_follow.user_id",$user['id'])
                //->where('is_recommended','=',1)//修改
                ->where('privacy','in','1')//修改
                ->page($page,$limit)
                ->select();
                // dump($list);die;
        
                foreach ($list as $key => $value) {

            $timepoor=time()-$value['createtime'];
             $zz="";
             if($timepoor>365*24*60*60&&empty($zz)){
                $d=365*24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."年前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
             if($timepoor>30*24*60*60&&empty($zz)){
                $d=30*24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."月前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
           
          if($timepoor>24*60*60&&empty($zz)){
                $d=24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."天前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
             
             if($timepoor>60*60&&empty($zz)){
                $h=60*60;
                  if($timepoor/$h>0){
                     $zz.=intval($timepoor/$h)."小时前";
                    $timepoor= $timepoor-(intval($timepoor/$h)*$h );
                 }
             }
             if($timepoor>60&&empty($zz)){
                  $iz=60;
                  if($timepoor/$iz>0){
                     $zz.=intval($timepoor/$iz)."分钟前";
                    $timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
                 }
             }
             if($timepoor>1&&empty($zz)){
                  $iz=1;
                  if($timepoor/$iz>0){
                     $zz.=intval($timepoor/$iz)."秒前";
                    $timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
                 }
             }
             
                 $list[$key]["timepoor"]=$zz;

                    //   是否点赞
                    $list[$key]["is_heart"] = (Db::table('jm_video_heart')
                    ->where("video_id",$value["id"])
                    ->where("user_id",$user['id'])
                    ->count()>0)?1:0;
                    //是否收藏
                    $list[$key]["is_star"] = (Db::table('jm_video_star')
                    ->where("video_id",$value["id"])
                    ->where("user_id",$user['id'])
                    ->count()>0)?1:0;
                    // $Dates = new Dates();
                    // $list[$key]["createtime_text"] = $Dates->timeDiff($value['createtime']);


                      //直播信息
                // $list["wch_live"] =  Db::name('wch_live')
                // ->where("user_id",$value["user_id"]) 
                // ->where("status",'1') 
                // ->find();

                }

                break;
            case "3":
                //判断同城 按距离
                // longitude=精度,latitude=纬度

                $longitude = input('longitude');
                $latitude = input('latitude');
                
                $list = Db::table("jm_video")
                ->alias('video')
                ->join('logic_user user','user.id = video.user_id','left')
                ->field('video.*,user.nickname,user.head_portrait,ROUND(
                                6378.138 * 2 * ASIN(
                                    SQRT(
                                        POW(
                                            SIN(
                                                (
                                                    '.$latitude.' * PI() / 180 - video.latitude* PI() / 180
                                                ) / 2
                                            ),
                                            2
                                        ) + COS('.$latitude.' * PI() / 180) * COS( video.latitude * PI() / 180) * POW(
                                            SIN(
                                                (
                                                    '.$longitude.' * PI() / 180 -   video.longitude * PI() / 180
                                                ) / 2
                                            ),
                                            2
                                        )
                                    )
                                ) * 1000
                            ) AS juli'
                )
                
                //->where('is_recommended','=',1)//修改
                ->where('privacy','in','1')//修改
                ->order('juli asc')
                ->page($page,$limit)
                ->select();

                foreach ($list as $key => $value) {
                    if (!empty($user)) {
                        //   是否点赞
                        $list[$key]["is_heart"] = (Db::table('jm_video_heart')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count()>0)?1:0;
                        //是否收藏
                        $list[$key]["is_star"] = (Db::table('jm_video_star')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count()>0)?1:0;
                        //是否关注
                        // $list[$key]["is_user_follow"] = (Db::table('jm_user_follow')
                        // ->where("follower_id",$value["user_id"])
                        // ->where("user_id",$user['id'])
                        // ->count()>0)?1:0;
                    } else {
                        $list[$key]["is_heart"] = 0;
                        $list[$key]["is_star"] = 0;
                        // $list[$key]["is_user_follow"] = 0;
                    }

                      //直播信息
                // $list["wch_live"] =  Db::name('wch_live')
                // ->where("user_id",$value["user_id"]) 
                // ->where("status",'1') 
                // ->find();
                }
                break;
            default:
                $this->error('操作失败,请重试。');
                break;
        }


// var_dump($list);die;

        $this->success('操作成功',$list);




    }
    /**
     * 搜索
     *
     * @ApiTitle    (搜索)
     * @ApiSummary  (发布视频)
     * @ApiAuthor  (接口作者)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/video.Video/addVideo)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="file", type="string", required=true, description="视频路径")
     * @ApiParams   (name="title", type="string", required=true, description="标题")
     * @ApiParams   (name="content", type="string", required=true, description="内容")
     * @ApiParams   (name="longitude", type="string", required=true, description="经度")
     * @ApiParams   (name="latitude", type="string", required=true, description="纬度")
     * @ApiParams   (name="city", type="string", required=true, description="城市")
     *
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
     */
    public function SearchVideoList() {

        $keywords = input('keywords');
 
            
       $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
      
                $Keywords  = "%".$keywords."%";
        
      
            
        // 搜索视频列表
        //推荐 heart 点赞量  star 收藏量 views 浏览量  后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
        // where('name','like',['%think','php%'],'OR');
        $list = Db::table("jm_video")
        ->alias('video')
        ->join('logic_user user','user.id = video.user_id','left')
        ->field('video.*,user.nickname,user.head_portrait')
        ->order('star desc,heart desc,views desc')
        ->where('title','like',$Keywords)
 
        ->select();
 
        foreach ($list as $key => &$value) {
            if (!empty($user)) {
                //   是否点赞
                $value["is_heart"] = Db::table('jm_video_heart')
                ->where("video_id",$value["id"])
                ->where("user_id",$user['id'])
                ->count();
                //是否收藏
               $value["is_star"] = Db::table('jm_video_star')
                ->where("video_id",$value["id"])
                ->where("user_id",$user['id'])
                ->count();
                //是否关注
                // $value["is_user_follow"] = Db::table('jm_user_follow')
                // ->where("follower_id",$value["user_id"])
                // ->where("user_id",$user['id'])
                // ->count();
            } else {

                //   是否点赞
                $value["is_heart"] = 0;
                //是否收藏
               $value["is_star"] = 0;
                //是否关注
            //   $value["is_user_follow"] = 0;

            }
        }
        return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
        // $this->success('操作成功',$list);
    }
    
       public function  VideoDetails() {

        $id = input('id'); 
        $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
      
 
        
      
        // 搜索视频列表 
        $list["video_details"] = Db::table("jm_video")
        ->alias('video')
        ->join('logic_user user','user.id = video.user_id','left')
        ->field('video.*,user.nickname,user.head_portrait')
        ->order('star desc,heart desc,views desc')
        ->where('video.id', $id)  
        ->find();
// var_dump($list);die;
 
            if (!empty($user)) {
                //   是否点赞
               $list["is_heart"] = Db::table('jm_video_heart')
                ->where("video_id",$id)
                ->where("user_id",$user['id'])
                ->count(); 
                //是否收藏
                $list["is_star"] = Db::table('jm_video_star')
                ->where("video_id",$id)
                ->where("user_id",$user['id'])
                ->count();
                //是否关注
            //   $list["is_user_follow"] = Db::table('jm_user_follow')
            //     ->where("follower_id",$list["video_details"]["user_id"])
            //     ->where("user_id",$user['id'])
            //     ->count();
            } else {

                //   是否点赞
                $list["is_heart"] = 0;
                //是否收藏
                $list["is_star"] = 0;
                //是否关注
                // $list["is_user_follow"] = 0;

            }
       
                //点赞数量
                $list["heart"] = Db::table('jm_video_heart')
                ->where("video_id",$id) 
                ->count();
                //收藏数量
                $list["star"] =  Db::table('jm_video_star')
                ->where("video_id",$id) 
                ->count();
                //评论数量
                $list["comment"] =  Db::name('jm_video_comment')
                ->where("video_id",$id) 
                ->count();
                //直播信息
                // $list["wch_live"] =  Db::name('wch_live')
                // ->where("user_id",$list["video_details"]["user_id"]) 
                // ->where("status",'1') 
                // ->find();

        return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
    }
       

    /**
     * 视频点赞
     *
     * @ApiTitle    (视频点赞)
     * @ApiSummary  (视频点赞)
     * @ApiAuthor  (视频点赞)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/video.Video/heartVideo)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="string", required=true, description="视频路径")
     *
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
    heartVideo这个接口给你返回了数量
     */
    public function heartVideo() {
        $video_id = input('id');
        $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
      
        $info = Db::table('jm_video_heart')->where('video_id', $video_id)->where('user_id',  $user['id'])->find();
         $heart =Db::table('jm_video_heart')->where('video_id', $video_id) ->count();
        if (empty($info)) {
            $heart=$heart+1;
             Db::table("jm_video")->where('id', $video_id)   ->inc('heart')->update(); 
    //->setInc('heart');
            $res = Db::table('jm_video_heart')->insert([
                'video_id' => $video_id, 'user_id' => $user['id']
            ]);
        } else {
            
            $heart=$heart-1;
             Db::table("jm_video")->where('id', $video_id)    ->dec('heart')->update(); 
             //->setDec('heart');
            $res = Db::table('jm_video_heart')->where('id', $info['id'])->delete();
        }
        if ($res) {
           
                return json(["msg"=>"操作成功","code"=>1,"data"=>$heart]);
            // $this->success('操作成功',$heart);
        } else {
                return json(["msg"=>"失败","code"=>0]);
        }
    }
    /**
     * 我的视频
     * */
    public function myVideo() { 
        $page = input('page');
        $limit = input('limit');      
        $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
      
        $user_id = $user['id'];
 
                //推荐 heart 点赞量  star 收藏量 views 浏览量  后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

                $list = Db::table("jm_video")
                ->alias('video') 
                ->field('video.*') 
                ->where('video.user_id', $user_id)
                // ->page($page,$limit)
                ->select();

                foreach ($list as $key => &$value) {
                    if (!empty($user)) {
                        //   是否点赞
                        $value["is_heart"] = Db::table('jm_video_heart')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count();
                        //是否收藏
                        $value["is_star"] = Db::table('jm_video_star')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count();
                        //是否关注
                        // $list[$key]["is_user_follow"] = Db::table('jm_user_follow')
                        // ->where("follower_id",$value["user_id"])
                        // ->where("user_id",$user['id'])
                        // ->count();
                    } else {

                        //   是否点赞
                        $value["is_heart"] = 0;
                        //是否收藏
                        $value["is_star"] = 0;
                        //是否关注
                        // $list[$key]["is_user_follow"] = 0;

                    }
                }  
                return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
       
    }
  /**
     * 收藏视频
     * */
    public function mystarVideo() { 
        $page = input('page');
        $limit = input('limit'); 
           $user = LogicUser::where('id', input('uid'))->find();
            if (!$user) {
                return json(["msg"=>"失败","code"=>0]);
            }
            if ($user->anchor !== 1) {
                return json(["msg"=>"失败","code"=>0]);
            }
        $user_id = $user['id'];
 
                //推荐 heart 点赞量  star 收藏量 views 浏览量  后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

                $list = Db::table("jm_video")
                ->alias('video')
                ->join('jm_video_star video_star','video_star.video_id = video.id','left')
                ->field('video.*') 
                ->where('video_star.user_id', $user_id)
                ->page($page,$limit)
                ->select();
// var_dump($list);die;
                foreach ($list  as $key => &$value) {
                    if (!empty($user)) {
                        //   是否点赞
                        $value["is_heart"] = Db::table('jm_video_heart')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count();
                        //是否收藏
                        $value["is_star"] = Db::table('jm_video_star')
                        ->where("video_id",$value["id"])
                        ->where("user_id",$user['id'])
                        ->count();
                        //是否关注
                        // $value["is_user_follow"] = Db::table('jm_user_follow')
                        // ->where("follower_id",$value["user_id"])
                        // ->where("user_id",$user['id'])
                        // ->count();
                    } else {

                        //   是否点赞
                        $value["is_heart"] = 0;
                        //是否收藏
                        $value["is_star"] = 0;
                        //是否关注
                        // $value["is_user_follow"] = 0;

                    }
                }  
                 
                return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
            // $this->success('操作成功',$list);
        
    }
    /**
     * 收藏视频
     * */
    public function starVideo() {
        $video_id = input('id');

        $user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
            
        $user_id = $user['id'];
        $info = Db::table('jm_video_star')->where('video_id', $video_id)->where('user_id', $user_id)->find();
        if (empty($info)) {
            //  ->setInc('star')
            Db::table("jm_video")->where('id', $video_id)->inc('star')->update(); 
            $res = Db::table('jm_video_star')->insert([
                'video_id' => $video_id, 'user_id' => $user_id
            ]);
        } else {
            
            Db::table("jm_video")->where('id', $video_id) ->dec('star')->update();
            $res = Db::table('jm_video_star')->where('id', $info['id'])->delete();
        }
        if ($res) {
            
            return json(["msg"=>"成功","code"=>1 ]);
            // $this->success('操作成功');
        } else {
            return json(["msg"=>"失败","code"=>0]);
        }
    }
    /**
     * 评论列表
     * */
    public function getCommentList() {
        $video_id = input('id');
        $page = input('page');
        $limit = input('limit');
            $user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
           
        $list = Db::table('jm_video_comment')
         ->alias('video_comment')
          ->join('logic_user user','user.id = video_comment.user_id','left')
          ->field('video_comment.*,user.nickname,user.head_portrait')
        ->where('video_id', $video_id)
        ->page($page,$limit)
        ->order('id desc')
        ->select();
        foreach ($list as $key => &$value) {

            $timepoor=time()-$value['createtime'];
             $zz="";
             if($timepoor>365*24*60*60&&empty($zz)){
                $d=365*24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."年前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
             if($timepoor>30*24*60*60&&empty($zz)){
                $d=30*24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."月前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
           
          if($timepoor>24*60*60&&empty($zz)){
                $d=24*60*60;
                 if($timepoor/$d>0){
                     $zz.=intval($timepoor/$d)."天前";
                     $timepoor=$timepoor-(intval($timepoor/$d)*$d );
                 }
             }
             
             if($timepoor>60*60&&empty($zz)){
                $h=60*60;
                  if($timepoor/$h>0){
                     $zz.=intval($timepoor/$h)."小时前";
                    $timepoor= $timepoor-(intval($timepoor/$h)*$h );
                 }
             }
             if($timepoor>60&&empty($zz)){
                  $iz=60;
                  if($timepoor/$iz>0){
                     $zz.=intval($timepoor/$iz)."分钟前";
                    $timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
                 }
             }
             if($timepoor>1&&empty($zz)){
                  $iz=1;
                  if($timepoor/$iz>0){
                     $zz.=intval($timepoor/$iz)."秒前";
                    $timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
                 }
             }
                 //   $res = Db::table("jm_video_comment_reply")
    //             ->alias('video_comment_reply')
    //             ->join('logic_user user','user.id = video_comment_reply.user_id','left')
    //             ->where("video_comment_reply.comment_id",$comment_id)
    //             ->select();
                 $value["timepoor"]=$zz;
                 $value["head_portrait"]=$value["head_portrait"];
                 $value["replycount"]=Db::table("jm_video_comment_reply")   ->where("comment_id",$value['id']) ->count();
 

        }

            return json(["msg"=>"成功","code"=>1,"data"=>$list ]);
        // $this->success('success', $list);
    }

    /**
     * 发布评论
     * */
    public function commentVideo() {
        $video_id = input('id');
        $content = input('content');

        $user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
           
        $user_id = $user['id'];

        $id = $res = Db::table('jm_video_comment')->insertGetId([
            'content' => $content,
            'video_id' => $video_id,
            'user_id' => $user_id,
            'createtime' => time(),
            'heart' => 0,
        ]);
        if ($res) {
            // $this->success('操作成功。' );
            return json(["msg"=>"成功","code"=>1]);
        } else {
            // $this->error('操作失败,请重试。');
            return json(["msg"=>"失败","code"=>0]);
        }
    }

    /**
     * 回复评论
     * */
    public function replyComment() {
        $comment_id = input('comment_id');
        $content = input('content');

        if (empty($comment_id) || empty($content)) {
            $this->error("参数不全");
        }

           $user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
        
        $login_id = $user['id'];

        $login = $user;
        $now = time();
        $data = [
            'comment_id' => $comment_id,
            'content' => $content,
            'user_id' => $login['id'],
            'user_head_portrait' => $login['head_portrait'],
            'user_nickname' => $login['nickname'],
            'createtime' => $now,
        ];

        $res = Db::table("jm_video_comment_reply")->insertGetId($data);
        if (!$res) {
            // $this->error('操作失败,请重新操作。');
            
            return json(["msg"=>"失败","code"=>0]);
        } else {
            
            return json(["msg"=>"操作成功","code"=>1,"data"=>$login]);
            // $this->success('操作成功。', [
            //     'info' => $login
            // ]);
        }
    }
    /**
     * 回复评论
     * */
    public function replyReply() {
        $comment_id = input('comment_id');
        $content = input('content');

        if (empty($comment_id) || empty($content)) {
            $this->error("参数不全");
        }
       $login=$user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
        
        $login_id = $user["id"];
 
        $now = time();
        
        $res = Db::table("jm_video_comment_reply")->where("id",$comment_id)->find();
        $data = [
            'comment_id' => $res["comment_id"],
            'reply_id' => $comment_id,
            'content' => $content,
            'user_id' => $login['id'],
            'user_head_portrait' => $login['head_portrait'],
            'user_nickname' => $login['nickname'],
            'createtime' => $now,
        ];

        $res = Db::table("jm_video_comment_reply")->insertGetId($data);
        if (!$res) {
            
            return json(["msg"=>"失败","code"=>0]);
            // $this->error('操作失败,请重新操作。');
        } else {
            // $this->success('操作成功。', [
            //     'info' => $login
            // ]);
            
            return json(["msg"=>"操作成功","code"=>1,"data"=>$login]);
        }
    }
    /**
     * 查看评论回复
     * */
    public function replylist() {
        $comment_id = input('comment_id');
        // $reply_id = input('reply_id');

        // if (empty($reply_id)) {
        //     $this->error("参数不全");
        // }
        if (empty($comment_id)) {
            $this->error("参数不全");
        }
 $login=$user = LogicUser::where('id', input('uid'))->find();
        if (!$user) {
            return json(["msg"=>"失败","code"=>0]);
        }
        if ($user->anchor !== 1) {
            return json(["msg"=>"失败","code"=>0]);
        }
        $login_id = $user['id'];
 
        $now = time();
        //获取回复列表和用户信息,并跌倒循环树状分支
        $res = Db::table("jm_video_comment_reply")
                ->alias('video_comment_reply')
                ->join('logic_user user','user.id = video_comment_reply.user_id','left')
                ->where("video_comment_reply.comment_id",$comment_id)
                ->select();
        foreach ($res as $key => &$value) {
            if(!empty($value["reply_id"])){
                $value["reply"]=Db::table("jm_video_comment_reply")
                ->alias('video_comment_reply')
                ->join('logic_user user','user.id = video_comment_reply.user_id','left')
                ->where("video_comment_reply.id",$value["reply_id"])
                ->find();
            }
            // code...
        }
        // var_dump($res);die;
        // $res=$this->getTree($res,2,0,0);
        if (!$res) {
            return json(["msg"=>"失败","code"=>0]);
            // $this->error('操作失败,请重新操作。');
        } else {
            
            return json(["msg"=>"操作成功","code"=>1,"data"=>$res]);
            // $this->success('操作成功。', array_values($res));
        }
    }
    
    /**

     * 获取分类函数

     */

    public function getTree($list,$type='1',$pid=0,$level=0){

        $return = [];

        if($type=='1'){

            foreach ($list as $k => $v) {

                if($v['reply_id']==$pid){

                    $return[$k] = $v;

                    // $return[$k]['title'] = str_repeat('',$level).$v['title'];

                    $return[$k]['child'] = $this->getTree($list,'1',$v['id'],$level+1);

                }

            }

        }else{

            foreach ($list as $k => $v) {

                if($v['reply_id']==$pid){

                    $return[$v['id']] = $v;

                    // $return[$v['id']]['title'] = str_repeat('',$level).$v['title'];

                    $return = $return+$this->getTree($list,'2',$v['id'],$level+1);

                }

            }

        }

        return $return;

    }
    /**

     * 我的关注

     */

    // public function user_follow(){
    //       $author_id = input('user_id');
    //     $page = input('page');
    //     $limit = input('limit');

    //     $user = $this->auth->getUser();
    //     $user_id=$user['id'];
        
    //     $list = Db::table('jm_user_follow')
    //             ->alias('user_follow')
    //             ->join('logic_user user','user.id = user_follow.user_id','left')
    //             ->join('logic_user follower','follower.id = user_follow.follower_id','left') 
    //             ->field('user_follow.*,user_follow.follower_id as follower_id,user.id as user_id,user.username as user_username,user.nickname as user_nickname,user.head_portrait as user_head_portrait, follower.username as follower_username,follower.nickname as follower_nickname,follower.head_portrait as follower_head_portrait')
    //             ->where('user_follow.user_id', $author_id)
    //             ->page($page,$limit) 
    //             ->order('id desc')
    //             ->select();
    //             // var_dump($list);die;
    //     if (!empty($list)) {
    //         foreach ($list as $key => &$val) {
    //              $val["user_nickname"]=  empty($val["user_nickname"]) ?$val["user_username"]:$val["user_nickname"];  
    //              $val["follower_nickname"]=  empty($val["follower_nickname"]) ?$val["follower_username"]:$val["follower_nickname"];    
    //             $follow = (Db::table('jm_user_follow')
    //                     ->where('user_id', $val['follower_id'])
    //                     ->where('follower_id', $author_id)
    //                     ->count()) > 0;
    //             $val["follow"]= $follow;
    //         }
    //     }
    //     if (!is_array($list)) {
    //         $this->error('操作失败,请重新操作。');
    //     } else {
    //         $this->success('操作成功。', [ 'info' => $list ]);
    //     }

    // } 
    /**

     * 作者粉丝

     */

    public function follow_user(){
          $author_id = input('user_id');
        $page = input('page');
        $limit = input('limit');

        $user = $this->auth->getUser();
        $user_id=$user['id'];
        // var_dump($user_id);die;
        $list = Db::table('jm_user_follow')
                ->alias('user_follow')
                ->join('logic_user user','user.id = user_follow.user_id','left')
                ->join('logic_user follower','follower.id = user_follow.follower_id','left')
                ->field('user_follow.*,user.id as user_id,user.nickname as user_nickname,user.head_portrait as user_head_portrait,follower.id as follower_id,follower.nickname as follower_nickname,follower.head_portrait as follower_head_portrait')
                ->where('user_follow.follower_id', $author_id)
                ->page($page,$limit) 
                // ->fetchSql(true)
                ->order('id desc')
                ->select();
       
        if (!empty($list)) {
            foreach ($list as $key => $val) {
  
                $follow = (Db::table('jm_user_follow')
                        ->where('user_id', $val['follower_id'])
                        ->where('user_id', $author_id)
                        ->count()) > 0;
                $list[$key]["follow"]= $follow;
            }
        }
        //  var_dump($list);die;
       if (!is_array($list)) {
            $this->error('操作失败,请重新操作。');
        } else {
            $this->success('操作成功。', [ 'info' => $list ]);
        }

    }
    
     /**
     * 关注作者
     * */
    public function followAuthor()
    {
        $author_id = input('id');
         
        $user = $this->auth->getUser();
        $login_id=$user['id'];
         $count = Db::table('jm_user_follow')
            ->where('user_id', $login_id)
            ->where('follower_id', $author_id)
            ->count();

        if ($count > 0) {
            $res = Db::table('jm_user_follow')
                ->where('user_id', $login_id)
                ->where('follower_id', $author_id)
                ->delete();
        } else {
            if ($author_id == $login_id) {
                $this->error('用户无法关注自己');
            }

            $res = Db::table('jm_user_follow')->insert([
                'follower_id' => $author_id,
                'user_id' => $login_id,
            ]);
        }
        if ($res) {
            $this->success('操作成功');
        } else {
            $this->error('用户无法关注自己');
        }
    }
    
    /**
     * 作者首页
     * */
    public  function getAuthorProfile(){ 
        
        $author_id = input('id');
      
        $page = input('page');
        $limit = input('limit');
       $user = $this->auth->getUser();
        $user_id=$user['id'];
    
        // 名称,性别,头像,地址 address,个性签名 bio
        $user=Db::table("jm_user")
            ->where("id",$author_id)
            ->field('id as user_id,gender as user_gender,nickname as user_nickname,address as user_address,bio as user_bio,head_portrait as user_head_portrait')
            ->find(); //直播信息
        // $user["user_live_state"] =  Db::name('wch_live')
        //         ->where("user_id",$author_id) 
        //         ->where("status",'1') 
        //         ->count();
    //   var_dump($user);die;video_heart
//  live_state as user_live_state,
// var_dump(Db::table('jm_user_follow')
//                 ->where('user_id', $user_id)
//                 ->where('follower_id', $author_id)
//                 ->count());die;
         //是否关注,
          $follow = (Db::table('jm_user_follow')
                ->where('user_id', $user_id)
                ->where('follower_id', $author_id)
                ->count()) > 0;
        //是否回关
          $follow_user = (Db::table('jm_user_follow')
                ->where('user_id', $user_id)
                ->where('user_id', $author_id)
                ->count()) > 0;
        //获赞数量、关注数量、粉丝数量、直播数量
        //jm_video_heart,jm_video_star
        
        //点赞
        $video_heart=Db::table('jm_video_heart') 
                ->alias('video_heart')
                ->join('jm_video video','video.id = video_heart.video_id','left')
                ->where('video.user_id', $author_id)
                ->count();
             
        //收藏
        $video_star=Db::table('jm_video_star') 
                ->alias('video_heart')
                ->join('jm_video video','video.id = video_heart.video_id','left')
                ->where('video.user_id', $author_id)
                ->count();
          //粉丝
        $follows =  Db::table('jm_user_follow') 
                ->where('follower_id', $author_id)
                ->count() ;
        //关注
        $user_follow =  Db::table('jm_user_follow') 
                ->where('user_id', $author_id)
                ->count() ;
               
        //作品,  
    $videocount = Db::table("jm_video")
                ->alias('video')
                ->join('logic_user user','user.id = video.user_id','left')
                ->field('video.*,user.nickname,user.head_portrait')
                ->order('star desc,heart desc,views desc')
                ->where("user.id",$author_id)
                ->count();
                //推荐 heart 点赞量  star 收藏量 views 浏览量  后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐) 
                $list = Db::table("jm_video")
                ->alias('video')
                ->join('logic_user user','user.id = video.user_id','left')
                ->field('video.*,user.nickname,user.head_portrait')
                ->order('star desc,heart desc,views desc')
                ->where("user.id",$author_id)
                ->page($page,$limit)
                ->select();

                foreach ($list as $key => $value) {
                    
                    if (!empty($user)) {
                        //   是否点赞
                        $list[$key]["is_heart"] = Db::table('jm_video_heart') ->where("video_id",$value["id"])  ->where('user_id', $user_id) ->count();
                        //是否收藏
                        $list[$key]["is_star"] = Db::table('jm_video_star')
                        ->where("video_id",$value["id"])
                        ->where('user_id', $user_id)
                        ->count();
                        //是否关注
                        $list[$key]["is_user_follow"] = Db::table('jm_user_follow')
                        ->where("follower_id",$value["user_id"])
                        ->where('user_id', $user_id)
                        ->count();
                    }else {

                        //   是否点赞
                        $list[$key]["is_heart"] = 0;
                        //是否收藏
                        $list[$key]["is_star"] = 0;
                        //是否关注
                        $list[$key]["is_user_follow"] = 0;

                    }
                }
        
        //直播状态
        //标签,
 
       
     

        $info = [
            'user' => $user,//用户信息
            'user_follow' => $follow,//是否关注作者
            'follow_user' => $follow_user,//作者是否回关
            'list' => $list, //短视频列表
            'videocount' => $videocount, //短视频列表
            'stat' => [
                'heart' => $video_heart,//点赞量
                'star' => $video_star,//收藏量
                'follows' => $follows,//粉丝量
                'user_follows' => $user_follow,//关注量
            ],
        ];
        return json(["msg"=>'操作成功',"data"=>$info,"code"=>1]);
    }


}