/**
  * Provide card
  *
  * <b>Request Type</b>: POST<br/><br/>
  * <b>Request Endpoint</b>:http://{server-domain}/api/member/card/provide-card<br/><br/>
  * <b>Response Content-type</b>: application/json<br/><br/>
  * <b>Summary</b>: This api is used for provide card.
  * <br/><br/>
  *
  * <b>Request Params</b>:<br/>
  *     cardId: string<br/>
  *     cardNumbers: Array, card number<br/>
  *     names: Array
  *     tags: Array<br/>
  *     cardExpiredAt: timestamp<br/>
  *     <br/><br/>
  *
  * <b>Response Params:</b><br/>
  *     message:
  *     <br/><br/>
  *
  * <br/><br/>
  *
  * <b>Response Example</b>:<br/>
  * <pre>
  *  {"message" : "OK"}
  * </pre>
  */
 public function actionProvideCard()
 {
     $params = $this->getParams();
     $accountId = $this->getAccountId();
     $params['accountId'] = $accountId . '';
     if (empty($params['cardId'])) {
         throw new BadRequestHttpException('param error');
     }
     if (empty($params['cardExpiredAt'])) {
         throw new InvalidParameterException(['schedule-picker' => \Yii::t('common', 'required_filed')]);
     }
     $cardId = new \MongoId($params['cardId']);
     $card = MemberShipCard::findByPk($cardId);
     if (empty($card)) {
         throw new BadRequestHttpException(\Yii::t('member', 'no_card_find'));
     }
     if ($card->isAutoUpgrade) {
         throw new InvalidParameterException(Yii::t('member', 'error_issue_auto_card'));
     }
     if ($params['cardExpiredAt'] < TimeUtil::msTime()) {
         throw new InvalidParameterException(['schedule-picker' => \Yii::t('member', 'not_less_than_current')]);
     }
     $members = [];
     if (!empty($params['cardNumbers']) && is_array($params['cardNumbers'])) {
         $members = Member::getByCardNumbers($params['cardNumbers']);
         if (empty($members)) {
             throw new InvalidParameterException(['cardNumber' => \Yii::t('member', 'no_member_find')]);
         }
     } else {
         if (!empty($params['names']) && is_array($params['names'])) {
             $members = Member::getByNames($params['names']);
             if (empty($members)) {
                 throw new InvalidParameterException(['memberNames' => \Yii::t('member', 'no_member_find')]);
             }
         } else {
             if (!empty($params['tags']) && is_array($params['tags'])) {
                 $members = Member::getByTags($params['tags']);
                 if (empty($members)) {
                     throw new InvalidParameterException(['memberTags' => \Yii::t('member', 'no_member_find')]);
                 }
             }
         }
     }
     $memberIds = Member::getIdList($members);
     Member::updateAll(['$set' => ['cardId' => $cardId, 'cardExpiredAt' => $params['cardExpiredAt']]], ['_id' => ['$in' => $memberIds]]);
     return ['message' => 'OK'];
 }