示例#1
0
 public function actionActive()
 {
     $probability = 0;
     $sn = '';
     $rand = rand(1, 100000);
     $table = 'wheel_awards';
     $logTable = 'wheel_log';
     $encryption = Yii::app()->request->getParam('encryption');
     list($openId, $wheelId, $type) = explode('|', Globals::authcode($encryption, 'DECODE'));
     $wheel = WheelModel::model()->findByPk($wheelId);
     $awards = unserialize($wheel->awards);
     //查看当前用户是否已中奖
     $wheelInfo = WheelAwardsModel::model($table)->find('wheelId=:wheelId and openId=:openId and status<>0', array(':wheelId' => $wheelId, ':openId' => $openId));
     if (!$wheelInfo) {
         foreach ($awards as $k => $v) {
             $probability += $v['probability'] * 1000;
             $award[$k] = array('name' => $v['name'], 'num' => $probability);
         }
         //奖品不足时,发送激活码,
         if ($probability < 100000) {
             $award[] = array('name' => '谢谢参与', 'num' => 100000);
         }
         //返回给客户端的奖品名称
         foreach ($award as $key => $val) {
             if (isset($award[$key - 1])) {
                 if ($rand > $award[$key - 1]['num'] && $rand <= $val['num']) {
                     //if ($rand > $award[$key - 1]['num']) {
                     $return = $val;
                     $return['grade'] = $key;
                     break;
                 }
             } else {
                 if ($rand > 0 && $rand <= $val['num']) {
                     $return = $val;
                     $return['grade'] = $key;
                     break;
                 }
             }
         }
         if ($return['grade'] > 0) {
             $awardCount = WheelAwardsModel::model($table)->count('grade=:grade and wheelId=:wheelId and status<>0', array(':grade' => $return['grade'], ':wheelId' => $wheelId));
             //已中奖个数
             if ($awardCount <= 0 || $awardCount < $awards[$return['grade']]['count']) {
                 //未超过系统设置中奖个数
                 if ($awards[$return['grade']]['isentity'] == 1) {
                     //人工干预抽奖,实现每天送出15个一等奖和二等奖
                     $shiwuCount = WheelAwardsModel::model($table)->count('grade=:grade and datetime>:start and datetime<:end', array(':grade' => $return['grade'], ':start' => strtotime(date('Y-m-d')) - 1, ':end' => strtotime(date('Y-m-d') . " 23:59:59")));
                     if ($shiwuCount < 15) {
                         $awardModel = new WheelAwardsModel($table);
                         $awardModel->openId = $openId;
                         $awardModel->wheelId = $wheelId;
                         $awardModel->grade = $return['grade'];
                         $awardModel->code = $return['name'];
                         $awardModel->isentity = isset($awards[$return['grade']]['isentity']) ? $awards[$return['grade']]['isentity'] : 0;
                         $awardModel->status = 0;
                         $awardModel->type = $type;
                         $awardModel->datetime = time();
                         $awardModel->save();
                     } else {
                         $return = array('grade' => 0, 'name' => '谢谢参与', 'num' => 100000);
                     }
                 } else {
                     //码类
                     $awardData = WheelAwardsModel::model($table)->find('wheelId=:wheelId and grade=:grade and type=:type and status=0', array(':wheelId' => $wheelId, ':grade' => $return['grade'], ':type' => $type));
                     if ($awardData) {
                         //是否还有码
                         $sn = $awardData->code;
                         $awardData->status = 1;
                         $awardData->openId = $openId;
                         $awardData->datetime = time();
                         $awardData->save();
                     } else {
                         $return = array('grade' => 0, 'name' => '谢谢参与', 'num' => 100000);
                     }
                 }
             }
         }
     } else {
         $return = array('grade' => 0, 'name' => '谢谢参与', 'num' => 100000);
     }
     //log
     $log = new WheelLogModel($logTable);
     $log->datetime = time();
     $log->openId = $openId;
     $log->wheelId = $wheelId;
     //$log->save();
     $encryption = Globals::authcode($openId . '|' . $return['grade'] . '|' . $wheelId, 'ENCODE');
     echo json_encode(array('success' => $return['grade'] > 0 ? 1 : 0, 'prizetype' => $return['grade'], 'sn' => $sn, 'name' => $return['name'], 'encryption' => $encryption));
 }