数据库先

activity_lyq_lottery 奖品表
lotteryid
name    礼品名称
sum 礼品总数
time_start  开始时间
time_end    结束时间
addtime 时间
probability 中奖概率    大于0:表示概率    0:表示奖品数为概率
isdisable   是否开启    0开启1关闭
listorder   排序  默认正序
msg 发送短信或显示信息
content 备注
angle   转盘角度    奖品所在的角度
time_1  时间段个数限制 个数限制,-1表示不限制,0表示不发
time_2
time_3
time_4
time_5
time_6
time_7
time_8
time_9
time_10
time_11
time_12
time_13
time_14
time_15
time_16
time_17     activity_lyq_lottery_log    抽奖日志
logid   ID
uid 用户ID
tel 手机号
addtime 抽奖时间
ip  抽奖IP
lotteryid   奖品ID
iswinning   是否抽中    1抽中0无
result  返状态回值
hao 随机号

主程序

<?php
require_once (APP_ROOT . "./class/class_lib.php");
require_once libfile ( 'class/StoreProcs' );
pc_base::load_app_class('table_sub','',0);
/*** 大转盘* @author Administrator**/
class lib_dzp_lottery extends app_lib {/*** 奖品表*/public $lottery = 'activity_lyq_lottery';/*** 奖品日志表*/public $lottery_log = 'activity_lyq_lottery_log';/*** n等奖品*/private $level = array();/*** 奖品信息*/private $lotteryArray = array();/**** 随机数结束位数*/private $max = 30000;/*** 中奖专业户*/private $tel_zy=false;/***增加时段时间*/private $second=0;/***时段时间*/private $time=array();/*** 读取配置*/public function load_setting() {$data=getcache('lyqdzp_setting');define('TIME', time());                                  //当前时间define('L_START', strtotime($data['l_start']));           //报名开始时间define('L_END', strtotime($data['l_end']));             //报名结束时间,-1意思昨天 23:59:59define('L_DAY_START',$data['l_day_start']);               //每天开始时间define('L_DAY_END', $data['l_day_end']);                //每天结束时间define('L_DAY_CISHU', $data['l_day_cishu']);            //每天获得奖品次数define('L_CISHU', $data['l_cishu']);                  //共计获得奖品次数define('L_MIN', 20);                                    //最少来福币define('L_LFB', $data['l_lfb']);                     //减少来福币define('L_ZY', $data['l_zy']);                           //专业户define('L_QUANSHU', $data['l_quanshu']);               //圈数,大转盘开始圈数define('L_KONGJIANG', intval($data['l_kongjiang']));         //空奖概率$host='www.*****.com';                             //现网if($_SERVER['HTTP_HOST']=='221.******'){$host='221.*******';                       //测试机}elseif($_SERVER['HTTP_HOST']=='125.com'){$host='125life.com';                                //本地}elseif(strpos($_SERVER['HTTP_HOST'],'192.168.')==0){//$host=$_SERVER['HTTP_HOST'].'/125.com';           //本地}define('L_SITE', 'http://'.$host.'/');                   //域名最后加/define('L_URL', L_SITE.'index.php');    //访问地址//只能通过flash地址访问$s=L_SITE.'flash/zhuanpan/i.swf';if(preg_replace('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s){exit('老兄你已经得到得够多了,请通过正规途径摇奖!');}$this->load();}/*** 黑名单*/private $heimingdan = array();/*** 读取奖品配置*/public function load() {$this->setlottery ();$this->heimingdan = getcache ( 'tel', 'blanklist' );}private function setlottery() {$time=strtotime(date('Y-m-d',TIME));$sql = "select u.* ";$sql .= " from " . DB::table ( $this->lottery ) . " AS u ";$sql .= " where 1 ";$sql .= " and u.isdisable='0' ";$sql .= " and u.time_start<='$time' ";$sql .= " and u.time_end>='$time' ";$sql .= " ORDER BY u.listorder ";$d = DB::fetch_all ( $sql );foreach ( $d as $r ) {$sql = "select count(*) m from " . DB::table ( $this->lottery_log );$sql .= " where lotteryid='".$r ['lotteryid']."' and iswinning='1' ";$r ['num']= intval ( DB::result_first ( $sql ) );$r ['sum_over'] = intval ( $r ['sum'] ) - intval ( $r ['num'] );$r['msg']=str_replace('{name}', $r['name'],$r['msg']);$this->lotteryArray [$r ['lotteryid']] = $r;}//时间段的奖品数为概率$sum = 0;$this->second=$second=45*60;$d = array(1 => array('time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ),'time_end' => strtotime ( date ( 'Y-m-d 07:59:59', TIME ) )));for ($i=2;$i<=17;$i++){$d[$i]=array('time' => strtotime ( date ( 'Y-m-d '.($i+6).':00:00', TIME ) )+$second,'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) )+$second);}foreach ($d as $k=>$t){if(TIME>=$t['time']&&TIME<=$t['time_end']){foreach ( $this->lotteryArray as $r ) {if ($r ['sum_over'] > 0) {if($r ['time_'.$k]>0){$sum += $r ['time_'.$k];}}}}}$this->time=$d;//本时段 奖品数foreach ($d as $k=>$t){if(TIME>=$t['time']&&TIME<=$t['time_end']){$m = 1;$probability = 0;$newsum=0;//80%空奖+20%奖$this->max = $sum + $sum * (L_KONGJIANG/100) / ((100-L_KONGJIANG)/100);foreach ( $this->lotteryArray as $r ) {$newsum=0;if ($r ['sum_over'] > 0) {if($r ['time_'.$k]>0){$newsum=$r ['time_'.$k];if($r['probability']>0){$probability=0;$probability=ceil($newsum*100/$r['probability']);if($probability>0){$newsum=$probability;}}$this->level [$r ['lotteryid']] ['start'] = $m;$this->level [$r ['lotteryid']] ['end'] = $m + $newsum;$m = $m + $newsum;}elseif ($r ['time_'.$k]<0){$newsum=$r ['sum_over'];if($r['probability']>0){$probability=0;$probability=ceil($newsum*100/$r['probability']);if($probability>0){$newsum=$probability;}}$this->level [$r ['lotteryid']] ['start'] = $m;$this->level [$r ['lotteryid']] ['end'] = $m + $newsum;$m = $m + $newsum;}}}}}}/*** 检测用户是否中奖 0 谢谢参与,其他 返回奖品data数据* @param array $user array(uid,tel,ip)*/public function check($user) {if (intval ( $user ['uid'] ) < 1) {//没有登录return 0;}if(intval(TIME)<intval(L_START)){//您来早了,活动还没有开始!return -21;}if(intval(TIME)>intval(L_END)){//已经过了活动时间,非常遗憾,谢谢!return -22;}if ($this->get_user_lfb ( $user ['uid'] ) < L_MIN) {//$this->credit ( $user ['uid'], -11, $logid );return -11; //您的来福币余额不足}$data = array('uid' => $user ['uid'],'tel' => $user ['tel'],'ip' => $user ['ip'],'addtime' => time ());$logid = DB::insert ( $this->lottery_log, $data, true );//检查用户  每天 已中奖品数if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ), true ) >= L_DAY_CISHU) {$this->credit ( $user ['uid'], -12, $logid );//很遗憾,你本次什么也没有抽到!return -12;}//检查用户  全部 已中奖品数if ($this->get_lottery ( $user ['uid'], 0, 0, true ) >= L_CISHU&&L_CISHU>0) {$this->credit ( $user ['uid'], -12, $logid );//很遗憾,你本次什么也没有抽到!return -15;}//检测黑名单,设置概率if ($this->checkhei ( $user ['tel'] ) > 0) {$this->credit ( $user ['uid'], -13, $logid );//很遗憾,你本次什么也没有抽到!return -13;}$lotteryid = $this->choujiang();$this->credit ( $user ['uid'], $lotteryid<1?$lotteryid:0, $logid, $lotteryid ,$this->hao);if ($lotteryid > 0) {return $this->lotteryArray [$lotteryid];} else {return -4;}//-1奖品已发完//-2本时段奖品已玩//-3不发奖品//-4奖品有问题//-11您的来福币余额不足//-12很遗憾,你本次什么也没有抽到!//-13黑名单里面,很遗憾,你本次什么也没有抽到!//-14中奖专业户禁止中高讲高奖品//-15已超过yizhong总奖品数//-21您来早了,活动还没有开始!//-22已经过了活动时间,非常遗憾,谢谢!//-23对不起,现在不是活动时间,活动时间为每天}/*** 显示* @param unknown_type $data*/public function show($data){$ok=0;//3中奖$zz=0;//转盘度数$result='';//奖品名称$lotteryid=0;//奖品IDif(is_array($data)){$ok=3;$result=$data['msg'];$zz=$data['angle']+L_QUANSHU*360;$lotteryid=$data['lotteryid'];}else{$m='';switch($data){case 0:{$m= '请先登录!';}break;case -11:{$m= '您的来福币余额不足!';}break;case -12:{$m= '很遗憾,你本次什么也没有抽到!';}break;case -21:{$m= '您来早了,活动还没有开始!';}break;case -22:{$m= '已经过了活动时间,非常遗憾,谢谢!';}break;case -23:{$m= '对不起,现在不是活动时间,活动时间为每天'.L_DAY_START.':00-'.L_DAY_END.':00';}break;default:{$m= '很遗憾,你本次什么也没有抽到!';}break;}$result=$m;$ok=3;//3中奖$zz=360+L_QUANSHU*360;//再接再厉}header("Expires:Mon,26Jul199705:00:00GMT");header("Cache-Control:no-cache,must-revalidate");header("Pragma:no-cache");header("Content-type:text/html;charset=utf-8");echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";echo '<gift>'."\n";echo '<shift ok="'.$ok.'" zz="'.$zz.'" add="9" down="0" lid="0" result="'.$result.'"/>'."\n";echo '</gift>'."\n";exit;}/*** 抽奖的号*/private $hao=0;/*** 抽奖开始*/private function choujiang() {$j = 0;$lotteryid = 0;$j = mt_rand ( 1, $this->max );$this->hao=$j;foreach ( $this->level as $k => $r ) {if ($r ['start'] <= $j && $j< $r ['end'] ) {$lotteryid = $k;break;}}$d = $this->time;if($lotteryid>0){$l=$this->lotteryArray [$lotteryid];$sql = "select count(*) m from " . DB::table ( $this->lottery_log );$sql .= " where lotteryid='$lotteryid' ";$s= intval ( DB::result_first ( $sql ) );$sum_over=$l['sum']-$s;if($sum_over>0){//本时段 奖品数$sum=0;foreach ($d as $k=>$r){if(TIME>=$r['time']&&TIME<=$r['time_end']){if($l['time_'.$k]>0){//个数限制$sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+1,$lotteryid);if($sum>=$l['time_'.$k]){//本时段奖品已玩$lotteryid=-2;break;}}elseif ($l['time_'.$k]==0){//不发奖品$lotteryid=-3;break;}else{//-1 不限制}}}if($this->tel_zy && $lotteryid>0&&$lotteryid<4){$lotteryid=-14;}}else{//奖品已发完$lotteryid=-1;}}else{//奖品有问题$lotteryid=-4;}return $lotteryid;}/*** 检测黑名单和普通用户,概率* @param string $tel* @return 大于1 表示本次禁止抽*/private function checkhei($tel) {$n = mt_rand ( 1, 100 );if (in_array ( $tel, $this->heimingdan ['tel'] ) && L_ZY > 0) {$this->tel_zy=true;if ($n > L_ZY) {return 1;}}else{//号码检测if (!self::check_tel($tel)) {return 1;}}return 0;}/*** 合计奖品数* @param intval $uid* @param intval $start* @param intval $end* @param bool $bool true 获得奖品数 false 不统计* @return number*/private function get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) {$sql = "select count(*) m from " . DB::table ( $this->lottery_log );$sql .= " where 1 ";if (intval ( $start ) > 0) {$sql .= " and addtime>='$start' ";}if (intval ( $end ) > 0) {$sql .= " and addtime<'$end' ";}if ($bool) {$sql .= " and lotteryid>0 ";}if (intval ( $uid ) > 0) {$sql .= " and uid='$uid' ";}return intval ( DB::result_first ( $sql ) );}/*** 合计奖品数* @param intval $uid* @param intval $start* @param intval $end* @param intval $bool 奖品id* @return number*/private function get_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) {$sql = "select count(*) m from " . DB::table ( $this->lottery_log );$sql .= " where 1 ";if (intval ( $start ) > 0) {$sql .= " and addtime>='$start' ";}if (intval ( $end ) > 0) {$sql .= " and addtime<'$end' ";}if ($lotteryid>=0) {$sql .= " and lotteryid='$lotteryid' ";}if (intval ( $uid ) > 0) {$sql .= " and uid='$uid' ";}return intval ( DB::result_first ( $sql ) );}/*** 获取用户来福币* @param intval $uid* @return number*/public function get_user_lfb($uid) {$sql = "select extcredits2 from sz_common_member_count ";$sql .= " where 1 ";$sql .= " and uid='$uid' ";$s=intval ( DB::result_first ( $sql ) );return $s>0?$s:0;}/*** 记录日志和更新用户来福币* @param intval $uid* @param intval $r  返回值* @param intval $logid* @param intval $lotteryid*/private function credit($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) {$data = array();if ($lotteryid > 0) {$data ['lotteryid'] = $lotteryid;$data ['iswinning'] = 1;}$data ['result'] = $result;$data ['hao'] = $hao;$data ['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'];$data['139sz']=$this->type?0:1;DB::Update ( $this->lottery_log, $data, " logid='$logid' " );if (L_LFB > 0) {$sql = "UPDATE sz_common_member_count SET extcredits2=extcredits2-'". L_LFB ."' WHERE extcredits2>'0' and extcredits2>='".L_LFB."' and uid='$uid' ";DB::query ( $sql );$this->credit_log ( $uid, 'reduce', L_LFB, 1, '积分清零活动' );}}/***手机号检查*/private function check_tel($tel){$different_network=table_sub::get_different_network();if (!preg_match("/$different_network/",$tel)) {return false;}return true;}/*** 存储过程链接*/private $StoreProcs;/*** 来福币日志 存储过程* @param intval $uid* @param string $op add增加  reduce 消耗* @param intval $creditvalue 来福币* @param intval $credittype 1来福币 2来福点* @param string $oreason  说明*/private function credit_log($uid, $op, $creditvalue, $credittype, $oreason) {if (! $this->StoreProcs) {$this->StoreProcs = new StoreProcs ();}//调用存储过程$this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$creditvalue,'$oreason')" );}}

调用:

$dzp=new lib_dzp_lottery();
$u=array('uid'=>$_G ['uid'],'tel'=>$_G ['tel'],'ip'=> $_G ['clientip']);
$dzp->load_setting();
$dzp->show($dzp->check($u));

项目4:抽奖程序 分时间段(按时段设置的奖品数为概率)相关推荐

  1. PHP 每小时抽奖,php分时间段的抽奖程序代码

    //您来早了,活动还没有开始! return -21; } if(intval(TIME)>intval(L_END)){ //已经过了活动时间,非常遗憾,谢谢! return -22; } i ...

  2. 项目经验:抽奖程序(Python)

    每家互联网公司到年末都会有聚会,聚会少不了抽奖环节,如何公平.有趣的做好抽奖活动是年会开的好不好的重要评价指标,以下笔者从一个程序员角度,设计一款抽奖程序. 一.业务 参加抽奖的人员数据保存在一个cs ...

  3. js年会抽奖_嘿!这真的是一个正经的抽奖程序!

    编者按:本文作者奇舞团团长月影 奇舞团有一个传统项目,每年年会由我在现场写一个抽奖程序,所有人一起review代码,以确保抽奖算法正确且公平,然后愉快滴开始抽奖. 现场写的抽奖程序不仅要公平无bug, ...

  4. 基于Unity hdrp制作的转盘抽奖程序

    因为社团里活动需要,所以用unity简单做了一个小抽奖程序,因为想玩sp所以贴了一堆乱七八糟的材质准备搞个废土风不过好像有点违和). 抽奖的核心在于Unity中动画的设计,在前半段固定好的指针转速缓速 ...

  5. 彩票模拟选号程序java_java课程设计-彩票购买抽奖程序

    彩票抽奖程序 [TOC] ###可实现功能: 允许注册用户,用户信息包括用户id,用户名,密码,账户金额,电话号码等属性. 允许注册用户购买彩票:手动选号.随机选号,并允许设置投注数. 抽奖功能:要求 ...

  6. python某公司为员工发放奖品_python实现年会抽奖程序

    用python来实现一个抽奖程序,供大家参考,具体内容如下 主要功能有 1.从一个csv文件中读入所有员工工号 2.将这些工号初始到一个列表中 3.用random模块下的choice函数来随机选择列表 ...

  7. 【PAT乙】1069 微博转发抽奖 (20分) set

    1069 微博转发抽奖 (20分) 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行 ...

  8. python重复抽奖_python—抽奖程序

    抽奖程序: 1.每次抽奖完成,会提示是否继续抽奖,只有输入"是"才继续抽奖 2.抽奖逻辑: (1)生产0-100的整数,构造成列表 (2)构造三个列表,分别是一等奖.二等奖.三等奖 ...

  9. 抽奖程序(python)

    抽奖程序: 1.每次抽奖完成,会提示是否继续抽奖,只有输入"是"才继续抽奖 2.抽奖逻辑: (1)生产0-100的整数,构造成列表 (2)构造三个列表,分别是一等奖.二等奖.三等奖 ...

  10. 幸运大转盘php逻辑判断,jQuery幸运大转盘_jQuery+PHP抽奖程序(上)

    网上转盘抽奖程序大多是flash完成的,而本文使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,我们分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转动效果.第二部分侧重使用P ...

最新文章

  1. 怎么把项目推到gitlab上_将本地项目添加到 GitLab 上管理
  2. 益老而弥坚:软件开发哲学反思录
  3. 计算机系统结构sw指令集,《深入理解计算机系统》第三章学习笔记
  4. 构建二叉堆时间复杂度的证明
  5. WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
  6. Convolutional Neural Networks for Visual Recognition 1
  7. 【Flink】Flink exitCode=239
  8. c#扩展方法奇思妙用高级篇八:Type类扩展
  9. sign签名算法一致算法-.net、java、golang
  10. 测试计算机性能的软件比较专业,用什么软件可以测试计算机的整体性能?
  11. 锁存器、触发器和寄存器
  12. 任正非:华为要做追上特斯拉的大乌龟
  13. 单元素/组件的过渡以及过渡钩子的运用
  14. 网络安全系列-三十四: EDR、NDR、XDR 、HIPS、NIPS、NTA、DPI、DFI、南北流量、东西流量:傻傻分不清楚
  15. Android 9.0 wifi 热点 汇总
  16. 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C++)】
  17. overflow的用法(auto)
  18. 《团队-团队编程项目作业名称-成员简介及分工》
  19. Word中遇到的各种问题及解决方案
  20. 一文搞懂TCP/IP,入门计算机网络必看!

热门文章

  1. 数据表分区, 全新分区
  2. 孙鑫VC学习笔记:第十二讲 (二) 用C语言函数读写文件
  3. php代码建议,php代码优化建议
  4. 华为u8825d解锁工具_黔隆科技刷机教程VIVOY55L.PD1613忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  5. 修改手机屏幕刷新率_今年买手机绕不开高刷新率屏幕,144Hz比120Hz更好吗?
  6. 拓端tecdat|R语言股票收益分布一致性检验KS检验Kolmogorov-Smirnov、置换检验Permutation Test可视化
  7. php 文件服务器,GitHub - RainmanJin/PSFS: PHP Simple File Server 极简版PHP文件服务器
  8. caffe上手:微调CaffeNet用于车颜色识别
  9. 使用visio画数据库模型图
  10. python如何将数组里的数提取出来_python – 从数组数组中提取数组