Exemplo n.º 1
0
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public int Add(RepaymentModel model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("insert into RepaymentInfoTemp(");
            strSql.Append("SumPrincipal,Principal,CurrInterest,RepaymentTime,status,Repayment)");
            strSql.Append(" values (");
            strSql.Append("@SumPrincipal,@Principal,@CurrInterest,@RepaymentTime,@status,@Repayment)");
            strSql.Append(";select @@IDENTITY");
            SqlParameter[] parameters =
            {
                new SqlParameter("@SumPrincipal",  SqlDbType.Decimal,   9),
                new SqlParameter("@Principal",     SqlDbType.Decimal,   9),
                new SqlParameter("@CurrInterest",  SqlDbType.Decimal,   9),
                new SqlParameter("@RepaymentTime", SqlDbType.DateTime),
                new SqlParameter("@status",        SqlDbType.Int,       4),
                new SqlParameter("@Repayment",     SqlDbType.Int, 4)
            };
            parameters[0].Value = model.SumPrincipal;
            parameters[1].Value = model.Principal;
            parameters[2].Value = model.CurrInterest;
            parameters[3].Value = model.RepaymentTime;
            parameters[4].Value = model.status;
            parameters[5].Value = model.Repayment;
            object obj = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocal, CommandType.Text, strSql.ToString(), parameters);

            if (obj == null)
            {
                return(0);
            }
            else
            {
                return(Convert.ToInt32(obj));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 还款列表
        /// </summary>
        /// <param name="principal">本金</param>
        /// <param name="rateType">利率计算方式</param>
        /// <param name="rate">利率</param>
        /// <param name="deadline">期限</param>
        /// <param name="periods">期数</param>
        /// <param name="autoFixPrincipalToInteger">是否为自动修正本金整数</param>
        /// <returns></returns>
        public override IEnumerable <RepaymentModel> GetRepayments(decimal principal, RepaymentRateType rateType, decimal rate, decimal deadline, int periods = 1, bool autoFixPrincipalToInteger = true)
        {
            if (periods <= 0)
            {
                throw new DomainException("还款期数不能小于0");
            }

            var list = new List <RepaymentModel>(periods);
            var avg  = principal / periods;

            /*不用修正本金或进要修正本金但能整除*/
            if (!autoFixPrincipalToInteger || (autoFixPrincipalToInteger && principal % periods == 0))
            {
                for (var i = 1; i <= periods; i++)
                {
                    var interest = this.Strategy.GetNUnitAmount((principal - list.Sum(o => o.Principal)) * rate * deadline, rateType) / periods;
                    var model    = new RepaymentModel()
                    {
                        Principal = avg, Interest = interest, Period = i, PayDate = this.Strategy.GetPayTime(this.StartDate, deadline * i / periods)
                    };
                    list.Add(model);
                }
            }
            else
            {
                var fixPrincipal   = principal - principal % periods;
                var firstPrinciapl = principal - (periods - 1) * fixPrincipal / periods;
                var firstModel     = new RepaymentModel()
                {
                    Principal = firstPrinciapl, Interest = this.Strategy.GetNUnitAmount(principal * rate * deadline, rateType) / periods, Period = 1, PayDate = this.Strategy.GetPayTime(this.StartDate, deadline * 1 / periods)
                };
                list.Add(firstModel);

                /*只有大于1期后才可能重新计算本金与利息*/
                if (periods > 1)
                {
                    var changeAvg = (principal - firstPrinciapl) / (periods - 1);
                    for (var i = 2; i <= periods; i++)
                    {
                        var interest = this.Strategy.GetNUnitAmount((principal - list.Sum(o => o.Principal)) * rate * deadline, rateType) / periods;
                        var model    = new RepaymentModel()
                        {
                            Principal = changeAvg, Interest = interest, Period = i, PayDate = this.Strategy.GetPayTime(this.StartDate, deadline * i / periods)
                        };
                        list.Add(model);
                    }
                }
            }

            return(list);
        }
Exemplo n.º 3
0
 public string AddRepayment(RepaymentModel model)
 {
     return(_bll.AddRepayment(model) > 1
                ? JsonConvert.SerializeObject(AlertHelper.SuccessMessage())
                : JsonConvert.SerializeObject(AlertHelper.ErrorMessage()));
 }
Exemplo n.º 4
0
        /// <summary>
        /// 还款列表
        /// </summary>
        /// <param name="principal">本金</param>
        /// <param name="rateType">利率计算方式</param>
        /// <param name="rate">利率</param>
        /// <param name="deadline">期限</param>
        /// <param name="periods">期数</param>
        /// <param name="autoFixPrincipalToInteger">是否为自动修正本金整数</param>
        /// <returns></returns>
        public override IEnumerable <RepaymentModel> GetRepayments(decimal principal, RepaymentRateType rateType, decimal rate, decimal deadline, int periods = 1, bool autoFixPrincipalToInteger = true)
        {
            if (periods <= 0)
            {
                throw new DomainException("还款期数不能小于0");
            }

            switch (this.DateType)
            {
            case RepaymentTimeUnitType.天:
            {
                if (deadline / 30 != periods)
                {
                    throw new ArgumentException(string.Format("当前以天计算,共{0}天,期数应为{1},但参数的期数却为{2}", deadline, deadline / 30, periods));
                }
            }
            break;

            case RepaymentTimeUnitType.季:
            {
                if (deadline * 4 != periods)
                {
                    throw new ArgumentException(string.Format("当前以季计算,共{0}季,期数应为{1},但参数的期数却为{2}", deadline, deadline * 4, periods));
                }
            }
            break;

            case RepaymentTimeUnitType.年:
            {
                if (deadline * 12 != periods)
                {
                    throw new ArgumentException(string.Format("当前以年计算,共{0}年,期数应为{1},但参数的期数却为{2}", deadline, deadline * 12, periods));
                }
            }
            break;

            case RepaymentTimeUnitType.月:
            {
                if (deadline != periods)
                {
                    throw new ArgumentException(string.Format("当前以月计算,共{0}月,期数应为{1},但参数的期数却为{2}", deadline, deadline, periods));
                }
            }
            break;
            }
            switch (rateType)
            {
            case RepaymentRateType.天利率:
            {
                rate = rate * 30;
            }
            break;

            case RepaymentRateType.季利率:
            {
                rate = rate / 4;
            }
            break;

            case RepaymentRateType.年利率:
            {
                rate = rate / 12;
            }
            break;

            case RepaymentRateType.月利率:
                break;
            }

            var list = new List <RepaymentModel>(periods);
            /*算法中row第二个参数是指期数*/
            var factor = (decimal)Math.Pow((double)(1m + rate), periods);
            var avg    = principal * rate * factor / (factor - 1);

            //if (periods == 1)
            //    return new RepaymentModel[] { new RepaymentModel((avg - principal * rate * this.Strategy.GetUnitAmount()) * deadline, principal * rate * this.Strategy.GetUnitAmount() * deadline, 1, this.Strategy.GetPayTime(this.StartDate, deadline)) };

            var avgd = deadline / periods;

            if (!autoFixPrincipalToInteger || (autoFixPrincipalToInteger && principal % periods == 0))
            {
                for (var i = 1; i <= periods; i++)
                {
                    var interest = this.Strategy.GetNUnitAmount((principal - list.Sum(o => o.Principal)) * rate * deadline, RepaymentRateType.月利率) / periods;
                    var model    = new RepaymentModel()
                    {
                        Principal = (avg - interest), Interest = interest, Period = i, PayDate = this.Strategy.GetPayTime(this.StartDate, deadline * i / periods)
                    };
                    list.Add(model);
                }
            }
            else
            {
                for (var i = 1; i <= periods; i++)
                {
                    var interest     = this.Strategy.GetNUnitAmount((principal - list.Sum(o => o.Principal)) * rate * deadline, RepaymentRateType.月利率) / periods;
                    var fixPrincipal = (avg - interest).FormatC(0);
                    var model        = new RepaymentModel()
                    {
                        Principal = fixPrincipal, Interest = interest + (avg - interest - fixPrincipal), Period = i, PayDate = this.Strategy.GetPayTime(this.StartDate, deadline * i / periods)
                    };
                    list.Add(model);
                }
            }

            //list.Add(new RepaymentModel((avg - principal * rate) * avgd, principal * rate * avgd, 1, this.Strategy.GetPayTime(this.StartDate, avgd * 1)));

            //for (var i = 2; i <= periods; i++)
            //{
            //    var interest = (principal - list.Sum(o => o.Principal)) * rate * avgd;
            //    var model = new RepaymentModel((avg - interest) * avgd, interest * avgd, i, this.Strategy.GetPayTime(this.StartDate, avgd * i));
            //    list.Add(model);
            //}

            return(list);
        }
Exemplo n.º 5
0
        //添加信息

        public int AddRepayment(RepaymentModel model)
        {
            return(_dal.Add(model));
        }