/// <summary> /// 評估投資風險等級 /// </summary> /// <param name="answer">風險評估填答資料</param> /// <returns></returns> public RiskEvaResultDTO EvaluateRiskRank(RiskEvaAnswerEntity answer) { RiskEvaResultDTO riskEvaResultDTO = null; QuestionnaireResultEntity questionResultEntity = null; if (answer == null) { throw new ArgumentNullException("answer"); } else if (answer.QuestionnaireAnswerEntity == null) { throw new ArgumentNullException("QuestionnaireAnswerEntity"); } RiskEvaluationDO riskEvaluationDO = new RiskEvaluationDAO().GetLatestRiskEvaluation( answer.QuestionnaireAnswerEntity.UserId); bool canEvaluteRisk = CheckCanEvaluteRisk(riskEvaluationDO); if (!canEvaluteRisk) { var ex = new InvalidOperationException("Not can used risk evaluation"); ex.Data["canEvaluteRisk"] = canEvaluteRisk; throw ex; } questionResultEntity = QuestService.Calculate(answer.QuestionnaireAnswerEntity); if (questionResultEntity == null) { throw new InvalidOperationException("questResultEntity not found"); } if (questionResultEntity.QuestionnaireEntity.NeedScore == "Y") { RiskRankDO riskRankDO = new RiskRankDAO().GetRiskRank(questionResultEntity.ActualScore, _riskEvaIdFundInvestment); if (riskRankDO == null) { var ex = new InvalidOperationException("riskRankDO not found"); ex.Data["QuestId"] = questionResultEntity.QuestionnaireEntity.QuestId; ex.Data["UserId"] = answer.QuestionnaireAnswerEntity.UserId; ex.Data["ActualScore"] = questionResultEntity.ActualScore; ex.Data["riskEvaId"] = _riskEvaIdFundInvestment; throw ex; } questionResultEntity.RiskRankKind = riskRankDO.RiskRankKind; } riskEvaResultDTO = new RiskEvaResultDTO() { QuestionnaireResultEntity = questionResultEntity, RiskRankEntities = GetRiskRankEntities(_riskEvaIdFundInvestment), }; CacheProvider.SetCache($"{_cacheKeyQuestionResultEntity}-{questionResultEntity.QuestAnswerId}", questionResultEntity); return(riskEvaResultDTO); }
public ActionResult EvaluationRank(FormCollection answer) { EvaluationRankViewModel evaluationRankViewModel = null; string validationSummary = null; try { if (!answer.HasKeys()) { throw new ArgumentNullException("answer"); } RiskEvaAnswerEntity riskEvaAnswerEntity = new RiskEvaAnswerEntity() { QuestionnaireAnswerEntity = new QuestionnaireAnswerEntity() { QuestUid = answer["questEntity.Uid"], UserId = Session["id"] as string, AnswerDetailEntities = ConvertAnswerDetailList(answer), }, }; Domain.DTO.RiskEvaResultDTO riskEvaResultDTO = RiskService.EvaluateRiskRank( riskEvaAnswerEntity); if (riskEvaResultDTO == null) { throw new InvalidOperationException("riskEvaResultDTO not found"); } if ((riskEvaResultDTO.QuestionnaireResultEntity.ValidateFailInfo != null) && (riskEvaResultDTO.QuestionnaireResultEntity.ValidateFailInfo.Count > 0)) { return(View("EvaQuest", new EvaQuestViewModel() { RiskEvaQuestionnaireEntity = RiskService.GetRiskQuestionnaire( answer["questEntity.QuestId"], Session["id"] as string), QuestionnaireResultEntity = riskEvaResultDTO.QuestionnaireResultEntity, })); } else { evaluationRankViewModel = new EvaluationRankViewModel() { QuestionnaireResultEntity = riskEvaResultDTO.QuestionnaireResultEntity, RiskRankEntities = riskEvaResultDTO.RiskRankEntities, }; } } catch (InvalidOperationException e) { validationSummary = ConvertValidateMsgByRiskEvaluation(e); } catch (Exception e) { logger.Error(e); validationSummary = _systemErrorMsg; } if (!String.IsNullOrEmpty(validationSummary)) { ModelState.AddModelError("", validationSummary); } return(View(evaluationRankViewModel)); }