<?php
class ChoujiangAction extends Action {
//抽奖的开始时间
var $begin_time = "2012-12-25 14:00:00"; //开始时间 0-不限制
//抽奖的结束时间
var $stop_time = "0"; //结束时间 0-不限制
//本次抽奖的奖项信息,必须按照从大到小的顺序进行填写,id为奖次,prize为中奖信息,v为中奖概率,num为奖品数量
//需要注意的是,该处也必须包含不中奖的信息,概率从小到大进行排序
var $prize_arr = array(
'0' => array(
'id' => 1,
'prize' => '44元购买1G/年空间',
'v' => 1,
'num' => 1
) ,
'1' => array(
'id' => 2,
'prize' => '55元购买1G/年空间',
'v' => 2,
'num' => 2
) ,
'2' => array(
'id' => 3,
'prize' => '66元购买1G/年空间',
'v' => 5,
'num' => 2
) ,
'3' => array(
'id' => 4,
'prize' => '77元购买1G/年空间',
'v' => 10,
'num' => 3
) ,
'4' => array(
'id' => 5,
'prize' => '88元购买1G/年空间',
'v' => 15,
'num' => 4
) ,
'5' => array(
'id' => 6,
'prize' => '99元购买1G/年空间',
'v' => 67,
'num' => 10
) ,
);
//首页显示方法
public function index() {
//连接数据库,去获取本次中奖的人员名单
$Choujiang = M('Choujiang');
$this->assign('list', $Choujiang->where("rid>0")->order('id desc')->select());
unset($Choujiang);
//在首页中显示抽奖的开始时间
$this->assign('begin_time', $this->begin_time);
$this->display();
}
/**
* 生成中奖信息,ajax进行请求该方法,需要客户填写QQ号码
*/
public function make() {
$qq_no = trim($_POST['qq_no']);
import('ORG.Util.Input');
$qq_no = Input::getVar($qq_no);
if (empty($qq_no)) {
$this->ajaxReturn(1, '请正确填写QQ号码!');
exit;
}
if (!empty($this->begin_time) && time() < strtotime($this->begin_time)) {
$this->ajaxReturn(1, '抽奖还没有开始,开始时间为:' . $this->begin_time);
exit;
}
if (!empty($this->stop_time) && time() > strtotime($this->stop_time)) {
$this->ajaxReturn(1, '本次抽奖已经结束,结束时间为:' . $this->stop_time);
exit;
}
//获取奖项信息数组,来源于私有成员
$prize_arr = $this->prize_arr;
foreach ($prize_arr as $key => $val) {
$arr[$val['id']] = $val['v'];
}
//$rid中奖的序列号码
$rid = $this->get_rand($arr); //根据概率获取奖项id
$str = $prize_arr[$rid - 1]['prize']; //中奖项
$Choujiang = M('Choujiang');
//从数据库中获取特定QQ号已经参加抽奖的次数,如果大于等于3则提示次数用完
if ($Choujiang->where("qq_no='{$qq_no}'")->count() >= 3) {
$str = '您3次抽奖机会已经用完!';
$rid = 0;
//从数据库中获取特定奖项序号的次数,大于等于设置的最大次数则提示奖品被抽完,如果需要一直中最后一个纪念奖,则修改该处即可
} elseif ($Choujiang->where("rid={$rid}")->count() >= $prize_arr[$rid - 1]['num']) {
$str = '很抱歉,您所抽中的奖项已经中完!';
$rid = 0;
}
//生成一个用户抽奖的数据,用来记录到数据库
$data = array(
'rid' => $rid,
'pop' => $str,
'qq_no' => $qq_no,
'input_time' => time()
);
//将用户抽奖信息数组写入数据库
$Choujiang->add($data);
unset($Choujiang);
//ajax返回信息
$this->ajaxReturn(1, $str);
}
/**
* 根据概率获取中奖号码
*/
private function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum-= $proCur;
}
}
unset($proArr);
return $result;
}
}
?>