public function actionCodeImport() { set_time_limit(0); $scratchId = Yii::app()->request->getParam('scratchId'); $type = Yii::app()->request->getParam('type', Globals::CODE_TYPE_LEGAL); $file = $_FILES; if ($file && $scratchId) { $tmpFile = "upload/" . $_FILES["file"]["name"]; if (file_exists($tmpFile)) { @unlink($_FILES["file"]["name"]); } else { move_uploaded_file($_FILES["file"]["tmp_name"], $tmpFile); } $handle = @fopen($tmpFile, "r"); if ($handle) { while (!feof($handle)) { $code = fgets($handle, 4096); //入库 if (trim($code)) { $tableName = 'scratch_awards'; $CodeModel = new ScratchAwardsModel($tableName); $CodeModel->scratchId = $scratchId; $CodeModel->grade = 0; $CodeModel->code = trim($code); $CodeModel->type = $type; $CodeModel->save(); } } fclose($handle); } @unlink($tmpFile); $msg = "导入成功!"; } else { $msg = '提交错误'; } echo $msg; }
public function actionIndex() { $logTable = 'scratch_log'; $table = 'scratch_awards'; $disable = 1; $probability = $remainCount = 0; $return = $encryption = ''; $rand = rand(1, 100000); $code = Yii::app()->request->getParam('code'); list($openId, $scratchId, $type) = explode('|', Globals::authcode($code, 'DECODE')); $scratch = ScratchModel::model()->findByPk($scratchId); //活动是否开始 if ($scratch->startTime > date('Y-m-d H:i:s')) { $disable = false; } elseif ($scratch->endTime < date('Y-m-d H:i:s')) { $disable = false; } elseif ($scratch->status == 0) { $disable = false; } $totalCount = $scratch->times; $button = Yii::app()->params['siteUrl'] . '/wechat/' . Yii::app()->params['scratchPath'] . '/' . $scratch->wechatId . '/' . $scratch->button; $awards = unserialize($scratch->awards); $return['grade'] = -1; $return['name'] = '谢谢参与'; //次数限制 if ($totalCount == -1) { //本活动只能参与一次 $count = ScratchLogModel::model($logTable)->count('openId=:openId and scratchId=:scratchId', array(':openId' => $openId, ':scratchId' => $scratchId)); if ($count > 0) { $disable = 0; } } if ($totalCount > 0) { $start = strtotime(date('Y-m-d')) - 1; $end = strtotime(date('Y-m-d', strtotime('1 days'))) - 1; $count = ScratchLogModel::model($logTable)->count('openId=:openId and scratchId=:scratchId and datetime>:start and datetime<:end', array(':openId' => $openId, ':scratchId' => $scratchId, ':start' => $start, ':end' => $end)); if ($count >= $totalCount) { $disable = 0; } else { $remainCount = $totalCount - $count; } } //查看当前用户是否已中奖 $awardInfo = ScratchAwardsModel::model($table)->find('scratchId=:scratchId and openId=:openId and status<>0', array(':scratchId' => $scratchId, ':openId' => $openId)); if (!$awardInfo && $disable) { 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 = ScratchAwardsModel::model($table)->count('grade=:grade and scratchId=:scratchId and status<>0', array(':grade' => $return['grade'], ':scratchId' => $scratchId)); //已中奖个数 if ($awardCount <= 0 || $awardCount < $awards[$return['grade']]['count']) { //未超过系统设置中奖个数 $awardModel = new ScratchAwardsModel($table); $awardModel->openId = $openId; $awardModel->scratchId = $scratchId; $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 { //奖品达到系统设置个数 //查看是否已经赠送了礼包 $code = ScratchAwardsModel::model($table)->find('grade=:grade and scratchId=:scratchId and openId=:openId and status<>0', array(':grade' => 0, ':scratchId' => $scratchId, ':openId' => $openId)); if (!$code) { //取一条礼包码 $code = ScratchAwardsModel::model($table)->find('grade=:grade and scratchId=:scratchId and type=:type and status=:status', array(':grade' => 0, ':scratchId' => $scratchId, ':type' => $type, ':status' => 0)); if ($code) { $code->openId = $openId; $code->time = time(); $code->save(); $return['grade'] = 0; $return['name'] = $code->code; //礼包码 } } } } else { //礼包奖品,查询是否已经获得过礼包 $code = ScratchAwardsModel::model($table)->find('grade=:grade and scratchId=:scratchId and openId=:openId and status<>:status', array(':grade' => 0, ':scratchId' => $scratchId, ':openId' => $openId, ':status' => 0)); if (!$code) { //取一条礼包码 $code = ScratchAwardsModel::model($table)->find('grade=:grade and scratchId=:scratchId and type=:type and status=:status', array(':grade' => 0, ':scratchId' => $scratchId, ':type' => $type, ':status' => 0)); if ($code) { $code->openId = $openId; $code->datetime = time(); $code->save(); $return['grade'] = 0; $return['name'] = $code->code; //礼包码 } } else { $return['grade'] = -1; $return['name'] = '谢谢参与'; } } } $encryption = Globals::authcode($openId . '|' . $return['grade'] . '|' . $scratchId, 'ENCODE'); $this->renderPartial('active', array('scratch' => $scratch, 'prize' => $return, 'encryption' => $encryption, 'button' => $button, 'disable' => $disable, 'remainCount' => $remainCount, 'totalCount' => $totalCount)); }