public function actionAnswer() { $params = $this->getParams(); if (empty($params['questionnaireId']) || empty($params['answers'])) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } $user = []; if (!empty($params['user']['channelId']) && !empty($params['user']['openId'])) { $channelId = $params['user']['channelId']; $openId = $params['user']['openId']; $user = $params['user']; try { $follower = Yii::$app->weConnect->getFollowerByOriginId($openId, $channelId); $user['name'] = empty($follower['nickname']) ? '' : $follower['nickname']; } catch (ApiDataException $e) { LogUtil::error(['message' => 'Answer questionnaire failed to get follower info', 'param' => ['openId' => $openId, 'channelId' => $channelId]]); } } $questionnaireId = new MongoId($params['questionnaireId']); $questionnaire = Questionnaire::findByPk($questionnaireId); //error questionnaire id or un published questionnaire if (empty($questionnaire) || !$questionnaire->isPublished) { throw new InvalidParameterException(Yii::t('content', 'invalid_questionnaire')); } //questionnaire has not begun $now = time(); if (MongodbUtil::MongoDate2TimeStamp($questionnaire->startTime) > $now) { throw new InvalidParameterException(Yii::t('content', 'questionnaire_not_began')); } //questionnaire expired if (MongodbUtil::MongoDate2TimeStamp($questionnaire->endTime) < $now) { throw new InvalidParameterException(Yii::t('content', 'questionnaire_expired')); } if (!empty($user)) { $questionnaireLog = QuestionnaireLog::getByQuestionnaireAndUser($questionnaireId, $user); if (!empty($questionnaireLog)) { throw new InvalidParameterException(Yii::t('content', 'user_has_answered_questionnaire')); } } $quertionnaireLog = new QuestionnaireLog(); $quertionnaireLog->questionnaireId = $questionnaireId; $quertionnaireLog->user = $user; $quertionnaireLog->answers = $params['answers']; $quertionnaireLog->accountId = $questionnaire->accountId; if ($quertionnaireLog->save()) { return ['message' => 'OK', 'data' => '']; } else { throw new ServerErrorHttpException(Yii::t('common', 'save_fail')); } }