Subject.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. use think\cache;
  6. /**
  7. * 投票
  8. */
  9. class Subject extends Api
  10. {
  11. protected $noNeedLogin = ['*'];
  12. protected $noNeedRight = ['*'];
  13. //进行中的唯一一个投票活动
  14. public function info(){
  15. $find = Db::name('vote_subject')->where('id',1)->find();
  16. if(!$find){
  17. $this->error('没有进行中的投票活动');
  18. }
  19. $this->success(1,$find);
  20. }
  21. //作品页,选手列表
  22. public function playerlist(){
  23. $subject_id = 1;
  24. $map = [
  25. 'subject_id' => $subject_id,
  26. 'status' => 1,
  27. ];
  28. //搜索
  29. $keyword = input('keyword','');
  30. if($keyword){
  31. $map['title|suozaidanwei|tuijiangonghui'] = ['LIKE','%'.$keyword.'%'];
  32. }
  33. $lists = Db::name('vote_player')
  34. ->where($map)->order('votes desc,id desc')->autopage()->select(); //选手不多,看看不加分页了,直接缓存10秒
  35. // $button = 'answer';
  36. //当前用户手里有票,按钮:投票
  37. //用户手里没有票,但是今天还能答题,按钮:答题加票
  38. /*$user_votes = Db::name('user_wallet')->where('user_id',$this->auth->id)->value('votes');
  39. $user_question_count = Db::name('user_question_log')->where('user_id',$this->auth->id)->whereTime('createtime','today')->count('id');
  40. $exam_times_user_eday = config('site.exam_times_user_eday');
  41. if($user_votes == 0 && $user_question_count <= $exam_times_user_eday){
  42. $button = 'answer';
  43. }*/
  44. //以上两者都没有,按钮:投票
  45. foreach($lists as $key => $val){
  46. $val['video_thumb'] = '';
  47. if(!empty($val['video_file'])){
  48. $val['video_thumb'] = $val['video_file'].'?x-oss-process=video/snapshot,t_0,m_fast,f_jpg';
  49. }
  50. // $val['button'] = $button;
  51. $lists[$key] = $val;
  52. }
  53. //$lists = $this->mingci($subject_id,$lists);
  54. $this->success(1,$lists);
  55. }
  56. //选手详情
  57. public function playerinfo(){
  58. $player_id = input('player_id','');
  59. if(!$player_id){
  60. $this->error();
  61. }
  62. $map = [
  63. 'player_id' => $player_id,
  64. ];
  65. $info = Db::name('vote_player')->where($map)->find();
  66. $info['video_thumb'] = '';
  67. if(!empty($info['video_file'])){
  68. $info['video_thumb'] = $info['video_file'].'?x-oss-process=video/snapshot,t_0,m_fast,f_jpg';
  69. }
  70. $this->success(1,$info);
  71. }
  72. //选手票数排行榜,按票
  73. public function playerlist_votes(){
  74. $subject_id = 1;
  75. $map = [
  76. 'subject_id' => $subject_id,
  77. 'status' => 1,
  78. ];
  79. $lists = Db::name('vote_player')->field('id,title,votes')
  80. ->where($map)->order('votes desc,id desc')->autopage()->select();
  81. $lists = $this->mingci_vote($subject_id,$lists);
  82. $this->success(1,$lists);
  83. }
  84. //选手票数排行榜,按分
  85. public function playerlist_score(){
  86. $subject_id = 1;
  87. $map = [
  88. 'subject_id' => $subject_id,
  89. 'status' => 1,
  90. ];
  91. $lists = Db::name('vote_player')->field('id,title,score')
  92. ->where($map)->order('score desc,id desc')->autopage()->select();
  93. $lists = $this->mingci_score($subject_id,$lists);
  94. $this->success(1,$lists);
  95. }
  96. //oss视频截贞 https://www.alibabacloud.com/help/zh/oss/user-guide/video-snapshots?spm=a2c63.p38356.0.0.6aaa4b78aOSpJH
  97. //使用fast模式截取视频7s处的内容,输出为JPG格式的图片,宽度为800,高度为600。
  98. //处理后的URL为:https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/video.mp4?x-oss-process=video/snapshot,t_7000,f_jpg,w_800,h_600,m_fast
  99. //选手详情
  100. /*public function playerinfo(){
  101. $player_id = input('player_id');
  102. if(!$player_id){
  103. $this->error();
  104. }
  105. $map = [
  106. 'p.id' => $player_id,
  107. ];
  108. $info = Db::name('vote_player')->alias('p')
  109. ->field('p.id,p.mobile,p.video_file,p.votes,p.renqi,p.subject_id')
  110. ->where($map)->find();
  111. $info = info_domain_image($info,['video_file']);
  112. //名次
  113. $players = Db::name('vote_player')->where(['subject_id'=>$info['subject_id'],'status'=>1])->order('votes desc')->column('id,votes');
  114. $id_arr = array_keys($players);
  115. $mingci = 1; //名次
  116. $mingci = array_search($info['id'],$id_arr);
  117. $mingci++;
  118. $info['mingci'] = $mingci;
  119. $this->success(1,$info);
  120. }*/
  121. //获得我的名次,票数导向
  122. private function mingci_vote($subject_id,$list){
  123. if(empty($list)){
  124. return $list;
  125. }
  126. //准备数据
  127. $players = Db::name('vote_player')->where(['subject_id'=>$subject_id,'status'=>1])->order('votes desc,id desc')->column('id,votes');
  128. $id_arr = array_keys($players);
  129. foreach($list as $key => $val)
  130. {
  131. $mingci = 1; //名次
  132. $mingci = array_search($val['id'],$id_arr);
  133. $mingci++;
  134. //赋值名次
  135. $list[$key]['mingci'] = $mingci;
  136. }
  137. return $list;
  138. }
  139. //获得我的名次,分数导向
  140. private function mingci_score($subject_id,$list){
  141. if(empty($list)){
  142. return $list;
  143. }
  144. //准备数据
  145. $players = Db::name('vote_player')->where(['subject_id'=>$subject_id,'status'=>1])->order('score desc,id desc')->column('id,score');
  146. $id_arr = array_keys($players);
  147. foreach($list as $key => $val)
  148. {
  149. $mingci = 1; //名次
  150. $mingci = array_search($val['id'],$id_arr);
  151. $mingci++;
  152. //赋值名次
  153. $list[$key]['mingci'] = $mingci;
  154. }
  155. return $list;
  156. }
  157. }