一、投资人投标
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
}
},