当前位置: 首页 > 后端技术 > PHP

翻牌设计

时间:2023-03-30 02:29:38 PHP

实现功能:彩票开奖要求:后台控制每种类型的中奖概率,控制奖品数量感谢您的参与。后台有七个奖品。1.获取每个奖品的中奖概率和奖品的id。我是根据1000的总概率计算出来的/**得到奖品和奖品的中奖概率*由PhpStorm创建。*用户:Alisa*日期:2018/12/6*时间:18:02*@param$extract_prize_id*@returnmixed*/publicfunctionuser_prize($extract_prize_id){$prize=(newQuery())->from(['p'=>Prize::tableName()])->leftJoin(['c'=>Coupon::tableName()],'c.id=p.coupon_id')->select('p.prize_pro,p.id')->where(['p.extract_prize_id'=>$extract_prize_id])->andWhere(['>','c.surplus_num',0])->all();$sum=(newQuery())->from(['p'=>Prize::tableName()])->leftJoin(['c'=>Coupon::tableName()],'c.id=p.coupon_id')->where(['p.extract_prize_id'=>$extract_prize_id])->andWhere(['>','c.surplus_num',0])->sum('p.prize_pro');$count=count($prize);foreach($奖金e作为$k=>$v){$list[$k]=$v;}$list[$count]=["prize_pro"=>Math::sub(1000,$sum,0),"id"=>0];$res=$this->get_rand($list);return$list[$res]['id'];}2.进行开奖计算,返回中奖id,id为0表示感谢参与/**开奖计算*CreatedbyPhpStorm。*用户:Alisa*日期:2018/12/6*时间:18:10*@param$proArr*@returnint|string*/publicfunctionget_rand($proArr){$result='';foreach($proArras$key=>$val){$arr[$key]=$val['prize_pro'];}//概率数组的总概率$proSum=1000;//概率数组循环foreach($arras$k=>$v){$randNum=mt_rand(1,$proSum);如果($randNum<=$v){$result=$k;休息;}else{$proSum-=$v;}}return$result;}3.进行后续逻辑处理,判断优惠券剩余张数并减去,减去用户抽奖次数,增加用户抽奖记录,中奖则优惠券将记入用户/**用户抽奖*@param$userId*@param$extract_prize_id*@returnarray|bool*@throws\yii\db\Exception*/publicfunctionextractPrize($userId,$extract_prize_id){$prize_id=$this->user_prize($extract_prize_id);$coupon_id=0;$prize_name='谢谢参与';$prize_url='';if($prize_id){$coupon=(newQuery())->select('c.id,c.name,c.rule,c.validity,c.surplus_num')->from(['pr'=>Prize::tableName()])->leftJoin(['c'=>Coupon::tableName()],'c.id=pr.coupon_id')->where(['pr.id'=>$prize_id])->one();如果($coupon['surplus_num']>0){$coupon_id=$coupon['id'];$prize_name=$coupon['name'];$url=(newQuery())->select('pi.url')->from(['pr'=>Prize::tableName()])->leftJoin(['pi'=>Picture::tableName()],'pi.id=pr.img_id')->where(['pr.id'=>$prize_id])->one();$prize_url=$url['url'];$trans=Yii::$app->db->beginTransaction();试试{$model=newExtractPrizeRecord();$model->prize_id=$prize_id;$model->coupon_id=$coupon_id;$model->prize_name=$prize_name;$model->user_id=$userId;$model->type=$extract_prize_id;$model->create_at=time();$res_ex=$模型->保存();if($res_ex){//减少用户抽奖次数\Yii::$app->db->createCommand("updateusersset$str=$str-1where$str>0anduser_id=:user_id",[':user_id'=>$userId,])->execute();if(($coupon_id>0)&&($coupon['surplus_num']>0)){//减少优惠券剩余数量\Yii::$app->db->createCommand("updatecouponsetsurplus_num=surplus_num-1其中id=:coupon_id和surplus_num>0",[':coupon_id'=>$coupon_id,])->执行();$myModel=newMyCoupon();$myModel->user_id=$userId;$myModel->name=$coupon['name'];$myModel->rule=$coupon['rule'];$myModel->coupon_id=$coupon_id;$myModel->create_at=time();$myModel->update_at=time();$myModel->start_at=time();$myModel->end_at=time()+$coupon['validity']*86400;$myModel->re_code=StringTools::randString(10);$myModel->coupon_number=date('YmdHis')。兰特(10000000,99999999);$myModel->保存();}}else{返回假;}$trans->commit();返回['奖品名称'=>$奖品名称,'奖品网址'=>$奖品网址];}catch(\Throwable$t){$trans->rollBack();返回假;}}如果觉得这篇文章还不错,请在下角给我点个赞,是对我开源最大的鼓励励志O(∩_∩)O