1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060 |
- <?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;
- if ($this->userId == $returnData['user_id']){
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $returnData1 = $returnData;
- $returnData2 = $returnData;
- $returnData1['user_score'] = $score;
- $returnData1['peer_score'] = $refScore;
- $returnData2['user_score'] = $refScore;
- $returnData2['peer_score'] = $score;
- }else{
- $pkUserid = $returnData['user_id'];
- $peerUserId = $returnData['ref_user_id'];
- $returnData1 = $returnData;
- $returnData2 = $returnData;
- $returnData1['user_score'] = $refScore;
- $returnData1['peer_score'] = $score;
- $returnData2['user_score'] = $score;
- $returnData2['peer_score'] = $refScore;
- }
- $dataSoc1 = array('code'=>0,'type'=>7,'msg'=>'','data'=>$returnData1);
- $pushUid1 = $this->pushMsg(json_encode($dataSoc1), $pkUserid);
- //不在线
- if ($pushUid1){
- $this->offline($pushUid1, $info);
- }
- $dataSoc2 = array('code'=>0,'type'=>7,'msg'=>'','data'=>$returnData2);
- $pushUid2 = $this->pushMsg(json_encode($dataSoc2), $peerUserId);
- //不在线
- if ($pushUid2){
- $this->offline($pushUid2, $info);
- }
- $dataSoc = array('code'=>0,'type'=>7,'msg'=>'','data'=>$returnData);
- $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);
- }
- }
|