error(); } Db::startTrans(); //check player $player_info = Db::name('vote_player')->field('id,votes,renqi,subject_id,user_id')->where(['id'=>$player_id,'status'=>1])->lock(true)->find(); if(!$player_info){ Db::rollback(); $this->error('不存在的选手'); } $subject_id = $player_info['subject_id']; //check subject $subject = Db::name('vote_subject')->field('id,status')->where(['id'=>$subject_id])->find(); if($subject['status'] != 1){ Db::rollback(); $this->error('投票活动未开始'); } //大检查 $check_rs = $this->record_check($this->auth->id,$player_id); if($check_rs['status'] === false){ Db::rollback(); $this->error($check_rs['msg']); } $update_data = [ 'votes' => $player_info['votes'] + $check_rs['votes'], 'renqi' => $player_info['renqi'] + $check_rs['renqi'], ]; //入库 $update_rs = Db::name('vote_player')->where('id',$player_id)->update($update_data); if($update_rs === false){ Db::rollback(); $this->error('投票失败'); } //日志 $data = [ 'user_id' => $this->auth->id, 'subject_id' => $subject_id, 'player_id' => $player_id, 'player_uid' => $player_info['user_id'], 'remark' => '票'.$check_rs['votes'].',人气'.$check_rs['renqi'], 'ip' => request()->ip(), 'createtime' => time(), 'updatetime' => time(), ]; $log_id = Db::name('vote_record')->insertGetId($data); if(!$log_id){ Db::rollback(); $this->error('投票失败'); } //票数减少 $rs_wallet = model('wallet')->lockChangeAccountRemain($this->auth->id,'votenum',-1,26,'投出一票','vote_record',$log_id); if($rs_wallet['status'] === false){ Db::rollback(); $this->error($rs_wallet['msg']); } Db::commit(); $this->success('投票成功'); } private function record_check($uid,$player_id){ $result = array( 'status'=>true, 'msg'=>'', 'votes'=>1, 'renqi'=>1, ); return $result; } }