package com.hehenian.biz.component.trade.impl; import java.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.hehenian.biz.common.account.dataobject.AccountUserDo; import com.hehenian.biz.common.account.dataobject.AdminDo; import com.hehenian.biz.common.exception.BusinessException; import com.hehenian.biz.common.settle.SettleCalculator; import com.hehenian.biz.common.settle.SettleCalculatorUtils; import com.hehenian.biz.common.system.dataobject.SettDetailDo; import com.hehenian.biz.common.system.dataobject.SettSchemeDo; import com.hehenian.biz.common.system.dataobject.SettSchemeDo.SettleType; import com.hehenian.biz.common.trade.dataobject.BorrowDo; import com.hehenian.biz.common.trade.dataobject.FundrecordDo; import com.hehenian.biz.common.trade.dataobject.InvestDo; import com.hehenian.biz.common.trade.dataobject.InvestRepaymentDo; import com.hehenian.biz.common.trade.dataobject.PreRepaymentDo; import com.hehenian.biz.common.trade.dataobject.RepaymentDo; import com.hehenian.biz.common.util.CalculateUtils; import com.hehenian.biz.component.account.IUserComponent; import com.hehenian.biz.component.system.ISettSchemeComponent; import com.hehenian.biz.component.trade.IBorrowComponent; import com.hehenian.biz.component.trade.IFundrecordComponent; import com.hehenian.biz.component.trade.IInvestComponent; import com.hehenian.biz.component.trade.IInvestRepaymentComponent; import com.hehenian.biz.component.trade.IOperationLogComponent; import com.hehenian.biz.component.trade.IPreRepaymentComponent; import com.hehenian.biz.component.trade.IRepaymentComponent; import com.hehenian.biz.dal.account.IAdminDao; import com.hehenian.biz.dal.account.IUserDao; import com.hehenian.biz.dal.trade.IBorrowDao; import com.hehenian.biz.dal.trade.IInvestDao; import com.hehenian.biz.dal.trade.IPlatformCostDao; /** * @author zhangyunhua * @version 1.0 * @since 1.0 */ @Component("borrowComponent") public class BorrowComponentImpl implements IBorrowComponent { @Autowired private IPreRepaymentComponent preRepaymentComponent; @Autowired private IUserComponent userComponent; @Autowired private IFundrecordComponent fundrecordComponent; @Autowired private IInvestRepaymentComponent investRepaymentComponent; @Autowired private IInvestComponent investComponent; @Autowired private IRepaymentComponent repaymentComponent; @Autowired private IInvestDao investDao; @Autowired private IBorrowDao borrowDao; @Autowired private ISettSchemeComponent settSchemeComponent; @Autowired private IUserDao userDao; @Autowired private IPlatformCostDao platformCostDao; @Autowired private IAdminDao adminDao; @Autowired private IOperationLogComponent operationLogComponent; /** * 根据ID 查询 * * @parameter id */ public BorrowDo getById(Long id) { return borrowDao.getById(id); } /** * 根据条件查询列表 */ public List<BorrowDo> selectBorrow(Map<String, Object> parameterMap) { return borrowDao.selectBorrow(parameterMap); } /** * 更新 */ public int updateBorrowById(BorrowDo newBorrowDo) { int result = borrowDao.updateBorrowById(newBorrowDo); if (result < 1) { throw new BusinessException("标的更新失败"); } return result; } /** * 新增 */ public int addBorrow(BorrowDo newBorrowDo) { return borrowDao.addBorrow(newBorrowDo); } /** * 删除 */ public int deleteById(Long id) { int result = borrowDao.deleteById(id); if (result < 1) { throw new BusinessException("标的删除失败"); } return result; } @Override public Boolean updateBorrowFullScale(Long borrowId, Integer borrrowStatus, Long adminId) { BorrowDo borrowDo = borrowDao.getById(borrowId); SettSchemeDo settSchemeDo = settSchemeComponent.getBySchemeId(borrowDo.getPaymentMode().longValue()); if (settSchemeDo.getSettleType().equals(SettleType.SEPARATE)) { return updateBorrowFullScale2(borrowId, borrrowStatus, adminId); } else { return updateBorrowFullScale1(borrowId, borrrowStatus, adminId); } } /** * 放款(还款利息<>回款利息) * * @param borrowId * @param borrrowStatus * @param adminId * @author: liuzgmf * @date: 2015年4月24日上午10:21:02 */ private Boolean updateBorrowFullScale2(Long borrowId, Integer borrrowStatus, Long adminId) { // 获取还款明细 // 修改标的状态,放款时间为满标,当前时间 updateBorrowFullScale(borrowId); // 处理审核通过 if (borrrowStatus.intValue() == 4) { // 新增还款记录 addRepayment(borrowId); // 新增投资回款记录 addInvestRepayment(borrowId); // 修改借款人账户信息,可用金额+借款金额 changeBorrowUsableSum(borrowId); // 修改投资人账户信息,冻结金额减去投资金额 changeInvestAccount(borrowId); } // 新增操作日志记录 AdminDo adminDo = adminDao.getById(adminId); operationLogComponent.addOperationLog("t_borrow", adminDo.getUserName(), 2, adminDo.getLastIp(), 0.00, "满标复审通过", 2); return true; } /** * 新增回款记录 * * @param borrowId * @param repaymentDoList * @author: liuzgmf * @date: 2015年4月24日上午10:33:16 */ private void addInvestRepayment(Long borrowId) { BorrowDo borrowDo = borrowDao.getById(borrowId); SettSchemeDo settSchemeDo = settSchemeComponent.getBySchemeId(borrowDo.getPaymentMode().longValue()); SettleCalculator settleCalculator = SettleCalculatorUtils.createSettleCalculator(settSchemeDo.getReceiptWay()); List<InvestDo> investDoList = investDao.queryByBorrowId(borrowId); for (int i = 0; i < investDoList.size(); i++) { InvestDo investDo = investDoList.get(i); List<SettDetailDo> detailDoList = settleCalculator.calSettDetail(investDo.getInvestAmount(), borrowDo.getDeadline(), borrowDo.getAnnualRate()); for (SettDetailDo detailDo : detailDoList) { InvestRepaymentDo investRepaymentDo = new InvestRepaymentDo(); investRepaymentDo.setRepayPeriod(detailDo.getPeriod() + "/" + borrowDo.getDeadline()); RepaymentDo repaymentDo = repaymentComponent.getByBorrowIdAndRepayPeriod(borrowId, investRepaymentDo.getRepayPeriod()); investRepaymentDo.setRepayId(repaymentDo.getId()); investRepaymentDo.setRepayDate(detailDo.getRepayDate()); investRepaymentDo.setRecivedPrincipal(detailDo.getPrincipal()); investRepaymentDo.setRecivedInterest(detailDo.getInterest()); investRepaymentDo.setPrincipalBalance(detailDo.getRemainingPrincipal()); investRepaymentDo.setInterestBalance(0d); investRepaymentDo.setInvestId(investDo.getId()); investRepaymentDo.setOwner(investDo.getInvestor()); investRepaymentDo.setOwnerlist(investDo.getInvestor() + ""); investRepaymentDo.setImanageFee(0.00);// 管理费为0 investRepaymentDo.setImanageFeeRate(0.00);// 管理费率为0 investRepaymentDo.setIsDebt(1); investRepaymentDo.setCirculationForpayStatus(-1); investRepaymentDo.setBorrowId(borrowId); investRepaymentDo.setHasPrincipal(0.00);// 已收本金 investRepaymentDo.setHasInterest(0.00);// 已收利息 investRepaymentDo.setInterestOwner(1l);// 1 默认 VIP会员 investRepaymentDo.setRecivedFi(0.00);// 应收罚息 investRepaymentDo.setIsLate(1);// 1 未逾期 investRepaymentDo.setLateDay(0);// 逾期天数 investRepaymentDo.setIsWebRepay(1);// 1 非网站垫付 investRepaymentDo.setRepayStatus(1);// 1: 默认未偿还 investRepaymentDo.setParentId(0l); // 新增投资回款记录 investRepaymentComponent.addInvestRepayment(investRepaymentDo); if (i >= investDoList.size() - 1) { // 修改投资记录的校验本金,校验利息,最大投资ID,调整本金 double totalRecivedInterestAmt = getTotalRecivedInterestAmt(detailDoList); updateBorrowFullScale(investDo.getId(), investDo.getRealAmount(), totalRecivedInterestAmt, investRepaymentDo.getId(), investDo.getInvestAmount()); } } } } /** * 计算利息总额 * * @param detailDoList * @return * @author: liuzgmf * @date: 2015年4月24日上午11:01:15 */ private double getTotalRecivedInterestAmt(List<SettDetailDo> detailDoList) { double totalRecivedInterestAmt = 0d; for (SettDetailDo settDetailDo : detailDoList) { totalRecivedInterestAmt = CalculateUtils.add(totalRecivedInterestAmt, settDetailDo.getInterest()); } return totalRecivedInterestAmt; } /** * 新增还款记录 * * @param borrowId * @return * @author: liuzgmf * @date: 2015年4月24日上午10:26:00 */ private void addRepayment(Long borrowId) { BorrowDo borrowDo = borrowDao.getById(borrowId); SettSchemeDo settSchemeDo = settSchemeComponent.getBySchemeId(borrowDo.getPaymentMode().longValue()); SettleCalculator settleCalculator = SettleCalculatorUtils.createSettleCalculator(settSchemeDo.getRepayWay()); List<SettDetailDo> detailDoList = settleCalculator.calSettDetail(borrowDo.getBorrowAmount(), borrowDo.getDeadline(), settSchemeDo.getDefaultAnnualRate()); for (SettDetailDo detailDo : detailDoList) { RepaymentDo repaymentDo = new RepaymentDo(); repaymentDo.setRepayPeriod(detailDo.getPeriod() + "/" + borrowDo.getDeadline()); repaymentDo.setStillPrincipal(detailDo.getPrincipal()); repaymentDo.setStillInterest(detailDo.getInterest()); repaymentDo.setBorrowId(borrowId); repaymentDo.setPrincipalBalance(detailDo.getRemainingPrincipal()); repaymentDo.setInterestBalance(0.00); repaymentDo.setRepayDate(detailDo.getRepayDate());// 还款日期 repaymentDo.setConsultFee(detailDo.getConsultFee());// 咨询费 repaymentDo.setRepayFee(detailDo.getServFee());// 服务费 repaymentDo.setHasPi(0.00); repaymentDo.setHasFi(0.00); repaymentDo.setLateFi(0.00); repaymentDo.setLateDay(0); repaymentDo.setRepayStatus(1);// 1 默认未偿还 repaymentDo.setIsLate(1); repaymentDo.setIsWebRepay(1); repaymentDo.setInvestorForpayFi(0.00);// 投资人待收罚息 repaymentDo.setInvestorHaspayFi(0.00);// 投资人已收罚息 repaymentDo.setVersion(0); repaymentComponent.addRepayment(repaymentDo); } } /** * 放款(还款利息=回款利息) * * @param borrowId * @param borrrowStatus * @param adminId * @return * @author: liuzgmf * @date: 2015年4月24日上午10:19:54 */ public Boolean updateBorrowFullScale1(Long borrowId, Integer borrrowStatus, Long adminId) { // 获取还款明细 BorrowDo borrowDo = borrowDao.getById(borrowId); SettSchemeDo settSchemeDo = settSchemeComponent.getBySchemeId(borrowDo.getPaymentMode().longValue()); List<SettDetailDo> detailDoList = SettleCalculatorUtils.calSettDetail(borrowDo.getBorrowAmount(), borrowDo.getDeadline(), borrowDo.getLoanAnnualRate(), borrowDo.getAnnualRate(), settSchemeDo); // 新增预还款记录 addPreRepayment(borrowId, detailDoList); // 修改标的状态,放款时间为满标,当前时间 updateBorrowFullScale(borrowId); // 处理审核通过 if (borrrowStatus.intValue() == 4) { // 新增还款记录 List<RepaymentDo> repaymentDoList = addRepayment(borrowId, detailDoList); // 新增投资回款记录 addInvestRepayment(borrowId, repaymentDoList); // 修改借款人账户信息,可用金额+借款金额 changeBorrowUsableSum(borrowId); // 修改投资人账户信息,冻结金额减去投资金额 changeInvestAccount(borrowId); } // 新增操作日志记录 AdminDo adminDo = adminDao.getById(adminId); operationLogComponent.addOperationLog("t_borrow", adminDo.getUserName(), 2, adminDo.getLastIp(), 0.00, "满标复审通过", 2); return true; } /** * 修改投资人账户信息,冻结金额减去投资金额 * * @param borrowId * @author: liuzgmf * @date: 2014年9月25日上午10:51:12 */ private void changeInvestAccount(Long borrowId) { BorrowDo borrowDo = borrowDao.getById(borrowId); List<InvestDo> investDoList = investDao.queryByBorrowId(borrowId); for (InvestDo investDo : investDoList) { // 修改投资人账户金额,冻结金额-投资金额 userComponent.updateAmount(0.00, -investDo.getInvestAmount(), investDo.getInvestor()); // 新增提现交易记录 FundrecordDo fundrecordDo = new FundrecordDo(); fundrecordDo.setUserId(investDo.getInvestor()); fundrecordDo.setRecordTime(new Date()); fundrecordDo.setOperateType(654); fundrecordDo.setFundMode("扣除投标冻结金额"); fundrecordDo.setHandleSum(investDo.getInvestAmount()); AccountUserDo localUserDo = userDao.getById(investDo.getInvestor()); fundrecordDo.setUsableSum(localUserDo.getUsableSum());// 可用金额 fundrecordDo.setFreezeSum(localUserDo.getFreezeSum());// 冻结金额 Double dueinSum = investDao.getDueinSum(investDo.getInvestor()); fundrecordDo.setDueinSum(dueinSum == null ? 0.00 : dueinSum);// 代收金额 fundrecordDo.setTrader(borrowDo.getPublisher()); fundrecordDo.setDueoutSum(0.00); fundrecordDo.setRemarks("借款[" + borrowDo.getBorrowTitle() + "]审核通过,扣除投标冻结金额[" + investDo.getInvestAmount() + "]元"); fundrecordDo.setOninvest(0.00); fundrecordDo.setPaynumber(investDo.getId() + ""); fundrecordDo.setPaybank(""); fundrecordDo.setCost(0.00); fundrecordDo.setSpending(investDo.getInvestAmount()); fundrecordDo.setBorrowId(borrowId); fundrecordComponent.addFundrecord(fundrecordDo); } } /** * 修改借款人账户信息,可用金额+借款金额 * * @param borrowId * @param borrowAmount * @author: liuzgmf * @date: 2014年9月25日上午10:22:11 */ private void changeBorrowUsableSum(Long borrowId) { BorrowDo borrowDo = borrowDao.getById(borrowId); // 修改借款人账户可用金额 userComponent.updateAmount(borrowDo.getBorrowAmount(), 0.00, borrowDo.getPublisher()); // 新增提现交易记录 FundrecordDo fundrecordDo = new FundrecordDo(); fundrecordDo.setUserId(borrowDo.getPublisher()); fundrecordDo.setRecordTime(new Date()); fundrecordDo.setOperateType(101); fundrecordDo.setFundMode("借款成功"); fundrecordDo.setHandleSum(borrowDo.getBorrowAmount()); AccountUserDo localUserDo = userDao.getById(borrowDo.getPublisher()); fundrecordDo.setUsableSum(localUserDo.getUsableSum());// 可用金额 fundrecordDo.setFreezeSum(localUserDo.getFreezeSum());// 冻结金额 Double dueinSum = investDao.getDueinSum(borrowDo.getPublisher()); fundrecordDo.setDueinSum(dueinSum == null ? 0.00 : dueinSum);// 代收金额 fundrecordDo.setTrader(-1l); fundrecordDo.setDueoutSum(0.00); fundrecordDo.setRemarks("借款[" + borrowDo.getBorrowTitle() + "]满标通过,借款成功筹到资金[" + borrowDo.getBorrowAmount() + "]元"); fundrecordDo.setOninvest(0.00); fundrecordDo.setPaynumber(borrowId + ""); fundrecordDo.setPaybank(""); fundrecordDo.setCost(0.00); fundrecordDo.setIncome(borrowDo.getBorrowAmount()); fundrecordDo.setBorrowId(borrowId); fundrecordComponent.addFundrecord(fundrecordDo); } /** * 新增投资回款记录 * * @param borrowId * @param repaymentDoList * @author: liuzgmf * @date: 2014年9月24日下午3:48:13 */ private void addInvestRepayment(Long borrowId, List<RepaymentDo> repaymentDoList) { BorrowDo borrowDo = borrowDao.getById(borrowId); Map<Long, Double> recivedPrincipalMap = new HashMap<Long, Double>(); Map<Long, Double> recivedInterestMap = new HashMap<Long, Double>(); List<InvestDo> investDoList = investDao.queryByBorrowId(borrowId); for (int i = 0; i < repaymentDoList.size(); i++) { RepaymentDo repaymentDo = repaymentDoList.get(i); Double remainPrincipal = repaymentDo.getStillPrincipal();// 剩余本金 Double remainInterest = repaymentDo.getStillInterest();// 剩余利息 for (int j = 0; j < investDoList.size(); j++) { InvestDo investDo = investDoList.get(j); Double investRate = CalculateUtils.div(investDo.getInvestAmount(), borrowDo.getBorrowAmount()); InvestRepaymentDo investRepaymentDo = new InvestRepaymentDo(); investRepaymentDo.setRepayId(repaymentDo.getId()); investRepaymentDo.setRepayPeriod(repaymentDo.getRepayPeriod()); investRepaymentDo.setRepayDate(repaymentDo.getRepayDate()); // 汇款本金金额 Double recivedPrincipal = 0.00; if (i >= repaymentDoList.size() - 1) {// 最后一期为投资金额减去累计已回款本金 Double totalRecivedPrincipal = recivedPrincipalMap.get(investDo.getId()); totalRecivedPrincipal = totalRecivedPrincipal == null ? 0.00 : totalRecivedPrincipal; recivedPrincipal = CalculateUtils.sub(investDo.getInvestAmount(), totalRecivedPrincipal); } else { // 如果是最后一个投资人,需要用还款本金-其他投资回款本金 if (j >= investDoList.size() - 1) { recivedPrincipal = remainPrincipal; } else { recivedPrincipal = CalculateUtils.round( CalculateUtils.mul(repaymentDo.getStillPrincipal(), investRate), 2); remainPrincipal = CalculateUtils.sub(remainPrincipal, recivedPrincipal); } } investRepaymentDo.setRecivedPrincipal(recivedPrincipal); // 回款利息金额 Double recivedInterest = 0.00;// 每期回款利息 if (j >= investDoList.size() - 1) { recivedInterest = remainInterest; } else { recivedInterest = CalculateUtils.round( CalculateUtils.mul(repaymentDo.getStillInterest(), investRate), 2, BigDecimal.ROUND_DOWN); remainInterest = CalculateUtils.sub(remainInterest, recivedInterest); } investRepaymentDo.setRecivedInterest(recivedInterest); // 剩余本金余额(投资金额-累计已回款金额) Double totalRecivedPrincipal = recivedPrincipalMap.get(investDo.getId()); totalRecivedPrincipal = totalRecivedPrincipal == null ? 0.00 : totalRecivedPrincipal; investRepaymentDo.setPrincipalBalance(CalculateUtils.sub(investDo.getInvestAmount(), totalRecivedPrincipal)); // 剩余利息余额,现利息余额为0 Double interestBalance = CalculateUtils.round( CalculateUtils.mul(repaymentDo.getInterestBalance(), investRate), 2); investRepaymentDo.setInterestBalance(interestBalance); investRepaymentDo.setInvestId(investDo.getId()); investRepaymentDo.setOwner(investDo.getInvestor()); investRepaymentDo.setOwnerlist(investDo.getInvestor() + ""); investRepaymentDo.setImanageFee(0.00);// 管理费为0 investRepaymentDo.setImanageFeeRate(0.00);// 管理费率为0 investRepaymentDo.setIsDebt(1); investRepaymentDo.setCirculationForpayStatus(-1); investRepaymentDo.setBorrowId(borrowId); investRepaymentDo.setHasPrincipal(0.00);// 已收本金 investRepaymentDo.setHasInterest(0.00);// 已收利息 investRepaymentDo.setInterestOwner(1l);// 1 默认 VIP会员 investRepaymentDo.setRecivedFi(0.00);// 应收罚息 investRepaymentDo.setIsLate(1);// 1 未逾期 investRepaymentDo.setLateDay(0);// 逾期天数 investRepaymentDo.setIsWebRepay(1);// 1 非网站垫付 investRepaymentDo.setRepayStatus(1);// 1: 默认未偿还 investRepaymentDo.setParentId(0l); // 累计已还本金,用于最后一期已还本金和剩余本金的计算 recivedPrincipalMap.put(investDo.getId(), CalculateUtils.add(totalRecivedPrincipal, recivedPrincipal)); // 累计已收利息 Double totalRecivedInterest = recivedInterestMap.get(investDo.getId()); totalRecivedInterest = totalRecivedInterest == null ? 0.00 : totalRecivedInterest; recivedInterestMap.put(investDo.getId(), CalculateUtils.add(totalRecivedInterest, recivedInterest)); // 新增投资回款记录 investRepaymentComponent.addInvestRepayment(investRepaymentDo); if (i >= repaymentDoList.size() - 1) { // 修改投资记录的校验本金,校验利息,最大投资ID,调整本金 updateBorrowFullScale(investDo.getId(), investDo.getRealAmount(), recivedInterestMap.get(investDo.getId()), investRepaymentDo.getId(), investDo.getInvestAmount()); } } } } /** * 修改投资记录的校验本金,校验利息,最大投资ID,调整本金 * * @param investId * @param realAmount * @param totalRecivedInterest * @param investRepaymentId * @param totalRecivedPrincipal * @author: liuzgmf * @date: 2014年9月24日下午5:37:15 */ private void updateBorrowFullScale(Long investId, Double realAmount, Double totalRecivedInterest, Long investRepaymentId, Double totalRecivedPrincipal) { InvestDo udpateInvestDo = new InvestDo(); udpateInvestDo.setId(investId); udpateInvestDo.setCheckPrincipal(realAmount);// 校验本金 udpateInvestDo.setCheckInterest(totalRecivedInterest);// 校验利息 udpateInvestDo.setRecivedPrincipal(realAmount);// 已收本金 udpateInvestDo.setRecievedInterest(totalRecivedInterest);// 已收利息 udpateInvestDo.setMaxInvestId(investRepaymentId);// 最大投资id udpateInvestDo.setAdjustPrincipal(totalRecivedPrincipal);// 调整本金 investComponent.updateInvest(udpateInvestDo); } /** * 新增还款记录 * * @param preRepaymentDoList * @author: liuzgmf * @throws ParseException * @date: 2014年9月24日下午3:09:39 */ private List<RepaymentDo> addRepayment(Long borrowId, List<SettDetailDo> detailDoList) { List<RepaymentDo> repaymentDoList = new ArrayList<RepaymentDo>(); for (SettDetailDo detailDo : detailDoList) { RepaymentDo repaymentDo = new RepaymentDo(); repaymentDo.setRepayPeriod(detailDo.getPeriod() + "/" + detailDoList.size()); repaymentDo.setStillPrincipal(detailDo.getPrincipal()); repaymentDo.setStillInterest(detailDo.getInterest()); repaymentDo.setBorrowId(borrowId); repaymentDo.setPrincipalBalance(detailDo.getRemainingPrincipal()); repaymentDo.setInterestBalance(0.00); repaymentDo.setRepayDate(detailDo.getRepayDate());// 还款日期 repaymentDo.setConsultFee(detailDo.getConsultFee());// 咨询费 repaymentDo.setRepayFee(detailDo.getServFee());// 服务费 repaymentDo.setHasPi(0.00); repaymentDo.setHasFi(0.00); repaymentDo.setLateFi(0.00); repaymentDo.setLateDay(0); repaymentDo.setRepayStatus(1);// 1 默认未偿还 repaymentDo.setIsLate(1); repaymentDo.setIsWebRepay(1); repaymentDo.setInvestorForpayFi(0.00);// 投资人待收罚息 repaymentDo.setInvestorHaspayFi(0.00);// 投资人已收罚息 repaymentDo.setVersion(0); repaymentComponent.addRepayment(repaymentDo); repaymentDoList.add(repaymentDo); } return repaymentDoList; } /** * 变更借款标的记录,包括版本,状态,审核时间 * * @param borrowId * @param borrrowStatus * @param version * @author: liuzgmf * @date: 2014年9月24日下午3:01:50 */ private void updateBorrowFullScale(Long borrowId) { int count = borrowDao.updateBorrowFullScale(borrowId); if (count < 1) { throw new BusinessException("标的更新失败"); } } /** * 新增预还款记录 * * @param repyaDetailList * @author: liuzgmf * @date: 2014年9月24日上午10:41:02 */ private List<PreRepaymentDo> addPreRepayment(Long borrowId, List<SettDetailDo> detailDoList) { BorrowDo borrowDo = borrowDao.getById(borrowId); List<PreRepaymentDo> preRepaymentDoList = new ArrayList<PreRepaymentDo>(); for (SettDetailDo detailDo : detailDoList) { PreRepaymentDo preRepaymentDo = new PreRepaymentDo(); preRepaymentDo.setRepayPeriod(detailDo.getPeriod() + "/" + detailDoList.size()); preRepaymentDo.setRepayDate(DateFormatUtils.format(detailDo.getRepayDate(), "yyyy-MM-dd")); preRepaymentDo.setStillPrincipal(detailDo.getPrincipal()); preRepaymentDo.setStillInterest(detailDo.getInterest()); preRepaymentDo.setPrincipalBalance(detailDo.getRemainingPrincipal()); preRepaymentDo.setInterestBalance(0.00); preRepaymentDo.setConsultFee(detailDo.getConsultFee()); preRepaymentDo.setMrate(CalculateUtils.div(borrowDo.getAnnualRate(), 12)); Double totalSum = CalculateUtils.add(detailDo.getPrincipal(), detailDo.getInterest()); preRepaymentDo.setTotalSum(totalSum); preRepaymentDo.setTotalAmount(CalculateUtils.add(totalSum, detailDo.getConsultFee())); preRepaymentDo.setBorrowId(borrowId); preRepaymentDo.setSort(detailDo.getPeriod()); preRepaymentDo.setRepayFee(0.00); preRepaymentDoList.add(preRepaymentDo); preRepaymentComponent.addPreRepayment(preRepaymentDo); } return preRepaymentDoList; } /* * (no-Javadoc) <p>Title: updateBorrowStatusAndHasDeadlineById</p> * <p>Description: </p> * * @param borrowId * * @return * * @see com.hehenian.biz.component.trade.IBorrowComponent# * updateBorrowStatusAndHasDeadlineById(long) */ @Override public int updateBorrowStatusAndHasDeadlineById(long borrowId) { return borrowDao.updateBorrowStatusAndHasDeadlineById(borrowId); } /* * (no-Javadoc) <p>Title: updateBorrowStatus</p> <p>Description: </p> * * @param borrowId * * @return * * @see * com.hehenian.biz.component.trade.IBorrowComponent#updateBorrowStatus( * long) */ @Override public int updateBorrowStatus(long borrowId) { return borrowDao.updateBorrowStatus(borrowId); } /* * (no-Javadoc) <p>Title: updateBorrowStatusByPreRepay</p> <p>Description: * </p> * * @param borrowId * * @return * * @see com.hehenian.biz.component.trade.IBorrowComponent# * updateBorrowStatusByPreRepay(long) */ @Override public int updateBorrowStatusByPreRepay(long borrowId) { // TODO Auto-generated method stub return borrowDao.updateBorrowStatusByPreRepay(borrowId); } /** * 修改标的状态 * * @param borrowDo * @return */ @Override public int updateStatus(BorrowDo borrowDo) { int result = borrowDao.updateStatus(borrowDo); if (result <= 0) { throw new BusinessException("更新标的状态失败"); } return result; } @Override public int updateBorrowInvest(BorrowDo borrowDo) { int result = borrowDao.updateBorrowInvest(borrowDo); return result; } @Override public List<BorrowDo> queryBorrows(Map<String, Object> searchItems) { return borrowDao.queryBorrows(searchItems); } @Override public long getBorrowQty(Map<String, Object> searchItems) { return borrowDao.getBorrowQty(searchItems); } @Override public BorrowDo getByIdNo(String idNo) { return borrowDao.getByIdNo(idNo); } @Override public Map<String, Object> queryBorrowDetails(Long borrowId) { return borrowDao.queryBorrowDetails(borrowId); } @Override public List<Map<String,Object>> queryLoanBorrows(Map<String, Object> searchItems) { return borrowDao.queryLoanBorrows(searchItems); } @Override public List<Map<String,Object>> queryloanBorrowUser(Map<String, Object> searchItems) { return borrowDao.queryloanBorrowUser(searchItems); } @Override public List<Map<String, Object>> queryRepayment(Map<String, Object> searchItems) { return borrowDao.queryRepayment(searchItems); } }