Player.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 选手
  7. */
  8. class Player extends Api
  9. {
  10. protected $noNeedLogin = [];
  11. protected $noNeedRight = ['*'];
  12. //给选手投票
  13. public function record(){
  14. $player_id = input('player_id','');
  15. if(!$player_id){
  16. $this->error();
  17. }
  18. Db::startTrans();
  19. //check player
  20. $player_info = Db::name('vote_player')->field('id,votes,renqi,subject_id,user_id')->where(['id'=>$player_id,'status'=>1])->lock(true)->find();
  21. if(!$player_info){
  22. Db::rollback();
  23. $this->error('不存在的选手');
  24. }
  25. $subject_id = $player_info['subject_id'];
  26. //check subject
  27. $subject = Db::name('vote_subject')->field('id,status')->where(['id'=>$subject_id])->find();
  28. if($subject['status'] != 1){
  29. Db::rollback();
  30. $this->error('投票活动未开始');
  31. }
  32. //大检查
  33. $check_rs = $this->record_check($this->auth->id,$player_id);
  34. if($check_rs['status'] === false){
  35. Db::rollback();
  36. $this->error($check_rs['msg']);
  37. }
  38. $update_data = [
  39. 'votes' => $player_info['votes'] + $check_rs['votes'],
  40. 'renqi' => $player_info['renqi'] + $check_rs['renqi'],
  41. ];
  42. //入库
  43. $update_rs = Db::name('vote_player')->where('id',$player_id)->update($update_data);
  44. if($update_rs === false){
  45. Db::rollback();
  46. $this->error('投票失败');
  47. }
  48. //日志
  49. $data = [
  50. 'user_id' => $this->auth->id,
  51. 'subject_id' => $subject_id,
  52. 'player_id' => $player_id,
  53. 'player_uid' => $player_info['user_id'],
  54. 'remark' => '票'.$check_rs['votes'].',人气'.$check_rs['renqi'],
  55. 'ip' => request()->ip(),
  56. 'createtime' => time(),
  57. 'updatetime' => time(),
  58. ];
  59. $log_id = Db::name('vote_record')->insertGetId($data);
  60. if(!$log_id){
  61. Db::rollback();
  62. $this->error('投票失败');
  63. }
  64. //票数减少
  65. $rs_wallet = model('wallet')->lockChangeAccountRemain($this->auth->id,'votenum',-1,26,'投出一票','vote_record',$log_id);
  66. if($rs_wallet['status'] === false){
  67. Db::rollback();
  68. $this->error($rs_wallet['msg']);
  69. }
  70. Db::commit();
  71. $this->success('投票成功');
  72. }
  73. private function record_check($uid,$player_id){
  74. $result = array(
  75. 'status'=>true,
  76. 'msg'=>'',
  77. 'votes'=>1,
  78. 'renqi'=>1,
  79. );
  80. return $result;
  81. }
  82. }