抽奖概率为:奖品总数为概率 =================================== 项目3 抽奖程序 分时间段 =================================== 数据库: activity_lyq_lottery奖品表lotteryidname礼品名称sum礼品总数time_start开始时间time_end结束时间addtime时间prob

抽奖概率为:奖品总数为概率

===================================

项目3 抽奖程序 分时间段

===================================

数据库:

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抽奖日志

logidID

uid用户ID

tel手机号

addtime抽奖时间

ip抽奖IP

lotteryid奖品ID

iswinning是否抽中1抽中0无

result返状态回值

hao随机号

主程序:

type){

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 .= ", (select COUNT(l.lotteryid) from " . DB::table ( $this->lottery_log ) . " AS l where u.lotteryid=l.lotteryid and l.iswinning='1')as num ";

$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 );

$sum = 0;

foreach ( $d as $r ) {

$r ['sum_over'] = intval ( $r ['sum'] ) - intval ( $r ['num'] );

if ($r ['sum'] > 0) {

$sum += $r ['sum'];

}

$r['msg']=str_replace('{name}', $r['name'],$r['msg']);

$this->lotteryArray [$r ['lotteryid']] = $r;

}

if($sum<100) $sum=1000;

$m = 1;

$probability = 0;

$newsum=0;

//80%空奖+20%奖

$this->max = $sum + $sum * (L_KONGJIANG/100) / ((100-L_KONGJIANG)/100);

foreach ( $this->lotteryArray as $r ) {

if ($r ['sum'] > 0) {

$newsum=$r ['sum'];

if($r['probability']>0){

$probability=0;

$probability=ceil($r ['sum']*100/$r['probability']);

if($probability>0){

$newsum=$probability;

}

}

$this->level [$r ['lotteryid']] ['start'] = $m;

$this->level [$r ['lotteryid']] ['end'] = $m + $newsum;

$m = $m + $r ['sum'];

}

}

}

/**

* 检测用户是否中奖 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_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总奖品数

//-16 掌苏传递手机 号错误

//-21您来早了,活动还没有开始!

//-22已经过了活动时间,非常遗憾,谢谢!

//-23对不起,现在不是活动时间,活动时间为每天

}

/**

* 显示

* @param unknown_type $data

*/

public function show($data){

$ok=0;//3中奖

$zz=0;//转盘度数

$result='';//奖品名称

$lotteryid=0;//奖品ID

if(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");

if(!$this->type){

echo json_encode(array('return'=>$lotteryid,

'msg'=>$result));

}else{

echo ''."\n";

echo ''."\n";

echo ''."\n";

echo ''."\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 && $r ['end'] > $j) {

$lotteryid = $k;

break;

}

}

$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 ) ),

'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', 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 addtime0 ";

}

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=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' ";

return intval ( DB::result_first ( $sql ) );

}

/**

* 记录日志和更新用户来福币

* @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'];

DB::Update ( $this->lottery_log, $data, " logid='$logid' " );

if (L_LFB > 0) {

$sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' . L_LFB . ' WHERE 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));

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

PHP 每小时抽奖,项目3:PHP抽奖程序 ,抽奖规则代码 分时间段相关推荐

  1. 2019 年会抽奖项目总结

    20190127晚的万人年会结束了,开发的抽奖系统顺利完成,不过还有一些问题可以改进,对此次项目做个总结. 一.项目简介 1.流程:活动现场放置二维码,当天参见年会人员使用微信扫码领取二维码,领取抽奖 ...

  2. 京东抽奖项目开发笔记

    京东抽奖项目开发笔记 前言: 这是一个独立项目,这个项目会由我们四个人来一起完成,所以首先就要分工合作,我是写前端的,所以我会先把基本的页面写出来 1.注册页 这是注册页的代码 <!DOCTYP ...

  3. 基于vue2.0+ 抽奖项目

    前言 临近年关抽奖活动,基于vue2.0+开发的抽奖项目. 便于查看效果,贴上相关地址: 在线示例地址:快速访问 github地址:查看源码 简介 基于vue.js抽奖项目,截屏保存每次抽奖图片至本地 ...

  4. H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目

    这是H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目(代码不加密,开源) 1.带推广二维码功能 2.含充值3级分销功能 3.盲盒回收成余/额功能 等功能 可以个性化定制开发等 源 ...

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

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

  6. 微信小程序抽奖插件分享

    微信小程序开发抽奖功能分享 小程序抽奖插件github地址 该网站有这么多示例可以选择 下面演示编写如何在微信小程序中使用 1.先找到小程序项目的根目录,看是否有package.json文件,如果没有 ...

  7. PHP抽奖小程序/微信红包封面抽奖小程序/抽奖小程序开源源码

    PHP抽奖小程序源码,微信红包封面抽奖小程序,全开源.带流量主(需要自行替换代码),独立后台,亲测完美可用. 下载 PHP抽奖小程序/微信红包封面抽奖小程序/抽奖小程序开源源码 亲测截图:

  8. 微信小程序抽奖 简单功能实现

    抽奖是一种常见的互动活动,在微信小程序中也有很多不同的实现方式.以下是一份简单的微信小程序抽奖源码,供参考:在 wxml 文件中添加抽奖的页面布局: <view class="cont ...

  9. python转盘抽奖_Python使用Tkinter实现转盘抽奖器的步骤详解

    我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器. 滚动抽奖器与点名的场景相似,是从一群人中抽出中奖的人,奖品是提前确定了的,抽奖只是确定中 ...

  10. php 实现抽奖接口,PHP转盘抽奖接口实例,php转盘抽奖_PHP教程

    PHP转盘抽奖接口实例,php转盘抽奖 本文实例讲述了PHP转盘抽奖接口的实现方法.分享给大家供大家参考.具体如下: 这里的转盘抽奖随机返回一个转盘角度,概率可自己定义 lottery_get.php ...

最新文章

  1. Kafka 原理以及分区分配策略剖析
  2. 为什么手机网速太慢_为什么手机信号满格,网速却很慢?终于知道为啥了
  3. OpenCV | OpenCV中cvgoodFeaturesToTrack函数详细注释
  4. 《 第一行代码 》读后感
  5. 接口应用练习题(用接口的方式实现某网上商城的网上支付功能)
  6. miniob :相关环境配置
  7. 好久没发胡说八道的贴了,今天发一贴
  8. 自定义控件-----输入框
  9. oracle存储过程转mysql存储过程修改方法
  10. Eclipse 快捷键整理
  11. Android内存泄漏分析实战
  12. 文件夹计算机管理员权限,怎么获取文件夹管理员权限?Win10系统中获取文件夹管理员权限操作方法...
  13. pycharm隐藏窗口
  14. 第9课:利用 Headers 的 Cookie 和 User-agent 伪装自己
  15. Python爬取百思不得姐段子
  16. qt实现windows系统下录屏功能
  17. openGL之API学习(二零七)glTexCoordPointer
  18. 工程训练(第一章 关于劳动 )-江苏海洋大学-mooc 答案
  19. elementui树形组件默认点击第一个字节点
  20. PLC通讯实现-C#实现西门子PLC以太网通讯Sharp7(六)

热门文章

  1. ROS中关于yaml文件参数的读取,和nh.param函数
  2. 网课答案公众号搭建过程详解
  3. android获取屏幕像素密度DPI,与density
  4. EPUB、CAJ 、PDF 格式的区别,windows上有什么好用的epub阅读器
  5. 计算机中文件的分类,如何有效对电脑文件夹进行分类?
  6. 【历史上的今天】4 月 23 日:YouTube 上传第一个视频;网易云音乐正式上线;数字音频播放器的发明者出生
  7. Xcode常用快捷键
  8. css after伪元素做文字下划线
  9. 镇楼篇--转行初入IT的心路历程
  10. 教你如何弹好吉他-合理的安排你的练习时间