12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034 |
- <?php
- namespace Api\Controller;
- use Common\Controller\ApiController;
- class PkController extends ApiController {
- public function __construct(){
- parent::__construct();
- }
-
- //系统推荐pk对象
- public function chooseFriend(){
- //$this->userId = 1000001;
- $recordSource = I('pk_type',1);
- //查询是否有对战记录
- $pkRecordInfo = M('PkRecord')->where(array('user_id|ref_user_id'=>$this->userId,'record_status'=>2,'operate_dt'=>array('LT',strtotime('-10 second'))))->field('record_id,user_id,ref_user_id')->find();
- if ($pkRecordInfo!=NULL){
- M('User')->where(array('user_id'=>array('IN',array($pkRecordInfo['user_id'],$pkRecordInfo['ref_user_id'],))))->save(array('user_status'=>0));
- M('PkRecord')->where(array('record_id'=>$pkRecordInfo['record_id']))->save(array('record_status'=>3));
- if ($this->userId==$pkRecordInfo['user_id']){
- $scockUserId = $pkRecordInfo['ref_user_id'];
- }else{
- $scockUserId = $pkRecordInfo['user_id'];
- }
- $dataSoc = array('code'=>0,'type'=>17,'msg'=>'10s中对战对象为准备!','data'=>$pkRecordInfo);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $scockUserId);
- }
- //查询用户状态
- $pkUserInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_id,user_status')->find();
- if ($pkUserInfo==NULL || !in_array($pkUserInfo['user_status'], array(0,4,5))){
- $resData = array('code'=>1,'msg'=>'不能对战!');
- $this->returnData($resData);exit;
- }
- $peerUserId = I('peer','');
- $uid = $this->getSocketOnline($recordSource,$peerUserId);
- if (!$uid){
- $key = 'pk_choose_friend';
- $this->pushQueue($key,array('user_id'=>$this->userId,'num'=>1,'pk_type'=>$recordSource));
- $dataSoc = array('code'=>0,'msg'=>'系统正在匹配!','data'=>'');
- $this->returnData($dataSoc);exit;
- }
- if ($uid<=0){
- return false;
- }
- //添加匹配记录
- $recordId = M('PkRecord')->add(array('user_id'=>$this->userId,'ref_user_id'=>$uid,'record_source'=>$recordSource,'record_status'=>2,'peer_source'=>2,'operate_dt'=>time()));
- M('User')->where(array('user_id'=>array('IN',array($this->userId,$uid))))->save(array('user_status'=>2));
- //如果是好友获取昵称
- $userNick = array($this->userId=>'',$uid=>'');
- if ($this->userId>$uid){
- $friendInfo =M('Friend')->where(array('user_id'=>$uid,'ref_user_id'=>$this->userId))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($this->userId=>$friendInfo['ref_user_nickname'],$uid=>$friendInfo['user_nickname']);
- }
- }else{
- $friendInfo =M('Friend')->where(array('user_id'=>$this->userId,'ref_user_id'=>$uid))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($this->userId=>$friendInfo['user_nickname'],$uid=>$friendInfo['ref_user_nickname']);
- }
- }
- $join = ' u LEFT JOIN t_user_level ul ON u.user_level=ul.level_id';
- $field = 'user_id,user_name,user_level,user_sex,user_icon,ul.level_name';
- $userInfoArr = M('User')->join($join)->where(array('user_id'=>array('IN',array($this->userId,$uid))))->field($field)->select();
- foreach ($userInfoArr as $userInfo){
- if ($userInfo['user_id']==$this->userId){
- //$userInfo = $userInfoArr[0];
- $userInfo['user_nickname'] = $userNick[$this->userId];
- $returnData = array('record_id'=>$recordId,'user_id'=>$this->userId,'ref_user_id'=>$uid,'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>16,'msg'=>'已匹配上,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $uid);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $returnData);
- }
- }else{
- $userInfo['user_nickname'] = $userNick[$uid];
- $returnData = array('record_id'=>$recordId,'user_id'=>$this->userId,'ref_user_id'=>$uid,'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>16,'msg'=>'已匹配上,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $this->userId);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $returnData);
- }
- }
- }
- //var_dump($returnData);exit;
- $resData = array('code'=>0,'msg'=>'已应战,请准备开始对战!');
- $this->returnData($resData);exit;
- }
-
- //获取在线好友
- private function getSocketOnline($recordSource, $peerUserId){
- $res = $this->online();
- if(empty($res)){
- return FALSE;
- }
- unset($res[$this->userId]);
- $userIdArr = array_keys($res);
- if (in_array($peerUserId, $userIdArr)){
- return $peerUserId;
- }
- //$chunkUserId = array_chunk($userIdArr,200);
- $redis = $this->getRedis();
- if ($recordSource==2){
- $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_level')->find();
- }
- foreach ($userIdArr as $uid){
- $uidLock = $this->get($uid);
- if ($uidLock){
- continue;
- }else{
- $redis->set($uid,1,3);
- }
- if ($recordSource==2){
- $peerInfo = M('User')->where(array('user_id'=>$uid,'user_level'=>$userInfo['user_level'],'user_status'=>array('IN','0,4,5')))->field('user_id')->find();
- }else{
- $peerInfo = M('User')->where(array('user_id'=>$uid,'user_status'=>array('IN','0,4,5')))->field('user_id')->find();
- }
- if ($peerInfo != NULL){
- M('User')->where(array('user_id'=>$peerInfo['user_id'],))->save(array('user_status'=>2));
- break;
- }
- }
- if ($peerInfo == NULL){
- return FALSE;
- }else{
- return $peerInfo['user_id'];
- }
- }
-
- //获取最近登录用户
- private function getLastTimeLogin($userLevel,$minute){
- $cons = array(
- 'is_delete' => 1,
- 'user_level'=>$userLevel,
- 'user_status' => array('IN','0,4,5'),
- //'u.user_id' => array('NEQ',$this->userId),
- 'user_id' => array('exp',"!=$this->userId"),
- 'last_dt' => array('GT',strtotime("{$minute} minute")),
- );
- $res = M('User')->where($cons)->order('last_dt desc')->field('user_id,user_phone,user_name,user_level,user_sex,user_icon')->find();
- return $res;
- }
-
- //邀请好友pk
- public function inviteFriend(){
- $uid = I('uid');
- $condition = array(
- 'is_delete' => 1,
- 'user_id' => $uid,
- 'user_status' => array('IN','0,4,5'),
- );
- $info = M('User')->where($condition)->field('user_id,user_phone,user_name,user_level,user_sex,user_icon')->find();
- if ($info==NULL){
- $data = array('code'=>1,'msg'=>'对方正在PK对战,暂时无法邀请,请稍后再试');
- $this->returnData($data);exit;
- }
- //添加匹配记录
- $recordId = M('PkRecord')->add(array('user_id'=>$this->userId,'record_source'=>1,'ref_user_id'=>$uid,'operate_dt'=>time()));
- M('User')->where(array('user_id'=>array('IN',array($this->userId,$uid))))->save(array('user_status'=>1,'pk_dt'=>time()));
- //M('User')->where(array('user_id'=>$uid))->save(array('user_status'=>1,'friend_notice'=>array('exp','friend_notice+1')));
- //调用友盟给,好友发送消息
- $title = '我正在noraml对战模式邀请你来应战,就问你句:敢不敢应战!';
- //获取好友设置我的昵称
- if ($uid>$this->userId){
- $friendInfo = M('Friend')->where(array('user_id'=>$this->userId,'ref_user_id'=>$uid))->field('user_nickname')->find();
- }else{
- $friendInfo = M('Friend')->where(array('user_id'=>$uid,'ref_user_id'=>$this->userId))->field('ref_user_nickname as user_nickname')->find();
- }
- if ($friendInfo==NULL || empty($friendInfo['user_nickname'])){
- $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_name')->find();
- $userNickname = $userInfo['user_name'];
- }else{
- $userNickname = $friendInfo['user_nickname'];
- }
- $title1 = $userNickname.'正在noraml对战模式邀请你来应战,就问你句:敢不敢应战!';
- $returnData = array('record_id'=>$recordId,'user_id'=>$this->userId,'ref_user_id'=>$info['user_id']);
- $dataUm = json_encode(array('code'=>0,'type'=>0,'notice_type'=>2,'msg'=>$title1,'data'=>$returnData));
- $this->umengPush($info['user_id'], $dataUm);
- M('User')->where(array('user_id'=>$uid))->setInc('friend_notice');
- M('Notice')->add(array('ref_user_id'=>$uid,'user_id'=>$this->userId,'record_id'=>$recordId,'notice_type'=>2,'notice_title'=>'对战邀请','notice_content'=>$title,'operate_dt'=>time()));
- $data = array('code'=>0,'msg'=>'已邀请成功,请等待好友应战!','data'=>$returnData);
- $this->returnData($data);exit;
- }
- public function test(){
- $dataSoc = array('code'=>0,'msg'=>'已应战,请准备开始对战!','data'=>array(111,222));
- $res = $this->pushMsg(json_encode($dataSoc), array(1000010,1000005));
- var_dump($res);exit;
- }
-
- //对手响应
- public function answer(){
- $type=I('type');
- $recordId = I('record_id');
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('record_id,user_id,ref_user_id,record_status')->find();
- if ($info['record_status']!=1){
- $returnData = array('record_id'=>$recordId,'user_id'=>'','ref_user_id'=>'');
- $dataSoc = array('code'=>1,'type'=>0,'msg'=>'对战已结束','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($this->userId));
- $this->returnData($dataSoc);exit;
- }
- if ($info['ref_user_id']!=$this->userId){
- $returnData = array('record_id'=>$recordId);
- $dataSoc = array('code'=>1,'msg'=>'您不允许应战','data'=>$returnData);
- $this->returnData($dataSoc);exit;
- }
- if ($type==2){
- M('PkRecord')->where(array('record_id'=>$info['record_id']))->save(array('record_status'=>0));
- M('User')->where(array('user_id'=>array('IN',array($info['ref_user_id'],$info['user_id']))))->save(array('user_status'=>0));
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']);
- $dataSoc = array('code'=>1,'type'=>2,'msg'=>'未应战','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($info['user_id']));
- $this->returnData($dataSoc);exit;
- }
- M('PkRecord')->where(array('record_id'=>$info['record_id']))->save(array('record_status'=>2));
- M('User')->where(array('user_id'=>array('IN',array($info['ref_user_id'],$info['user_id']))))->save(array('user_status'=>2));
- /* $data = array('code'=>0,'msg'=>'已经准备','data'=>$info);
- $this->returnData($data);exit; */
- //如果是好友获取昵称
- $userNick = array($info['user_id']=>'',$info['ref_user_id']=>'');
- if ($info['user_id']>$info['ref_user_id']){
- $friendInfo =M('Friend')->where(array('user_id'=>$info['ref_user_id'],'ref_user_id'=>$this->userId))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($info['user_id']=>$friendInfo['ref_user_nickname'],$info['ref_user_id']=>$friendInfo['user_nickname']);
- }
- }else{
- $friendInfo =M('Friend')->where(array('user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']))->field('user_id,ref_user_id,user_nickname,ref_user_nickname')->find();
- if ($friendInfo!=NULL){
- $userNick = array($info['user_id']=>$friendInfo['user_nickname'],$info['ref_user_id']=>$friendInfo['ref_user_nickname']);
- }
- }
- $join = ' u LEFT JOIN t_user_level ul ON u.user_level=ul.level_id';
- $field = 'user_id,user_name,user_level,user_sex,user_icon,ul.level_name';
- $userInfoArr = M('User')->join($join)->where(array('user_id'=>array('IN',array($info['user_id'],$info['ref_user_id']))))->field($field)->select();
- foreach ($userInfoArr as $userInfo){
- if ($userInfo['user_id']==$info['user_id']){
- $userInfo['user_nickname'] = $userNick[$info['user_id']];
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>1,'msg'=>'已应战,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $info['ref_user_id']);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $info);
- }
- }else{
- $userInfo['user_nickname'] = $userNick[$info['ref_user_id']];
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'peer_info'=>$userInfo);
- $dataSoc = array('code'=>0,'type'=>1,'msg'=>'已应战,请准备开始对战!','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), $info['user_id']);
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $info);
- }
- }
- }
- //var_dump($returnData);exit;
- $resData = array('code'=>0,'msg'=>'已应战,请准备开始对战!');
- $this->returnData($resData);exit;
- }
-
- //掉线发送消息
- private function offline($pushUid,$info){
- if ($info['ref_user_id'] == $pushUid){
- $userId = $info['user_id'];
- }else{
- $userId = $info['ref_user_id'];
- }
- M('PkRecord')->where(array('record_id'=>$info['record_id']))->save(array('record_status'=>0));
- M('User')->where(array('user_id'=>array('IN',array($info['ref_user_id'],$info['user_id']))))->save(array('user_status'=>0));
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],);
- $dataSoc = array('code'=>0,'type'=>6,'msg'=>'对战对手掉线!','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), $userId);
- }
-
- //双方准备
- public function ready(){
- $recordId = I('record_id');
- $pageSize = I('init_score',0);
- if (!empty($pageSize)){
- $testInfo = M('PkRecord')->where(array('record_id'=>$recordId))->find();
- if ($testInfo['user_status']!=1){
- M('PkRecord')->where(array('record_id'=>$recordId))->save(array('user_status'=>0,'record_status'=>2));
- M('PkWords')->where(array('record_id'=>$recordId))->delete();
- }
- }
- $info = M('PkRecord')->where(array('record_id'=>$recordId,'record_status'=>2))->field('record_id,user_status,user_id,ref_user_id')->find();
- if ($info==NULL){
- $returnData = array('record_id'=>$recordId,'user_id'=>'','ref_user_id'=>'');
- $dataSoc = array('code'=>1,'type'=>0,'msg'=>'没有查询到对战信息','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($this->userId));
- $this->returnData($dataSoc);exit;
- }
- M('PkRecord')->where(array('record_id'=>$recordId))->setInc('user_status');
- $info = M('PkRecord')->where(array('record_id'=>$recordId,'record_status'=>2))->field('record_id,user_status,user_id,ref_user_id')->find();
- if ($info['user_status']==2){
- M('PkRecord')->where(array('record_id'=>$recordId))->save(array('record_status'=>6));
- M('User')->where(array('user_id'=>array('IN',array($info['ref_user_id'],$info['user_id']))))->save(array('user_status'=>6));
- //生成对战题库
- $storeRes = $this->getStoreList($info['user_id'], $info['ref_user_id'], $recordId, $pageSize);
- if (!$storeRes){
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']);
- $dataSoc = array('code'=>1,'type'=>0,'msg'=>'生成题库失败','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($this->userId));
- $this->returnData($dataSoc);exit;
- }
- $wordInfo = $this->getStore($info['record_id']);
- $ms = $this->getMilliSecond();
- $scoreKey = 'score_'.$recordId.'_'.$info['user_id'];
- $refScoreKey = 'score_'.$recordId.'_'.$info['ref_user_id'];
- $redis = $this->getRedis();
- if (empty($pageSize)){
- $redis->set($scoreKey,C('PK_SCORE'),500);
- $redis->set($refScoreKey,C('PK_SCORE'),500);
- }else{
- $redis->set($scoreKey,$pageSize,500);
- $redis->set($refScoreKey,$pageSize,500);
- }
- $redis->set('pk_start_time'.$recordId,time(),500);
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'second'=>3,'ms'=>$ms,'list'=>$wordInfo);
- if (empty($pageSize)){
- $returnData['user_score'] = C('PK_SCORE');
- $returnData['peer_score'] = C('PK_SCORE');
- }else{
- $returnData['user_score'] = $pageSize;
- $returnData['peer_score'] = $pageSize;
- }
- $dataSoc = array('code'=>0,'type'=>4,'msg'=>'已经准备,3s后开始对战','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $info);
- }
- //把对战信息存到redis
- $this->setRedisPkRecordInfo($recordId,$info);
- unset($returnData['list']);
- $this->returnData($dataSoc);exit;
- }
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']);
- $dataSoc = array('code'=>0,'type'=>8,'msg'=>'已准备,请等待对手准备','data'=>$returnData);
- if ($info['user_id']==$this->userId){
- $this->pushMsg(json_encode($dataSoc), $info['ref_user_id']);
- }else{
- $this->pushMsg(json_encode($dataSoc), $info['user_id']);
- }
- $this->returnData($dataSoc);exit;
- }
- //中途结束
- public function theEnd(){
- $recordId = I('record_id');
- $redis = $this->getRedis();
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('record_id,user_id,ref_user_id')->find();
- $ms = $this->getMilliSecond();
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'ms'=>$ms);
- if ($this->userId == $returnData['user_id']){
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $pkRes = $this->normal($info['record_id'], 2, $returnData['user_id']);
- }else{
- $pkUserid = $returnData['ref_user_id'];
- $peerUserId = $returnData['user_id'];
- $pkRes = $this->normal($info['record_id'], 2, $returnData['ref_user_id']);
- }
- $returnData['record_source'] = $pkRes['record_source'];
-
- $startTime = $redis->get('pk_start_time'.$info['record_id']);
- $time = time()-$startTime;
- $returnData['time']=$time;
- $returnData['winner'] = $peerUserId;
- if ($this->userId==$info['user_id']){
- $returnData['winner'] = $info['ref_user_id'];
- }
- //自己
- $returnData['user_score'] = $pkRes['user_score'];
- $returnData['peer_score'] = $pkRes['ref_user_score'];
- $dataSoc1 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc1), $pkUserid);
- //对手
- $returnData['user_score'] = $pkRes['ref_user_score'];
- $returnData['peer_score'] = $pkRes['user_score'];
- $dataSoc2 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc2), $peerUserId);
- //$pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
-
- //删除题库队列
- $pushKey = 'pk_words_'.$recordId;
- $this->flushQueue($pushKey);
-
- $this->returnData($dataSoc1);exit;
- }
-
- //10s未响应,取消pk
- public function cancel(){
- $recordId = I('record_id');
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('user_status,record_id,user_id,ref_user_id')->find();
- if ($info==NULL){
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>'','ref_user_id'=>'');
- $dataSoc =array('code'=>1,'msg'=>'对战信息获取失败','data'=>$returnData);
- $this->pushMsg( json_encode($dataSoc), array($this->userId));
- $this->returnData($dataSoc);
- }
- M('PkRecord')->where(array('record_id'=>$info['record_id']))->save(array('record_status'=>4));
- M('User')->where(array('user_id'=>array('IN',array($this->userId,$info['user_id']))))->save(array('user_status'=>5));
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']);
- $dataSoc = array('code'=>0,'msg'=>'10s未响应,取消对战','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- $this->returnData($dataSoc);exit;
- }
-
- //把对战信息存到redis
- private function setRedisPkRecordInfo($recordId, $info){
- $redis = $this->getRedis();
- $redis->set('pk_info'.$recordId,serialize($info),3600);
- }
-
- //获取所有题库
- private function getStore($recordId){
- /* $condition = array('record_id'=>$recordId,'pw_status'=>1,'pw_id'=>array('GT',$pwId));
- $join = 'pw LEFT JOIN t_store_words sw ON pw.words_id=sw.words_id';
- $res = M('PkWords')->join($join)->where($condition)->order('pw_id desc')->field('sw.*,pw.pw_id')->find(); */
- $pushKey = 'pk_words_'.$recordId;
- $res = $this->popQueue($pushKey);
- $redis = $this->getRedis();
- $infoRedis = $redis->get('pk_info'.$recordId);
- $info = unserialize($infoRedis);
- if (!$res){
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id']);
- $dataSoc = array('code'=>1,'type'=>13,'msg'=>'获取单词失败','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- $this->returnData($dataSoc);
- }
- $returnData = array();
- //获取错误3个项
- $wordsList = M('StoreWords')->where(array('store_id'=>$res['store_id'],'words_id'=>array('NEQ',$res['words_id'])))->order('rand()')->limit(3)->select();
- $rightText = $res['words_text'];
- $wordsKey = array('b','c','d');
- foreach ($wordsList as $k=>$r){
- $wordsTextArr[$wordsKey[$k]] = $this->getWordsText($r);
- }
- $wordsKey[]='a';
- shuffle($wordsKey);
- $wordsTextArr['a'] = $rightText;
- $wordsTextNewArr = array();
- foreach ($wordsKey as $char){
- $wordsTextNewArr[] = $wordsTextArr[$char];
- }
- $rightKey = array_search('a', $wordsKey);
- $redisKey = 'pk_right_'.$recordId.'_'.$res['pw_id'];
- $this->pushQueue($redisKey,$rightKey+1);
- $returnData = array(
- 'pw_id'=>$res['pw_id'],
- 'store_id'=>$res['store_id'],
- 'words_id'=>$res['words_id'],
- 'words_name'=>$res['words_name'],
- 'words_text' =>$wordsTextNewArr,
- );
- return $returnData;
- }
-
- //下一题
- public function getNextWords(){
- //从redis中获取答案,对比。
- $pwId = I('pw_id');
- $recordId = I('record_id');
- $chooseNum = I('choose_num',0);
- $redis = $this->getRedis();
- $redisKey = 'pk_right_'.$recordId.'_'.$pwId;
- //获取答案
- $rightKey = $this->popQueue($redisKey);
- //获取对战信息
- $infoRedis = $redis->get('pk_info'.$recordId);
- $info = unserialize($infoRedis);
- $ms = $this->getMilliSecond();
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'ms'=>$ms);
- //判断对战是否结束
- if ($info==NULL){
- $resData = array('code'=>1,'msg'=>'对战已结束!');
- $this->returnData($resData);exit;
- }
-
- //已被对手验证答案
- if (!$rightKey){
- $dataSoc = array('code'=>0,'type'=>9,'msg'=>'','data'=>$returnData);
- //$pushUid = $this->pushMsg(json_encode($dataSoc), $this->userId);
- $this->returnData($dataSoc);exit;
- }
-
- $scoreKey = 'score_'.$recordId.'_'.$info['user_id'];
- $refScoreKey = 'score_'.$recordId.'_'.$info['ref_user_id'];
- $score = $redis->get($scoreKey);
- $refScore = $redis->get($refScoreKey);
- if ($refScore<=0 || $score<=0){
- $dataSoc = array('code'=>0,'type'=>11,'msg'=>'','data'=>'');
- $pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- $this->returnData($dataSoc);exit;
- }
-
- //双方都未作答
- if ($chooseNum==0){
- M('PkWords')->where(array('pw_id'=>$pwId))->save(array('pw_status'=>2,'user_status'=>3,'ref_status'=>3));
- $score = $redis->decr($scoreKey);
- $refScore = $redis->decr($refScoreKey);
- }else{
- //答题后,判断是否正确
- if ($chooseNum==$rightKey){
- //自己答对
- if ($info['user_id'] == $this->userId){
- M('PkWords')->where(array('pw_id'=>$pwId))->save(array('pw_status'=>2,'user_status'=>1,'ref_status'=>3));
- }else{
- M('PkWords')->where(array('pw_id'=>$pwId))->save(array('pw_status'=>2,'ref_status'=>1,'user_status'=>3));
- }
- $score = $redis->get($scoreKey);
- $refScore = $redis->decr($refScoreKey);
- }else{
- //自己打错
- if ($info['user_id'] == $this->userId){
- M('PkWords')->where(array('pw_id'=>$pwId))->save(array('pw_status'=>2,'user_status'=>2,'ref_status'=>3));
- }else{
- M('PkWords')->where(array('pw_id'=>$pwId))->save(array('pw_status'=>2,'ref_status'=>2,'user_status'=>3));
- }
- $score = $redis->decr($scoreKey);
- $refScore = $redis->get($refScoreKey);
- }
- }
-
- $pushKey = 'pk_words_'.$recordId;
- $returnData['user_score'] = $score;
- $returnData['peer_score'] = $refScore;
-
- //都未作答
- if ($refScore==0 && $score==0){
- $this->flushQueue($pushKey);
- if ($this->userId == $returnData['user_id']){
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $pkRes = $this->normal($recordId, 1, $returnData['user_id']);
- }else{
- $pkUserid = $returnData['ref_user_id'];
- $peerUserId = $returnData['user_id'];
- $pkRes = $this->normal($recordId, 1, $returnData['ref_user_id']);
- }
- $returnData['record_source'] = $pkRes['record_source'];
- $startTime = $redis->get('pk_start_time'.$recordId);
- $time = time()-$startTime;
- $returnData['time']=$time;
- $returnData['winner'] = $this->userId;
- //$pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- //自己
- $returnData['user_score'] = $pkRes['user_score'];
- $returnData['peer_score'] = $pkRes['ref_user_score'];
- $dataSoc1 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc1), $pkUserid);
- //对手
- $returnData['user_score'] = $pkRes['ref_user_score'];
- $returnData['peer_score'] = $pkRes['user_score'];
- $dataSoc2 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc2), $peerUserId);
- $this->returnData($dataSoc1);exit;
- }
-
- //对手分数先到0
- if ($refScore==0){
- $this->flushQueue($pushKey);
- if ($this->userId == $returnData['user_id']){
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $pkRes = $this->normal($recordId, 1, $returnData['user_id']);
- }else{
- $pkUserid = $returnData['ref_user_id'];
- $peerUserId = $returnData['user_id'];
- $pkRes = $this->normal($recordId, 1, $returnData['ref_user_id']);
- }
- $returnData['record_source'] = $pkRes['record_source'];
- $startTime = $redis->get('pk_start_time'.$recordId);
- $time = time()-$startTime;
- $returnData['time']=$time;
- $returnData['winner'] = $this->userId;
- //自己
- $returnData['user_score'] = $pkRes['user_score'];
- $returnData['peer_score'] = $pkRes['ref_user_score'];
- $dataSoc1 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc1), $pkUserid);
- //对手
- $returnData['user_score'] = $pkRes['ref_user_score'];
- $returnData['peer_score'] = $pkRes['user_score'];
- $dataSoc2 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc2), $peerUserId);
- $this->returnData($dataSoc1);exit;
- }
- //自己分数先到0
- if ($score==0){
- $this->flushQueue($pushKey);
- //$pkRes = $this->normal($recordId, 2, $this->userId);
- if ($this->userId == $returnData['user_id']){
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $pkRes = $this->normal($recordId, 2, $returnData['user_id']);
- }else{
- $pkUserid = $returnData['ref_user_id'];
- $peerUserId = $returnData['user_id'];
- $pkRes = $this->normal($recordId, 2, $returnData['ref_user_id']);
- }
- $returnData['record_source'] = $pkRes['record_source'];
-
- $startTime = $redis->get('pk_start_time'.$recordId);
- $time = time()-$startTime;
- $returnData['time']=$time;
- $returnData['winner'] = $peerUserId;
- if ($this->userId==$info['user_id']){
- $returnData['winner'] = $info['ref_user_id'];
- }
- //自己
- $returnData['user_score'] = $pkRes['user_score'];
- $returnData['peer_score'] = $pkRes['ref_user_score'];
- $dataSoc1 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc1), $pkUserid);
- //对手
- $returnData['user_score'] = $pkRes['ref_user_score'];
- $returnData['peer_score'] = $pkRes['user_score'];
- $dataSoc2 = array('code'=>0,'type'=>10,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc2), $peerUserId);
- //$pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- $this->returnData($dataSoc1);exit;
- }
- //获取下一题
- $wordInfo = $this->getStore($recordId);
- $returnData['list'] = $wordInfo;
- $dataSoc = array('code'=>0,'type'=>7,'msg'=>'','data'=>$returnData);
- $pushUid = $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- //不在线
- if ($pushUid){
- $this->offline($pushUid, $info);
- }
- $this->returnData($dataSoc);exit;
- }
-
- public function aa(){
- $userResInfo = M('User')->where(array('user_id'=>1000010))->field('user_score')->find();
- $levelInfo = M('UserLevel')->where(array('max_score'=>array('EGT',$userResInfo['user_score']),))->order('level_id asc')->field('level_id')->find();
- M('User')->where(array('user_id'=>1000010))->save(array('user_level'=>$levelInfo['level_id']));
-
- $userResInfo = M('User')->where(array('user_id'=>1000005))->field('user_score')->find();
- $levelInfo = M('UserLevel')->where(array('max_score'=>array('EGT',$userResInfo['user_score']),))->order('level_id asc')->field('level_id')->find();
- M('User')->where(array('user_id'=>1000005))->save(array('user_level'=>$levelInfo['level_id'],'user_status'=>5));
-
- //$this->getStoreList(1000010,1000005,34);exit;
- //$this->getNextWord(34);
- //$aa = $this->pushQueue(34,1);
- //var_dump($aa);exit;
- //$bb = $this->popQueue(34);
- //var_dump($bb);exit;
- //$info = M('PkRecord')->where(array('record_id'=>34))->field('record_id,user_id,ref_user_id')->find();
- //$this->setRedisPkRecordInfo(34,$info);
- //$aa = $this->getRedisPkRecordInfo(34);
- //var_dump($aa);exit;
- /* $wordsTextArr = array('a'=>1,'b'=>2,'c'=>3,'d'=>4);
- $wordsKey = array('b','c','d','a');
- shuffle($wordsKey);
- $wordsTextNewArr = array();
- foreach ($wordsKey as $char){
- $wordsTextNewArr[] = $wordsTextArr[$char];
- }
- echo array_search('a',$wordsKey);
- var_dump($wordsKey,$wordsTextNewArr);exit; */
-
- //$this->normal(55, 1, 1000010);
- }
-
- //对战分数上报
- private function normal($recordId, $recordType, $userId){
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('user_id,ref_user_id,record_source')->find();
- $redis = $this->getRedis();
- $redis->del('pk_info'.$recordId);
- M('PkRecord')->where(array('record_id'=>$recordId))->save(array('record_status'=>5));
- M('User')->where(array('user_id'=>array('IN',array($info['user_id'],$info['ref_user_id'],))))->save(array('user_status'=>5));
- if ($info['record_source']==1){
- //添加统计
- $staRes = M('Sta')->where(array('operate_dt'=>strtotime(date('Y-m-d'))))->field('sta_id')->find();
- if ($staRes==NULL){
- M('Sta')->add(array('sta_normal'=>1));
- }else{
- M('Sta')->where(array('sta_id'=>$staRes['sta_id']))->setInc('sta_normal');
- }
- return array('record_source'=>1,'user_score'=>0,'ref_user_score'=>0);
- }else{
- //添加统计
- $staRes = M('Sta')->where(array('operate_dt'=>strtotime(date('Y-m-d'))))->field('sta_id')->find();
- if ($staRes==NULL){
- M('Sta')->add(array('sta_rank'=>1));
- }else{
- M('Sta')->where(array('sta_id'=>$staRes['sta_id']))->setInc('sta_rank');
- }
- }
- if ($info['user_id']==$userId){
- $uid = $info['ref_user_id'];
- }else{
- $uid = $info['user_id'];
- }
- //把pk对象的信息查询出来
- $userRes = M('User')->where(array('user_id'=>array('IN',array($info['user_id'],$info['ref_user_id']))))->field('user_id,user_score,pk_num,win_num,fail_num')->select();
- $userScore = $this->getScore($userId, $uid, $recordId, $recordType, $userRes);
- if ($recordType==1){
- $recordRefType = 2;
- }else{
- $recordRefType = 1;
- }
-
- $userRefScore = $this->getScore($uid, $userId, $recordId, $recordRefType, $userRes);
- return array('record_source'=>2,'user_score'=>$userScore,'ref_user_score'=>$userRefScore);
- }
-
- private function getScore($userId, $uid, $recordId, $recordType, $userRes){
- $userInfo = array();
- foreach ($userRes as $row){
- $userInfo[$row['user_id']] = $row;
- }
- /* 分数相同赢者加10分,败者减10分
- 分数不同且分低者胜时,赢者加10分+双方分数差/10 取整(比如700分赢了800分,这一局就加了20分),败者减10分+双方分数差/20取整(比如800分输给了700分,这一局就减了15分)
- 分数不同且分高者胜时,赢者加10分减去双方分数差/80 + 1 取整(比如800分赢了700分,这一局就加了8分),败者减赢者加分 */
- if ($userInfo[$userId]['user_score']>$userInfo[$uid]['user_score']){
- //自己的分数比对手高
- $score = 10 - floor(abs($userInfo[$userId]['user_score'] - $userInfo[$uid]['user_score'])/80) + 1;
- if ($recordType==1){
- $score = 0 + $score;
- }else{
- $score = 0 - $score;
- }
- }else{
- //自己的分数比对手低
- if ($recordType==1){
- $score = 10 + floor(abs($userInfo[$userId]['user_score'] - $userInfo[$uid]['user_score'])/10);
- }else{
- $score = floor(abs($userInfo[$userId]['user_score'] - $userInfo[$uid]['user_score'])/20) - 10;
- }
- }
- if ($recordType==1){
- //赢了比赛,并且比赛是前十场
- if ($userRes['pk_num']<=10){
- if ($userRes['win_num']<=2){
- $score = 2*$score;
- }else if($userRes['win_num']<6){
- $score = 3*$score;
- }else if($userRes['win_num']<=10){
- $score = 4*$score;
- }
- }
- }else{
- //输了比赛,并且比赛是前十场
- if ($userRes['pk_num']<=10){
- if ($userRes['fail_num']<=2){
- $score = 2*$score;
- }else if($userRes['fail_num']<6){
- $score = 3*$score;
- }else if($userRes['fail_num']<=10){
- $score = 4*$score;
- }
- }
- }
- //判断是否是前十场
- if($userRes['pk_num']>10){
- if ($recordType==1){
- M('User')->where(array('user_id'=>$userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'fail_num'=>0,'pk_num'=>array('exp','pk_num+1'),));
- }else{
- M('User')->where(array('user_id'=>$userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'win_num'=>0,'pk_num'=>array('exp','pk_num+1'),));
- }
- }else{
- M('User')->where(array('user_id'=>$userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'pk_num'=>array('exp','pk_num+1'),));
- }
- M('UserScore')->add(array('user_id'=>$userId,'record_id'=>$recordId,'score_num'=>$score,'operate_dt'=>time()));
- //修改用户等级
- $userResInfo = M('User')->where(array('user_id'=>$userId))->field('user_score')->find();
- $levelInfo = M('UserLevel')->where(array('max_score'=>array('EGT',$userResInfo['user_score']),))->order('level_id asc')->field('level_id')->find();
- M('User')->where(array('user_id'=>$userId))->save(array('user_level'=>$levelInfo['level_id']));
- return $score;
- }
-
- //对战分数上报
- private function rank(){
- $score = I('user_score');
- $recordId = I('record_id');
- $recordType = I('record_type');
- if (empty($recordId)){
- $data = array('code'=>1,'msg'=>'对战ID不能为空');
- $this->returnData($data);exit;
- }
- //添加统计
- $staRes = M('Sta')->where(array('operate_dt'=>strtotime(date('Y-m-d'))))->field('sta_id')->find();
- if ($staRes==NULL){
- M('Sta')->add(array('sta_rank'=>1));
- }else{
- M('Sta')->where(array('sta_id'=>$staRes['sta_id']))->setInc('sta_rank');
- }
-
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('user_id,ref_user_id')->find();
- if ($info['user_id']==$this->userId){
- $uid = $info['ref_user_id'];
- }else{
- $uid = $info['user_id'];
- }
- if (empty($recordType)||!in_array($recordType, array(1,2))){
- $data = array('code'=>1,'msg'=>'对战输赢错误');
- $this->returnData($data);exit;
- }
- //把pk对象的信息查询出来
- $userRes = M('User')->where(array('user_id'=>array('IN',array($info['user_id'],$info['ref_user_id']))))->field('user_id,user_score,pk_num,win_num,fail_num')->select();
- if ($recordType==1){
- //赢了比赛,并且比赛是前十场
- if ($userRes['pk_num']<=10){
- if ($userRes['win_num']<=2){
- $score = 2*$score;
- }else if($userRes['win_num']<6){
- $score = 3*$score;
- }else if($userRes['win_num']<=10){
- $score = 4*$score;
- }
- }
- }else{
- //输了比赛,并且比赛是前十场
- if ($userRes['pk_num']<=10){
- if ($userRes['fail_num']<=2){
- $score = 2*$score;
- }else if($userRes['fail_num']<6){
- $score = 3*$score;
- }else if($userRes['fail_num']<=10){
- $score = 4*$score;
- }
- }
- }
- //判断是否是前十场
- if($userRes['pk_num']>10){
- if ($recordType==1){
- M('User')->where(array('user_id'=>$this->userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'fail_num'=>0,'pk_num'=>array('exp','pk_num+1'),));
- }else{
- M('User')->where(array('user_id'=>$this->userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'win_num'=>0,'pk_num'=>array('exp','pk_num+1'),));
- }
- }else{
- M('User')->where(array('user_id'=>$this->userId))->save(array('user_score'=>array('exp',"user_score+{$score}"),'pk_num'=>array('exp','pk_num+1'),));
- }
- M('UserScore')->add(array('user_id'=>$this->userId,'record_id'=>$recordId,'score_num'=>$score,'operate_dt'=>time()));
- //修改用户等级
- $userResInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_score')->find();
- $levelInfo = M('UserLevel')->where(array('max_score'=>array('EGT',$userResInfo['user_score']),))->order('level_id desc')->field('level_id')->find();
- M('User')->where(array('user_id'=>$this->userId))->save(array('user_level'=>$levelInfo['level_id']));
-
- $data = array('code'=>0,'msg'=>'比赛分数上报成功','data'=>array('user_score'=>$score));
- $this->returnData($data);exit;
- }
-
- //生成3个错误选项
- private function getThreeWords($user_id, $ref_user_id, $num){
- if ($num%2==0){
- $userInfo = M('User')->where(array('is_delete' => 1,'user_id'=>$user_id))->field('user_level')->find();
- $userLevel = $userInfo['user_level'];
- }else{
- $info = M('User')->where(array('is_delete' => 1,'user_id'=>$ref_user_id))->field('user_level')->find();
- $userLevel = $info['user_level'];
- }
- $storeRes = M('Store')->where(array('level_id'=>$userLevel,'is_delete'=>1))->field('store_id')->find();
- if ($storeRes == NULL){
- $storeRes['store_id'] = 1;
- }
- $condition = array('store_id'=>$storeRes['store_id'],'is_delete'=>1);
- $wordsRes = M('StoreWords')->where($condition)->order('words_id desc')->limit(3)->select();
-
- }
-
- //生成毫秒级时间
- private function getMilliSecond(){
- $time = explode (" ", microtime () );
- $time = $time [1] . ($time [0] * 1000);
- $time2 = explode ( ".", $time );
- $time = $time2 [0];
- return $time;
- }
-
- //生成对战题库
- private function getStoreList($user_id, $ref_user_id, $recordId, $pageSize=''){
- if (empty($pageSize)){
- $pageSize = I('page_size',C('PK_SCORE')*2);
- }else{
- $pageSize = $pageSize*2;
- }
- $userInfo = M('User')->where(array('is_delete' => 1,'user_id'=>$user_id))->field('user_level')->find();
- $info = M('User')->where(array('is_delete' => 1,'user_id'=>$ref_user_id))->field('user_level')->find();
- if ($userInfo==NULL || $info==NULL){
- return false;
- }
- if ($userInfo['user_level']==$info['user_level']){
- $storeRes = M('Store')->where(array('level_id'=>$userInfo['user_level'],'is_delete'=>1))->field('store_id')->find();
- if ($storeRes==NULL){
- return false;
- }
- $condition = array('store_id'=>$storeRes['store_id'],'is_delete'=>1);
- //$wordsRes = M('StoreWords')->where($condition)->order('words_id desc')->limit($pageSize)->select();
- $wordsRes = M('StoreWords')->where($condition)->order('rand()')->limit($pageSize)->select();
- }else{
- $userLevel = $userInfo['user_level']>$info['user_level']?$userInfo['user_level']:$info['user_level'];
- $storeRes1 = M('Store')->where(array('level_id'=>$userLevel,'is_delete'=>1))->field('store_id')->find();
- $storeRes2 = M('Store')->where(array('level_id'=>$userLevel-1,'is_delete'=>1))->field('store_id')->find();
- if ($storeRes1==NULL||$storeRes2==NULL){
- return false;
- }
- $condition1 = array('store_id'=>$storeRes1['store_id'],'is_delete'=>1);
- $condition2 = array('store_id'=>$storeRes2['store_id'],'is_delete'=>1);
- $size = ceil($pageSize/2);
- //$wordsRes1 = M('StoreWords')->where($condition1)->order('words_id desc')->limit($size)->select();
- //$wordsRes2 = M('StoreWords')->where($condition2)->order('words_id desc')->limit($size)->select();
- $wordsRes1 = M('StoreWords')->where($condition1)->order('rand()')->limit($size)->select();
- $wordsRes2 = M('StoreWords')->where($condition2)->order('rand()')->limit($size)->select();
- $wordsRes = array_merge($wordsRes1, $wordsRes2);
- }
- //插入对战单词表中
- $dataList = array();
- foreach ($wordsRes as $key=>$words){
- $cacheData = array();
- $dataList = array('record_id'=>$recordId,'words_id'=>$words['words_id'],'operate_dt'=>time());
- $pwId = M('PkWords')->add($dataList);
- $wordsRes[$key]['pw_id'] = $pwId;
- $cacheData = array(
- 'pw_id'=>$pwId,
- 'store_id'=>$words['store_id'],
- 'words_id'=>$words['words_id'],
- 'words_name'=>$words['words_name'],
- 'words_text' =>$this->getWordsText($words),
- );
- $pushKey = 'pk_words_'.$recordId;
- $pushRes = $this->pushQueue($pushKey, $cacheData);
- if (!$pushRes){
- $pushRes = $this->pushQueue($pushKey, $cacheData);
- }
- if (!$pushRes){
- return false;
- }
- }
- return true;
- }
-
- //发弹幕
- public function acFun(){
- $recordId = I('record_id');
- $acfunContent = I('acfun_content');
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('record_id,user_id,ref_user_id')->find();
- if ($info==NULL){
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>'','ref_user_id'=>'');
- $dataSoc = array('code'=>1,'type'=>0,'msg'=>'对战信息获取失败','data'=>$returnData);
- $this->pushMsg(json_encode($dataSoc), array($info['ref_user_id'],$info['user_id']));
- $this->returnData($dataSoc);
- }
- $returnData = array('record_id'=>$info['record_id'],'user_id'=>$info['user_id'],'ref_user_id'=>$info['ref_user_id'],'message'=>$acfunContent);
- $dataSoc = array('code'=>0,'type'=>14,'msg'=>'','data'=>$returnData);
- if ($info['user_id']==$this->userId){
- $uid = $info['ref_user_id'];
- }else{
- $uid = $info['user_id'];
- }
- $this->pushMsg(json_encode($dataSoc), $uid);
- $this->returnData($dataSoc);
- }
-
- //上报作答结果
- public function words(){
- $words = I('words');
- $recordId = I('record_id');
- if (empty($words)){
- $data = array('code'=>1,'msg'=>'对战单词错误');
- $this->returnData($data);exit;
- }
- if ($recordId){
- $data = array('code'=>1,'msg'=>'对战ID错误');
- $this->returnData($data);exit;
- }
- $words = json_decode($words,true);
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('user_id,ref_user_id')->find();
- $flag = FALSE;
- if ($info['user_id'] == $this->userId){
- $flag = TRUE;
- }
- foreach ($words as $row){
- if ($flag){
- M('PkWords')->where(array('record_id'=>$recordId,'words_id'=>$row['words_id']))->save(array('user_status'=>$row['user_status']));
- }else{
- M('PkWords')->where(array('record_id'=>$recordId,'words_id'=>$row['words_id']))->save(array('ref_status'=>$row['user_status']));
- }
- }
- if ($flag){
- $res = M('PkWords')->where(array('record_id'=>$recordId,'pw_status'=>2)) ->field('user_status')->select();
- }else{
- $res = M('PkWords')->where(array('record_id'=>$recordId,'pw_status'=>2)) ->field('ref_status as user_status')->select();
- }
- $data = array('code'=>0,'msg'=>'','data'=>$res);
- }
-
- //获取对战题单词所有单词情况
- public function getStoreWords(){
- $recordId = I('record_id');
- if (empty($recordId)){
- $data = array('code'=>1,'msg'=>'对战ID错误');
- $this->returnData($data);exit;
- }
- $info = M('PkRecord')->where(array('record_id'=>$recordId))->field('user_id,ref_user_id')->find();
- $flag = FALSE;
- if ($info['user_id'] == $this->userId){
- $flag = TRUE;
- }
- if ($flag){
- $res = M('PkWords')->where(array('record_id'=>$recordId,'pw_status'=>2)) ->field('words_id,user_status')->select();
- }else{
- $res = M('PkWords')->where(array('record_id'=>$recordId,'pw_status'=>2)) ->field('words_id,ref_status as user_status')->select();
- }
- if ($res==NULL){
- $data = array('code'=>1,'msg'=>'暂无答题数据');
- $this->returnData($data);exit;
- }
- $pkRes = array();
- $wordsIdArr = array();
- foreach ($res as $r){
- $wordsIdArr[] = $r['words_id'];
- $pkRes[$r['words_id']] = $r['user_status'];
- }
- $swRes = M('StoreWords')->where(array('words_id'=>array('IN',implode(',', $wordsIdArr))))->select();
- if ($swRes==NULL){
- $data = array('code'=>1,'msg'=>'获取数据失败');
- $this->returnData($data);exit;
- }
- foreach ($swRes as $key=>$row){
- $swRes[$key]['user_status'] = $pkRes[$row['words_id']]['user_status'];
- }
- $returnData = array('code'=>0,'msg'=>'','data'=>$swRes);
- $this->returnData($returnData);
- }
- }
|