需求

微服务项目:尚融宝(58)(核心业务流程:提现和还款(1))_vue.js

放款成功后,借款人可以申请提现。

参考《汇付宝商户账户技术文档》3.15用户申请提现


微服务项目:尚融宝(58)(核心业务流程:提现和还款(1))_javascript_02

一、前端整合

pages/user/withdraw.vue

<script>
export default {
data() {
return {
fetchAmt: 0,
}
},

methods: {
commitWithdraw() {
this.$alert(
'<div style="size: 18px;color: red;">您即将前往汇付宝提现</div>',
'前往汇付宝资金托管平台',
{
dangerouslyUseHTMLString: true,
confirmButtonText: '立即前往',
callback: (action) => {
if (action === 'confirm') {
this.$axios
.$post(
'/api/core/userAccount/auth/commitWithdraw/' + this.fetchAmt
)
.then((response) => {
document.write(response.data.formStr)
})
}
},
}
)
},
},
}
</script>

二、提现接口

1、Controller

UserAccountController

@ApiOperation("用户提现")
@PostMapping("/auth/commitWithdraw/{fetchAmt}")
public R commitWithdraw(
@ApiParam(value = "金额", required = true)
@PathVariable BigDecimal fetchAmt, HttpServletRequest request) {

String token = request.getHeader("token");
Long userId = JwtUtils.getUserId(token);
String formStr = userAccountService.commitWithdraw(fetchAmt, userId);
return R.ok().data("formStr", formStr);
}

2、Service

接口:UserAccountService

String commitWithdraw(BigDecimal fetchAmt, Long userId);

 实现:UserAccountServiceImpl

@Resource
private UserBindService userBindService;

@Resource
private UserAccountService userAccountService;

@Override
public String commitWithdraw(BigDecimal fetchAmt, Long userId) {

//账户可用余额充足:当前用户的余额 >= 当前用户的提现金额
BigDecimal amount = userAccountService.getAccount(userId);//获取当前用户的账户余额
Assert.isTrue(amount.doubleValue() >= fetchAmt.doubleValue(),
ResponseEnum.NOT_SUFFICIENT_FUNDS_ERROR);


String bindCode = userBindService.getBindCodeByUserId(userId);

Map<String, Object> paramMap = new HashMap<>();
paramMap.put("agentId", HfbConst.AGENT_ID);
paramMap.put("agentBillNo", LendNoUtils.getWithdrawNo());
paramMap.put("bindCode", bindCode);
paramMap.put("fetchAmt", fetchAmt);
paramMap.put("feeAmt", new BigDecimal(0));
paramMap.put("notifyUrl", HfbConst.WITHDRAW_NOTIFY_URL);
paramMap.put("returnUrl", HfbConst.WITHDRAW_RETURN_URL);
paramMap.put("timestamp", RequestHelper.getTimestamp());
String sign = RequestHelper.getSign(paramMap);
paramMap.put("sign", sign);

//构建自动提交表单
String formStr = FormHelper.buildForm(HfbConst.WITHDRAW_URL, paramMap);
return formStr;
}

三、回调接口

1、Controller

UserAccountController

@ApiOperation("用户提现异步回调")
@PostMapping("/notifyWithdraw")
public String notifyWithdraw(HttpServletRequest request) {
Map<String, Object> paramMap = RequestHelper.switchMap(request.getParameterMap());
log.info("提现异步回调:" + JSON.toJSONString(paramMap));

//校验签名
if(RequestHelper.isSignEquals(paramMap)) {
//提现成功交易
if("0001".equals(paramMap.get("resultCode"))) {
userAccountService.notifyWithdraw(paramMap);
} else {
log.info("提现异步回调充值失败:" + JSON.toJSONString(paramMap));
return "fail";
}
} else {
log.info("提现异步回调签名错误:" + JSON.toJSONString(paramMap));
return "fail";
}
return "success";
}

2、Service

接口:UserAccountService

 void notifyWithdraw(Map<String, Object> paramMap);

实现:UserAccountServiceImpl 

@Transactional(rollbackFor = Exception.class)
@Override
public void notifyWithdraw(Map<String, Object> paramMap) {

log.info("提现成功");
String agentBillNo = (String)paramMap.get("agentBillNo");
boolean result = transFlowService.isSaveTransFlow(agentBillNo);
if(result){
log.warn("幂等性返回");
return;
}

String bindCode = (String)paramMap.get("bindCode");
String fetchAmt = (String)paramMap.get("fetchAmt");

//根据用户账户修改账户金额
baseMapper.updateAccount(bindCode, new BigDecimal("-" + fetchAmt), new BigDecimal(0));

//增加交易流水
TransFlowBO transFlowBO = new TransFlowBO(
agentBillNo,
bindCode,
new BigDecimal(fetchAmt),
TransTypeEnum.WITHDRAW,
"提现");
transFlowService.saveTransFlow(transFlowBO);
}

今日分享 

约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍​匈牙利​​​数学家​​​、​​计算机科学家​​​、​​物理学家​​,是20世纪最重要的数学家之一。 [1-4]     冯·诺依曼是​​罗兰大学​​数学​​博士​​,是现代​​计算机​​、​​博弈论​​、​​核武器​​和​​生化武器​​等领域内的科学全才之一,被后人称为“现代计算机之父”、“​​博弈论​​之父”。 [2-5]    

冯·诺依曼先后执教于​柏林大学​​和​​汉堡大学​​,1930年前往美国,后入美国籍。 [2-3]  历任​​普林斯顿大学​​教授、​​普林斯顿高等研究院​​教授,入选​​美国原子能委员会​​会员、​​美国国家科学院​​院士。 [2-6]     早期以算子理论、​​共振论​​、​​量子理论​​、​​集合论​​等方面的研究闻名,开创了冯·诺依曼​​代数​​。 [2-6]      冯·诺依曼​​第二次世界大战​​期间曾参与​​曼哈顿计划​​,为第一颗​​原子弹​​的研制作出了贡献。 [4]  [7] 

冯·诺依曼1944年与​奥斯卡·摩根斯特恩​合著《博弈论与经济行为》,是博弈论学科的奠基性著作。 [2-4]    [8]  晚年,冯·诺依曼转向研究自动机理论,著有对人脑和计算机系统进行精确分析的著作《​​计算机与人脑​​》(1958年),为研制​​电子数字计算机​​提供了基础性的方案。 [2-4]    其余主要著作有《​​量子力学​​的数学基础》(1926年)、《​​经典力学​​的算子方法》、《连续几何》(1960)等。