• 微服务项目:尚融宝(53)(核心业务流程:投标(1))


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

    一、投资人投标

    1、需求描述

    平台发布标的,出借人充值就可以投资标的 

    2、相关数据库表 

    3、参考文档

    参考《汇付宝商户账户技术文档》3.10满标投资,投资过程与账户绑定、用户充值过程一致

     

    二、具体步骤

    step1:点击标的,进入标的详情页面

    step2:输入投资金额,计算获得收益

    step3:同意协议,点击立即投资

    step4:跳转到汇付宝页面(资金托管接口调用)

    step5:汇付宝验证用户交易密码

    step6:汇付宝修改账号资金余额(更新user_account记录中的amount的值和freeze_amount的值) 汇付宝新增投资记录(新增user_invest记录)

    step7:异步回调

    (1)账户金额更改(剩余金额和冻结金额)

    (2)修改投资状态(lend_item表中的status)

    (3)更新标的信息(lend表中的投资人数和已投金额)

    (4)添加交易流水

    step8:用户点击“返回平台”,返回尚融宝

    标的详情

    需求

    展示信息:

    1、标的基本信息(标的表 lend)

    2、借款人信息(借款人表 borrower)

    3、账户余额信息(会员账户表 user_account)

    4、根据投资金额计算收益(根据四种还款方式计算)

    5、投资记录(投资记录表 lend_item,后续完善)

    6、还款记录(还款记录表 lend_return,后续完善)

    投标条件:

    1、已经登录的会员

    2、只有投资人可以投标,借款人不可以投标

    3、投标金额必须是100整数倍

    4、账号可用余额充足

    5、同意投标协议

    一、标的和借款人信息接口

    LendController

    1. @ApiOperation("获取标的信息")
    2. @GetMapping("/show/{id}")
    3. public R show(
    4. @ApiParam(value = "标的id", required = true)
    5. @PathVariable Long id) {
    6. Map lendDetail = lendService.getLendDetail(id);
    7. return R.ok().data("lendDetail", lendDetail);
    8. }

    二、账户余额信息接口

    1、UserAccountController

    1. @ApiOperation("查询账户余额")
    2. @GetMapping("/auth/getAccount")
    3. public R getAccount(HttpServletRequest request){
    4. String token = request.getHeader("token");
    5. Long userId = JwtUtils.getUserId(token);
    6. BigDecimal account = userAccountService.getAccount(userId);
    7. return R.ok().data("account", account);
    8. }

    2、Service

    接口:UserAccountService

    BigDecimal getAccount(Long userId);

    实现:UserAccountServiceImpl 

    1. @Override
    2. public BigDecimal getAccount(Long userId) {
    3. //根据userId查找用户账户
    4. QueryWrapper userAccountQueryWrapper = new QueryWrapper<>();
    5. userAccountQueryWrapper.eq("user_id", userId);
    6. UserAccount userAccount = baseMapper.selectOne(userAccountQueryWrapper);
    7. BigDecimal amount = userAccount.getAmount();
    8. return amount;
    9. }

    三、前端整合

    pages/lend/_id.vue

    1、获取标的详情信息

    1. async asyncData({ $axios, params }) {
    2. let lendId = params.id //通过路由参数获取标的id
    3. //通过lendId获取标的详情信息
    4. let response = await $axios.$get('/api/core/lend/show/' + lendId)
    5. return {
    6. lend: response.data.lendDetail.lend, //标的详情
    7. borrower: response.data.lendDetail.borrower, //借款人信息
    8. }
    9. },

     2、查询账户余额

    1. //查询账户余额
    2. fetchAccount() {
    3. let userInfo = cookie.get('userInfo')
    4. if (userInfo) {
    5. this.$axios
    6. .$get('/api/core/userAccount/auth/getAccount')
    7. .then((response) => {
    8. this.account = response.data.account
    9. })
    10. }
    11. },

     3、获取登录人的用户类型

    1. //获取登录人的用户类型
    2. fetchUserType() {
    3. let userInfo = cookie.get('userInfo')
    4. if (userInfo) {
    5. userInfo = JSON.parse(userInfo)
    6. this.userType = userInfo.userType
    7. }
    8. },

  • 相关阅读:
    Flux脚本语言基础使用-数据类型(InFluxDB 查询语言)
    Python每日一练(牛客新题库)——第21天:内置函数
    【分布式事务】
    【C#】什么是并发,C#常规解决高并发的基本方法
    前端文件流、切片下载和上传
    Vue3新的状态管理库-Pinia(保姆级别教程)
    IDEA Windows下SPARK连接Hive
    php基于BS模式的物业管理系统设计与实现毕业设计源码290918
    面试问到MySQL模块划分与架构体系怎么办
    java中异构化的任务指的是什么?
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126978991