29. 尚融宝借款申请
需求描述
整体流程图
相关数据库表
获取借款额度
需求
step1:借款人在“借款人信息认证”界面点击“我要借款”
step2:展示借款信息填写页面
后端
controller
BorrowInfoController.java
package com.indi.srb.core.controller.api;@Api(tags = "借款信息")
@RestController
@RequestMapping("/api/core/borrowInfo")
public class BorrowInfoController {@Resourceprivate BorrowInfoService borrowInfoService;@ApiOperation("获取借款额度")@GetMapping("/auth/getBorrowAmount")public R getBorrowAmount(HttpServletRequest request) {String token = request.getHeader("token");Long userId = JwtUtils.getUserId(token);BigDecimal borrowAmount = borrowInfoService.getBorrowAmount(userId);return R.ok().setData("borrowAmount", borrowAmount);}
}
service
BorrowInfoService.java
BigDecimal getBorrowAmount(Long userId);
BorrowInfoServiceImpl.java
package com.indi.srb.core.service.impl;public class BorrowInfoServiceImpl extends ServiceImpl<BorrowInfoMapper, BorrowInfo> implements BorrowInfoService {@Resourceprivate UserInfoMapper userInfoMapper;@Resourceprivate IntegralGradeMapper integralGradeMapper;@Overridepublic BigDecimal getBorrowAmount(Long userId) {// 获取用户积分UserInfo userInfo = userInfoMapper.selectById(userId);Assert.notNull(userInfo, ResponseEnum.LOGIN_MOBILE_ERROR);Integer integral = userInfo.getIntegral();// 根据积分查询额度QueryWrapper<IntegralGrade> queryWrapper = new QueryWrapper<>();queryWrapper.le("integral_start", integral).ge("integral_end", integral);IntegralGrade integralGrade = integralGradeMapper.selectOne(queryWrapper);if (integralGrade == null) {return new BigDecimal("0");}return integralGrade.getBorrowAmount();}
}
借款入口前端
pages/user/borrower.vue
template
<NuxtLink to="/user/apply" v-if="borrowerStatus === 2"><el-button style="margin-top:20px;" type="success">我要借款</el-button></NuxtLink>
借款申请前端
template
pages/user/apply.vue
<template><div class="personal-main"><div class="personal-pay"><h3><i>借款申请</i></h3><el-steps :active="active" style="margin: 40px"><el-step title="提交借款信息"></el-step><el-step title="审核"></el-step><el-step title="等待审核结果"></el-step></el-steps><div v-if="active === 0" class="user-borrower"><el-form label-width="120px"><el-form-item label="借款金额"><el-col :span="6"><el-input v-model="borrowInfo.amount" /></el-col><el-col :span="6"> 您最多可借款{{ borrowAmount }}元</el-col></el-form-item><el-form-item label="期数"><el-select v-model="borrowInfo.period"><el-option :value="1" label="1个月" /><el-option :value="3" label="3个月" /><el-option :value="6" label="6个月" /><el-option :value="9" label="9个月" /><el-option :value="12" label="12个月" /><el-option :value="24" label="24个月" /></el-select></el-form-item><el-form-item label="还款方式"><el-select v-model="borrowInfo.returnMethod"><el-optionv-for="item in returnMethodList":key="item.value":label="item.name":value="item.value"/></el-select></el-form-item><el-form-item label="资金用途"><el-select v-model="borrowInfo.moneyUse"><el-optionv-for="item in moneyUseList":key="item.value":label="item.name":value="item.value"/></el-select></el-form-item><el-form-item label="年利率"><el-col :span="6"><el-input v-model="borrowInfo.borrowYearRate"><template slot="append">%</template></el-input></el-col><el-col :span="8"> 年利率越高,借款越容易成功。</el-col></el-form-item><el-form-item><el-buttontype="primary":disabled="submitBtnDisabled"@click="save">提交</el-button></el-form-item></el-form><el-alerttitle="您提供的任何信息尚融宝都承诺予以保护,不会挪作他用。"type="warning":closable="false"></el-alert></div><div v-if="active === 1"><div style="margin-top:40px;"><el-alerttitle="您的借款申请已成功提交,请耐心等待"type="warning"show-icon:closable="false">我们将在10分钟内完成审核,审核时间为周一至周五8:00至20:00。</el-alert></div></div><div v-if="active === 2"><div style="margin-top:40px;"><el-alertv-if="borrowInfoStatus === 2"title="您的借款申请审批已通过"type="success"show-icon:closable="false"></el-alert><el-alertv-if="borrowInfoStatus === -1"title="您的借款申请审批未通过"type="error"show-icon:closable="false"></el-alert></div></div></div></div>
</template>
script
pages/user/apply.vue
<script>
export default {data() {return {active: 0, //步骤borrowInfoStatus: null, //审批状态//借款申请borrowInfo: {borrowYearRate: '12',},borrowAmount: 0, //借款额度submitBtnDisabled: false,returnMethodList: [], //还款方式列表moneyUseList: [], //资金用途列表}},// 监听借款金额输入框// 借款人每次借款不能超过借款额度watch: {'borrowInfo.amount'(value) {if (value > this.borrowAmount) {let that = thisthis.$alert('您的借款额度不足!', {type: 'error',callback() {that.borrowInfo.amount = that.borrowAmount},})}},},mounted() {//获取借款额度this.getBorrowAmount()//初始化下拉列表this.initSelected()},methods: {//初始化下拉列表的数据initSelected() {//还款方式列表this.$axios.$get('/api/core/dict/findByDictCode/returnMethod').then((response) => {this.returnMethodList = response.data.dictList})//资金用途列表this.$axios.$get('/api/core/dict/findByDictCode/moneyUse').then((response) => {this.moneyUseList = response.data.dictList})},//获取借款额度getBorrowAmount() {this.$axios.$get('/api/core/borrowInfo/auth/getBorrowAmount').then((response) => {this.borrowAmount = response.data.borrowAmount})},save() {},},
}
</script>
提交借款申请
需求
step3:借款人填写信息并提交
step4:展示等待审核页面
后端实现
实现思路
借款人提交借款要判断借款人账户绑定状态与借款人信息审批状态,只有这两个状态都成立才能借款,这两个状态都在会员表中
目标:将借款申请表单中用户填写的数据保存在borrow_info数据库表中
Controller
BorrowInfoController.java
@ApiOperation("提交借款申请")@PostMapping("/auth/save")public R save(@RequestBody BorrowInfo borrowInfo, HttpServletRequest request) {String token = request.getHeader("token");Long userId = JwtUtils.getUserId(token);borrowInfoService.saveBorrowInfo(borrowInfo,userId);return R.ok().setMessage("提交成功");}
Service
BorrowInfoService.java
void saveBorrowInfo(BorrowInfo borrowInfo, Long UserId);
BorrowInfoServiceImpl.java
@Overridepublic void saveBorrowInfo(BorrowInfo borrowInfo, Long userId) {UserInfo userInfo = userInfoMapper.selectById(userId);// 用户绑没绑定Assert.isTrue(userInfo.getBindStatus() == UserBindEnum.BIND_OK.getStatus(),ResponseEnum.USER_NO_BIND_ERROR);// 用户有没有借款额度Assert.isTrue(userInfo.getBorrowAuthStatus() == BorrowerStatusEnum.AUTH_OK.getStatus(),ResponseEnum.USER_NO_AMOUNT_ERROR);// 借款金额不能超过用户的最大额度BigDecimal borrowAmount = this.getBorrowAmount(userId);Assert.isTrue(borrowAmount.doubleValue() >= borrowInfo.getAmount().doubleValue(),ResponseEnum.USER_AMOUNT_LESS_ERROR);borrowInfo.setUserId(userId);// 年利率转成小数borrowInfo.setBorrowYearRate(borrowInfo.getBorrowYearRate().divide(new BigDecimal(100)));borrowInfo.setStatus(BorrowInfoStatusEnum.CHECK_RUN.getStatus());baseMapper.insert(borrowInfo);}
前端实现
script
pages/user/apply.vue
//提交借款申请save() {this.submitBtnDisabled = truethis.$axios.$post('/api/core/borrowInfo/auth/save', this.borrowInfo).then((response) => {this.active = 1})},
获取借款状态
需求
未通过
通过
还有提交借款信息、审核,上面都有截图,这里就不放了。
后端
controller
@ApiOperation("获取借款审批状态")@GetMapping("/getBorrowInfoStatus")public R getBorrowInfoStatus(HttpServletRequest request){String token = request.getHeader("token");Long userId = JwtUtils.getUserId(token);Integer borrowInfoStatus = borrowInfoService.getBorrowInfoStatus(userId);return R.ok().setData("borrowInfoStatus",borrowInfoStatus);}
service
BorrowInfoService.java
Integer getBorrowInfoStatus(Long userId);
BorrowInfoServiceImpl.java
@Overridepublic Integer getBorrowInfoStatus(Long userId) {QueryWrapper<BorrowInfo> queryWrapper = new QueryWrapper<>();queryWrapper.select("status").eq("user_id", userId);BorrowInfo borrowInfo = baseMapper.selectOne(queryWrapper);if (borrowInfo == null) {// 借款人未提交借款申请return BorrowInfoStatusEnum.NO_AUTH.getStatus();}return borrowInfo.getStatus();}
前端
template
script
pages/user/apply.vue
mounted() {this.getBorrowInfoStatus()},methods: {getBorrowInfoStatus() {this.$axios.$get('/api/core/borrowInfo/getBorrowInfoStatus').then((response) => {this.borrowInfoStatus = response.data.borrowInfoStatusif (this.borrowInfoStatus === 0) {this.active = 0// 获取借款额度this.getBorrowAmount()// 获取下拉列表this.initSelected()} else if (this.borrowInfoStatus === 1) {this.active = 1} else {this.active = 2}})},
29. 尚融宝借款申请相关推荐
- 28. 尚融宝借款额度审核
借款人列表 需求 后端实现 controller AdminBorrowerController.java package com.indi.srb.core.controller.admin;@Ap ...
- 【金融项目】尚融宝项目(十五)
29.提现和还款 29.1.提现 29.1.1.需求 放款成功后,借款人可以申请提现. 参考<汇付宝商户账户技术文档>3.15用户申请提现 29.1.2.前端整合 pages/user/w ...
- 【金融项目】尚融宝项目(十)
19.申请借款额度 19.1.需求介绍 19.1.1.借款人申请额度 1.需求描述 平台管理员根据借款人个人信息设置积分,通过积分规则借款人可以获取额度. 2.相关数据库表 19.1.2.具体步骤 s ...
- 【金融项目】尚融宝项目(十一)
21.借款申请 21.1.需求介绍 21.1.1.借款人申请借款 1.需求描述 2.相关数据库表 21.1.2.具体步骤 step1:借款人点击"我要借款" step2:展示借款信 ...
- 【金融项目】尚融宝项目(一)
1.尚融宝项目简介 1.1.前言 尚融宝项目是一个网络借贷信息中介服务平台,为个人投资者.个人融资用户和小微企业提供专业的线上信贷及出借撮合服务. 行业案例:人人贷 https://www.renre ...
- 尚融宝01-项目简介
目录 一.项目简介 (一).项目名称 (二).项目介绍 (三).项目架构 (四).业务流程总结 二.信用贷款平台的类别 (一).银行系 (二).国资系 (三).民营系 三.业务流程 (一).投资人 ( ...
- 【金融项目】尚融宝项目(十四)
27.放款 27.1.需求介绍 27.1.1.平台放款 1.需求描述 标的募资时间到,平台会操作放款或撤标,如果达到放款条件则操作放款 说明:撤标过程与放款过程一致,处理业务相对简单,只是将出借金额返 ...
- 【金融项目】尚融宝项目(六)
11.访问令牌 11.1.单点登录 11.1.1.用户身份认证 11.1.1.1.单一服务器模式 一般过程如下: 用户向服务器发送用户名和密码. 验证服务器后,相关数据(如用户名,用户角色等)将保存在 ...
- 【金融项目】尚融宝项目(三)
5.管理平台前端搭建 5.1.搭建管理平台前端程序 5.1.1.vue-element-admin vue-element-admin是基于element-ui 的一套后台管理系统集成方案. GitH ...
最新文章
- ubuntu 下安装nginx
- 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授
- 多除了1次100的FM BAPI_CURRENCY_CONV_TO_INTERN_9
- Ajax(5)UpdatePanel的使用方法
- Python中使用Redis的批处理工具pipeline(这种方法从底层思考效率还是低于“订阅发布机制”)
- c 语言中随机数填充数组,c – 生成唯一随机数的数组
- 线上安全大会还能这么玩 ISC 2020首创“3D立体云展馆”
- 图像处理常用八大算法
- Chrome Inspect调试stetho出现空白的解决方法
- springboot引入本地jar包,并且打jar包时包含本地jar
- Google深度学习TensorFlow最好的入门文章!
- atitit.为什么java体系开发效率这样低的原因and解决
- html5移动端单视频播放代码,js移动端视频播放代码
- 论坛php 图片上传,图片上传、分享网站
- ES mapping
- AI 研究助力体育分析
- 硬件设计中与门、或门、非门电路详解
- Vue 艺术字体下载、设置
- c语言中短整形字节,C语言中各种整型类型所占字节数
- VVC 算法描述 R2002(VTM 9) IBC部分 机器翻译
热门文章
- 直播间炒不起氛围?观众迟迟不下单?千万别忽略了助播的重要性!
- 对于年龄偏小的孩子来讲,学习的好坏可能完全取决于家长
- 计算机web国二考试题库,全国计算机二级考试练习题库(含答案)
- android用户界面组件都是放置在,Android开发工程师第十章 节 用户界面高级组件.ppt...
- 狗狗自带餐具能有多可爱
- java 中文分词转拼音_Java实现将汉字转化为汉语拼音的方法
- 博士申请 | 新加坡科技设计大学段凌杰教授招收人工智能全奖博士生
- JS中Math对象的方法
- 牢记这一波CAD快捷键,制图速度坐火箭!
- 曾舜晞代言全面迸发!海信全面屏哈利手机发布