Video.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\model\UserCollect;
  4. use app\common\model\UserSearch;
  5. use app\common\model\UserVideo;
  6. use app\common\model\VideoCate;
  7. use app\common\model\VideoComment;
  8. use app\common\model\VideoCommentLike;
  9. use app\common\model\VideoIntro;
  10. use app\common\model\VideoLabel;
  11. use app\common\model\VideoUrl;
  12. use library\tools\Data;
  13. /**
  14. * @title 视频
  15. * @controller Video
  16. * @group base
  17. */
  18. class Video extends Base
  19. {
  20. protected $need_login = ['userReferVideo','userReferVideoDetail','delUserVideo','videoComment','secondCommend','videoTags','videoTransmit','getMyVideoList'];// 需要登录的
  21. public function initialize()
  22. {
  23. parent::initialize();
  24. parent::setUid();
  25. if(in_array($this->request->action(),$this->need_login))parent::checkLogin();
  26. }
  27. /**
  28. * @title 获取分类
  29. * @desc 获取分类(共两级)
  30. * @author qc
  31. * @url /api/Video/getCateTree
  32. * @method GET
  33. * @header name:Authorization require:1 desc:Token
  34. * @return name:id type:int default:-- desc:分类id
  35. * @return name:logo type:string default:-- desc:图标
  36. * @return name:title type:string default:0 desc:分类名称
  37. * @return name:children type:array default:0 desc:下级分类
  38. */
  39. public function getCateTree()
  40. {
  41. $list = VideoCate::where(['is_deleted'=>0])->field('id,logo,title,pid')->order('sort desc')->select()->toArray();
  42. $list = make_tree($list);
  43. $this->success('ok',['list'=>$list]);
  44. }
  45. /**
  46. * @title 获取视频标签
  47. * @desc 获取视频标签
  48. * @author qc
  49. * @url /api/Video/getVideoLabel
  50. * @method GET
  51. * @header name:Authorization require:1 desc:Token
  52. * @return name:id type:int default:-- desc:id
  53. * @return name:title type:string default:0 desc:标题
  54. */
  55. public function getVideoLabel()
  56. {
  57. $list = VideoLabel::field('id,title')->where(['is_deleted'=>0,'status'=>1])->select()->toArray();
  58. $this->success('',['list'=>$list]);
  59. }
  60. /**
  61. * @title 获取视频列表(平台发布)
  62. * @desc 获取视频列表
  63. * @author qc
  64. * @method GET
  65. * @url /api/Video/getVideoList
  66. * @header name:Authorization require:1 desc:Token
  67. * @param name:type type:int default:0 desc:类型1单个2系列
  68. * @param name:is_tj type:int default:0 desc:是否推荐0否1是
  69. * @param name:is_hot type:int default:0 desc:是否置顶0否1是
  70. * @param name:title type:string default:-- desc:标题
  71. * @param name:first_classify type:int default:0 desc:视频一级分类
  72. * @param name:second_classify type:int default:0 desc:视频二级分类
  73. * @param name:page type:int default:0 desc:页数
  74. * @param name:page_num type:int default:20 desc:每页数
  75. * @param name:sort_type type:int default:1 desc:1默认2时间升序3时间降序
  76. * @return name:title type:string default:-- desc:标题
  77. * @return name:cover type:string default:-- desc:封面
  78. * @return name:video_url type:string default:-- desc:视频地址
  79. * @return name:first_classify type:int default:-- desc:视频一级分类
  80. * @return name:second_classify type:int default:-- desc:视频二级分类
  81. * @return name:is_top type:int default:-- desc:是否置顶(0否,1是)
  82. * @return name:is_vip type:int default:-- desc:是否是vip(0否,1是)
  83. * @return name:is_over type:int default:-- desc:是否完结(0否,1是)
  84. * @return name:label_name type:array default:-- desc:标签
  85. * @return name:read_num type:int default:-- desc:播放量
  86. * @return name:is_collect type:int default:-- desc:是否收藏
  87. * @return name:video_arr type:array default:-- desc:视频地址
  88. * @return name:video_arr.url type:string default:-- desc:视频地址
  89. */
  90. public function getVideoList()
  91. {
  92. $sel_where = [];
  93. $sel_where[] = ['is_deleted','=',0];
  94. $sel_where[] = ['status','=',1];
  95. $title = input('get.title');
  96. $type = input('get.type',0);
  97. $is_hot = input('get.is_hot');
  98. $first_classify = input('get.first_classify');
  99. $second_classify = input('get.second_classify');
  100. $sort_type = input('get.sort_type',1);
  101. $is_tj = input('get.is_tj',0);
  102. if($title && $this->user_id) UserSearch::create(['user_id'=>$this->user_id,'title'=>$title]);
  103. if($title) $sel_where[] = ['title','like','%'.$title.'%'];
  104. if($first_classify) $sel_where[] = ['first_classify','=',$first_classify];
  105. if($second_classify) $sel_where[] = ['second_classify','=',$second_classify];
  106. if($type) $sel_where[] = ['type','=',$type];
  107. if($is_hot) $sel_where[] = ['is_hot','=',$is_hot];
  108. $where_str = 'id > 0';
  109. if($is_tj) {
  110. $search_log = UserSearch::where([['user_id','=',$this->user_id]])->order('id desc')->limit(0,10)->column('title');
  111. $search_arr = [];
  112. foreach ($search_log as $t){
  113. $search_arr[] = " title like '".'%'.$t."%'" .' ';
  114. }
  115. if(!empty($search_arr)) $where_str = implode(' OR ',$search_arr);
  116. }
  117. $order = 'is_top desc,sort desc ,id desc';
  118. if($sort_type == 2)$order = 'id asc';
  119. if($sort_type == 3)$order = 'id desc';
  120. $list = VideoIntro::with(['videoArr'])->where($sel_where)
  121. ->where($where_str)
  122. ->order($order)
  123. ->limit($this->off_set,$this->page)->select()->toArray();
  124. array_walk($list,function (&$v,$k){
  125. $v['is_collect'] = UserCollect::checkCollectByType($this->user_id,1,$v['id']);
  126. $v['label_name'] = VideoLabel::where('id','in', trim($v['label'],','))->column('title');
  127. });
  128. $this->success('ok',['list'=>$list]);
  129. }
  130. /**
  131. * @title 获取视频详情(平台)
  132. * @desc 获取视频详情
  133. * @author qc
  134. * @method GET
  135. * @url /api/Video/getVideoDetail
  136. * @header name:Authorization require:1 desc:Token
  137. * @param name:id type:int default:0 desc:视频id
  138. * @return name:title type:string default:-- desc:标题
  139. * @return name:cover type:string default:-- desc:封面
  140. * @return name:video_url type:string default:-- desc:视频地址
  141. * @return name:first_classify type:int default:-- desc:视频一级分类
  142. * @return name:is_top type:int default:-- desc:是否置顶(0否,1是)
  143. * @return name:read_num type:int default:-- desc:播放量
  144. * @return name:is_collect type:int default:-- desc:是否收藏
  145. * @return name:video_url type:array default:-- desc:视频地址
  146. * @return name:video_url.url type:string default:-- desc:视频地址
  147. * @return name:video_url.transmit_num type:int default:-- desc:转发量
  148. * @return name:video_url.read_num type:int default:-- desc:播放量
  149. * @return name:video_url.is_vip type:int default:-- desc:是否是需要会员(0否1是)
  150. */
  151. public function getVideoDetail()
  152. {
  153. $sel_where = [];
  154. $sel_where[] = ['is_deleted','=',0];
  155. $sel_where[] = ['status','=',1];
  156. $sel_where[] = ['id','=',input('get.id')];
  157. $detail = VideoIntro::with(['videoUrl'])->where($sel_where)
  158. ->order('is_top desc,sort desc ,id desc')->find();
  159. if(!$detail)$this->error('该视频已下线');
  160. $detail['label_name'] = [];
  161. if($detail['label']) {
  162. $detail['label_name'] = VideoLabel::where('id','in', trim($detail['label'],','))->column('title');
  163. }
  164. $detail['is_collect'] = UserCollect::checkCollectByType($this->user_id,1,$detail->id);
  165. $this->success('ok',['detail'=>$detail]);
  166. }
  167. /**
  168. * @title 获取视频列表(用户发布【审核通过的】)
  169. * @desc 用户发布【审核通过的】
  170. * @author qc
  171. * @method GET
  172. * @url /api/Video/getUserVideoList
  173. * @header name:Authorization require:1 desc:Token
  174. * @param name:title type:string default:-- desc:标题
  175. * @param name:first_classify type:int default:0 desc:视频一级分类
  176. * @param name:second_classify type:int default:0 desc:视频二级分类
  177. * @param name:page type:int default:0 desc:页数
  178. * @param name:page_num type:int default:20 desc:每页数
  179. * @return name:title type:string default:-- desc:标题
  180. * @return name:cover type:string default:-- desc:封面
  181. * @return name:video_url type:string default:-- desc:视频地址
  182. * @return name:first_classify type:int default:-- desc:视频一级分类
  183. * @return name:second_classify type:int default:-- desc:视频二级分类
  184. * @return name:read_num type:int default:-- desc:播放量
  185. * @return name:is_collect type:int default:-- desc:是否收藏
  186. */
  187. public function getUserVideoList()
  188. {
  189. $sel_where = [];
  190. $sel_where[] = ['is_deleted','=',0];
  191. $sel_where[] = ['status','=',1];
  192. $title = input('get.title');
  193. $first_classify = input('get.first_classify');
  194. $second_classify = input('get.second_classify');
  195. if($title) $sel_where[] = ['v.title','like','%'.$title.'%'];
  196. if($first_classify) $sel_where[] = ['v.first_classify','=',$first_classify];
  197. if($second_classify) $sel_where[] = ['v.second_classify','=',$second_classify];
  198. $list = UserVideo::field('v.*')->where($sel_where)->order('v.id desc')
  199. ->alias('v')
  200. ->leftJoin('User u','u.id = v.user_id')
  201. ->limit($this->off_set,$this->page_num)
  202. ->select()->toArray();
  203. $this->success('ok',['list'=>$list]);
  204. }
  205. /**
  206. * @title 获取我的视频列表
  207. * @desc 获取我的视频列表
  208. * @author qc
  209. * @method GET
  210. * @url /api/Video/getMyVideoList
  211. * @header name:Authorization require:1 desc:Token
  212. * @param name:title type:string default:-- desc:标题
  213. * @param name:page type:int default:0 desc:页数
  214. * @param name:page_num type:int default:20 desc:每页数
  215. * @return name:title type:string default:-- desc:标题
  216. * @return name:cover type:string default:-- desc:封面
  217. * @return name:video_url type:string default:-- desc:视频地址
  218. * @return name:first_classify type:int default:-- desc:视频一级分类
  219. * @return name:second_classify type:int default:-- desc:视频二级分类
  220. * @return name:read_num type:int default:-- desc:播放量
  221. * @return name:is_collect type:int default:-- desc:是否收藏
  222. * @return name:status type:int default:-- desc:0待审核1审核通过2审核未通过
  223. */
  224. public function getMyVideoList()
  225. {
  226. $sel_where = [];
  227. $sel_where[] = ['is_deleted','=',0];
  228. $sel_where[] = ['user_id','=',$this->user_id];
  229. $title = input('get.title');
  230. if($title) $sel_where[] = ['v.title','like','%'.$title.'%'];
  231. $list = UserVideo::where($sel_where)->order('id desc')
  232. ->limit($this->off_set,$this->page_num)
  233. ->select()->toArray();
  234. $this->success('ok',['list'=>$list]);
  235. }
  236. /**
  237. * @title 获取视频详情(会员)
  238. * @desc 获取视频详情
  239. * @author qc
  240. * @method GET
  241. * @url /api/Video/getUserVideoDetail
  242. * @header name:Authorization require:1 desc:Token
  243. * @param name:id type:int default:0 desc:视频id
  244. * @param name:first_classify type:int default:0 desc:视频一级分类
  245. * @param name:second_classify type:int default:0 desc:视频二级分类
  246. * @param name:page type:int default:0 desc:页数
  247. * @param name:page_num type:int default:20 desc:每页数
  248. * @return name:title type:string default:-- desc:标题
  249. * @return name:cover type:string default:-- desc:封面
  250. * @return name:video_url type:string default:-- desc:视频地址
  251. * @return name:first_classify type:int default:-- desc:视频一级分类
  252. * @return name:second_classify type:int default:-- desc:视频二级分类
  253. * @return name:read_num type:int default:-- desc:播放量
  254. * @return name:is_collect type:int default:-- desc:是否收藏
  255. */
  256. public function getUserVideoDetail()
  257. {
  258. $detail = UserVideo::where('id',input('get.id'))->find();
  259. if(!$detail)$this->error('该视频已下线');
  260. if($detail->status != 1)$this->error('该视频未通过审核');
  261. $detail->is_collect = UserCollect::checkCollectByType($this->user_id,2,$detail->id);
  262. $this->success('ok',['detail'=>$detail->toArray()]);
  263. }
  264. /**
  265. * @title 用户提交或修改视频
  266. * @desc 用户提交或修改视频
  267. * @author qc
  268. * @method POST
  269. * @url /api/Video/userReferVideo
  270. * @header name:Authorization require:1 desc:Token
  271. * @param name:id type:int default:-- desc:id(修改时必传)
  272. * @param name:title type:string default:-- desc:标题
  273. * @param name:video_url type:string default:-- desc:视频地址
  274. * @param name:desc type:string default:-- desc:简介
  275. * @param name:first_classify type:int default:-- desc:视频一级分类id
  276. * @param name:second_classify type:int default:-- desc:视频二级分类id
  277. * @param name:label type:string default:-- desc:视频标签id(多个用逗号隔开)
  278. */
  279. public function userReferVideo()
  280. {
  281. $id = input('post.id');
  282. $title = input('post.title');
  283. $desc = input('post.desc');
  284. $video_url = input('post.video_url');
  285. $cover = $video_url.'?x-oss-process=video/snapshot,t_2000,m_fast';
  286. $first_classify = input('post.first_classify',0);
  287. $second_classify = input('post.second_classify',0);
  288. $label = input('post.label');
  289. if(!$video_url) $this->error('请上传视频');
  290. if($id){
  291. $check_status = UserVideo::where('id',$id)->value('status');
  292. if($check_status == 1) $this->error('视频已审核通过,不允许修改');
  293. }
  294. $data = [
  295. 'title ' => $title,
  296. 'cover ' => $cover,
  297. 'desc ' => $desc,
  298. 'first_classify ' => $first_classify,
  299. 'second_classify ' => $second_classify,
  300. 'video_url ' => $video_url,
  301. 'label ' => $label,
  302. ];
  303. if($id) $data['id'] = $id;
  304. (new UserVideo())->save($data);
  305. $this->success('提交成功,请等待审核');
  306. }
  307. /**
  308. * @title 获取用户提交视频详情
  309. * @desc 获取用户提交视频详情
  310. * @author qc
  311. * @method GET
  312. * @url /api/Video/userReferVideoDetail
  313. * @header name:Authorization require:1 desc:Token
  314. * @param name:id type:int default:-- desc:id
  315. * @return name:title type:string default:-- desc:标题
  316. * @return name:cover type:string default:-- desc:封面
  317. * @return name:video_url type:string default:-- desc:视频地址
  318. * @return name:first_classify type:int default:-- desc:视频一级分类id
  319. * @return name:second_classify type:int default:-- desc:视频二级分类id
  320. * @return name:label type:string default:-- desc:视频标签id(多个用逗号隔开)
  321. */
  322. public function userReferVideoDetail()
  323. {
  324. $detail = UserVideo::where('id',input('get.id'))->find()->toArray();
  325. if($detail['is_deleted'] == 1) $this->error('视频已删除');
  326. $detail['label_name'] = [];
  327. if($detail['label']) {
  328. $detail['label_name'] = VideoLabel::where('id','in', trim($detail['label'],','))->column('title');
  329. }
  330. $this->success('获取成功',['detail'=>$detail]);
  331. }
  332. /**
  333. * @title 用户删除视频记录
  334. * @desc 用户删除视频记录
  335. * @author qc
  336. * @method POST
  337. * @url /api/Video/delUserVideo
  338. * @header name:Authorization require:1 desc:Token
  339. * @param name:id type:int default:-- desc:id
  340. */
  341. public function delUserVideo()
  342. {
  343. UserVideo::where(['user_id'=>$this->user_id,'id'=>input('post.id')])->delete();
  344. $this->success('删除成功');
  345. }
  346. /**
  347. * @title 视频评论
  348. * @desc 视频评论
  349. * @author qc
  350. * @method POST
  351. * @url /api/Video/videoComment
  352. * @header name:Authorization require:1 desc:Token
  353. * @param name:video_type type:int default:1 desc:视频类型(1平台2会员)
  354. * @param name:video_id type:int default:-- desc:视频id
  355. * @param name:url_id type:int default:-- desc:平台类型必传
  356. * @param name:content type:string default:-- desc:内容
  357. */
  358. public function videoComment()
  359. {
  360. $video_type = input('post.video_type',1);
  361. $video_id = input('post.video_id');
  362. $url_id = input('post.url_id',0);
  363. $content = input('post.content',0);
  364. if(!$content) $this->error('请输入评论内容');
  365. VideoComment::create(['user_id'=>$this->user_id,'content'=>$content,'video_id'=>$video_id,'url_id'=>$url_id,'video_type'=>$video_type]);;
  366. $this->success('评论成功');
  367. }
  368. /**
  369. * @title 视频二级评论
  370. * @desc 视频二级评论
  371. * @author qc
  372. * @method POST
  373. * @url /api/Video/secondCommend
  374. * @header name:Authorization require:1 desc:Token
  375. * @param name:id type:int default:1 desc:评论id
  376. * @param name:content type:string default:-- desc:内容
  377. */
  378. public function secondCommend()
  379. {
  380. $comment = VideoComment::where('id',input('post.id'))->find()->toArray();
  381. unset($comment['id']);
  382. unset($comment['create_at']);
  383. $comment['pid'] = input('post.id');
  384. $comment['content'] = input('post.content');
  385. $comment['lev']++;
  386. if(!$comment['source_id']) $comment['source_id'] = input('post.id');
  387. VideoComment::create($comment);
  388. $this->success('评论成功');
  389. }
  390. /**
  391. * @title 获取视频评论列表
  392. * @desc 获取视频评论列表
  393. * @author qc
  394. * @method GET
  395. * @url /api/Video/getVideoCommentList
  396. * @header name:Authorization require:1 desc:Token
  397. * @param name:video_type type:int default:1 desc:视频类型(1平台2会员)
  398. * @param name:video_id type:int default:-- desc:视频id
  399. * @param name:url_id type:int default:-- desc:平台类型必传
  400. * @param name:page type:int default:-- desc:页数
  401. * @return name:name type:string default:-- desc:会员名称
  402. * @return name:headimg type:string default:-- desc:会员头像
  403. * @return name:content type:string default:-- desc:内容
  404. * @return name:children type:array default:-- desc:二级评论(数据同上)
  405. * @return name:like_num type:int default:-- desc:点赞数量
  406. * @return name:is_like type:int default:-- desc:是否点赞(0否1是)
  407. * @return name:total_num type:int default:-- desc:总评论数(仅一级)
  408. */
  409. public function getVideoCommentList()
  410. {
  411. $where = [];
  412. $where[] = ['c.video_id','=',input('get.video_id')];
  413. $where[] = ['c.video_type','=',input('get.video_type')];
  414. $where[] = ['c.pid','=',0];
  415. $where[] = ['c.is_deleted','=',0];
  416. $user_id = $this->user_id;
  417. $list =VideoComment::where($where)
  418. ->field('c.*,u.name,u.headimg')
  419. ->leftJoin('User u','u.id = c.user_id')
  420. ->order('c.id desc')
  421. ->limit($this->off_set,$this->page_num)
  422. ->select()->toArray();
  423. array_map(function (&$val)use($user_id){
  424. $children = VideoComment::where(['pid'=>$val['id'],'is_deleted'=>0])
  425. ->field('c.*,u.name,u.headimg')
  426. ->leftJoin('User u','u.id = c.user_id')
  427. ->order('c.id asc')
  428. ->select()->toArray();
  429. $val['like_num'] = VideoCommentLike::where('like_id',$val['id'])->count();
  430. $val['children'] = $children;
  431. $val['is_like'] = VideoCommentLike::where(['like_id'=>$val['id'],'user_id'=>$user_id])->count();
  432. },$list);
  433. $total_num = VideoComment::where($where)->count();
  434. $this->success('ok',['list'=>$list,'total_num'=>$total_num]);
  435. }
  436. /**
  437. * @title 点赞||取消点赞
  438. * @desc 点赞||取消点赞
  439. * @author qc
  440. * @method POST
  441. * @url /api/Video/videoTags
  442. * @header name:Authorization require:1 desc:Token
  443. * @param name:type type:int default:1 desc:1评论点赞,评论记录id(一级)二级评论不要这个功能,2平台视频点赞,3会员视频点赞
  444. * @param name:like_id type:int default:1 desc:点赞id【二级评论不要这个功能】
  445. * @return name:tags type:int default:1 desc:0取消成功,1点赞成功
  446. */
  447. public function videoTags()
  448. {
  449. $type = input('post.type',1);
  450. $like_id = input('post.like_id');
  451. $ret_val = 0;
  452. $check_tags = VideoCommentLike::where(['user_id'=>$this->user_id,'like_id'=>$like_id,'type'=>$type])->value('id');
  453. if($check_tags) {
  454. VideoCommentLike::where(['user_id'=>$this->user_id,'like_id'=>$like_id,'type'=>$type])->delete();
  455. }else{
  456. Data::save('VideoCommentLike',
  457. ['user_id'=>$this->user_id,'like_id'=>$like_id,'type'=>$type],'user_id',
  458. ['user_id'=>$this->user_id,'like_id'=>$like_id,'type'=>$type]);
  459. $ret_val = 1;
  460. }
  461. $this->success($ret_val == 1 ?'点赞成功':'取消成功',['tags'=>$ret_val]);
  462. }
  463. /**
  464. * @title 视频转发(转发数量统计)
  465. * @desc 转发成功后调用
  466. * @author qc
  467. * @method POST
  468. * @url /api/Video/videoTransmit
  469. * @header name:Authorization require:1 desc:Token
  470. * @param name:video_type type:int default:1 desc:视频类型(1平台2会员)
  471. * @param name:video_id type:int default:-- desc:视频id
  472. * @param name:url_id type:int default:-- desc:平台类型必传
  473. */
  474. public function videoTransmit()
  475. {
  476. $video_type = input('post.video_type',1);
  477. $video_id = input('post.video_id');
  478. $url_id = input('post.url_id',0);
  479. if($video_type == 1) {
  480. VideoUrl::where('id',$url_id)->setInc('transmit_num');
  481. }else{
  482. UserVideo::where('id',$video_id)->setInc('transmit_num');
  483. }
  484. $this->success('ok');
  485. }
  486. /**
  487. * @title 视频播放(播放数量统计)
  488. * @desc 播放数量统计
  489. * @author qc
  490. * @method POST
  491. * @url /api/Video/videoPlay
  492. * @header name:Authorization require:1 desc:Token
  493. * @param name:video_type type:int default:1 desc:视频类型(1平台2会员)
  494. * @param name:video_id type:int default:-- desc:视频id
  495. * @param name:url_id type:int default:-- desc:平台类型必传
  496. */
  497. public function videoPlay()
  498. {
  499. $video_type = input('post.video_type',1);
  500. $video_id = input('post.video_id');
  501. $url_id = input('post.url_id',0);
  502. if($video_type == 1) {
  503. VideoUrl::where('id',$url_id)->setInc('read_num');
  504. }else{
  505. UserVideo::where('id',$video_id)->setInc('read_num');
  506. }
  507. $this->success('ok');
  508. }
  509. }