• 微服务项目:尚融宝(49)(核心业务流程:标的管理(1))


    认清现实,放弃幻想,准备斗争

    一、借款人申请借款

    1、需求描述 

    2、相关数据库表

    lend:标的表

    二、具体步骤

    1、标的产生

    管理员借款审核通过后,则产生新标的

    2、查看标的列表

    3、查看标的详情 

     

     生成新标的

    一、后端实现

    1、创建枚举

    创建 LendStatusEnum  

    CHECK(0, "待发布"),
    INVEST_RUN(1, "募资中"),
    PAY_RUN(2, "还款中"),
    PAY_OK(3, "已结清"),
    FINISH(4, "结标"),
    CANCEL(-1, "已撤标"),
    ;

    2、定义编号辅助类

    service-core中添加辅助类:util.LendNoUtils

    3、Service

    BorrowInfoServiceImpl 实现:

    1. @Resource
    2. private LendService lendService;
    3. @Transactional(rollbackFor = Exception.class)
    4. @Override
    5. public void approval(BorrowInfoApprovalVO borrowInfoApprovalVO) {
    6. //修改借款信息状态
    7. ......
    8. //审核通过则创建标的
    9. if (borrowInfoApprovalVO.getStatus().intValue() == BorrowInfoStatusEnum.CHECK_OK.getStatus().intValue()) {
    10. //创建标的
    11. lendService.createLend(borrowInfoApprovalVO, borrowInfo);
    12. }
    13. }

    LendService 接口: 

    void createLend(BorrowInfoApprovalVO borrowInfoApprovalVO, BorrowInfo borrowInfo);

    LendServiceImpl 实现:生成标的 

    1. @Override
    2. public void createLend(BorrowInfoApprovalVO borrowInfoApprovalVO, BorrowInfo borrowInfo) {
    3. Lend lend = new Lend();
    4. lend.setUserId(borrowInfo.getUserId());
    5. lend.setBorrowInfoId(borrowInfo.getId());
    6. lend.setLendNo(LendNoUtils.getLendNo());//生成编号
    7. lend.setTitle(borrowInfoApprovalVO.getTitle());
    8. lend.setAmount(borrowInfo.getAmount());
    9. lend.setPeriod(borrowInfo.getPeriod());
    10. lend.setLendYearRate(borrowInfoApprovalVO.getLendYearRate().divide(new BigDecimal(100)));//从审批对象中获取
    11. lend.setServiceRate(borrowInfoApprovalVO.getServiceRate().divide(new BigDecimal(100)));//从审批对象中获取
    12. lend.setReturnMethod(borrowInfo.getReturnMethod());
    13. lend.setLowestAmount(new BigDecimal(100));
    14. lend.setInvestAmount(new BigDecimal(0));
    15. lend.setInvestNum(0);
    16. lend.setPublishDate(LocalDateTime.now());
    17. //起息日期
    18. DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    19. LocalDate lendStartDate = LocalDate.parse(borrowInfoApprovalVO.getLendStartDate(), dtf);
    20. lend.setLendStartDate(lendStartDate);
    21. //结束日期
    22. LocalDate lendEndDate = lendStartDate.plusMonths(borrowInfo.getPeriod());
    23. lend.setLendEndDate(lendEndDate);
    24. lend.setLendInfo(borrowInfoApprovalVO.getLendInfo());//描述
    25. //平台预期收益
    26. // 月年化 = 年化 / 12
    27. BigDecimal monthRate = lend.getServiceRate().divide(new BigDecimal(12), 8, BigDecimal.ROUND_DOWN);
    28. // 平台收益 = 标的金额 * 月年化 * 期数
    29. BigDecimal expectAmount = lend.getAmount().multiply(monthRate).multiply(new BigDecimal(lend.getPeriod()));
    30. lend.setExpectAmount(expectAmount);
    31. //实际收益
    32. lend.setRealAmount(new BigDecimal(0));
    33. //状态
    34. lend.setStatus(LendStatusEnum.INVEST_RUN.getStatus());
    35. //审核时间
    36. lend.setCheckTime(LocalDateTime.now());
    37. //审核人
    38. lend.setCheckAdminId(1L);
    39. baseMapper.insert(lend);
    40. }

     由于这个项目没做管理员管理部分,用前端写死的管理员,即审核人的id是写死的

  • 相关阅读:
    微服务项目:尚融宝(45)(核心业务流程:借款申请(2))
    pdf如何压缩文件大小?pdf文件在线压缩方法介绍
    logrotate日志转储
    程序员迷茫:30岁以上的“大龄程码农”出路在哪?java码农该怎么办?
    Selenium切换窗口句柄及调用Chrome浏览器
    Django2.2序列化 ‘str‘ object has no attribute ‘decode‘
    EXCEL根据某列的数字N,增加N-1行相同的数据
    如何引用R语言以及R包:文献引用
    java求两个数的百分比
    算法小白的心得笔记:比较小数点后五位,而不会受到浮点数精度问题的影响。
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126945459