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

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

一、投资人投标

1、需求描述

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

2、相关数据库表 

微服务项目:尚融宝(53)(核心业务流程:投标(1))_第1张图片

3、参考文档

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

 微服务项目:尚融宝(53)(核心业务流程:投标(1))_第2张图片

二、具体步骤

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

微服务项目:尚融宝(53)(核心业务流程:投标(1))_第3张图片

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

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

微服务项目:尚融宝(53)(核心业务流程:投标(1))_第4张图片

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

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

二、账户余额信息接口

1、UserAccountController

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

2、Service

接口:UserAccountService

BigDecimal getAccount(Long userId);

实现:UserAccountServiceImpl 

@Override
public BigDecimal getAccount(Long userId) {
    //根据userId查找用户账户
    QueryWrapper userAccountQueryWrapper = new QueryWrapper<>();
    userAccountQueryWrapper.eq("user_id", userId);
    UserAccount userAccount = baseMapper.selectOne(userAccountQueryWrapper);

    BigDecimal amount = userAccount.getAmount();
    return amount;
}

三、前端整合

pages/lend/_id.vue

1、获取标的详情信息

  async asyncData({ $axios, params }) {
    let lendId = params.id //通过路由参数获取标的id

    //通过lendId获取标的详情信息
    let response = await $axios.$get('/api/core/lend/show/' + lendId)

    return {
      lend: response.data.lendDetail.lend, //标的详情
      borrower: response.data.lendDetail.borrower, //借款人信息
    }
  },

 2、查询账户余额

    //查询账户余额
    fetchAccount() {
      let userInfo = cookie.get('userInfo')
      if (userInfo) {
        this.$axios
          .$get('/api/core/userAccount/auth/getAccount')
          .then((response) => {
            this.account = response.data.account
          })
      }
    },

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

//获取登录人的用户类型
fetchUserType() {
      let userInfo = cookie.get('userInfo')
      if (userInfo) {
        userInfo = JSON.parse(userInfo)
        this.userType = userInfo.userType
      }
},

你可能感兴趣的