首頁  >  文章  >  後端開發  >  php分時間段的抽獎程式碼

php分時間段的抽獎程式碼

WBOY
WBOY原創
2016-07-25 08:58:421282瀏覽
  1. require_once (APP_ROOT . "./class/class_lib.php");
  2. require_once libfile('class/StoreProcs');
  3. pc_base::load_app_class('table_sub','',0);
  4. /**
  5. * 大轉盤
  6. * @author Administrator
  7. *
  8. */
  9. class lib_dzp_lottery extends app_lib {
  10. /**
  11. * 獎品表
  12. */
  13. public $lottery = 'activity_lyq_lottery';
  14. /**
  15. * 獎品日誌表
  16. */
  17. public $lottery_log = 'activity_lyq_lottery_log';
  18. /**
  19. * n等獎品
  20. */
  21. private $level = array();
  22. /**
  23. * 獎品資訊
  24. */
  25. private $lotteryArray = array();
  26. /***
  27. * 隨機數結束位數
  28. */
  29. 私人 $max = 30000;
  30. /**
  31. * 類別 true:預設false:掌蘇
  32. */
  33. private $type=true;
  34. /**
  35. * 中獎專業戶
  36. */
  37. private $tel_zy=false;
  38. /**
  39. * 讀取配置
  40. */
  41. public function load_setting() {
  42. $data=getcache('lyqdzp_setting');
  43. define('TIME', time()); //目前時間
  44. define('L_START', strtotime($data['l_start'])); // 報名開始時間
  45. define('L_END', strtotime($data['l_end'])); // 報名結束時間,-1意思昨天 23:59:59
  46. define('L_DAY_START',$data['l_day_start']); //每天開始時間
  47. define('L_DAY_END', $data['l_day_end']);//每天結束時間
  48. define('L_DAY_CISHU', $data['l_day_cishu']);//每天取得獎品數量
  49. define('L_CISHU', $data['l_cishu']);//總共獲得獎品數量
  50. define('L_MIN', 20);//最少來福幣
  51. define(' L_LFB', $data['l_lfb']);//減少來福幣
  52. define('L_ZY', $data['l_zy']); //專業戶
  53. define('L_QUANSHU', $data['l_quanshu']);//圈數,大轉盤開始圈數
  54. define('L_KONGJIANG', intval($data['l_kongjian']) );//空獎機率
  55. $host='www.****.com'; //現網
  56. if($_SERVER['HTTP_HOST']=='221.****0'){
  57. $host='221.*****'; //測試機
  58. }elseif($_SERVER['HTTP_HOST']=='125.com'){
  59. $host='125life.com';//本地
  60. }elseif(strpos($ _SERVER['HTTP_HOST'],'192.168.')==0){
  61. $host=$_SERVER['HTTP_HOST'].'/125e.com';//本地
  62. }
  63. define( 'L_SITE', 'http://'.$host.'/'); //網域最後加/
  64. define('L_URL', L_SITE.'index.php');//存取位址
  65. //只能透過flash位址存取
  66. $s=L_SITE. 'flash/dzp/i.swf';
  67. if(preg_replace('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s&&$this->type){
  68. exit('老兄你已經得到了了達到達到多了,請透過正規途徑搖獎!
  69. }
  70. $this->load();
  71. }
  72. /**
  73. * 黑名單
  74. */
  75. private $heimingdan = array();
  76. /**
  77. * 讀取獎品配置
  78. */
  79. public function load() {
  80. $this->setlottery ();
  81. $this->heimingdan = getcache('tel', 'blanklist');
  82. }
  83. 導管函數 setlottery() {
  84. $time=strtotime(date('Y-m-d',TIME));
  85. $sql = "選擇 u.*";
  86. $sql .= ", (select COUNT(l.lotteryid) from " . DB::table ( $this->lottery_log ) . " AS l where u.lotteryid=l.lotteryid and l.isleading=' 1 ') 作為數字 “;
  87. $sql .= "來自" 。DB::table ( $this->lottery ) 。 “如你”;
  88. $sql .= " 其中 1 "; sql .= "和u.isdisable='0' ";
  89. $sql .= " 和u.time_start$sql .= " 和u.time_end>='$ time' ";
  90. $sql .= " ORDER BY u.listorder ";
  91. $d = DB::fetch_all ( $sql );
  92. $總和= 0;
  93. foreach ( $d as $r ) {
  94. $r ['sum_over'] = intval ( $r ['sum'] ) - intval ( $r ['num'] );
  95. if ($r ['sum'] > 0) {
  96. $sum += $r ['sum']
  97. $r['msg']=str_replace('{name}', $r['name'],$ r['msg']);
  98. $this->lotteryArray [$r ['lotteryid']] = $r;
  99. }
  100. if($sum$m = 1;
  101. $ 機率= 0
  102. $newsum=0
  103. //80%空獎+20%獎
  104. $this->max = $sum + $sum * (L_KONGJIANG/100) / ((100-L_KONGJIANG)/100);
  105. foreach ( $this->lotteryArray as $r ) {
  106. if ($r ['sum'] > 0) {
  107. $newsum=$r ['sum'];
  108. if( $r['機率']>0){
  109. $機率=0
  110. $probability=ceil($r ['sum'] *100/$r['機率']);
  111. if($probability>0){
  112. $newsum=$probability;
  113. }
  114. }
  115. $this->level [$r ['lotteryid']] ['start'] = $m;
  116. $this->level [$r ['lotteryid']] ['end'] = $m + $newsum;
  117. $m = $m + $r ['sum'];
  118. }
  119. }
  120. }
  121. /**
  122. * 偵測使用者是否中獎 0 謝謝參與,其他 回傳獎品data資料
  123. * @param array $user array(uid,tel,ip)
  124. */
  125. 公用函數檢定($user) {
  126. if (intval ( $user ['uid'] ) < ; 1) {
  127. //沒有登入
  128. return 0;
  129. }
  130. if(intval(TIME)//您來早了,活動還沒開始!
  131. }
  132. if(intval(TIME)>intval(L_END)){
  133. //已經過了活動時間,非常遺憾,謝謝!
  134. return -22;
  135. }
  136. if ($this->get_user_lfb ( $user ['uid'] ) //$this->credit ( $user ['uid '], -11, $logid );
  137. return -11; //您的來福幣餘額不足
  138. }
  139. $data = array(
  140. 'uid' => $ user ['uid'],
  141. 'tel' => $user ['tel'],
  142. 'ip' => $user ['ip'],
  143. 'addtime' => time ()
  144. );
  145. $logid = DB::insert ( $this->lottery_log, $data, true );
  146. //檢查使用者每天已中獎品數
  147. if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ) , true ) >= L_DAY_CISHU) {
  148. $this->credit ( $user ['uid'], -12, $logid );
  149. //很遺憾,你本次什麼也沒抽到!
  150. return -12;
  151. }
  152. //檢查使用者全部已中獎品數
  153. if ($this->get_lottery ( $user ['uid'], 0, 0, true ) > L_CISHU&&L_CISHU >0) {
  154. $this->credit ( $user ['uid'], -12, $logid );
  155. //很遺憾,你這次什麼也沒抽到!
  156. return -15;
  157. }
  158. //偵測黑名單,設定機率
  159. if ($this->checkhei ( $user ['tel'] ) > 0) {
  160. $this ->credit ( $user ['uid'], -13, $logid );
  161. //很遺憾,你本次什麼都沒有抽到!
  162. return -13;
  163. }
  164. $lotteryid = $this->choujiang();
  165. $this->credit ( $user ['uid'], $lotteryidhao);
  166. if ($lotteryid > 0) {
  167. return $this->lotteryArray [$lotteryid];
  168. } else {
  169. return -4;
  170. }
  171. //-1獎品已發完
  172. //-2本時段獎品已玩
  173. //-3不發獎品
  174. //-4獎品有問題
  175. //-11您的來福幣餘額不足
  176. //-12很遺憾,你本次什麼都沒有抽到!
  177. //-13黑名單裡面,很遺憾,你本次什麼也沒抽到!
  178. //-14中獎專業戶禁止中高講高獎品
  179. //-15已超過yizhong總獎品數
  180. //-16 掌蘇傳遞手機號碼錯誤
  181. //-21您來早了,活動還沒開始!
  182. //-22已經過了活動時間,非常遺憾,謝謝!
  183. //-23對不起,現在不是活動時間,活動時間為每天
  184. }
  185. /**
  186. * 顯示
  187. * @param unknown_type $data
  188. */
  189. public function show($data){
  190. $ok= 0;//3中獎
  191. $zz=0;//轉盤度數
  192. $result='';//獎品名稱
  193. $lotteryid=0;//獎品ID
  194. if(is_array( $data)){
  195. $ok=3;
  196. $result=$data['msg'];
  197. $zz=$data['angle']+L_QUANSHU*360;
  198. $lotteryid =$data['lotteryid'];
  199. }else{
  200. $m='';
  201. switch($data){
  202. case 0:{
  203. $m= '請先登入! ';
  204. }break;
  205. case -11:{
  206. $m= '您的來福幣餘額不足! ';
  207. }break;
  208. case -12:{
  209. $m= '很遺憾,你這次什麼也沒抽到! ';
  210. }break;
  211. case -21:{
  212. $m= '您來早了,活動還沒開始! ';
  213. }break;
  214. case -22:{
  215. $m= '已經過了活動時間,非常遺憾,謝謝! ';
  216. }break;
  217. case -23:{
  218. $m= '對不起,現在不是活動時間,活動時間為每天'.L_DAY_START.':00-'.L_DAY_END.':00' ;
  219. }break;
  220. default:{
  221. $m= '很遺憾,你這次什麼都沒有抽到!';
  222. }休息;
  223. }
  224. $結果=$m;
  225. $ok=3;//3中獎
  226. $zz=360+L_QUANSHU*360;//再接再厲
  227. }
  228. header("Expires:Mon,26Jul199705:00:00GMT");
  229. header("快取控制:無緩存,必須重新驗證");
  230. header("Pragma:no-cache" );
  231. header("內容類型:text/html;charset=utf-8");
  232. if(!$this->type){
  233. echo json_encode(array('return'=>$ lotteryid,
  234. 'msg'=>$result));
  235. }else{
  236. echo ''."n";
  237. echo ''."n";
  238. echo ''."n";
  239. echo ''."n";
  240. }
  241. 退出;
  242. }
  243. /**
  244. * 抽獎的號碼
  245. */
  246. private $hao=0;
  247. /**
  248. * 抽獎開始
  249. */
  250. 私有函數choujian() {
  251. $j = 0;
  252. $lotteryid = 0;
  253. $j = mt_rand ( 1, $this->max );
  254. $this->hao=$j;
  255. foreach ( $this->level as $k = > $r ) {
  256. if ($r ['start'] $j ) {
  257. $lotteryid = $k;
  258. 休息;
  259. }
  260. }
  261. $d = array(
  262. 1 => array(
  263. 'time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ) ,
  264. 'time_end' => strtotime ( date ( 'Y-m-d 07:59:59', TIME ) )
  265. )
  266. );
  267. for ($i=2;$i$d[$i]=array(
  268. 'time' => strtotime ( date ( 'Y-m-d '.( $i+6).':00:00', TIME ) ),
  269. ' time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) )
  270. );
  271. }
  272. if($lotteryid>0){
  273. $l=$this->lotteryArray [$lotteryid];
  274. $sql = "從" 選取count(*) m 。 DB::table ( $this->lottery_log );
  275. $sql .= " 其中lotteryid='$lotteryid' ";
  276. $s= intval ( DB::result_first ( $sql ) );
  277. $sum_over=$l['sum']-$s;
  278. if($sum_over>0){
  279. //本贏得獎品數
  280. $sum=0;
  281. foreach ($d as $k=>$r){
  282. if(TIME>=$r['time']&&TIMEif($ l['time_'.$k] >0){//個數限制
  283. $sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+ 1,$lotteryid);
  284. if( $sum>=$l['time_'.$k]){
  285. //本獎勵品已玩
  286. $lotteryid=-2;
  287. 休息;
  288. }
  289. }elseif ( $l['time_'.$k]==0){
  290. //不發獎品
  291. $lotteryid=-3;
  292. 休息;
  293. }else{
  294. //-1不限制
  295. }
  296. }
  297. }
  298. if($this->tel_zy && $lotteryid>0&&$lotteryid$lotteryid=-14
  299. ; }
  300. }else{
  301. //獎品已發完
  302. $lotteryid=-1;
  303. }
  304. }else{
  305. //獎品有問題
  306. $lotteryid=- 4;
  307. }
  308. 回傳$lotteryid;
  309. }
  310. /**
  311. * 偵測黑名單與一般使用者,機率
  312. * @param string $tel
  313. * @return 大於1 表示本次禁止抽
  314. */
  315. 私有函數checkhei($tel) {
  316. $n = mt_rand (rand (rand] 1, 100 );
  317. if (in_array ( $tel, $this->heimingdan ['tel'] ) && L_ZY > 0) {
  318. $this->tel_zy=true;
  319. if ($n > L_ZY) {
  320. 回傳1;
  321. }
  322. }else{
  323. //號碼偵測
  324. if (!self::check_tel($tel)) {
  325. return 1;
  326. }
  327. }
  328. 回傳0;
  329. }
  330. /**
  331. * 合計獎品數
  332. * @param intval $uid
  333. * @param intval $start
  334. * @param intval $end
  335. * @param bool $bool true 獲得獎品數false 未獲得獎品數
  336. * @return number
  337. */
  338. 私有函數get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) {
  339. $sql = "從" 選取count(*) m 。 DB::table ( $this->lottery_log );
  340. $sql .= " 其中1 ";
  341. if (intval ( $start ) > 0) {
  342. $sql .= " and addtime>= '$start' ";
  343. }
  344. if (intval ( $end ) > 0) {
  345. $sql .= " and addtime}
  346. if ( $bool) {
  347. $sql .= " and lotteryid>0 ";
  348. }
  349. if (intval ( $uid ) > 0) {
  350. $sql .= " and uid='$uid ' ";
  351. }
  352. return intval ( DB::result_first ( $sql ) );
  353. }
  354. /**
  355. * 合計獎品數
  356. * @param intval $uid
  357. * @param intval $start
  358. * @param intval $end
  359. * @param intval $bool 獎品id
  360. * return number
  361. */
  362. 私有函數_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) {
  363. $ sql = "從" 選擇count(*) m 。 DB::table ( $this->lottery_log );
  364. $sql .= " 其中1 ";
  365. if (intval ( $start ) > 0) {
  366. $sql .= " and addtime>= '$start' ";
  367. }
  368. if (intval ( $end ) > 0) {
  369. $sql .= " and addtime}
  370. if ( $lotteryid>=0) {
  371. $sql .= " and lotteryid='$lotteryid' ";
  372. }
  373. if (intval ( $uid ) > 0) {
  374. $sql .= " and uid='$uid' ";
  375. }
  376. return intval ( DB::result_first ( $sql ) );
  377. }
  378. /**
  379. * 取得使用者來福幣
  380. * @param intval $uid
  381. * @return number
  382. */
  383. public function get_user_lfb($uid) {
  384. $sql = "從sz_common_member_count 選擇extcredits2 ";
  385. $sql .= " 其中1 ";
  386. $sql .= " and uid='$uid' ";
  387. return intval ( DB::result_first ( $ $sql ) );
  388. }
  389. /**
  390. * 記錄日誌和更新使用者來福幣
  391. * @param intval $uid
  392. * @param intval $r 回傳值
  393. * @param intval $logid
  394. * @param intval $otteryid
  395. */
  396. 私有函數積分($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) {
  397. $data =大批();
  398. if ($lotteryid > 0) {
  399. $data ['lotteryid'] = $lotteryid;
  400. $data['iswining'] = 1;
  401. }
  402. $data['iswining'] = 1;
  403. }
  404. $ data ['結果'] = $結果;
  405. $data['hao'] = $hao;
  406. $data['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'];
  407. DB::Update ( $this->lottery_log, $data, " logid='$logid' " );
  408. if (L_LFB > 0) {
  409. $sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' 。 L_LFB 。 ' 其中 uid=' 。 $uid;
  410. DB::query ( $sql );
  411. $this->credit_log ( $uid, 'reduce', L_LFB, 1, '積分清零活動' );
  412. }
  413. }
  414. /**
  415. *手機號碼檢查
  416. */
  417. 私有函數check_tel($tel){
  418. $ different_network=table_sub::get_ Different_network();
  419. if (!preg_match("/$ Different_work/$ ",$tel)) {
  420. 回傳false;
  421. }
  422. 回傳true;
  423. }
  424. /**
  425. * 預存程序連結
  426. */
  427. private $StoreProcs;
  428. /** *
  429. * 來福幣日誌預存程序
  430. * @param intval $uid
  431. * @param string $op add增加reduce 消耗
  432. * @param intval $creditvalue 來福幣 @param intval $credittype 1來福幣2來福點
  433. * @param string $oreason 說明
  434. */
  435. 私有函數credit_log($uid, $op, $creditvalue, $credittype, $oreason) {
  436. if (! $this->StoreProcs) {
  437. $this->StoreProcs = new StoreProcs ();
  438. }
  439. //呼叫預存程序
  440. $this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$ creditvalue,'$原因')" );
  441. }
}
複製程式碼

三,呼叫:
  1. $dzp=new lib_dzp_lottery();
  2. $u=array('uid'=>$_G ['uid '],'tel'=>$_G ['tel'],'ip'=> $_G ['clientip']) ;
  3. $dzp->load_setting();
  4. $dzp->show( $dzp->check($u));
?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn