1、等额本金:每期本金相同
2、等额本息:每期还款额相同
/**
* @author wzh
* @date 2019-11-20 18:45
* @description 试算还款计划-入参
*/
@Data
@Builder
public class CalculateRepayPlanReq implements Serializable {
/**
* 借款金额(元),非空
*/
private BigDecimal principle;
/**
* 期限天,非空
*/
private Integer termDay;
/**
* 年利率,比如一年期贷款4.35,传入4.35,非空
*/
private BigDecimal yearRate;
/**
* 起息日,非空
*/
private Date beginProfitDate;
/**
* 费率集合,可空
*/
private List<FeeRuleReq> feeRulePojoList;
/**
* 特殊日期范围,例如:28-31
*/
private String specialDateRange;
/**
* 特殊日期调整日,27
*/
private String specialDateAdjustDay;
}
/**
* @Author: wzh
* @Date: 2019-03-28T15:33:47.526
* @Description: 还款计划
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RepayPlanRes implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 总期次
*/
@NotNull
private Integer repayNum;
/**
* 当前期次
*/
@NotNull
private Integer currentNum;
/**
* 开始时间
*/
@NotNull
private Date startDate;
/**
* 到期时间
*/
@NotNull
private Date endDate;
/**
* 收益天数
*/
@NotNull
private Integer profitDays;
/**
* 应还时间
*/
@NotNull
private Date preRepayDate;
/**
* 应还总额
*/
@NotNull
private BigDecimal preRepayAmt;
/**
* 应还本金
*/
@NotNull
private BigDecimal preRepayPrincipal;
/**
* 应还利息
*/
@NotNull
private BigDecimal preRepayInterest;
/**
* 应还手续费
*/
@NotNull
private BigDecimal preRepayFee;
/**
* 应还账户管理费
*/
@NotNull
private BigDecimal preRepayManagementFee;
/**
* 剩余本金
*/
@NotNull
private BigDecimal leftPrincipal;
}
/**
* 包装公共方法
*
* @author wzh
* @date 2019年09月23日11:27:04
*/
public abstract class AbstractCalculateServiceImpl implements CalculateService {
/**
* 期限天转期限月
* 备注:主要适用于按月计息的
* @param termDay
* @return
*/
protected Integer transTermMonth(Integer termDay) {
//按月计算,除以30取整
BigDecimal termDayBg=new BigDecimal(termDay);
return termDayBg.divide(new BigDecimal(30),0,BigDecimal.ROUND_HALF_UP).intValue();
}
/**
* 月利率
* 备注:主要适用于按月计息的
* @param yearRate
* @return
*/
protected BigDecimal transMonthRate(BigDecimal yearRate) {
//月利率
return yearRate.divide(new BigDecimal(12),6,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(0.01));
}
/**
* 返回日利率
*
* @param yearRate
* @return
*/
protected BigDecimal tr