大数据最全微服务项目:尚融宝(55)(核心业务流程(2),腾讯大数据开发面试必问

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

//按还款时间生成还款计划
int len = lend.getPeriod().intValue();
for (int i = 1; i <= len; i++) {

    //创建还款计划对象
    LendReturn lendReturn = new LendReturn();
    lendReturn.setReturnNo(LendNoUtils.getReturnNo());
    lendReturn.setLendId(lend.getId());
    lendReturn.setBorrowInfoId(lend.getBorrowInfoId());
    lendReturn.setUserId(lend.getUserId());
    lendReturn.setAmount(lend.getAmount());
    lendReturn.setBaseAmount(lend.getInvestAmount());
    lendReturn.setLendYearRate(lend.getLendYearRate());
    lendReturn.setCurrentPeriod(i);//当前期数
    lendReturn.setReturnMethod(lend.getReturnMethod());

    //说明:还款计划中的这三项 = 回款计划中对应的这三项和:因此需要先生成对应的回款计划
    //			lendReturn.setPrincipal();
    //			lendReturn.setInterest();
    //			lendReturn.setTotal();

    lendReturn.setFee(new BigDecimal(0));
    lendReturn.setReturnDate(lend.getLendStartDate().plusMonths(i)); //第二个月开始还款
    lendReturn.setOverdue(false);
    if (i == len) { //最后一个月
        //标识为最后一次还款
        lendReturn.setLast(true);
    } else {
        lendReturn.setLast(false);
    }
    lendReturn.setStatus(0);
    lendReturnList.add(lendReturn);
}
//批量保存
lendReturnService.saveBatch(lendReturnList);

//获取lendReturnList中还款期数与还款计划id对应map
Map<Integer, Long> lendReturnMap = lendReturnList.stream().collect(
    Collectors.toMap(LendReturn::getCurrentPeriod, LendReturn::getId)
);

//======================================================
//=============获取所有投资者,生成回款计划===================
//======================================================
//回款计划列表
List<LendItemReturn> lendItemReturnAllList = new ArrayList<>();
//获取投资成功的投资记录
List<LendItem> lendItemList = lendItemService.selectByLendId(lend.getId(), 1);
for (LendItem lendItem : lendItemList) {

    //创建回款计划列表
    List<LendItemReturn> lendItemReturnList = this.returnInvest(lendItem.getId(), lendReturnMap, lend);
    lendItemReturnAllList.addAll(lendItemReturnList);
}

//更新还款计划中的相关金额数据
for (LendReturn lendReturn : lendReturnList) {

    BigDecimal sumPrincipal = lendItemReturnAllList.stream()
        //过滤条件:当回款计划中的还款计划id == 当前还款计划id的时候
        .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue())
        //将所有回款计划中计算的每月应收本金相加
        .map(LendItemReturn::getPrincipal)
        .reduce(BigDecimal.ZERO, BigDecimal::add);

    BigDecimal sumInterest = lendItemReturnAllList.stream()
        .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue())
        .map(LendItemReturn::getInterest)
        .reduce(BigDecimal.ZERO, BigDecimal::add);

    BigDecimal sumTotal = lendItemReturnAllList.stream()
        .filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue())
        .map(LendItemReturn::getTotal)
        .reduce(BigDecimal.ZERO, BigDecimal::add);

    lendReturn.setPrincipal(sumPrincipal); //每期还款本金
    lendReturn.setInterest(sumInterest); //每期还款利息
    lendReturn.setTotal(sumTotal); //每期还款本息
}
lendReturnService.updateBatchById(lendReturnList);

}



> 
> **//说明:还款计划中的这三项 = 回款计划中对应的这三项和:因此需要先生成对应的回款计划  
>          //            lendReturn.setPrincipal();  
>          //            lendReturn.setInterest();  
>          //            lendReturn.setTotal();**
> 
> 
> 



> 
> **BigDecimal sumPrincipal = lendItemReturnAllList.stream()** **//过滤条件:当回款计划中的还款计划id == 当前还款计划id的时候**  
> **.filter(item -> item.getLendReturnId().longValue() == lendReturn.getId().longValue())** **//将所有回款计划中计算的每月应收本金相加**  
> **.map(LendItemReturn::getPrincipal)  
>              .reduce(BigDecimal.ZERO, BigDecimal::add);**
> 
> 
> 


### 2、生成回款计划


**LendServiceImpl**


**\* @param lendItemId**  
**\* @param lendReturnMap 还款期数与还款计划id对应map  
      \* @param lend**  
**\* @return**



public List returnInvest(Long lendItemId, Map<Integer, Long> lendReturnMap, Lend lend) {

//投标信息
LendItem lendItem = lendItemService.getById(lendItemId);

//投资金额
BigDecimal amount = lendItem.getInvestAmount();
//年化利率
BigDecimal yearRate = lendItem.getLendYearRate();
//投资期数
int totalMonth = lend.getPeriod();

Map<Integer, BigDecimal> mapInterest = null;  //还款期数 -> 利息
Map<Integer, BigDecimal> mapPrincipal = null; //还款期数 -> 本金

//根据还款方式计算本金和利息
if (lend.getReturnMethod().intValue() == ReturnMethodEnum.ONE.getMethod()) {
    //利息
    mapInterest = Amount1Helper.getPerMonthInterest(amount, yearRate, totalMonth);
    //本金
    mapPrincipal = Amount1Helper.getPerMonthPrincipal(amount, yearRate, totalMonth);
} else if (lend.getReturnMethod().intValue() == ReturnMethodEnum.TWO.getMethod()) {
    mapInterest = Amount2Helper.getPerMonthInterest(amount, yearRate, totalMonth);
    mapPrincipal = Amount2Helper.getPerMonthPrincipal(amount, yearRate, totalMonth);
} else if (lend.getReturnMethod().intValue() == ReturnMethodEnum.THREE.getMethod()) {
    mapInterest = Amount3Helper.getPerMonthInterest(amount, yearRate, totalMonth);
    mapPrincipal = Amount3Helper.getPerMonthPrincipal(amount, yearRate, totalMonth);
} else {
    mapInterest = Amount4Helper.getPerMonthInterest(amount, yearRate, totalMonth);
    mapPrincipal = Amount4Helper.getPerMonthPrincipal(amount, yearRate, totalMonth);
}

//创建回款计划列表
List<LendItemReturn> lendItemReturnList = new ArrayList<>();
for (Map.Entry<Integer, BigDecimal> entry : mapInterest.entrySet()) {
    Integer currentPeriod = entry.getKey();
    //根据还款期数获取还款计划的id
    Long lendReturnId = lendReturnMap.get(currentPeriod);

    LendItemReturn lendItemReturn = new LendItemReturn();
    lendItemReturn.setLendReturnId(lendReturnId);
    lendItemReturn.setLendItemId(lendItemId);
    lendItemReturn.setInvestUserId(lendItem.getInvestUserId());
    lendItemReturn.setLendId(lendItem.getLendId());
    lendItemReturn.setInvestAmount(lendItem.getInvestAmount());
    lendItemReturn.setLendYearRate(lend.getLendYearRate());
    lendItemReturn.setCurrentPeriod(currentPeriod);
    lendItemReturn.setReturnMethod(lend.getReturnMethod());
    //最后一次本金计算

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

很难做到真正的技术提升。**

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值