private function preProcessDrawMembers($condition, $accountId) { $rows = array(); $scores = EarlybirdSmsUtil::getExchangeGoodsScore($condition['startDate'], $condition['endDate'], $accountId); asort($scores); foreach ($scores as $key => $value) { $row = array(); if (abs($value) >= $condition['pointsThree']) { $member = Member::findByPk(new \MongoId($key)); if (!$member->isDeleted) { $row['id'] = $key; $row['exchangeGoodsScore'] = abs($value); $row['cardNumber'] = $member->cardNumber; //拿到符合一等奖条件的人 if (abs($value) >= $condition['pointsOne']) { //eg: points>=2000 $row['prizeName'] = $condition['prizeNameOne']; $row['prizeLevel'] = '一等獎資格'; } //拿到符合二等奖条件的人 if (abs($value) < $condition['pointsOne'] && abs($value) >= $condition['pointsTwo']) { //eg: 1000<=points<2000 $row['prizeName'] = $condition['prizeNameTwo']; $row['prizeLevel'] = '二等獎資格'; } //拿到符合三等奖条件的人 if (abs($value) < $condition['pointsTwo'] && abs($value) >= $condition['pointsThree']) { //eg: 200<=points<1000 $row['prizeName'] = $condition['prizeNameThree']; $row['prizeLevel'] = '三等獎資格'; } if (!empty($member->properties)) { foreach ($member->properties as $property) { if ($property['name'] == 'tel') { $row['mobile'] = "'" . $property['value']; } if ($property['name'] == 'name') { $row['name'] = $property['value']; } } } } } $rows[] = $row; unset($row, $member); } return $rows; }
public function actionDrawPrize() { $params = $this->getParams(); $accountId = $this->getAccountId(); if (empty($params) || count($params) < 8) { throw new BadRequestHttpException('params are missing'); } //拿到所有活动期间兑换过奖品的人 array('560399d6475df4c7378b4572'=>-200) $scores = EarlybirdSmsUtil::getExchangeGoodsScore($params['startDate'], $params['endDate'], $accountId); $scoresOne = array(); $scoresTwo = array(); $scoresThree = array(); foreach ($scores as $key => $value) { $member = Member::findByPk(new \MongoId($key)); if (!$member->isDeleted) { //拿到符合一等奖条件的人 if (abs($value) >= $params['pointsOne']) { //eg: points>=2000 $scoresOne[] = $key; } //拿到符合二等奖条件的人 if (abs($value) < $params['pointsOne'] && abs($value) >= $params['pointsTwo']) { //eg: 1000<=points<2000 $scoresTwo[] = $key; } //拿到符合三等奖条件的人 if (abs($value) < $params['pointsTwo'] && abs($value) >= $params['pointsThree']) { //eg: 200<=points<1000 $scoresThree[] = $key; } } unset($member); } shuffle($scoresOne); //抽奖 (随机打乱阵列) shuffle($scoresTwo); shuffle($scoresThree); $prizeOneIds = null; $prizeTwoIds = null; $prizeThreeIds = null; //抽一等奖 if (count($scoresOne) < $params['quantityOne']) { $prizeOneIds = $scoresOne; } else { $prizeOneIds = array_slice($scoresOne, 0, $params['quantityOne']); } //抽二等奖 if (count($scoresTwo) < $params['quantityTwo']) { $prizeTwoIds = $scoresTwo; } else { $prizeTwoIds = array_slice($scoresTwo, 0, $params['quantityTwo']); } //抽三等奖 if (count($scoresThree) < $params['quantityThree']) { $prizeThreeIds = $scoresThree; } else { $prizeThreeIds = array_slice($scoresThree, 0, $params['quantityThree']); } unset($scoresOne, $scoresTwo, $scoresThree); //通过中奖者memberId获取中奖者信息 $prizeOneMembers = array(); $prizeTwoMembers = array(); $prizeThreeMembers = array(); foreach ($prizeOneIds as $key => $value) { $prizeOneMembers[] = $this->_getMemberInfo($value, 'one', $scores); } foreach ($prizeTwoIds as $key => $value) { $prizeTwoMembers[] = $this->_getMemberInfo($value, 'two', $scores); } foreach ($prizeThreeIds as $key => $value) { $prizeThreeMembers[] = $this->_getMemberInfo($value, 'three', $scores); } unset($prizeOneIds, $prizeTwoIds, $prizeThreeIds, $scores); //保存抽奖记录 if (empty($prizeOneMembers) && empty($prizeTwoMembers) && empty($prizeThreeMembers)) { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ['code' => 1000]; } $recordId = EarlyBirdDrawRecord::createDrawRecord($params); $this->_saveWinner($prizeOneMembers, $recordId, $params['prizeNameOne']); $this->_saveWinner($prizeTwoMembers, $recordId, $params['prizeNameTwo']); $this->_saveWinner($prizeThreeMembers, $recordId, $params['prizeNameThree']); // return ['prizeOne'=>$prizeOneMembers, 'prizeTwo'=>$prizeTwoMembers, 'prizeThree'=>$prizeThreeMembers]; }