抽开奖
来源:互联网 发布:你踩着我数据了 编辑:程序博客网 时间:2024/05/17 07:32
controller: //确认抽奖 public function openRaffle(){ $this->isLogin(2); $v_id = I('id'); $id=(int)cryptcode($v_id,'decode'); if(is_numeric($id)){ $product=$this->jifenShopProductModel->getOne($id); if($product && $product['type']==2 ){ //获取积分 $rs =$this->user->getJf($this->uid,true); if( $rs['total'] < $product['md']*1){ $return = array('message' => '发生了什么?面点不足,快去赚些再来!','code' =>7); $this->ajaxReturn($return, 'JSONP'); } if($product['startime']>1 && time()<$product['startime'] ){ $return = array('message' => '抽奖未开始','code' =>7); $this->ajaxReturn($return, 'JSONP'); }elseif(time()>$product['endtime'] && (int) $product["endtime"] > 0){ $return = array('message' => '抱歉,活动已经结束,下次早点来!','code' =>7); $this->ajaxReturn($return, 'JSONP'); }else{ //进行中 } //判断是否拉入黑名单 $existUid= $this->jifenRefuserModel->getExistUid($this->uid); if($existUid){ $return = array('message' => '您已被拉入黑名单 !','code' =>10); $this->ajaxReturn($return, 'JSONP'); } //可用于抽奖的个数 $temp_stock=$product['stock']-$product['stock_record']; $temp_stock=$temp_stock<=0?0:$temp_stock; //判断时间是否为空 if($product['startime']>1 && $product['endtime']>$product['startime']){ //判断今天中奖个数是否已经用完 true可用 false不可用 $raffleRateStatus= $this->jifenShopProductModel->raffleRateStatus($product); $rate= $this->_handleRate($product['rate'],$temp_stock,$product['stock']); if((!$raffleRateStatus) || ($temp_stock==0)){ $rate['rateYes']=0; } }else{ $rate= $this->_handleRate($product['rate'],$temp_stock,$product['stock']); } if(!$rate){ $return = array('message' => 'rate失败','code' =>9); $this->ajaxReturn($return, 'JSONP'); } $prize_arr = array( '0' => array('id'=>1,'prize'=>$product['name'],'v'=>$rate['rateYes']), '1' => array('id'=>2,'prize'=>'下次没准就能中哦','v'=>$rate['rateNo']), ); $data=$this->_choujiang($prize_arr);//抽奖结果 $result=$data['yes'];//抽奖结果 数组 $this->jifenShopRecordModel->addWinningResult($product['id'],$this->uid,$result);//保存抽奖结果 $redisRecordCode_pic=$this->jifenShopRecordModel->addRedisPicCode($id); //添加抽奖信息 //$return=$this->_addRecordType2($id,$count_record,$redisRecordCode); $recordInfo=$this->_addRecordTypeRaffle($id); //code: 1添加成功 0添加失败 if($recordInfo['code']==1){ $total_dec= D("JifenTotal")->dec($this->uid,$product['md'],$product['type'],0); //扣积分 $return = array('message' => 'ok','code' =>1,'code_pic'=>$redisRecordCode_pic,'rid'=>$recordInfo['id']); $this->jifenShopRecordModel->addZsetDefJifenUidKey($this->uid,cryptcode($recordInfo['id'],'decode')); }else{ $return = array('code' =>0,'code_pic'=>$redisRecordCode_pic); } $this->ajaxReturn($return, 'JSONP'); } } $return = array('message' => '参数有误!','code' => 2); $this->ajaxReturn($return, 'JSONP'); }/** * 转换中奖率格式 得到中奖率 * @param $rate 格式:0.01 返回数组array('rate'=1,'rate_count'=100)表示百分之一的中奖率 * @param $stock 剩余库存数 * @param $count 总产品数 * @return mixed */ private function _handleRate($rate,$stock,$count){ $rate=(float)$rate; if($rate>=0 &&$rate<=1 && $stock>=0){ if($rate==0){ $arr['rateYes']=0; $arr['rateNo']=$stock; }elseif($rate==1){ $arr['rateYes']=$stock; $arr['rateNo']=0; }else{ $rateNo=1-$rate; $rateMo_count=ceil($stock/$rate*$rateNo); $arr['rateYes']=$stock; $arr['rateNo']=$rateMo_count; } if($stock==0){ $arr['rateNo']=$count; } if($stock==0 && $count==0){ $arr['rateNo']=10; } return $arr; }else{ return false; } }/** * 抽奖 * @param $prize_arr 参与投资的数组 */ public function _choujiang($prize_arr){ foreach ($prize_arr as $key => $val) { $arr[$val['id']] =(int)$val['v']; } $rid = $this->_get_rand($arr); //根据概率获取奖项id $res['yes'] = $prize_arr[$rid-1]; //中奖项 unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项 shuffle($prize_arr); //打乱数组顺序 for($i=0;$i<count($prize_arr);$i++){ $pr[] = $prize_arr[$i]; } $res['no'] = $pr; return $res; } /** * 得到中奖的组ID * @param $proArr 包含每个产品数据的数组 * @return int|string 返回中奖组ID */ private function _get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum <= $proCur) { $result = $key; break; } else { $proSum -= $proCur; } } unset ($proArr); return $result; }model:/** * 判断当天的中奖数是否用完 * @param $product * @return bool 还可以 */ public function raffleRateStatus($product){ $days=ceil(($product['endtime']-time())/3600/24) ; $dayProduct_sum=ceil(($product['stock']-$product['stock_record'])/$days); $winProductSumDay= $this->getWinProductSumDay($product['id']);//更新每天中奖数 $isEndDay= date('Ymd') == date('Ymd',$product['endtime']);//是否为最后一天 $status=true; if($winProductSumDay>=$dayProduct_sum ){ //当天的中奖率已经用完,不可再中 if($isEndDay){ $status= true; }else{ $status= false; } }else{ $status= true; } //return $status; return true;//20150205关闭限制 }
0 0
- 抽开奖
- 刮刮乐开奖
- 双色球开奖
- 彩票开奖api 彩票开奖结果查询
- 双色球开奖论坛
- 开奖历史表
- 爬取双色球的开奖记录
- shell模拟双色球开奖
- 双色球开奖啦~~~
- 双色球开奖小程序
- k计划开奖号
- 博饼开奖
- 综合练习双色球开奖
- 综合练习双色球开奖
- 双色球防真开奖分析源码[部分]
- 2008中国邮政明信片开奖 号码
- 今天的开奖信数据
- java 随机数 模拟双色球开奖
- 早找癌准吗?慈铭体检“Hsp90α(早找癌)”肿瘤筛查的准确度高吗
- 计蒜客 难题题库 211 火柴棍游戏
- hdu5360--Hiking(优先队列)
- android停止应用不能接收广播
- 日经春秋 20150810
- 抽开奖
- 20大数据可视化工具及资料
- 最长公共上升子序列---病毒
- 4.1 标准库--正则表达式
- android 开发中需要注意内存泄露的地方
- 怎样解决MathType中Font字体乱码
- 计蒜客 难题题库 216 冗余关系
- POJ 1080:Human Gene Functions LCS经典DP
- 【Android UI】TabHos之基础实现