Пример #1
0
        /// <summary>
        /// 取得最新投資風險評估結果
        /// </summary>
        /// <param name="userId">用戶ID</param>
        /// <returns>投資風險評估結果</returns>
        public RiskEvaluationDO GetLatestRiskEvaluation(string userId)
        {
            RiskEvaluationDO riskEvaDO = null;

            if (String.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            string query = @"
SELECT TOP 1
    [Uid],[RiskEvaId],[QuestAnswerId],[CliId],[RiskResult],
    [RiskScore],[RiskAttribute],[EvaluationDate],[BusinessDate],
    [IsUsed],[CreateUserId],[CreateTime],[ModifyUserId],[ModifyTime]
FROM [RiskEvaluation]
WHERE [CliId] = @CliId
ORDER BY EvaluationDate DESC;";

            using (SqlConnection connection = DbConnection)
            {
                SqlCommand command = new SqlCommand(query, connection);

                command.Parameters.Add(new SqlParameter("@CliId", SqlDbType.VarChar)
                {
                    Value = userId,
                });

                connection.Open();

                DataTable      dt      = new DataTable();
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                adapter.Fill(dt);

                if (dt.Rows.Count == 1)
                {
                    riskEvaDO = ConvertRiskEvaluationDO(dt.Rows[0]);
                }

                adapter = null;
                dt      = null;
                command = null;

                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }

            return(riskEvaDO);
        }
Пример #2
0
        /// <summary>
        /// 判斷可否重做風險評估問卷
        /// </summary>
        /// <param name="riskEvaluationDO">風險評估紀錄</param>
        /// <returns></returns>
        public bool CheckCanEvaluteRisk(RiskEvaluationDO riskEvaluationDO)
        {
            bool canEvaluteRisk = true;

            if (riskEvaluationDO != null)
            {
                bool inCuttimeRange = CheckInCuttimeRange(riskEvaluationDO);

                if (inCuttimeRange && (riskEvaluationDO.IsUsed == "Y"))
                {
                    canEvaluteRisk = false;
                }
            }

            return(canEvaluteRisk);
        }
        public void CheckRiskEvaCondition_When_RiskEvaluationDO_Is_Null_Then_Success()
        {
            //Arrange
            var riskService = new RiskEvaluationService(new CuttimeRangeInfoEntity()
            {
                StartTime = new DateTime(2018, 10, 08, 10, 30, 00),
                EndTime   = new DateTime(2018, 10, 08, 18, 30, 00),
            });
            RiskEvaluationDO riskEvaluationDO = null;
            bool             expected         = true;

            //Actual
            bool actual = riskService.CheckCanEvaluteRisk(riskEvaluationDO);

            //Assert
            Assert.AreEqual(expected, actual);
        }
Пример #4
0
        /// <summary>
        /// 檢查風險紀錄評估時間是否在目前作業週期內
        /// </summary>
        /// <param name="riskEvaluationDO">投資風險評估結果</param>
        /// <returns>檢查結果</returns>
        public bool CheckInCuttimeRange(RiskEvaluationDO riskEvaluationDO)
        {
            bool inCuttimeRange = false;

            CuttimeRangeInfoEntity cuttimeRange = GetCurrentCuttimeRange();

            if (cuttimeRange == null)
            {
                throw new InvalidOperationException("cuttimeRange not found");
            }

            if ((riskEvaluationDO.EvaluationDate < cuttimeRange.EndTime) &&
                (riskEvaluationDO.EvaluationDate >= cuttimeRange.StartTime))
            {
                inCuttimeRange = true;
            }

            return(inCuttimeRange);
        }
        public void CheckInCuttimeRangeTest_When_EvaluationDate_NotInCuttimeRange_Then_Fail()
        {
            //Arrage
            var riskService = new RiskEvaluationService(new CuttimeRangeInfoEntity()
            {
                StartTime = new DateTime(2018, 10, 08, 10, 30, 00),
                EndTime   = new DateTime(2018, 10, 08, 18, 30, 00),
            });

            var riskEvaluationDO = new RiskEvaluationDO()
            {
                EvaluationDate = riskService.GetCurrentCuttimeRange().StartTime.AddSeconds(-1),
            };

            var expected = false;

            //Actual
            var actual = riskService.CheckInCuttimeRange(riskEvaluationDO);

            //Assert
            Assert.AreEqual(expected, actual);
        }
        public void CheckRiskEvaCondition_When_EvaluationDate_NotInCuttimeRange_And_IsUsed_Is_Y_Then_Success()
        {
            //Arrange
            var riskService = new RiskEvaluationService(new CuttimeRangeInfoEntity()
            {
                StartTime = new DateTime(2018, 10, 08, 10, 30, 00),
                EndTime   = new DateTime(2018, 10, 08, 18, 30, 00),
            });

            RiskEvaluationDO riskEvaluationDO = new RiskEvaluationDO()
            {
                EvaluationDate = riskService.GetCurrentCuttimeRange().StartTime.AddSeconds(-1),
                IsUsed         = "Y",
            };

            bool expected = true;

            //Actual
            bool actual = riskService.CheckCanEvaluteRisk(riskEvaluationDO);

            //Assert
            Assert.AreEqual(expected, actual);
        }
Пример #7
0
        /// <summary>
        /// 儲存評估投資風險評估結果資料
        /// </summary>
        /// <param name="riskResultId">風險評估結果識別代號</param>
        public void SaveRiskRank(string riskResultId)
        {
            if (String.IsNullOrEmpty(riskResultId))
            {
                throw new ArgumentNullException("riskResultId");
            }

            RiskEvaResultDTO riskEvaResultDTO = GetRiskResult(riskResultId);

            if (riskEvaResultDTO == null)
            {
                var ex = new InvalidOperationException("riskEvaResultDTO not found");
                ex.Data["riskResultId"] = riskResultId;
                throw ex;
            }
            else if (riskEvaResultDTO.QuestionnaireResultEntity == null)
            {
                var ex = new InvalidOperationException("QuestionnaireResultEntity not found");
                ex.Data["riskResultId"] = riskResultId;
                throw ex;
            }

            QuestionnaireResultEntity questResultEntity = riskEvaResultDTO.QuestionnaireResultEntity;

            RiskEvaluationDO riskEvaluationDO = new RiskEvaluationDAO().GetLatestRiskEvaluation(
                questResultEntity.TesteeId);

            bool canEvaluteRisk = CheckCanEvaluteRisk(riskEvaluationDO);

            if (!canEvaluteRisk)
            {
                var ex = new InvalidOperationException("Not can used risk evaluation");
                ex.Data["canEvaluteRisk"] = canEvaluteRisk;
                throw ex;
            }


            DateTime currenTime = DateTime.Now;

            if (riskEvaluationDO == null)
            {
                riskEvaluationDO = new RiskEvaluationDO()
                {
                    Uid            = Guid.NewGuid(),
                    RiskEvaId      = _riskEvaIdFundInvestment,
                    QuestAnswerId  = questResultEntity.QuestAnswerId,
                    CliId          = questResultEntity.TesteeId,
                    RiskResult     = string.Join(";", questResultEntity.RiskResult.Select(x => $"[{x.Key}:{x.Value}]")),
                    RiskScore      = questResultEntity.ActualScore,
                    RiskAttribute  = questResultEntity.RiskRankKind,
                    EvaluationDate = currenTime,
                    BusinessDate   = ConvertBusinessDate(currenTime),
                    IsUsed         = "N",
                    CreateUserId   = questResultEntity.TesteeId,
                    CreateTime     = currenTime,
                    ModifyUserId   = null,
                    ModifyTime     = null,
                };

                new RiskEvaluationDAO().Insert(riskEvaluationDO);
            }
            else
            {
                bool inCuttimeRange = CheckInCuttimeRange(riskEvaluationDO);

                if (inCuttimeRange)
                {
                    riskEvaluationDO.QuestAnswerId  = questResultEntity.QuestAnswerId;
                    riskEvaluationDO.RiskResult     = String.Join(";", questResultEntity.RiskResult.Select(x => $"[{x.Key}:{x.Value}]"));
                    riskEvaluationDO.RiskScore      = questResultEntity.ActualScore;
                    riskEvaluationDO.RiskAttribute  = questResultEntity.RiskRankKind;
                    riskEvaluationDO.EvaluationDate = currenTime;
                    riskEvaluationDO.BusinessDate   = ConvertBusinessDate(currenTime);
                    riskEvaluationDO.IsUsed         = "N";
                    riskEvaluationDO.ModifyUserId   = questResultEntity.TesteeId;
                    riskEvaluationDO.ModifyTime     = currenTime;

                    new RiskEvaluationDAO().Update(riskEvaluationDO);
                }
                else
                {
                    riskEvaluationDO = new RiskEvaluationDO()
                    {
                        Uid            = Guid.NewGuid(),
                        RiskEvaId      = _riskEvaIdFundInvestment,
                        QuestAnswerId  = questResultEntity.QuestAnswerId,
                        CliId          = questResultEntity.TesteeId,
                        RiskResult     = String.Join(";", questResultEntity.RiskResult.Select(x => $"[{x.Key}:{x.Value}]")),
                        RiskScore      = questResultEntity.ActualScore,
                        RiskAttribute  = questResultEntity.RiskRankKind,
                        EvaluationDate = currenTime,
                        BusinessDate   = ConvertBusinessDate(currenTime),
                        IsUsed         = "N",
                        CreateUserId   = questResultEntity.TesteeId,
                        CreateTime     = currenTime,
                        ModifyUserId   = null,
                        ModifyTime     = null,
                    };

                    new RiskEvaluationDAO().Insert(riskEvaluationDO);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// 更新投資風險評估結果
        /// </summary>
        /// <param name="riskEvaluation">投資風險評估結果資料</param>
        public void Update(RiskEvaluationDO riskEvaluation)
        {
            if (riskEvaluation == null)
            {
                throw new ArgumentNullException("riskEvaluation");
            }

            string query = @"
UPDATE [RiskEvaluation]
    SET [QuestAnswerId] = @QuestAnswerId,
        [RiskResult] = @RiskResult,
        [RiskScore] = @RiskScore,
        [RiskAttribute] = @RiskAttribute,
        [EvaluationDate] = @EvaluationDate,
        [BusinessDate] = @BusinessDate,
        [IsUsed] = @IsUsed,
        [ModifyUserId] = @ModifyUserId,
        [ModifyTime] = @ModifyTime
 WHERE [Uid] = @Uid;";

            using (SqlConnection connection = DbConnection)
            {
                SqlCommand command = new SqlCommand(query, connection);
                command.Parameters.Add(new SqlParameter("@Uid", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.Uid.ToString()
                });
                command.Parameters.Add(new SqlParameter("@QuestAnswerId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.QuestAnswerId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@RiskResult", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.RiskResult
                });
                command.Parameters.Add(new SqlParameter("@RiskScore", SqlDbType.Int)
                {
                    Value = riskEvaluation.RiskScore ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@RiskAttribute", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.RiskAttribute ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@EvaluationDate", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.EvaluationDate ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@BusinessDate", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.BusinessDate ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@IsUsed", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.IsUsed ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyUserId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.ModifyUserId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyTime", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.ModifyTime ?? Convert.DBNull
                });


                connection.Open();
                command.ExecuteNonQuery();

                command = null;

                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 新增投資風險評估結果
        /// </summary>
        /// <param name="riskEvaluation">投資風險評估結果資料</param>
        public void Insert(RiskEvaluationDO riskEvaluation)
        {
            if (riskEvaluation == null)
            {
                throw new ArgumentNullException("riskEvaluation");
            }

            string query = @"
INSERT INTO RiskEvaluation 
    ([Uid],[RiskEvaId],[QuestAnswerId],[CliId],[RiskResult],[RiskScore],[RiskAttribute],
    [EvaluationDate],[BusinessDate],[IsUsed],[CreateUserId],[CreateTime],
    [ModifyUserId],[ModifyTime]) 
VALUES 
    (@Uid, @RiskEvaId, @QuestAnswerId, @CliId, @RiskResult, @RiskScore, @RiskAttribute,
    @EvaluationDate, @BusinessDate, @IsUsed, @CreateUserId, @CreateTime,
    @ModifyUserId, @ModifyTime);";

            using (SqlConnection connection = DbConnection)
            {
                SqlCommand command = new SqlCommand(query, connection);
                command.Parameters.Add(new SqlParameter("@Uid", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.Uid.ToString()
                });
                command.Parameters.Add(new SqlParameter("@RiskEvaId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.RiskEvaId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@QuestAnswerId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.QuestAnswerId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@CliId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.CliId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@RiskResult", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.RiskResult
                });
                command.Parameters.Add(new SqlParameter("@RiskScore", SqlDbType.Int)
                {
                    Value = riskEvaluation.RiskScore ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@RiskAttribute", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.RiskAttribute ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@EvaluationDate", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.EvaluationDate ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@BusinessDate", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.BusinessDate ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@IsUsed", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.IsUsed ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@CreateUserId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.CreateUserId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@CreateTime", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.CreateTime ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyUserId", SqlDbType.VarChar)
                {
                    Value = riskEvaluation.ModifyUserId ?? Convert.DBNull
                });
                command.Parameters.Add(new SqlParameter("@ModifyTime", SqlDbType.DateTime)
                {
                    Value = riskEvaluation.ModifyTime ?? Convert.DBNull
                });


                connection.Open();
                command.ExecuteNonQuery();

                command = null;

                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }