/// <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); }
/// <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); }