/// <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)); } }
/// <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); }
public string AddRepayment(RepaymentModel model) { return(_bll.AddRepayment(model) > 1 ? JsonConvert.SerializeObject(AlertHelper.SuccessMessage()) : JsonConvert.SerializeObject(AlertHelper.ErrorMessage())); }
/// <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); }
//添加信息 public int AddRepayment(RepaymentModel model) { return(_dal.Add(model)); }