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

2022-11-15 15:13:23 浏览数 (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

代码语言:javascript复制
@ApiOperation("获取标的信息")
@GetMapping("/show/{id}")
public R show(
    @ApiParam(value = "标的id", required = true)
    @PathVariable Long id) {
    Map<String, Object> lendDetail = lendService.getLendDetail(id);
    return R.ok().data("lendDetail", lendDetail);
}

二、账户余额信息接口

1、UserAccountController

代码语言:javascript复制
@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

代码语言:javascript复制
BigDecimal getAccount(Long userId);

实现:UserAccountServiceImpl 

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

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

三、前端整合

pages/lend/_id.vue

1、获取标的详情信息

代码语言:javascript复制
  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、查询账户余额

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

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

代码语言:javascript复制
//获取登录人的用户类型
fetchUserType() {
      let userInfo = cookie.get('userInfo')
      if (userInfo) {
        userInfo = JSON.parse(userInfo)
        this.userType = userInfo.userType
      }
},

0 人点赞