/**
* @Project: hehenian-biz-service
* @Package com.hehenian.biz.common.task
* @Title: RepayFITask.java
* @Description: TODO
* @author: zhangyunhmf
* @date 2014年10月15日 上午9:14:21
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.biz.common.task;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.hehenian.biz.common.system.dataobject.FeeRuleDo;
import com.hehenian.biz.common.system.dataobject.FeeRuleDo.RuleType;
import com.hehenian.biz.common.trade.dataobject.BorrowDo;
import com.hehenian.biz.common.trade.dataobject.RepaymentDo;
import com.hehenian.biz.common.util.CalculateUtils;
import com.hehenian.biz.common.util.DateUtil;
import com.hehenian.biz.component.system.IFeeRuleComponent;
import com.hehenian.biz.component.trade.IBorrowComponent;
import com.hehenian.biz.component.trade.IRepaymentComponent;
/**
* 还款罚息定时任务
*
* @author: zhangyunhmf
* @date 2014年10月15日 上午9:14:21
*/
@Component("repayFITask")
public class RepayFITask extends DefaultTask {
@Autowired
private IRepaymentComponent repaymentComponent;
@Autowired
private IBorrowComponent borrowComponent;
@Autowired
private IFeeRuleComponent feeRuleComponent;
private String jobName = "还款罚息定时任务 ";
/*
* (no-Javadoc) <p>Title: getJobName</p> <p>Description: </p>
*
* @return
*
* @see com.hehenian.biz.common.task.DefaultTask#getJobName()
*/
@Override
protected String getJobName() {
return jobName;
}
/*
* (no-Javadoc) <p>Title: doJob</p> <p>Description: 借款人罚息只计算首次逾期</p>
*
* @see com.hehenian.biz.common.task.DefaultTask#doJob()
*/
@Override
protected void doJob() {
List<RepaymentDo> overDueRepaymentList = null;
Date currentDate = new Date();
try {
overDueRepaymentList = repaymentComponent.selectOverDueRepayList(currentDate);
for (RepaymentDo repay : overDueRepaymentList) {
BorrowDo borrow = borrowComponent.getById(repay.getBorrowId());
//double feeRate = FeeUtil.parseBorrowFeelog(borrow.getFeelog());
double feeRate = 0.001d;
FeeRuleDo feeRuleDo = feeRuleComponent.getBySchemeIdAndRuleType(borrow.getPaymentMode().longValue(),
RuleType.OVERDUE_FEE);
if (null != feeRuleDo) {
Double confFeeRate = feeRuleDo.getGatherRate();
if (null != confFeeRate) {
feeRate = confFeeRate.doubleValue() / 100;
}
}
// 逾期日期
long lateDay = DateUtil.diffDays(repay.getRepayDate(), currentDate);
// 一天的罚息
double oneDayFee = CalculateUtils.mul(repay.getPrincipalBalance(), feeRate);
// 逾期罚息
double lateFee = CalculateUtils.round(CalculateUtils.mul(oneDayFee, lateDay),2);
RepaymentDo newRepaymentDo = new RepaymentDo();
newRepaymentDo.setIsLate(2);
newRepaymentDo.setLateDay((int) lateDay);
newRepaymentDo.setLateFi(lateFee);
newRepaymentDo.setId(repay.getId());
// 更新罚息信息
repaymentComponent.updateRepaymentById(newRepaymentDo);
}
} catch (Exception e) {
logger.error(e);
} finally {
}
}
}