where("user_id", $user['user_id'])->where("store_id", $sid)->find(); session('user', $user); //覆盖session 中的 user $this->user = $user; $this->user_id = $user['user_id']; $this->assign('user', $user); //存储用户信息 } else { $usrid = Cookie::get('user_id'); if ($usrid) { $user = M('users')->where("user_id", $usrid)->where("store_id", $sid)->find(); session('user', $user); //覆盖session 中的 user $this->user = $user; $this->user_id = $user['user_id']; $this->assign('user', $user); //存储用户信息 } } if (!$this->user_id) { $this->redirect(U('mobile/User/login', array('stoid' => getMobileStoId()))); exit; } if (($this->pm_erpid && (!$user || !$user['erpvipid'])) || (empty($this->pm_erpid) && !$user || !$user['mobile'])) { $this->redirect(U('mobile/User/login', array('stoid' => getMobileStoId()))); exit; } } public function index() { // $redname = "没有抢红包活动"; $getstoid = getMobileStoId(); $k_rednum = 0;//可抢红包 $wks = 0;//是否未开始 $hdend = 0;//是否结束 $k_rednum1 = 0;//是否抢完 $where['end_time'] = array('egt', time()); $red_res = M('red_config')->where(array('store_id' => $getstoid, 'is_show' => 1, 'is_end' => 0)) ->order('start_time asc,id asc') ->find(); if ($red_res) { $redname = $red_res["redname"]; //$redis = new \Redis(); //$redis->connect(redisip, 6379); $redis =get_redis_handle(); $stoid = $getstoid; $redid = $red_res["id"]; $redkey = "redmoney_" . $stoid . "_" . $redid; $name="redmoney_c_".$stoid."_".$redid; $getcachekey=Cache::get($name); if ($getcachekey!="1")//不存在,进行重新生成 { if ($red_res['redstate'] == 0) { $this->creat_redredis($getstoid, $red_res['id'], $red_res['money'], $red_res['rednum']-$red_res['rednum_rob'], $red_res['emptynum']-$red_res['emptynum_rob'], $red_res['minmoney'], $red_res['maxmoney'], $red_res['redstate']); } else { $this->creat_redredis($getstoid, $red_res['id'], $red_res['money'], $red_res['rednum']-$red_res['rednum_rob'], $red_res['emptynum']-$red_res['emptynum_rob'], $red_res['redmoney'], $red_res['maxmoney'], $red_res['redstate']); } } //去掉else,俩次都要判断 if ($red_res['start_time'] <= time()) { $lennum=$redis->lLen($redkey); if ($lennum>0) { $k_rednum = 0;//可抢红包 $usercount = M('red_record')->where(array('store_id' => $getstoid, 'user_id' => $this->user_id, 'redid' => $red_res['id']))->count();//当前活动已抢几次 if ($usercount > 0 && $red_res['limitnum'] > 0 && $usercount >= $red_res['limitnum']) { $k_rednum = 2;//超过限制次数 } else { $k_rednum = 1;//可抢红包 } } else { $k_rednum1 = 1;//已抢完 } } else { $k_rednum = 0;//活动未开始 $wks = 1;//活动未开始 } } else { $hdend = 1; } $this->assign("hdend", $hdend); $this->assign("k_rednum1", $k_rednum1); $this->assign("wks", $wks); $this->assign("stoid", $getstoid); $this->assign("k_rednum", $k_rednum); $this->assign("red_res", $red_res); $this->assign("redname", $redname); return $this->fetch(); } //生成队列 public function creat_redredis($stoid,$redid,$summoney,$rednum,$emptynum,$minmoney,$maxmoney,$type) { //1-50 空红包 51-100有钱红包 //$redis = new \Redis(); //$redis->connect(redisip, 6379); $redis =get_redis_handle(); $redkey="redmoney_".$stoid."_".$redid; $redis->del($redkey);//删除本来 if ($rednum>0 || $emptynum>0)//有个数 { $getnum=$rednum+$emptynum; $getrednum=0; $getemptynum=0; $rednum_job=$rednum; for ($i=1;$i<=$getnum;$i++) { $rndid=rand(1,100); if ($getrednum>=$rednum) { $rndid=rand(1,50); } else if ($getemptynum>=$emptynum) { $rndid=rand(51,100); } if ($rndid<=50)//抢到空红包 { $getemptynum=$getemptynum+1; $get_usermoney=0; } else { $getrednum=$getrednum+1; if ($type == 1) { $get_usermoney = $minmoney;//固定金额 } else { if ($i == $getnum)//即最后一个红包,金额为剩余全部金额 { if ($summoney>$maxmoney) { $get_usermoney = rand($minmoney*100, $maxmoney* 100) * 0.01; } else { $get_usermoney = $summoney; } } else { //剩余的总金额 取剩余总金额 -最小红包*剩余人数 $rndmoney = $summoney - $minmoney * $rednum_job; if ($rndmoney > 0) { $getrnd_advmoney = 0; if ($rndmoney >= ($maxmoney - $minmoney)) { $getrnd_advmoney = rand(0, ($maxmoney - $minmoney) * 100) * 0.01; } else { $getrnd_advmoney = rand(0, $rndmoney * 100) * 0.01; } $get_usermoney = $minmoney + $getrnd_advmoney; } else { $get_usermoney = $minmoney; } $rednum_job=$rednum_job-1; $summoney = $summoney - $get_usermoney; } //如果超出最大值,判断不能超出限制的值 if($get_usermoney>$maxmoney) $get_usermoney=$maxmoney; } } $get_usermoney=number_format($get_usermoney,2); $redis->lPush($redkey, $get_usermoney); } } $name="redmoney_c_".$stoid."_".$redid; Cache::set($name,"1"); } //抢红包按钮 public function robred() { $getstoid=I('stoid'); $getredid=I('redid'); $where['start_time'] = array('elt', time()); $where['end_time'] = array('egt', time()); $red_res = M('red_config')->where(array('store_id' => $getstoid,'id'=>$getredid,'is_show'=>1,'is_end'=>0)) ->where($where) ->find(); if (empty($red_res)) { $return_arr = array('code' => -1, 'msg' => '找不到相关活动或活动已结束!'); return json($return_arr); } //$redis = new \Redis(); //$redis->connect(redisip, 6379); $redis =get_redis_handle(); $stoid = $getstoid; $redid = $red_res["id"]; $redkey = "redmoney_" . $stoid . "_" . $redid; $name="redmoney_c_".$stoid."_".$redid; $getcachekey=Cache::get($name); if ($getcachekey!="1")//不存在,进行重新生成 { $return_arr = array('code' => -2, 'msg' => '请重新刷新页面!'); return json($return_arr); } $lennum=$redis->lLen($redkey); if ($lennum<1) { $return_arr = array('code' => -1, 'msg' => '手慢了,红包抢完了!'); return json($return_arr); } $usercount=M('red_record')->where(array('store_id'=>$getstoid,'user_id'=>$this->user_id,'redid'=>$red_res['id']))->count();//当前活动已抢几次 if ($usercount>0 && $red_res['limitnum']>0 && $usercount>=$red_res['limitnum']) { $return_arr = array('code' => -1, 'msg' => '您抢红包的次数已用完!'); return json($return_arr); } $get_usermoney=0;//抢到的红包 $rndid=rand(1,100); if ($rndid>50) { $get_usermoney = $redis->lPop($redkey); } else { $get_usermoney = $redis->rPop($redkey); } if ($get_usermoney>0) { $updateconfig['rednum_rob']=$red_res['rednum_rob']+1; $updateconfig['money']=$red_res['money']-$get_usermoney; } else { $updateconfig['emptynum_rob']=$red_res['emptynum_rob']+1; } $frombillid=uuid(); $addrecord['redid']=$red_res['id']; $addrecord['store_id']=$getstoid; $addrecord['user_id']=$this->user_id; $addrecord['mobile']=session('user')['mobile']; $addrecord['erpvipid']=session('user')['erpvipid']; $addrecord['vipname']=session('user')['nickname']; $addrecord['userimg']=session('user')['head_pic']; $addrecord['redmoney']=$get_usermoney; $addrecord['state']=1; $addrecord['addtime']=time(); $addrecord['transdate']=time(); $addrecord['frombillid']=$frombillid; // 启动事务 Db::startTrans(); try { $res_r = M('red_record')->save($addrecord); $res_config = M('red_config')->where(array('id' => $red_res['id']))->save($updateconfig); DB::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollback(); $return_arr = array('code' => -1, 'msg' => '提交失败!'); return json($return_arr); } if ($res_r && $res_config) { if ($this->pm_erpid) { $user['api_token'] = tpCache('shop_info.api_token', $getstoid); $erpdata = array( 'VIPId' => session('user')['erpvipid'],//会员ID 'AdvanceItemId' => $red_res['yucunid'],//预存款项目id 'AddSum' => $get_usermoney,//预存金额 'Remark' => "抢红包预存款",//摘要 'FromBillId' => $frombillid,//来源ID 'kind' => '',//空:自定义充值 非空:促销充值ID ); $erp_rs = getApiData("wxd.vip.addvancelist", $user['api_token'], $erpdata); mlog("返回".$erp_rs,"robred/".$getstoid); $is_save=1; if (empty($erp_rs)) { $is_save=0; } $erp_rs1 = json_decode($erp_rs, true); if ($erp_rs1['code'] != 1) { $is_save=0; } if (empty($is_save))//转预存款失败 { $savedata['transdate'] = 0; $savedata['state'] = 0; $saveres = M('red_record')->where(array('store_id' => $getstoid, 'frombillid' => $frombillid))->save($savedata); } }else { add_withdrawals($this->user_id, $get_usermoney, '抢红包',$getstoid,"",6); } $return_arr = array('code' => 1,'frombillid'=>$frombillid,'usermoney' => $get_usermoney, 'msg' => 'ok!'); return json($return_arr); } else { $return_arr = array('code' => -1, 'msg' => '抢红包出错!'); return json($return_arr); } } //抢中记录 top 10 public function redlist() { $getrecid=I('rec_id'); $getstoid=I('stoid'); if ($getrecid && $getstoid) { $rec=M('red_record')->where(array('store_id'=>$getstoid,'user_id'=>$this->user_id,'frombillid'=>$getrecid))->field('redmoney,redid')->find(); if ($rec) { $this->assign("redmoney",$rec['redmoney']); } $reclist=M('red_record')->where(array('store_id'=>$getstoid,'redid'=>$rec['redid'],'redmoney'=>array('neq',0)))->field('userimg,vipname,mobile,redmoney,addtime')->limit(10)->order('addtime desc')->select(); } $this->assign("reclist",$reclist); return $this->fetch(); } //抢中记录 public function redrec() { $getrecid=I('rec_id'); $getstoid=I('stoid'); $this->assign("rec_id",$getrecid); return $this->fetch(); } public function ajaxredrec() { $pagenum = 10;//每页显示多少条 $getrecid=I('rec_id'); $getstoid=I('stoid'); if ($getrecid && $getstoid) { $count=M('red_record')->where(array('store_id'=>$getstoid,'redid'=>$getrecid,'redmoney'=>array('neq',0))) ->count(); $Page = new Page($count, $pagenum); $show = $Page->show(); $reclist=M('red_record')->where(array('store_id'=>$getstoid,'redid'=>$getrecid,'redmoney'=>array('neq',0))) ->field('userimg,vipname,mobile,redmoney,addtime') ->limit($Page->firstRow . ',' . $Page->listRows) ->order('addtime desc')->select(); $this->assign("reclist",$reclist); } return $this->fetch(); } //首页是否抢红包标 public function getredapp() { $getstoid = getMobileStoId(); $k_rednum=0;//可抢红包 // $where['start_time'] = array('elt', time()); $where['end_time'] = array('egt', time()); $red_res = M('red_config')->where(array('store_id' => $getstoid, 'is_show' => 1, 'is_end' => 0)) ->where($where) ->order('start_time asc,id asc') ->find(); if ($red_res) { $redname = $red_res["redname"]; if ($red_res['start_time']<=time()) { $usercount = M('red_record')->where(array('store_id' => $getstoid, 'user_id' => $this->user_id, 'redid' => $red_res['id']))->count();//当前活动已抢几次 if ($usercount > 0 && $red_res['limitnum'] > 0 && $usercount >= $red_res['limitnum']) { $k_rednum = 0;//超过限制次数 } else { $k_rednum = 1; } }else { $k_rednum = 0;//未开始 } } else { $k_rednum=2; } $return_arr = array('code' => 0,'isshow'=>$k_rednum,'msg' => 'ok!'); return json($return_arr); } }