/**
* @Project: hehenian-biz-service
* @Package com.hehenian.biz.common.settle
* @Title: HHN36SettleCalculator.java
* @Description: TODO
* @author: liuzgmf
* @date 2015年4月21日 下午3:55:48
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.biz.common.settle;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.time.DateUtils;
import com.hehenian.biz.common.system.dataobject.SettDetailDo;
import com.hehenian.biz.common.util.CalculateUtils;
/**
*
* @author: liuzgmf
* @date 2015年4月21日 下午3:55:48
*/
public class HHN36SettleCalculator extends SettleCalculator {
@Override
public List<SettDetailDo> calSettDetail(Double loanAmount, Integer loanPeriod, Double annualRate,Date StartDate) {
List<SettDetailDo> settDetailDoList = new ArrayList<SettDetailDo>(36);
Double remainPrincipal = loanAmount;// 剩余待还本金
for (int i = 1; i <= 36; i++) {
// 每月借款费用
SettDetailDo settDetailDo = new SettDetailDo();
settDetailDo.setPeriod(i);
settDetailDo.setServFee(0d);
settDetailDo.setConsultFee(0d);
Double principal = CalculateUtils.div(loanAmount, 36, 2, BigDecimal.ROUND_DOWN);
if (i >= 36) {
principal = remainPrincipal;
}
settDetailDo.setPrincipal(principal);
settDetailDo.setRemainingPrincipal(remainPrincipal);// 剩余本金
remainPrincipal = CalculateUtils.sub(remainPrincipal, principal);
settDetailDo.setRepayDate(DateUtils.addMonths(StartDate, i));// 还款日期
// 1~6期,利息:1.30%,管理费:0.80%
if (i <= 6) {
settDetailDo.setInterest(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.013), 2));
settDetailDo.setConsultFee(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.008), 2));
}
// 7~12期,利息:1.10% ,管理费:0.80%
if (i >= 7 && i <= 12) {
settDetailDo.setInterest(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.011), 2));
settDetailDo.setConsultFee(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.008), 2));
}
// 13~18期,利息:0.70%,管理费:0.80%
if (i >= 13 && i <= 18) {
settDetailDo.setInterest(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.007), 2));
settDetailDo.setConsultFee(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.008), 2));
}
// 19~33期,利息:0.0%,管理费:0.80%
if (i >= 19 && i <= 33) {
settDetailDo.setInterest(0d);
settDetailDo.setConsultFee(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.008), 2));
}
// 34~36期,利息:0.0%,管理费:0.0%
if (i >= 34) {
settDetailDo.setInterest(0d);
settDetailDo.setConsultFee(0d);
}
// 第一期附加上50元的咨询费
if (i == 1) {
settDetailDo.setServFee(CalculateUtils.add(settDetailDo.getServFee(), 50));
}
settDetailDoList.add(settDetailDo);
}
return settDetailDoList;
}
public static void main(String[] args) {
// HHN36SettleCalculator hhn36SettleCalculator = new
// HHN36SettleCalculator();
// List<SettDetailDo> settDetailDoList =
// hhn36SettleCalculator.calSettDetail(60000d, 36, null);
// for (SettDetailDo settDetailDo : settDetailDoList) {
// System.out.println(settDetailDo);
// }
HHN36SettleCalculator hhn36SettleCalculator = new HHN36SettleCalculator();
List<SettDetailDo> settDetailDoList = hhn36SettleCalculator.calSettDetail(50000d, 36, null);
DecimalFormat df = new DecimalFormat("###.00");
for (SettDetailDo settDetailDo : settDetailDoList) {
String sql = "UPDATE t_repayment SET stillPrincipal=#stillPrincipal#,stillInterest=#stillInterest#,consultFee=#consultFee#,repayFee=#repayFee#,principalBalance=#principalBalance# WHERE borrowId=#borrowId# AND repayPeriod=#repayPeriod#;";
sql = sql.replace("#stillPrincipal#", df.format(settDetailDo.getPrincipal()));
sql = sql.replace("#stillInterest#", df.format(settDetailDo.getInterest()));
sql = sql.replace("#consultFee#", df.format(settDetailDo.getConsultFee()));
sql = sql.replace("#repayFee#", df.format(settDetailDo.getServFee()));
sql = sql.replace("#principalBalance#", df.format(settDetailDo.getRemainingPrincipal()));
sql = sql.replace("#borrowId#", "5971");
sql = sql.replace("#repayPeriod#", "'" + settDetailDo.getPeriod() + "/" + settDetailDoList.size() + "'");
System.out.println(sql);
}
}
}