Пример #1
0
 /**
  * deal with the data before export
  * @param $condition,array. (activityId:MongoId, accountId:MongoId)
  */
 public static function preProcessPrizeStatisticData($condition)
 {
     $activityId = $condition['activityId'];
     // $accountId = $condition['accountId'];
     $prizes = ActivityPrize::find()->where(['activityId' => $activityId])->orderBy(['createdAt' => SORT_ASC])->all();
     $rows = [];
     if (!empty($prizes)) {
         foreach ($prizes as $prize) {
             $count = self::getCountByCondition(['prizeId' => $prize->_id, 'activityId' => $activityId]);
             $createdAt = MongodbUtil::MongoDate2String($prize->createdAt, 'Y-m-d H:i:s', null);
             $row = ['id' => (string) $prize->_id, 'prizeName' => $prize->name, 'count' => $count, 'createdAt' => $createdAt, 'isDeleted' => $prize->isDeleted ? '是' : '否'];
             $rows[] = $row;
             unset($row, $count);
         }
         $count = self::getCountByCondition(['prizeId' => 'thanks', 'activityId' => $activityId]);
         $row = ['id' => 'thanks', 'prizeName' => '銘謝惠顧', 'count' => $count, 'createdAt' => '', 'isDeleted' => ''];
         $rows[] = $row;
         unset($row, $count, $createdAt);
     }
     return $rows;
 }
 private function _prizeDraw($activityId, $mobile, $deviceId)
 {
     $bar = ActivityBar::findOne($activityId);
     $probalility = $bar->probability;
     //未中奖几率
     $drawArr = array();
     //抽奖阵列
     // 加入中奖的比率
     $i = 100 - (int) $probalility;
     while ($i > 0) {
         $drawArr[] = 'Y';
         $i--;
     }
     // 加入沒中奖的比率
     $i = (int) $probalility;
     while ($i > 0) {
         $drawArr[] = 'N';
         $i--;
     }
     shuffle($drawArr);
     // 抽奖 (随机打乱阵列)
     $hasPrize = $drawArr[0];
     // 抽出其中一个看是否中奖
     $resultPrize = null;
     $thankPrize = array('name' => "銘謝惠顧", 'prizeImgUrl' => "", '_id' => 'thanks');
     //给中奖用户抽奖品
     if ($hasPrize == 'Y') {
         $prizeList = ActivityPrize::getValidPrizesByActivityId($activityId);
         if (!empty($prizeList)) {
             $prizeArr = array();
             //奖品阵列
             $today = strtotime(date('Y-m-d H:i:s'));
             $todayMstime = MongodbUtil::MongoDate2msTimeStamp(new \MongoDate($today));
             foreach ($prizeList as $prize) {
                 if ($prize['type'] == 'topPrize') {
                     if ($prize['startDate'] <= $todayMstime and $todayMstime < $prize['endDate']) {
                         $prizeArr[] = $prize;
                     }
                 } else {
                     $prizeArr[] = $prize;
                 }
             }
             unset($prizeList);
             shuffle($prizeArr);
             $resultPrize = $prizeArr[0];
         } else {
             //奖项列表为空,改发鸣谢惠顾
             $hasPrize = 'N';
             $resultPrize = $thankPrize;
         }
     } else {
         $resultPrize = $thankPrize;
     }
     //判断奖品数量是否足够
     $activityPrize = ActivityPrize::findOne($resultPrize['_id']);
     if (!empty($activityPrize)) {
         $quantity = $activityPrize->quantity - 1;
         $activityPrize->quantity = $quantity;
         if ($quantity >= 0) {
             if (!$activityPrize->save()) {
                 //更新奖品数量(减1), 失敗,改发鸣谢惠顾
                 $hasPrize = 'N';
                 $resultPrize = $thankPrize;
             }
         } else {
             //奖品不够,改发鸣谢惠顾
             $hasPrize = 'N';
             $resultPrize = $thankPrize;
         }
     }
     if ($resultPrize['_id'] != 'thanks' and $resultPrize['isPoint'] == 'Y') {
         //add points
         try {
             $service = Yii::$app->service;
             $service->accountId = $this->getAccountId();
             $member = Member::getByMobile($mobile, $this->getAccountId());
             $rewardResult = $service->member->rewardScore([$member['_id']], $resultPrize['points'], '拉霸活動中獎');
             if (is_bool($rewardResult) && $rewardResult) {
                 $resultPrize['name'] = $resultPrize['name'] . '(已發獎' . $resultPrize['points'] . '積分)';
             } else {
                 $hasPrize = 'N';
                 $resultPrize = $thankPrize;
                 //Failed,改发鸣谢惠顾
             }
             unset($service, $member, $rewardResult);
         } catch (Exception $e) {
             $hasPrize = 'N';
             $resultPrize = $thankPrize;
             LogUtil::error(['message' => '获奖者加积分捕获未知错误', 'result' => '改发鸣谢惠顾', 'mobile' => $mobile, 'exception' => $e], 'activitybar');
         }
     }
     //save in DB
     $params = array('activityId' => $activityId, 'prizeId' => $resultPrize['_id'], 'deviceId' => $deviceId, 'mobile' => $mobile, 'prizeContent' => $resultPrize['name']);
     $isOK = ActivityUser::createUser($params);
     if (!$isOK) {
         $hasPrize = 'N';
         $resultPrize = $thankPrize;
     }
     $result = ['hasPrize' => $hasPrize, 'prizeName' => $resultPrize['name'], 'prizeImage' => $resultPrize['prizeImgUrl']];
     unset($thankPrize, $resultPrize, $params);
     return ['code' => 200, 'msg' => 'ok', 'result' => $result];
 }
Пример #3
0
 public static function getValidPrizesByActivityId($activityId)
 {
     $list = ActivityPrize::findAll(['activityId' => $activityId, 'isDeleted' => false, 'quantity' => ['$gt' => 0]]);
     for ($i = 0; $i < count($list); $i++) {
         if (!empty($list[$i]['startDate'])) {
             $list[$i]['startDate'] = MongodbUtil::MongoDate2msTimeStamp($list[$i]['startDate']);
             $list[$i]['endDate'] = MongodbUtil::MongoDate2msTimeStamp($list[$i]['endDate']);
         }
         $list[$i] = $list[$i]->attributes;
     }
     return $list;
 }
 public function actionDeletePrize($id)
 {
     if (empty($id)) {
         throw new BadRequestHttpException('prizeId params missing');
     }
     $prize = ActivityPrize::findOne(new \mongoId($id));
     $prize->isDeleted = true;
     if (!$prize->save()) {
         throw new ServerErrorHttpException('Fail to delete prize');
     }
     Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     return ['code' => 200];
 }