/// <summary> /// 创建基本科目(包括本金、利息、管理费) /// </summary> /// <param name="business">业务对象</param> /// <returns>返回款项集合</returns> public override List <BillItem> CreateBaseItems(bool isLast = false) { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目 if (Business.LendingSideID > 0) { var capital = SubjectFormula.CalculatCapital(Business.LoanCapital, Business.LoanPeriod); var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); // 判断当期帐单属于第几期帐单,最后一期普通帐单(本金按余额计) if (isLast) { capital = SubjectFormula.CalculatCapitalOver(Business.LoanCapital, Business.LoanPeriod); } billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } // 添加管理方扣款项目 if (Business.ServiceSideID > 0) { var mangeFee = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, mangeFee)); } return(billItem); }
/// <summary> /// 获取信用贷款每期应还基本科目 /// </summary> /// <param name="business">业务对象</param> /// <returns>返回款项集合</returns> public override List <BillItem> GetBaseItemsByMonth() { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目(1、本金 2、利息) if (Business.LendingSideID > 0) { var capital = SubjectFormula.CalculatCapital(Business.LoanCapital, Business.LoanPeriod); billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } // 添加服务方和担保方扣款项目 if (Business.ServiceSideID > 0 && Business.GuaranteeSideID > 0) { var servicehalf = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, true); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, servicehalf)); billItem.Add(CreateBillItem(EnumCostSubject.GuaranteeFee, servicehalf)); } else if (Business.ServiceSideID > 0) { billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false))); } return(billItem); }
private List <BillItem> GetBillItem(bool isLast = false) { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目 if (Business.LendingSideID > 0) { decimal capital = 0.0M; // 判断当期帐单属于第几期帐单,最后一期普通帐单(本金按余额计) if (isLast) { capital = SubjectFormula.CalcuateCapitalOver(Business.LoanCapital , Business.CapitalRate.HasValue ? Business.CapitalRate.Value : 0, Business.LoanPeriod); } else { capital = SubjectFormula.CalcuLateCapitalByRate(Business.LoanCapital , Business.CapitalRate.HasValue ? Business.CapitalRate.Value : 0); } var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } if (Business.ServiceRate > 0) { var service = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, service)); } return(billItem); }
/// <summary> /// 创建罚息科目(因逾期而产生的上期帐单罚息) /// 费用算法:一次性为上期帐单生成上月20日至今的罚息合计 /// </summary> /// <param name="business">订单对象</param> /// <returns>返回罚息款项</returns> public override BillItem CreatePunitiveInterest(DateTime limitTime, List <PenaltyInt> penaltyInts) { // 获取当期帐单,为NULL或已在第三次扣失日前全额付清则继续循环 var nbills = BillDAL.GetNormalBills(Business.Bills); var prevBill = nbills.FirstOrDefault(p => p.BillMonth == _PrevMonth); var curBill = nbills.FirstOrDefault(p => p.BillMonth == _CurMonth); // 判断是否存在原因帐单或当期帐单,不存在则返回NULL if (prevBill == null || curBill == null || Business.Bills.Count == 1 || (limitTime >= prevBill.FullPaidTime && prevBill.FullPaidTime != null)) { return(null); } // 获取本金、利息、管理费等参与科目,计算上期所欠本息或租金 var subjects = new List <byte> { (byte)EnumCostSubject.Capital, (byte)EnumCostSubject.Interest }; // 获取上期帐单的本息欠费 decimal debtsPrincipal = prevBill.BillItems.Where(p => subjects.Contains(p.Subject)) .Sum(s => s.DueAmt - s.ReceivedAmt); // 判断上期帐单是否存在未归还所欠本息或租金,无则不生成罚息 if (debtsPrincipal <= 0) { return(null); } var beginDay = DateTime.Now.AddMonths(-1).SetDay(21); // 在罚息表中计算罚息金额 CalculatPenaltyInt(penaltyInts, debtsPrincipal, prevBill.BillID, curBill.BillID, beginDay); // 当所欠本息大于零时,计算从上月21日至今天数的罚息 var totalDays = DateTime.Now - beginDay; debtsPrincipal = SubjectFormula.CalculatPunitiveInterest(debtsPrincipal, Business.PenaltyRate, totalDays.Days); // 判断欠费帐单是否存在未归还所欠本息或租金,无则不生成罚息 if (debtsPrincipal <= 0) { return(null); } // 创建罚息科目(科目名称、金额) return(CreateBillItem(EnumCostSubject.PunitiveInterest, debtsPrincipal, false, curBill.BillID)); }
/// <summary> /// 获取信用贷款每期应还基本科目 /// </summary> /// <param name="business">业务对象</param> /// <returns>返回款项集合</returns> public override List <BillItem> GetBaseItemsByMonth() { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目(1、本金 2、利息) if (Business.LendingSideID > 0) { var capital = SubjectFormula.CalculatCapital(Business.LoanCapital, Business.LoanPeriod); billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } return(billItem); }
/// <summary> /// 未出账金款项列表 /// </summary> /// <param name="filter"></param> /// <returns></returns> private List <BillItem> NoCreateBillItem(BusinessGuaranteeSaveFilter filter) { List <BillItem> billitems = new List <BillItem>(); int num = filter.LoanPeriod - Singleton <GuarLitigationSaveDAL> .Instance.GetNormalBillsCount(filter.BusinessID); //本金 decimal bj = filter.LoanCapital - Singleton <GuarLitigationSaveDAL> .Instance.GetBillItemsAmount(filter.BusinessID); if (bj > 0) { billitems.Add(CreateBillItem(EnumCostSubject.Capital, bj, filter.UserId)); } //利息 decimal lx = SubjectFormula.CalculatInterest(filter.LoanCapital, filter.InterestRate) * num; if (lx > 0) { billitems.Add(CreateBillItem(EnumCostSubject.Interest, lx, filter.UserId)); } //服务费\担保费 decimal dbfwf = SubjectFormula.CalculatServiceFee(filter.LoanCapital, filter.ServiceRate, true) * num; if (dbfwf > 0) { if (string.IsNullOrEmpty(filter.GuaranteeSideKey)) { billitems.Add(CreateBillItem(EnumCostSubject.ServiceFee, dbfwf * 2, filter.UserId)); } else { billitems.Add(CreateBillItem(EnumCostSubject.ServiceFee, dbfwf, filter.UserId)); billitems.Add(CreateBillItem(EnumCostSubject.GuaranteeFee, dbfwf, filter.UserId)); } } //服务费扣失 decimal fwfks = SubjectFormula.CalculatBuckleFail(filter.ContractNo) * num;; if (fwfks > 0) { billitems.Add(CreateBillItem(EnumCostSubject.ServiceBuckleFail, fwfks, filter.UserId));//服务费扣失 } return(billitems); }
/// <summary> /// 计算日罚息区间 /// </summary> protected void CalculatPenaltyInt(List <PenaltyInt> penaltyInts, decimal debtsPrincipal, long reasonId, long toBillId, DateTime beginDay) { var interval = DateTime.Now.SetDay(1); // 罚息从上月21日开始起算,分隔日为上月月末,计算罚息金额 var prevDays = interval - beginDay; var prevAmount = SubjectFormula.CalculatPunitiveInterest(debtsPrincipal, Business.PenaltyRate, prevDays.Days); // 罚息从当月月头开始起算,分隔日为今天,计算罚息金额 var curDays = DateTime.Now - interval; var curAmount = SubjectFormula.CalculatPunitiveInterest(debtsPrincipal, Business.PenaltyRate, curDays.Days); // 在罚息表中插入上月罚息金额和当月罚息金额 penaltyInts.Add(NewPenaltyInt(Business.BusinessID, reasonId, toBillId, prevAmount, false, interval.AddDays(-1))); penaltyInts.Add(NewPenaltyInt(Business.BusinessID, reasonId, toBillId, curAmount)); }
private List <BillItem> GetBillItem(bool isLast = false) { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目 if (Business.LendingSideID > 0) { decimal capital = 0.0M; // 判断当期帐单属于第几期帐单,最后一期普通帐单(本金按余额计) if (isLast) { capital = SubjectFormula.CalcuateCapitalOver(Business.LoanCapital, Business.CapitalRate.HasValue ? Business.CapitalRate.Value:0, Business.LoanPeriod); } else { capital = SubjectFormula.CalcuLateCapitalByRate(Business.LoanCapital, Business.CapitalRate.HasValue ? Business.CapitalRate.Value:0); } var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } // 添加服务方和担保方扣款项目 if (Business.ServiceSideID > 0 && Business.GuaranteeSideID > 0 && Business.GuaranteeSideKey != SysConst.COMPANY_WX_SHWX_SERVICE && Business.ServiceRate > 0) { var servicehalf = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, true); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, servicehalf)); billItem.Add(CreateBillItem(EnumCostSubject.GuaranteeFee, servicehalf)); } else if (Business.ServiceSideID > 0 && Business.ServiceRate > 0) { billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false))); } return(billItem); }
/// <summary> /// 获取信用贷款所有基本款项 /// </summary> /// <param name="business">业务对象</param> /// <returns>返回款项集合</returns> public override List <BillItem> GetBaseItemsByMonth() { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目(本金、利息、管理费) if (Business.LendingSideID > 0) { var capital = SubjectFormula.CalculatCapital(Business.LoanCapital, Business.LoanPeriod); billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); //月管理费 if (Business.ManagementRate.HasValue) { var managementFee = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.ManagementRate.Value); billItem.Add(CreateBillItem(EnumCostSubject.Manage, managementFee)); } var serviceFee = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, serviceFee)); } return(billItem); }
/// <summary> /// 创建扣失科目(因逾期而产生的本息扣失、管理费扣失) /// </summary> public override List <BillItem> CreateBuckleFail(DateTime limitTime) { List <BillItem> items = new List <BillItem>(); // 获取当期帐单 var curBill = BillDAL.GetNormalBills(Business.Bills).FirstOrDefault(p => p.BillMonth == _CurMonth); // 无当期帐单 或者 有全额支付时间且全额支付时间是在扣失日之前(包括当天)的则不生成扣失 if (curBill == null || (limitTime >= curBill.FullPaidTime && curBill.FullPaidTime != null)) { return(items); } // 判断当期帐单是否应生成本息扣失 List <byte> subjects = new List <byte> { (byte)EnumCostSubject.Capital, (byte)EnumCostSubject.Interest }; if (IsCreateBuckleFail(subjects, curBill)) { items.Add(CreateBillItem(EnumCostSubject.InterestBuckleFail, SubjectFormula.CalculatBuckleFail(Business.ContractNo), true, curBill.BillID)); } // 判断当期帐单是否应生成服务费担保费扣失 subjects = new List <byte> { (byte)EnumCostSubject.ServiceFee, (byte)EnumCostSubject.GuaranteeFee }; if (IsCreateBuckleFail(subjects, curBill)) { items.Add(CreateBillItem(EnumCostSubject.ServiceBuckleFail, SubjectFormula.CalculatBuckleFail(Business.ContractNo), true, curBill.BillID)); } return(items); }
/// <summary> /// 创建基本款项(包括本金、利息、服务费、担保费) /// </summary> /// <param name="business">业务对象</param> /// <returns>返回款项集合</returns> public override List <BillItem> CreateBaseItems(bool isLast = false) { List <BillItem> billItem = new List <BillItem>(); // 添加信托方扣款项目 if (Business.LendingSideID > 0) { var capital = SubjectFormula.CalculatCapital(Business.LoanCapital, Business.LoanPeriod); var interest = SubjectFormula.CalculatInterest(Business.LoanCapital, Business.InterestRate); // 判断当期帐单属于第几期帐单,最后一期普通帐单(本金按余额计) if (isLast) { capital = SubjectFormula.CalculatCapitalOver(Business.LoanCapital, Business.LoanPeriod); } billItem.Add(CreateBillItem(EnumCostSubject.Capital, capital)); billItem.Add(CreateBillItem(EnumCostSubject.Interest, interest)); } // 添加服务方和担保方扣款项目 if (Business.ServiceSideID > 0 && Business.GuaranteeSideID > 0 && Business.GuaranteeSideKey != SysConst.COMPANY_WX_SHWX_SERVICE) { var servicehalf = SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, true); billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, servicehalf)); billItem.Add(CreateBillItem(EnumCostSubject.GuaranteeFee, servicehalf)); } else if (Business.ServiceSideID > 0) { billItem.Add(CreateBillItem(EnumCostSubject.ServiceFee, SubjectFormula.CalculatServiceFee(Business.LoanCapital, Business.ServiceRate, false))); } return(billItem); }
/// <summary> /// 创建罚息科目 /// </summary> public override BillItem CreatePunitiveInterest(DateTime limitTime, List <PenaltyInt> penaltyInts) { // 获取当期帐单,为NULL或已在第三次扣失日前全额付清则继续循环 var nbills = BillDAL.GetNormalBills(Business.Bills); var prevBill = nbills.FirstOrDefault(p => p.BillMonth == _PrevMonth); var curBill = nbills.FirstOrDefault(p => p.BillMonth == _CurMonth); // 判断是否存在原因帐单或当期帐单,不存在则返回NULL if (prevBill == null || curBill == null || Business.Bills.Count == 1 || (limitTime >= prevBill.FullPaidTime && prevBill.FullPaidTime != null)) { return(null); } // 获取本金、利息或租金等参与科目,计算上期所欠本息或租金 var subjects = new List <byte> { (byte)EnumCostSubject.Capital, (byte)EnumCostSubject.Interest, (byte)EnumCostSubject.Rent }; // 是否为渤海订单, 渤海订单一次性生成一个月的罚息, 其他合同都按日罚息千分之一计算 bool isBoHai = Business.LendingSideKey.EndsWith(EnumCompanyKey.BHXT_LENDING.ToEnumName()); decimal debtsPrincipal = 0; if (isBoHai) { // 获取普通帐单的所欠本息 var bills = BillDAL.GetArrearsBills(Business.Bills, true); foreach (var bill in bills) { debtsPrincipal += bill.BillItems.Where(p => subjects.Contains(p.Subject) && !p.IsCurrent) .Sum(p => p.DueAmt - p.ReceivedAmt); } // 判断欠费帐单是否存在未归还所欠本息或租金,无则不生成罚息 if (debtsPrincipal <= 0) { return(null); } debtsPrincipal = SubjectFormula.CalculatPunitiveInterest(debtsPrincipal, 0.03m); } else { // 获取上期帐单的本息欠费 debtsPrincipal = prevBill.BillItems.Where(p => subjects.Contains(p.Subject)) .Sum(s => s.DueAmt - s.ReceivedAmt); // 判断上期帐单是否存在未归还所欠本息或租金,无则不生成罚息 if (debtsPrincipal <= 0) { return(null); } var beginDay = DateTime.Now.AddMonths(-1).SetDay(21); // 在罚息表中计算罚息金额 CalculatPenaltyInt(penaltyInts, debtsPrincipal, prevBill.BillID, curBill.BillID, beginDay); // 当所欠本息大于零时,计算从上月21日至今天数的罚息 var totalDays = DateTime.Now - beginDay; debtsPrincipal = SubjectFormula.CalculatPunitiveInterest(debtsPrincipal, Business.PenaltyRate, totalDays.Days); } // 创建罚息科目(科目名称、金额) return(CreateBillItem(EnumCostSubject.PunitiveInterest, debtsPrincipal, false, curBill.BillID)); }