/** * 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); }