最新文章:

首页 后端

抽奖算法,基于thinkphp

发布时间:2016年02月16日 评论数:抢沙发 阅读数:3482

    这是一个多个商品一起抽奖的抽奖代码。抽奖算法逻辑:比如奖品的中奖概率是百分比 商品A是1% 商品B是2% 那么就创建一个100位的数组键值0是A 1,2是B 抽的时候随机数,中了0 就是0商品 1或者2 就是B商品。

    //抽奖
    	public function startDraw(){
                    //获取用户信息和抽奖分类的信息 这里抽奖分类就是 需要多少金币抽奖,下面就扣除多少金币
    		$postData = I('post.','','trim'); 
    		if(empty($_POST['userid'])){
    			echo json_encode($this->errorCode[1]);
    			return false;
    		}
    		if(empty($_POST['typeid'])){
    			echo json_encode($this->errorCode[1]);
    			return false;
    		}
    		
    
    		//每日一次免费抽奖 记录prize_nums_record 并且判断
    		
    		if($_POST['isfree']){
    			$last_res = M('prize_nums_record')->where('userid='.$_POST['userid'].' and typeid='.$_POST['typeid'])->order('id desc')->find();
    			if(date('Ymd', $last_res['time']) == date('Ymd')) {
    				echo json_encode($this->errorCode[1004]);
    				return false;
    			}
    			$postData['time'] = time();
    			M('prize_nums_record')->add($postData);
    		}
    
    
    		$prize_model = new PrizeModel();
    		$member_model = new MemberModel();
    
    		//获取price_type 的信息
    		$prize_type = $prize_model->getPrizeTypeByPricetypeid($_POST['typeid']);
    		$cointype = $prize_type['cointype'];
    		$coin = $prize_type['coin'];
    
    		//获取用户信息
    		$member_info = $member_model->getUserByid($_POST['userid']);
    		//判断用户币数 如果不足 就退出
    		if($cointype){
    			if($coin > $member_info['accountgold']){
    				echo json_encode($this->errorCode[1000]);
    				return false;
    			}else{
    				$r = $member_model->reduceAccountgold($member_info['userid'],$coin);
    				if(!$r){
    					echo json_encode($this->errorCode[503]);
    					return false;
    				}
    			}
    		}else{
    			if($coin > $member_info['accountsilver']){
    				echo json_encode($this->errorCode[1001]);
    				return false;
    			}else{
    				$r = $member_model->reduceAccountsilver($member_info['userid'],$coin);
    				if(!$r){
    					echo json_encode($this->errorCode[503]);
    					return false;
    				}
    			}
    		}
    		//输出将要抽奖的所有商品 用于下面forach 中奖
    		$res = $prize_model->getPrizeListByTypeid($_POST['typeid']);
    		//一起计算
    		$arr = range(0,99);
    		foreach ($arr as $ak => $av) {
    			$arr[$ak] = 0;
    		}
    		$i = 0;
    		foreach ($res as $key => $value) {
    			$prize_nums = $value['probability'];
    			if($prize_nums>1){
    				for($j=0;$j<$prize_nums;$j++){
    					$arr[$i] = $value['prizeid'];
    					$i++;
    				}
    			}else{
    				$arr[$i] = $value['prizeid'];
    				$i++;
    			}
    		}
    		//print_r($arr);
    		$this->errorCode[0]['info'] = '很遗憾,您未中奖,谢谢参与!';
    		$rand_key = array_rand($arr);
    		$prizeid = $arr[$rand_key];
    		$prize_info = $prize_model->getPrizeByPrizeid($prizeid);
    		if($prize_info){
    			$data['typeid'] = $prize_info['typeid'];
    			$data['prizeid'] = $prizeid;
    			$data['userid'] = $_POST['userid'];
    			$data['time'] = time();
    			$prize_record_model = new Prize_recordModel();
    			$reduce_res = $prize_model->reduceNmus($prizeid);
    			if($reduce_res){
    				$result = $prize_record_model->add($data);
    				$this->errorCode[0]['info'] = '恭喜您中奖啦!恭喜您获得'.$prize_info['title'].'。1个工作日内,工作人员会与您联系!';
    				$this->advicesSave(1,$_POST['userid'],'恭喜您中奖啦!恭喜您获得'.$prize_info['title']);
    				echo json_encode($this->errorCode[0]);
    				return;
    			}else{
    				echo json_encode($this->errorCode[0]);
    				return false;
    			}
    		}else{
    			echo json_encode($this->errorCode[0]);
    		}
    	}
    
    

二维码加载中...
本文作者:初心      文章标题: 抽奖算法,基于thinkphp
本文地址:http://www.5wcx.com/back/10.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
sitemap