Exemple #1
0
        /// <summary>
        /// 取出投資風險等級與等級明細
        /// </summary>
        /// <param name="riskEvaId">風險評估項目代號</param>
        /// <returns>投資風險等級資料</returns>
        private IEnumerable <RiskRankEntity> GetRiskRankEntities(string riskEvaId)
        {
            IEnumerable <RiskRankEntity> riskRankEntities = CacheProvider.GetCache(_cacheKeyRiskRankEntities)
                                                            as IEnumerable <RiskRankEntity>;

            if ((riskRankEntities == null) ||
                (riskRankEntities.Count() == 0))
            {
                IEnumerable <RiskRankDO> riskRankList = new RiskRankDAO().ReadAll(riskEvaId);

                IEnumerable <RiskRankDetailDO> riskRankDetailList = new RiskRankDetailDAO().ReadAll();

                riskRankEntities = riskRankList.OrderBy(x => x.MinScore).
                                   Select(riskRank => new RiskRankEntity()
                {
                    RiskEvaId    = riskRank.RiskEvaId,
                    MinScore     = riskRank.MinScore,
                    MaxScore     = riskRank.MaxScore,
                    RiskRankKind = riskRank.RiskRankKind,

                    RiskRankDetailEntities = ConvertRiskRankDetailDO(riskRankDetailList.
                                                                     Where(riskRankDetail => riskRankDetail.RiskRankUid == riskRank.Uid)),
                });

                CacheProvider.SetCache(_cacheKeyRiskRankEntities, riskRankEntities);
            }

            return(riskRankEntities);
        }
Exemple #2
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);
        }