Ejemplo n.º 1
0
        /// <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));
        }