VoteController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\ActivityInfo;
  4. use Illuminate\Support\Facades\Cache;
  5. use Log;
  6. use App\Group;
  7. use App\Player;
  8. use App\Vote;
  9. use EasyWeChat\Foundation\Application;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\DB;
  12. class VoteController extends Controller
  13. {
  14. public $wechat;
  15. public function __construct(Application $wechat) {
  16. //$this->middleware('wechat.oauth', ['only' => ['process', 'group']]);
  17. $this->wechat = $wechat;
  18. }
  19. /**
  20. * 投票首页显示
  21. * */
  22. public function index(Request $request) {
  23. $activity_info = ActivityInfo::first();
  24. $activity_info->count_views = $activity_info->count_views + 1;
  25. $activity_info->save();
  26. // 变量要验证, 不然会报错
  27. $groups = \App\Group::get();
  28. $player_count = Player::count();
  29. $vote_count = Vote::count();
  30. $votes = [];
  31. $players = Player::orderBy("no")
  32. ->get();
  33. foreach($players as $player) {
  34. $votes[$player->id] = Vote::where('player_id', $player->id)->count();
  35. }
  36. return view('front.vote.index', ['vote_count'=>$vote_count ,'player_count'=>$player_count , 'groups'=>$groups, 'votes'=>$votes, 'activity_info'=>$activity_info ]);
  37. }
  38. /**
  39. * 投票分组显示
  40. * */
  41. public function group(Request $request) {
  42. $activity_info = ActivityInfo::first();
  43. if(Cache::get($request->ip()) == null) {
  44. Cache::put($request->ip(), '1', 60*12); // 将openid存入cache
  45. $activity_info->count_views = $activity_info->count_views + 1;
  46. $activity_info->save();
  47. }
  48. $group_id = $request->group_id;
  49. $votes = [];
  50. $players = Player::where('group_id',$group_id)
  51. ->orderBy("no")
  52. ->get();
  53. foreach($players as $player) {
  54. $votes[$player->id] = Vote::where('player_id', $player->id)->count();
  55. }
  56. $group = Group::find($group_id);
  57. $player_count = Player::count();
  58. $status = empty($request->status) ? null : $request->status;
  59. return view('front.vote.group', ['players'=>$players, 'group'=>$group, 'votes'=>$votes,'status'=>$status]);
  60. }
  61. /**
  62. * 排名显示
  63. * */
  64. public function rank() {
  65. $player_count = Player::count();
  66. $vote_count = Vote::count();
  67. $activity_info = ActivityInfo::first();
  68. // if(Cache::get($we_user->getId()) == null) {
  69. // Cache::put($we_user->getId(), '1', 60*24); // 将openid存入cache
  70. // $activity_info->count_views = $activity_info->count_views + 1;
  71. // $activity_info->save();
  72. // }
  73. $rank_color = ['#007500', '#996600', '#666666', '#3399CC', '#548C00', '#336633', '#CC9900', '#FF3300', '#CC0033', '#FFCC00', '#FF6600', '#669900', '#FF9900', '#CCCC00', '#CC6600'];
  74. $sql = "SELECT *,(SELECT COUNT(*) FROM votes WHERE votes.player_id = players.id) AS count_votes FROM players ORDER BY count_votes DESC";
  75. $players = DB::select($sql);
  76. return view('front.vote.rank', ['vote_count'=>$vote_count ,'player_count'=>$player_count , 'players'=>$players, 'rank_color'=>$rank_color, 'activity_info'=>$activity_info]);
  77. }
  78. /**
  79. * 投票处理
  80. * @param $player_id 选手id
  81. *
  82. * */
  83. public function process(Request $request, $player_id) {
  84. $we_user = session('wechat.oauth_user'); // 拿到授权用户资料
  85. $user = $this->wechat->user->get($we_user->getId());
  86. // 获取group_id
  87. $player = Player::select('group_id')->find($player_id);
  88. // 获取投票ip地址
  89. $vote_ip = $request->ip();
  90. if(!$user){
  91. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '2');
  92. }
  93. // 根据openid, 获取今日投票总和
  94. $today_count = Vote::where('openid', $user->openid)->where('created_at', 'like', '%'.date('Y-m-d', time()).'%')->count();
  95. // 结束时间 和 开始时间
  96. $time_obj = ActivityInfo::select('end_time', 'start_time')->first();
  97. // 根据openid, 获取今日分组投票总和
  98. $group_count = Vote::where('openid', $user->openid)->where('group_id', $player->group_id)->where('created_at', 'like', '%'.date('Y-m-d', time()).'%')->count();
  99. // 根据ip, 获取今日投票总和
  100. $ip_count = Vote::where('ip', $vote_ip)->where('created_at', 'like', '%'.date('Y-m-d', time()).'%')->count();
  101. // ************* 测试服务器时区是否正确 *****************
  102. // dump($end_time_obj->end_time);
  103. // dump(strtotime($end_time_obj->end_time));
  104. // dd(date("Y-m-d H:i:s", strtotime($end_time_obj->end_time)));
  105. //*** status=1 : 投票成功
  106. //*** status=6 : 微信号投票限制
  107. //*** status=2 : 未关注公众号
  108. //*** status=3 : 投票已结束
  109. //*** status=4 : 投票ip限制,防止刷票
  110. //*** status=5 : 投票未开始
  111. //*** status=7 : 分组投票限制
  112. if( time() <= strtotime($time_obj->start_time) ) {
  113. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '5');
  114. } elseif( time() >= strtotime($time_obj->end_time) ) {
  115. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '3');
  116. }/*elseif($user->subscribe != 1) {
  117. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '2');
  118. }*/elseif($today_count >= 5) {
  119. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '6');
  120. // }elseif($group_count >= 5) {
  121. // return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '7');
  122. }elseif( $ip_count >= 100 ) {
  123. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '4');
  124. }else {
  125. $votes = new Vote;
  126. $votes->player_id = $player_id;
  127. $votes->group_id = $player->group_id;
  128. $votes->openid = $user->openid;
  129. $votes->we_nickname = $user->nickname+"";
  130. $votes->we_image = $user->headimgurl+"";
  131. $votes->ip = $vote_ip;
  132. $votes->save();
  133. return redirect()->route('vote.group', ['group_id' => $player->group_id])->with('status', '1');
  134. }
  135. }
  136. }