/// <summary> /// Calculates the total income with equal principal by quart. /// </summary> /// <param name="inverstParas">The inverst paras.</param> /// <returns>InvestmentTotalIncome.</returns> /// 创 建 者:解志辉 /// 创建日期:2016-05-17 10:43:07 private static InvestmentTotalIncome CalculateTotalIncomeWithEqualPrincipalByQuart(InvestmentParameters inverstParas) { InvestmentTotalIncome income = new InvestmentTotalIncome(); if (inverstParas.CircleType == 1) { double num = Math.Ceiling((double)(((double)inverstParas.Circle) / 3.0)); income.Reward = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0)); income.ActualYearRate = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / num) * 4.0); income.ActualMonthRate = income.ActualYearRate / 12.0; decimal num2 = (((decimal)inverstParas.NominalYearRate) / 4M) / 100M; income.Interest = (inverstParas.Amount * ((decimal)(((double)Sum((int)num)) / num))) * num2; income.TotalIncome = inverstParas.Amount + income.Interest; income.Overheads = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M); return(income); } if (inverstParas.CircleType == 3) { income = CalculateTotalIncomeWithLumpSumPrincipalAndInterest(inverstParas); } return(income); }
/// <summary> /// 计算总付本金和利息收入总额 天为单位 /// </summary> /// <param name="inverstParas">The inverst paras.</param> /// <returns>InvestmentTotalIncome.</returns> /// <remarks> /// 创 建 者:解志辉 /// 创建日期:2016-05-17 10:43:02 /// </remarks> private static InvestmentTotalIncome CalculateTotalIncomeWithLumpSumPrincipalAndInterest(InvestmentParameters inverstParas) { InvestmentTotalIncome income = new InvestmentTotalIncome(); double circle = inverstParas.Circle; if (inverstParas.CircleType == 3) { circle = ((double)inverstParas.Circle) / 30.0; } income.Reward = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0)); income.ActualYearRate = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / circle) * 12.0); income.ActualMonthRate = income.ActualYearRate / 12.0; income.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0)); income.TotalIncome = (inverstParas.Amount + income.Interest) + income.Reward; income.Overheads = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M); return(income); }
private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithLumpSumPrincipalAndInterest(InvestmentParameters inverstParas) { int days = 0; List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>(); InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo(); if (inverstParas.CircleType == 1) { if (inverstParas.IsThirtyDayMonth) { item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(inverstParas.Circle * 30)); inverstParas.Circle *= 30; } else { //item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(inverstParas.Circle); // TimeSpan span = (TimeSpan)(DateTime.Now.AddMonths(inverstParas.Circle) - DateTime.Now); item.NominalReceiveDate = inverstParas.Investmentenddate; TimeSpan span = (TimeSpan)(inverstParas.Investmentenddate - inverstParas.InvestDate); inverstParas.Circle = (int)Math.Ceiling(span.TotalDays); } } else { //天标这里需要调整 // item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)inverstParas.Circle); item.NominalReceiveDate = inverstParas.Investmentenddate; } long diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(item.NominalReceiveDate.ToString("yyyy-MM-dd"))); days = int.Parse(diffdays.ToString()); item.interestvalue_date = inverstParas.InvestDate; item.AddTime = DateTime.Now; item.UpdateTime = DateTime.Now; if (days == 0) { days = 1; } item.TotalInstallments = days; item.TotalDays = days; item.CurrentInstallments = 1; // item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0)); item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); item.Principal = inverstParas.Amount; item.PrincipalStatus = 0; item.InterestStatus = 0; item.Amount = item.Principal + item.Interest; item.Balance = item.Principal + item.Interest; item.TotalInstallments = 1; item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate); list.Add(item); return(list); }
/// <summary> /// Calculates the total income with equal principal and interest. /// </summary> /// <param name="inverstParas">The inverst paras.</param> /// <returns>InvestmentTotalIncome.</returns> /// <remarks> /// 创 建 者:解志辉 /// 创建日期:2016-05-17 10:43:10 /// </remarks> private static InvestmentTotalIncome CalculateTotalIncomeWithEqualPrincipalAndInterest(InvestmentParameters inverstParas) { InvestmentTotalIncome income = new InvestmentTotalIncome(); if (inverstParas.CircleType == 1) { income.Reward = inverstParas.Amount * ((decimal)(inverstParas.RewardRate / 100.0)); income.ActualYearRate = (inverstParas.NominalYearRate * (1.0 - (inverstParas.OverheadsRate / 100.0))) + ((inverstParas.RewardRate / ((double)inverstParas.Circle)) * 12.0); income.ActualMonthRate = income.ActualYearRate / 12.0; double num = (inverstParas.NominalYearRate / 12.0) / 100.0; double num2 = Math.Pow(1.0 + num, (double)inverstParas.Circle); decimal num3 = 0M; if (num > 0.0) { num3 = inverstParas.Amount * ((decimal)((num * num2) / (num2 - 1.0))); } else { num3 = inverstParas.Amount / inverstParas.Circle; } income.TotalIncome = (num3 * inverstParas.Circle) + income.Reward; income.Interest = income.TotalIncome - inverstParas.Amount; income.Overheads = income.Interest * (((decimal)inverstParas.OverheadsRate) / 100M); return(income); } if (inverstParas.CircleType == 3) { income = CalculateTotalIncomeWithLumpSumPrincipalAndInterest(inverstParas); } return(income); }
/// <summary> /// 按日计息,每月还息,到期还本 /// </summary> /// <param name="inverstParas"></param> /// <returns></returns> private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithInterestByMonth1(InvestmentParameters inverstParas) { List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>(); if (inverstParas.CircleType == 1) { double num = (inverstParas.NominalYearRate / 12.0) / 100.0; //月利率 decimal num2 = inverstParas.Amount * ((decimal)num); DateTime CMTH1 = new DateTime(); //每月结息日 for (int i = 1; i <= inverstParas.Circle; i++) { InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo(); DateTime CMTH = new DateTime(); //当月计息日 int days = 0;//投次天数 if (i == 1) { item.Principal = 0M; CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示 //item.interestvalue_date = CMTH; item.interestvalue_date = CMTH1 = inverstParas.InvestDate; } else if (i == inverstParas.Circle) { item.Principal = inverstParas.Amount; CMTH = DateTime.Parse(inverstParas.Investmentenddate.ToString("yyyy-MM-dd")); item.interestvalue_date = CMTH1 = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示 } else { item.Principal = 0M; CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest);//当月付息日的日期显示 item.interestvalue_date = CMTH; } //应收利息需要按日来计算 特殊处理 long diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(CMTH.ToString("yyyy-MM-dd"))); if (diffdays > 0) { days = int.Parse(diffdays.ToString()); //item.Interest = num2; ///日利息计算 //inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * inverstParas.Circle) / 365.0)); item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); } else if (diffdays == 0) { days = DateTime.DaysInMonth(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month); item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); } else { DateTime dd = DateTime.Parse(CMTH.AddMonths(1).ToString("yyyy-MM-dd")); diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), dd); days = int.Parse(diffdays.ToString()); item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); //超过日期后按投资当天计息 if (i == 1) { item.interestvalue_date = DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")); } else { item.interestvalue_date = dd; } // i = i + 1; } if (i == 1) { inverstParas.InvestDate = CMTH; } else if (i == inverstParas.Circle) { inverstParas.InvestDate = CMTH; } else { inverstParas.InvestDate = CMTH.AddMonths(1); } item.Amount = item.Principal + item.Interest; item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate); if (inverstParas.IsThirtyDayMonth) { item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30)); } else { //item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i); item.NominalReceiveDate = inverstParas.InvestDate; } // item.TotalInstallments = inverstParas.Circle; item.TotalInstallments = days; item.CurrentInstallments = i; item.AddTime = DateTime.Now; item.UpdateTime = DateTime.Now; item.PrincipalStatus = 0; item.InterestStatus = 0; if (i == inverstParas.Circle) { item.Balance = inverstParas.Amount + item.Interest; } else { item.Balance = item.Interest; } list.Add(item); } return(list); } if (inverstParas.CircleType == 3) { list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas); } return(list); }
/// <summary> /// 按月等额本息 /// </summary> /// <param name="inverstParas"></param> /// <returns></returns> private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithEqualPrincipalAndInterest(InvestmentParameters inverstParas) { List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>(); if (inverstParas.CircleType == 1) { double num = (inverstParas.NominalYearRate / 12.0) / 100.0;//月利率 double num2 = Math.Pow(1.0 + num, (double)inverstParas.Circle); decimal d = 0M; if (num > 0.0) { d = inverstParas.Amount * ((decimal)((num * num2) / (num2 - 1.0))); } else { d = inverstParas.Amount / inverstParas.Circle; } d = Math.Round(d, 2); for (int i = 1; i <= inverstParas.Circle; i++) { InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo(); decimal num5 = (decimal)Math.Pow(1.0 + num, (double)((i - 1) - inverstParas.Circle)); item.Interest = Math.Round((decimal)(d * (1M - num5)), 2); item.Principal = d - item.Interest; item.Amount = item.Principal + item.Interest; item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate); if (inverstParas.IsThirtyDayMonth) { item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30)); } else { item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i); } item.TotalInstallments = inverstParas.Circle; item.CurrentInstallments = i; item.AddTime = DateTime.Now; item.UpdateTime = DateTime.Now; item.PrincipalStatus = 0; item.InterestStatus = 0; item.Balance = (inverstParas.Circle - i) * d; list.Add(item); } return(list); } if (inverstParas.CircleType == 3) { list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas); } return(list); }
/// <summary> /// 按日计息,每月还息,到期还本 /// </summary> /// <param name="inverstParas"></param> /// <returns></returns> private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithInterestByMonth(InvestmentParameters inverstParas) { List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>(); DateTime Startdate_M = new DateTime(); //每月起息日 if (inverstParas.CircleType == 1) { double num = (inverstParas.NominalYearRate / 12.0) / 100.0; decimal num2 = inverstParas.Amount * ((decimal)num); for (int i = 1; i <= inverstParas.Circle; i++) { InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo(); DateTime CMTH = new DateTime(); //当月付息日 int days = 0; //天数 long diffdays = 0; //计算相差天数 DateTime startdate = new DateTime(); if (i == 1) //第一期 { item.Principal = 0M; CMTH = new DateTime(inverstParas.InvestDate.Year, inverstParas.InvestDate.Month, inverstParas.Payinterest); //当月付息日的日期显示 //需要处理计算是投资日之前还是之后 int dtt = 0; if (inverstParas.ReleaseDate != null) { dtt = DateTime.Compare(CMTH, DateTime.Parse(inverstParas.ReleaseDate)); } else { dtt = DateTime.Compare(CMTH, inverstParas.InvestDate); } if (dtt > 0) //之后 如 投资 14 付息 25 { item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate; item.Principal = 0M; diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(CMTH.ToString("yyyy-MM-dd"))); days = Math.Abs(int.Parse(diffdays.ToString())); item.NominalReceiveDate = startdate.AddDays(days); item.TotalDays = days; item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); } else //之前 如投资 14 付息 1 得计算到下个月的1号 { item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate; item.Principal = 0M; DateTime dd = DateTime.Parse(CMTH.AddMonths(1).ToString("yyyy-MM-dd")); diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), dd); days = Math.Abs(int.Parse(diffdays.ToString())); item.NominalReceiveDate = startdate.AddDays(days); item.TotalDays = days; item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); } Startdate_M = item.NominalReceiveDate; } else if (i == inverstParas.Circle) //最后一期 { //item.interestvalue_date = Startdate_M = startdate = inverstParas.InvestDate.AddMonths(1); item.interestvalue_date = Startdate_M = startdate = Startdate_M; item.Principal = inverstParas.Amount; CMTH = DateTime.Parse(inverstParas.Investmentenddate.ToString("yyyy-MM-dd")); diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(item.interestvalue_date.ToString("yyyy-MM-dd")), CMTH); days = Math.Abs(int.Parse(diffdays.ToString())); item.NominalReceiveDate = CMTH; item.TotalDays = days; item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); // Startdate_M = CMTH; } else { item.Principal = 0M; item.interestvalue_date = inverstParas.InvestDate = startdate = Startdate_M; Startdate_M = Startdate_M.AddMonths(1); diffdays = Settings.Instance.DateDiff("Day", DateTime.Parse(inverstParas.InvestDate.ToString("yyyy-MM-dd")), DateTime.Parse(Startdate_M.ToString("yyyy-MM-dd"))); days = Math.Abs(int.Parse(diffdays.ToString())); item.NominalReceiveDate = startdate.AddDays(days); item.TotalDays = days; item.Interest = inverstParas.Amount * ((decimal)(((inverstParas.NominalYearRate / 100.0) * days) / 365.0)); Startdate_M = item.NominalReceiveDate; } // item.Interest = num2; item.Amount = item.Principal + item.Interest; item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate); /* 作废 * if (inverstParas.IsThirtyDayMonth) * { * item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)(i * 30)); * } * else * { * item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(i); * } */ item.TotalInstallments = inverstParas.Circle; item.CurrentInstallments = i; item.AddTime = DateTime.Now; item.UpdateTime = DateTime.Now; item.PrincipalStatus = 0; item.InterestStatus = 0; if (i == inverstParas.Circle) { item.Balance = inverstParas.Amount + item.Interest; } else { item.Balance = item.Interest; } list.Add(item); } return(list); } if (inverstParas.CircleType == 3) { list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas); } return(list); }
private static List <InvestmentReceiveRecordInfo> CalculateReceiveRecordWithEqualPrincipalByQuart(InvestmentParameters inverstParas) { List <InvestmentReceiveRecordInfo> list = new List <InvestmentReceiveRecordInfo>(); if (inverstParas.CircleType == 1) { int n = (int)Math.Ceiling((double)(((double)inverstParas.Circle) / 3.0)); decimal num2 = inverstParas.Amount / n; decimal num3 = (((decimal)inverstParas.NominalYearRate) / 4M) / 100M; decimal num4 = (inverstParas.Amount * (Sum(n) / n)) * num3; decimal decimal1 = inverstParas.Amount + num4; int num5 = 0; for (int i = 1; i <= n; i++) { decimal num7 = (inverstParas.Amount * (((n - i) + 1) / n)) * num3; decimal num8 = (inverstParas.Amount * (Sum(n - i) / n)) * num3; for (int j = 1; j <= 3; j++) { num5++; InvestmentReceiveRecordInfo item = new InvestmentReceiveRecordInfo(); if (j == 3) { item.Principal = num2; } else { item.Principal = 0M; } item.Interest = num7 / 3M; item.Amount = item.Principal + item.Interest; item.Overheads = item.Interest * ((decimal)inverstParas.OverheadsRate); if (inverstParas.IsThirtyDayMonth) { item.NominalReceiveDate = inverstParas.InvestDate.AddDays((double)((j * i) * 30)); } else { item.NominalReceiveDate = inverstParas.InvestDate.AddMonths(j * i); } item.TotalInstallments = inverstParas.Circle; item.CurrentInstallments = num5; item.AddTime = DateTime.Now; item.UpdateTime = DateTime.Now; item.PrincipalStatus = 0; item.InterestStatus = 0; if (j == 3) { item.Balance = (((n - i) * num2) + ((3 - j) * item.Interest)) + num8; } else { item.Balance = ((((n - i) + 1) * num2) + ((3 - j) * item.Interest)) + num8; } list.Add(item); } } return(list); } if (inverstParas.CircleType == 3) { list = CalculateReceiveRecordWithLumpSumPrincipalAndInterest(inverstParas); } return(list); }
/// <summary> /// Corrects the total income. /// </summary> /// <param name="income">The income.</param> /// <param name="inverstParas">The inverst paras.</param> /// <returns>InvestmentTotalIncome.</returns> /// <remarks> /// 创 建 者:解志辉 /// 创建日期:2016-05-17 10:43:00 /// </remarks> private static InvestmentTotalIncome CorrectTotalIncome(InvestmentTotalIncome income, InvestmentParameters inverstParas) { List <InvestmentReceiveRecordInfo> list = CalculateReceiveRecord(inverstParas); income.ReceiveRecords = list; decimal num = 0M; decimal num2 = 0M; foreach (InvestmentReceiveRecordInfo info in list) { num += info.Interest; num2 += info.Principal; } income.Interest = num; income.TotalIncome = (num + inverstParas.Amount) + income.Reward; income.CleanTotalIncome = income.TotalIncome - income.Overheads; income.TotalEarnings = income.TotalIncome - inverstParas.Amount; income.CleanTotalEarnings = income.TotalEarnings - income.Overheads; return(income); }
/// <summary> /// 确认投资接口--解志辉 /// </summary> /// <param name="reqst">The reqst.</param> /// <returns>ResultInfo<System.Int32>.</returns> /// 创 建 者:解志辉 /// 创建日期:2016-05-31 18:01:28 public ResultInfo<int> SubmitTender(RequestParam<RequestTender> reqst) { ResultInfo<int> res = new ResultInfo<int>("99999"); var usrId = ConvertHelper.ParseValue(reqst.body.userId, 0); var targetId = ConvertHelper.ParseValue(reqst.body.targetId, 0); var bds = reqst.body.bonusIds; var investAmount = ConvertHelper.ParseValue(reqst.body.investAmount, 0M); // var code = reqst.body.invitedcode; if (usrId <= 0) { res.code = "1000000015"; res.message = Settings.Instance.GetErrorMsg(res.code); return res; } if (targetId <= 0) { res.code = "1000000014"; res.message = Settings.Instance.GetErrorMsg(res.code); return res; } try { var ent = _logic.SelectBorrowDetail(targetId); //最低可投金额应该从标的记录获取 if (investAmount < ent.minimum) { res.code = "2000000000"; res.message = Settings.Instance.GetErrorMsg(res.code); return res; } else if (investAmount + ent.fundraising_amount > ent.borrowing_balance) {//超过可投金额 res.code = "2000000002"; res.message = Settings.Instance.GetErrorMsg(res.code); return res; } InvestmentParameters mp = new InvestmentParameters { Amount = investAmount, Circle = ConvertHelper.ParseValue(ent.life_of_loan, 0), CircleType = ConvertHelper.ParseValue(ent.unit_day, 0), NominalYearRate = ConvertHelper.ParseValue(ent.annual_interest_rate, 0D), OverheadsRate = 0f, RepaymentMode = ConvertHelper.ParseValue(ent.payment_options, 0), RewardRate = 0f, IsThirtyDayMonth = false, InvestDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")), ReleaseDate = DateTime.Parse(ent.release_date.ToString()).ToString("yyyy-MM-dd"), Investmentenddate = DateTime.Parse(DateTime.Parse(ent.repayment_date.ToString()).ToString("yyyy-MM-dd")), Payinterest = ConvertHelper.ParseValue(ent.month_payment_date, 0), InvestObject = 1 }; List<InvestmentReceiveRecordInfo> records = InvestCalculator.CalculateReceiveRecord(mp); StringBuilder sb = new StringBuilder(""); if (records != null && records.Any()) { int i = 1; foreach (var item in records) { //current_investment_period,value_date,interest_payment_date,repayment_amount,interestpayment,Principal,TotalInstallments,interestDay sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7}|", i, item.interestvalue_date, item.NominalReceiveDate, item.Balance, item.Interest, item.Principal, item.TotalInstallments, item.TotalDays); i = i + 1; } } //(int usrId, int targetId, decimal investAmount, List<int> bds, string code, string ordCode, decimal withoutInterest, string frozenidNo, decimal frozenidAmount, int cPeriod) var resVal = _logic.SubmitTender(usrId, targetId, investAmount, bds, "", Settings.Instance.OrderCode , ((records != null && records.Any()) ? records.Sum(t => t.Interest) : 0M), Settings.Instance.OrderCode , 0M , ((records != null && records.Any()) ? records.Count : 0), sb.ToString()); if (resVal < 200) { switch (resVal) { case -100: { res.code = "2000000001"; } break; case -200: { res.code = "2000000002"; } break; case -300: { res.code = "2000000003"; } break; case -400: { res.code = "2000000004"; } break; case -500: { res.code = "2000000007"; } break; case -600: { res.code = "2000000006"; } break; } } else { res.code = "1"; res.body = resVal; } res.message = Settings.Instance.GetErrorMsg(res.code); return res; } catch (Exception ex) { LoggerHelper.Error(ex.ToString()); LoggerHelper.Error(JsonHelper.Entity2Json(reqst)); res.code = "500"; res.message = Settings.Instance.GetErrorMsg(res.code); return res; } }
public ActionResult Index(RequestParam <RequestTender> reqst) { LoggerHelper.Info(JsonHelper.Entity2Json(reqst)); ResultInfo <string> res = new ResultInfo <string>("99999"); var usrId = ConvertHelper.ParseValue(reqst.body.userId, 0); var targetId = ConvertHelper.ParseValue(reqst.body.targetId, 0); var bds = string.Empty; B_borrowing_target b_borrowing_target = new B_borrowing_target(); var m_borrowing_target = b_borrowing_target.GetModel(targetId); B_member_table b_member_table = new B_member_table(); var m_member_table = b_member_table.GetModel(usrId); if (m_borrowing_target == null || m_member_table == null) { res.code = "1000000010"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (!string.IsNullOrWhiteSpace(reqst.body.bonusIds)) { bds = reqst.body.bonusIds; } if (!string.IsNullOrWhiteSpace(reqst.body.addRateIds)) { if (!string.IsNullOrWhiteSpace(bds)) { bds += ","; } bds = reqst.body.addRateIds; } var investAmount = ConvertHelper.ParseValue(reqst.body.investAmount, 0M); BorrowLogic _logic = new BorrowLogic(); var ent = _logic.SelectBorrowDetail(targetId); if (usrId <= 0) { res.code = "1000000015"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (targetId <= 0) { res.code = "1000000014"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (investAmount < 100) { res.code = "2000000000"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (m_borrowing_target.minimum > 0 && investAmount < m_borrowing_target.minimum) { res.code = "2000000008"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (m_borrowing_target.maxmum > 0 && investAmount > m_borrowing_target.maxmum) { res.code = "2000000009"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (reqst.body.typeId == 6)//新手标判定 { if (!string.IsNullOrWhiteSpace(bds)) { res.code = "2000000010"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (m_member_table.useridentity != 5) { if (Convert.ToDateTime(m_member_table.Registration_time.ToString("yyyy-MM-dd")).AddDays(30) < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"))) { res.code = "2000000011"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } B_Bid_records b_Bid_records = new B_Bid_records(); int investedCount = b_Bid_records.GetInvestCount(reqst.body.userId, reqst.body.targetId); if (investedCount >= 3) { res.code = "2000000012"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (ent.start_time != null && ent.start_time.Value < Convert.ToDateTime("2016-12-01 00:00:00")) { res.code = "2999999999"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } if (ent.project_type_id != null && ent.project_type_id.Value != 6) { res.code = "2999999999"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } } } try { decimal vocheramttemp = GetUseRewards(bds, usrId); B_member_table b = new B_member_table(); M_member_table user = new M_member_table(); user = b.GetModel(reqst.body.userId); InvestmentParameters mp = new InvestmentParameters { Amount = investAmount, Circle = ConvertHelper.ParseValue(ent.life_of_loan, 0), CircleType = ConvertHelper.ParseValue(ent.unit_day, 0), NominalYearRate = ConvertHelper.ParseValue(ent.annual_interest_rate, 0D), OverheadsRate = 0f, RepaymentMode = ConvertHelper.ParseValue(ent.payment_options, 0), RewardRate = 0f, IsThirtyDayMonth = false, InvestDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")), ReleaseDate = DateTime.Parse(ent.release_date.ToString()).ToString("yyyy-MM-dd"), Investmentenddate = DateTime.Parse(DateTime.Parse(ent.repayment_date.ToString()).ToString("yyyy-MM-dd")), Payinterest = ConvertHelper.ParseValue(ent.month_payment_date, 0), InvestObject = 1 }; //追加 加息券 if (!string.IsNullOrWhiteSpace(bds)) { B_UserAct bUserAct = new B_UserAct(); var addRateModel = bUserAct.GetAddRateModel(bds); if (addRateModel != null)// add rate of year { mp.NominalYearRate = mp.NominalYearRate + Convert.ToDouble(addRateModel.Amt.Value); } } List <InvestmentReceiveRecordInfo> records = InvestCalculator.CalculateReceiveRecord(mp); StringBuilder sb = new StringBuilder(""); if (records != null && records.Any()) { int i = 1; foreach (var item in records) { sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7}|", i, item.interestvalue_date, item.NominalReceiveDate, item.Balance, item.Interest, item.Principal, item.TotalInstallments, item.TotalDays); i = i + 1; } } var orderId = Settings.Instance.OrderCode; var frozenidNo = Settings.Instance.OrderCode; decimal frozenAmount = 0.00M; var xf = ((records != null && records.Any()) ? records.Sum(t => t.Interest) : 0M); //LoggerHelper.Error("利息:" + xf + " ------- " + JsonHelper.Entity2Json(records)); string invitationCode = string.Empty; using (InvitationLogic invitationLogic = new InvitationLogic()) { var invitationModel = invitationLogic.GetUserInvited(usrId); if (invitationModel != null) { invitationCode = invitationModel.invcode; } } var resVal = _logic.SubmitTender(usrId, targetId, investAmount, bds, invitationCode, orderId , xf, frozenidNo , investAmount - frozenAmount , ((records != null && records.Any()) ? records.Count : 0), sb.ToString()); if (resVal < 200) { switch (resVal) { case -100: { res.code = "2000000001"; } break; case -101: { res.code = "2000000008"; } break; case -200: { res.code = "2000000002"; } break; case -300: { res.code = "2000000003"; } break; case -400: { res.code = "2000000004"; } break; case -500: { res.code = "2000000007"; } break; case -600: { res.code = "2000000006"; } break; } } else { LoggerHelper.Error("SubmitTender!!!!!!!!!!!!!!!投资开始"); LoggerHelper.Info("投资开始"); #region 投资成功 M_InitiativeTender Mt = new M_InitiativeTender(); Mt.Version = "20"; Mt.CmdId = "InitiativeTender"; Mt.MerCustId = Settings.Instance.MerCustId; Mt.OrdId = orderId; Mt.OrdDate = mp.InvestDate.ToString("yyyyMMdd"); Mt.TransAmt = investAmount.ToString("0.00"); Mt.UsrCustId = user.UsrCustId; Mt.MaxTenderRate = "0.20"; TenderJosnPro mtp = new TenderJosnPro(); mtp.BorrowerCustId = b.GetModel(ConvertHelper.ParseValue(ent.borrower_registerid, 0)).UsrCustId; mtp.BorrowerAmt = investAmount.ToString("0.00"); // mtp.BorrowerRate = decimal.Parse( dt.Rows[0]["loan_management_fee"].ToString()).ToString("0.00"); mtp.BorrowerRate = "1.00"; //风控范围 mtp.ProId = targetId.ToString(); Mt.BorrowerDetails = "[" + FastJSON.toJOSN(mtp) + "]"; #region 此处判断优惠类型 #endregion Mt.IsFreeze = "Y"; Mt.FreezeOrdId = frozenidNo; Mt.RetUrl = Settings.Instance.GetCallbackUrl("/MemberCenter/InvestSubmit/CallbackRetUrl"); Mt.BgRetUrl = Settings.Instance.GetCallbackUrl("/MemberCenter/InvestSubmit/CallbackBgRetUrl"); if (!string.IsNullOrWhiteSpace(reqst.body.bonusIds)) { Mt.MerPriv = bds; TenderAccPro ret = new TenderAccPro(); ret.AcctId = ChuanglitouP2P.Common.Utils.GetMERDT(); ret.VocherAmt = vocheramttemp.ToString("0.00"); Mt.ReqExt = "{" + "\"Vocher\":" + FastJSON.toJOSN(ret) + "}"; } else { Mt.MerPriv = reqst.body.addRateIds; } //append device code to comment fields for make sure it be transfered back string temp = Mt.MerPriv; AppendDeviceFlag(reqst.header.appId.ToString(), ref temp); Mt.MerPriv = temp; LoggerHelper.Info("优惠券使用的id:" + bds); StringBuilder chkVal = new StringBuilder(); chkVal.Append(Mt.Version); chkVal.Append(Mt.CmdId); chkVal.Append(Mt.MerCustId); chkVal.Append(Mt.OrdId); chkVal.Append(Mt.OrdDate); chkVal.Append(Mt.TransAmt); chkVal.Append(Mt.UsrCustId); chkVal.Append(Mt.MaxTenderRate); chkVal.Append(Mt.BorrowerDetails); chkVal.Append(Mt.IsFreeze); chkVal.Append(Mt.FreezeOrdId); chkVal.Append(Mt.RetUrl); chkVal.Append(Mt.BgRetUrl); chkVal.Append(Mt.MerPriv); chkVal.Append(Mt.ReqExt); string chkv = chkVal.ToString(); LoggerHelper.Info("投资:" + chkv); //私钥文件的位置(这里是放在了站点的根目录下) string merKeyFile = AppDomain.CurrentDomain.BaseDirectory + Settings.Instance.MerPr; //需要指定提交字符串的长度 int len = Encoding.UTF8.GetBytes(chkv).Length; StringBuilder sbChkValue = new StringBuilder(256); //加签 int str = DllInterop.SignMsg(Settings.Instance.MerId, merKeyFile, chkv, len, sbChkValue); LoggerHelper.Info(str); Mt.ChkValue = sbChkValue.ToString(); if (str == 0) { var strz = new StringBuilder(); strz.Append(" <form id=\"formauto\" name=\"formauto\" action=\"" + Settings.Instance.ChinapnrUrl + "\" method=\"post\">"); strz.Append("<input id=\"Version\" name=\"Version\" type=\"hidden\" value=\"" + Mt.Version + "\" />"); strz.Append("<input id=\"CmdId\" name=\"CmdId\" type=\"hidden\" value=\"" + Mt.CmdId + "\" />"); strz.Append("<input id=\"MerCustId\" name=\"MerCustId\" type=\"hidden\" value=\"" + Mt.MerCustId + "\" />"); strz.Append("<input id=\"OrdId\" name=\"OrdId\" type=\"hidden\" value=\"" + Mt.OrdId + "\" />"); strz.Append("<input id=\"OrdDate\" name=\"OrdDate\" type=\"hidden\" value=\"" + Mt.OrdDate + "\" />"); strz.Append("<input id=\"TransAmt\" name=\"TransAmt\" type=\"hidden\" value=\"" + Mt.TransAmt + "\" />"); strz.Append("<input id=\"UsrCustId\" name=\"UsrCustId\" type=\"hidden\" value=\"" + Mt.UsrCustId + "\" />"); strz.Append("<input id=\"MaxTenderRate\" name=\"MaxTenderRate\" type=\"hidden\" value=\"" + Mt.MaxTenderRate + "\" />"); strz.Append("<input id=\"BorrowerDetails\" name=\"BorrowerDetails\" type=\"hidden\" value=" + Mt.BorrowerDetails + " />"); strz.Append("<input id=\"IsFreeze\" name=\"IsFreeze\" type=\"hidden\" value=\"" + Mt.IsFreeze + "\" />"); strz.Append("<input id=\"FreezeOrdId\" name=\"FreezeOrdId\" type=\"hidden\" value=\"" + Mt.FreezeOrdId + "\" />"); strz.Append("<input id=\"RetUrl\" name=\"RetUrl\" type=\"hidden\" value=\"" + Mt.RetUrl + "\" />"); strz.Append("<input id=\"BgRetUrl\" name=\"BgRetUrl\" type=\"hidden\" value=\"" + Mt.BgRetUrl + "\" />"); strz.Append("<input id=\"MerPriv\" name=\"MerPriv\" type=\"hidden\" value=\"" + Mt.MerPriv + "\" />"); strz.Append("<input id=\"ReqExt\" name=\"ReqExt\" type=\"hidden\" value=" + Mt.ReqExt + " >"); strz.Append("<input id=\"ChkValue\" name=\"ChkValue\" type=\"hidden\" value=\"" + Mt.ChkValue + "\" />"); strz.Append(" </form>"); strz.Append("<script type=\"text/javascript\">document.getElementById('formauto').submit();</script>"); LoggerHelper.Info("投资表单:" + strz.ToString()); res.code = "1"; res.body = strz.ToString(); } else { res.code = "5000000000"; } #endregion } res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } catch (Exception ex) { LoggerHelper.Error(ex.ToString()); LoggerHelper.Error(JsonHelper.Entity2Json(reqst)); res.code = "500"; res.message = Settings.Instance.GetErrorMsg(res.code); return(View(res)); } }