/** * @Project: hehenian-biz-service * @Package com.hehenian.biz.common.settle * @Title: HHN24SettleCalculator.java * @Description: TODO * @author: liuzgmf * @date 2015年4月21日 下午3:55:20 * @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:20 */ public class HHN24SettleCalculator extends SettleCalculator { @Override public List<SettDetailDo> calSettDetail(Double loanAmount, Integer loanPeriod, Double annualRate,Date StartDate) { List<SettDetailDo> settDetailDoList = new ArrayList<SettDetailDo>(24); Double remainPrincipal = loanAmount;// 剩余待还本金 for (int i = 1; i <= 24; i++) { // 每月借款费用 SettDetailDo settDetailDo = new SettDetailDo(); settDetailDo.setPeriod(i); settDetailDo.setServFee(0d); settDetailDo.setConsultFee(0d); Double principal = CalculateUtils.div(loanAmount, 24, 2, BigDecimal.ROUND_DOWN); if (i >= 24) { 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~24期,利息:0.0%,管理费:0.80% if (i >= 19) { settDetailDo.setInterest(0d); settDetailDo.setConsultFee(CalculateUtils.round(CalculateUtils.mul(loanAmount, 0.008), 2)); } // 第一期附加上50元的咨询费 if (i == 1) { settDetailDo.setServFee(CalculateUtils.add(settDetailDo.getServFee(), 50)); } settDetailDoList.add(settDetailDo); } return settDetailDoList; } public static void main(String[] args) { // HHN24SettleCalculator hhn24SettleCalculator = new HHN24SettleCalculator(); // List<SettDetailDo> settDetailDoList = hhn24SettleCalculator.calSettDetail(50000d, 24, null); // for (SettDetailDo settDetailDo : settDetailDoList) { // System.out.println(settDetailDo); // } HHN24SettleCalculator hhn24SettleCalculator = new HHN24SettleCalculator(); List<SettDetailDo> settDetailDoList = hhn24SettleCalculator.calSettDetail(40000d, 24, 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#", "5970"); sql = sql.replace("#repayPeriod#", "'" + settDetailDo.getPeriod() + "/" + settDetailDoList.size() + "'"); System.out.println(sql); } } }