專案4:抽獎程式 分時間段(按時段設定的獎品數為概率)
資料庫先
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:59 define('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;//獎品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"); 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:抽獎程式 分時間段(按時段設定的獎品數為概率)
資料庫先 activity_lyq_lottery 獎品表 lotteryid name 禮品名稱 sum 禮品總數 time_start 開始時間 time_end 結束時間 addtime 時間 probability 中獎概率 大於0:表示概率
專案4:用迴圈求---(1)求π的近似值
問題及程式碼: /* *copyright(c)2016,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:test.cpp *作者:崔青青 *完成日期2016年3月
第一個SSM前端專案(六):完善註冊後端處理並設定郵箱啟用模式
一、註冊功能後端設計 二、根據設計可以看出我們需要redis來做啟用碼的儲存工作,因此需要在框架中繼承redis 1) 在linux伺服器中安裝redis(建議在伺服器中直接安裝,這樣正式執行的時候比較好操作),可以檢視此篇文章:騰訊雲CentOS 7.4 64
WCF分布式4:客戶端訪問寄宿在IIS中的WCF服務
ram order ble style 部署過程 比較 logs 一個 model 部署過程比較簡單,新建一個站點,指向服務的物理路徑,設置一個端口。即可。 新建的站點對應一個應用程序池,設置應用程序池中的.NET版本為4.0 寫一個測試客戶端,訪問IIS中的WCF服務,可
在STM32上實現NTFS之4:GPT分區表的C語言實現(1):主GPT表頭的實現
center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M
軟工作業 4:結對專案之詞頻統計——基本功能
一、基本資訊 1、本次作業的地址:https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088 2、專案Git地址:https://gitee.com/ntucs/Pai
python123(Python程式語言設計)--------練習4:程式的控制結構
三位水仙花數 描述: "水仙花數"是指一個三位整數,其各位數字的3次方和等於該數本身。 例如:ABC是一個"3位水仙花數",則:A的3次方+B的3次方+C的3次方 = ABC。 請按照從小到大的順序輸出所有的3位水仙花數,請用"逗號"分隔輸出結果。 程式碼實現: 方法一:
組合語言:編制程式實現如下操作: 設有10個學生的成績分別是76,69,84,90,73,88,99,63,100和80分。
上機程式碼 dataseg segment but db 0DH,0AH,'the result $' grade dw 76,69,84,90,73,88,99,63,100,80 s6 db 0 s7 db 0 s8 db
微信開發者工具初始化專案時,進去報錯:小程式重啟耗時過久,請確認業務邏輯中是否有複雜運算,或者死迴圈
如圖上,為錯誤原因。 之前用開發者工具用的好好地,前些日子又版本更新,升級了一下,然後開啟專案就出現上面的問題。當時以為電腦出啥問題了,也沒當回事。今天再次開啟開發者工具,發現還是出現上面的問題。一臉懵,新建專案,啥都沒做竟然出問題。網上一查同樣的問題一大堆。
專案練習:百度翻譯小程式
1 # -*- coding:utf-8 -*- 2 # Author:Sure Feng 3 4 import requests 5 import json 6 import sys 7 8 class BaiduFanyi(object): 9 def __init__
Jenkins構建Python專案提示:'python' 不是內部或外部命令,也不是可執行的程式
問題描述: jenkin整合python專案,立即構建後,發現未執行成功,檢視Console Output 提示:'Python' 不是內部或外部命令,也不是可執行的程式,如下圖: 1.在 Windows 提示符下執行是沒有問題。 2.把Jenkins專案配置中 python main.p
4.11 實戰專案3:併發爬蟲
匯入類庫 import ( "fmt" "regexp" "net/http" "io/ioutil" "strings" "sync" "
習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。
C++程式設計(第三版) 譚浩強 習題12.4 個人設計 習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三
ASP.NET Core 2.0和Angular 4:從頭開始構建用於車輛管理的Web應用程式
目錄 介紹 背景 使用程式碼 I)伺服器端 a)先決條件 b)設定專案 c)設定資料庫 d)使用AutoMapper e)使用Swagger f)執行API II)客戶端 a)先決條件 b)設定專案 c)實現服務 d)
4-QT的程式打包釋出(將QT5的工程專案打包成一個exe程式)
https://blog.csdn.net/windsnow1/article/details/78004265 最近,在學習QT5的過程中,想嘗試著把自己寫的工程程式給打包釋出出來,在任何一臺windows系統都能執行,這樣就不會限於電腦需不需要安裝QT安裝包了。 首先,先介紹自己使用的環境。
python123--------練習4:程式的控制結構
三位水仙花數 "水仙花數"是指一個三位整數,其各位數字的3次方和等於該數本身。 例如:ABC是一個"3位水仙花數",則:A的3次方+B的3次方+C的3次方 = ABC。 請按照從小到大的順序輸出所有的3位水仙花數,請用"逗號"分隔輸出結果。 方法一: num =
第4個小程式之旅的第一個問題:小程式頁面設定頁面高度100%
放程式碼: <view class='login-container'> <view class='form-container'> </view> </view> wxss .login-contain
第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.5 可見性
易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/
第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.4 import:匯入包
易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/
第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.6 函式
易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/