예제 #1
0
 /**
  * check the status of codes in campaign
  */
 public static function checkCode2CampainStatus($campaignCodeProductId, $member, $exchangeTime, $params)
 {
     if (empty($campaignCodeProductId)) {
         return [];
     }
     $invalid = $over = $vaild = $expired = [];
     $accountId = $member->accountId;
     foreach ($campaignCodeProductId as $code => $productId) {
         $campaigns = Campaign::findAll(['promotion.data' => ['$all' => [$productId]], 'accountId' => $accountId]);
         foreach ($campaigns as $campaign) {
             list($status, $message) = self::getCodeIsVaild($campaign, $exchangeTime);
             switch ($status) {
                 case self::CODE_STATUS_EXPIRED:
                     //campaign is expired
                     $expired[$code] = ['code' => $code, 'score' => 0, 'status' => self::CODE_STATUS_EXPIRED, 'description' => $message];
                     break;
                 case self::CODE_STATUS_INVALID:
                     $expired[$code] = ['code' => $code, 'score' => 0, 'status' => self::CODE_STATUS_INVALID, 'description' => $message];
                     break;
                 case self::CODE_STATUS_VALID:
                     //put the code in cache, we need check the limit times and participate count in the selectcampaign
                     self::setCache($member, $campaign, $code);
                     //get response from campaign
                     $response = self::selectCampaign($campaign, $member, $params, false);
                     if (self::CODE_STATUS_EXCEEDED == $response['status']) {
                         //campaign is over
                         $over[$code] = ['code' => $code, 'score' => 0, 'status' => self::CODE_STATUS_EXCEEDED, 'description' => $response['message']];
                     } else {
                         if (self::CODE_STATUS_VALID == $response['status']) {
                             $score = self::getCampaignScore($campaign);
                             if (isset($vaild[$code])) {
                                 $vaild[$code]['score'] += $score;
                             } else {
                                 $vaild[$code] = ['code' => (string) $code, 'score' => $score, 'status' => self::CODE_STATUS_VALID, 'description' => ''];
                             }
                         } else {
                             //check campain is over or code is can not fit with campaign
                             $invalid[$code] = ['code' => $code, 'score' => 0, 'status' => self::CODE_STATUS_INVALID, 'description' => $response['message']];
                         }
                     }
                     break;
             }
         }
     }
     //check code in vaild,clear other same code in other array
     foreach ($vaild as $code => $value) {
         //check invalid
         unset($invalid[$code]);
         //check expired
         unset($expired[$code]);
         //check over
         unset($over[$code]);
     }
     return array_merge($vaild, $invalid, $expired, $over);
 }