实名认证需要补充省、市、及开户行

This commit is contained in:
Tankaikai 2025-03-20 15:03:15 +08:00
parent 1e3e9ad7c0
commit 428d7c5213
6 changed files with 96 additions and 26 deletions

View File

@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Map; import java.util.Map;
/** /**
@ -153,7 +154,7 @@ public class AppController {
@ResponseBody @ResponseBody
@Debounce(interval = 60000, value = "#auth.certNum") @Debounce(interval = 60000, value = "#auth.certNum")
public Result realNameAuth(@RequestAttribute("userId") Long userId, @RequestBody AuthDTO auth) { public Result realNameAuth(@RequestAttribute("userId") Long userId, @RequestBody AuthDTO auth) {
return realNameAuth(userId, auth.getCertName(), auth.getCertNum(), auth.getAccountNo(), auth.getMobile()); return realNameAuth(userId, auth.getCertName(), auth.getCertNum(), auth.getAccountNo(), auth.getMobile(), auth.getProvince(), auth.getCity(), auth.getBankBranch());
} }
@Login @Login
@ -162,10 +163,13 @@ public class AppController {
@ResponseBody @ResponseBody
@Debounce(interval = 3000, value = "#userId") @Debounce(interval = 3000, value = "#userId")
public Result realNameAuth(@RequestAttribute("userId") Long userId, public Result realNameAuth(@RequestAttribute("userId") Long userId,
@RequestParam String certName, @RequestParam String certName,
@RequestParam String certNum, @RequestParam String certNum,
@RequestParam String accountNo, @RequestParam String accountNo,
@RequestParam String mobile @RequestParam String mobile,
@RequestParam String province,
@RequestParam String city,
@RequestParam String bankBranch
) { ) {
// 判断身份证号是否有空格 // 判断身份证号是否有空格
if (certNum.contains(" ")) { if (certNum.contains(" ")) {
@ -177,7 +181,17 @@ public class AppController {
if (StrUtil.isAllBlank(certName, certNum, accountNo, mobile)) { if (StrUtil.isAllBlank(certName, certNum, accountNo, mobile)) {
return Result.error("真实姓名、身份证号码、银行卡号、银行预留手机号缺一不可"); return Result.error("真实姓名、身份证号码、银行卡号、银行预留手机号缺一不可");
} }
if (StrUtil.isAllBlank(province, city, bankBranch)) {
return Result.error("省、市、开户行缺一不可");
}
// 已完成实名认证补充开户行等信息
if (certNum.contains("*") || accountNo.contains("*") || mobile.contains("*")) { if (certNum.contains("*") || accountNo.contains("*") || mobile.contains("*")) {
userInfoService.update(null, Wrappers.<UserInfo>lambdaUpdate()
.set(UserInfo::getProvince, province)
.set(UserInfo::getCity, city)
.set(UserInfo::getBankBranch, bankBranch)
.set(UserInfo::getUpdateTime, new Date())
.eq(UserInfo::getUserId, userId));
return Result.success(); return Result.success();
} }
int count = userInfoService.count(Wrappers.<UserInfo>lambdaQuery() int count = userInfoService.count(Wrappers.<UserInfo>lambdaQuery()
@ -206,6 +220,9 @@ public class AppController {
userInfo.setAccountNo(accountNo); userInfo.setAccountNo(accountNo);
userInfo.setMobile(mobile); userInfo.setMobile(mobile);
userInfo.setBankName(resp.getBankName()); userInfo.setBankName(resp.getBankName());
userInfo.setProvince(province);
userInfo.setCity(city);
userInfo.setBankBranch(bankBranch);
userInfo.setRespJson(resp.getRespJson()); userInfo.setRespJson(resp.getRespJson());
userInfo.setUpdateTime(DateUtil.date()); userInfo.setUpdateTime(DateUtil.date());
boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId())); boolean update = userInfoService.update(userInfo, new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId).eq(UserInfo::getId, userInfo.getId()));

View File

@ -21,4 +21,11 @@ public class AuthDTO {
@NotBlank @NotBlank
private String mobile; private String mobile;
@NotBlank
private String province;
@NotBlank
private String city;
@NotBlank
private String bankBranch;
} }

View File

@ -56,6 +56,21 @@ public class UserInfo implements Serializable {
*/ */
private String bankName; private String bankName;
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
* 开户行
*/
private String bankBranch;
/** /**
* 四要素接口响应报文 * 四要素接口响应报文
*/ */

View File

@ -79,6 +79,21 @@ public class CashOut implements Serializable {
*/ */
private String bankName; private String bankName;
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
* 开户行
*/
private String bankBranch;
/** /**
* 订单编号 * 订单编号
*/ */

View File

@ -543,6 +543,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
String bankName; String bankName;
String idCardNo = null; String idCardNo = null;
Set<String> withdrawCheckNameSet = new HashSet<>(); Set<String> withdrawCheckNameSet = new HashSet<>();
UserInfo userDetailInfo = null;
if (isSys) { if (isSys) {
SysUserEntity sysUserEntity = sysUserService.getById(userId); SysUserEntity sysUserEntity = sysUserService.getById(userId);
Msg msg1 = msgDao.findByPhoneAndCode(sysUserEntity.getMobile(), msg); Msg msg1 = msgDao.findByPhoneAndCode(sysUserEntity.getMobile(), msg);
@ -565,13 +566,19 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
throw new SqxException("账号已被禁用,请联系客服处理!"); throw new SqxException("账号已被禁用,请联系客服处理!");
} }
UserInfo userDetailInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId)); userDetailInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId));
if (userDetailInfo == null || StrUtil.isBlank(userDetailInfo.getCertName())) { if (userDetailInfo == null || StrUtil.isBlank(userDetailInfo.getCertName())) {
return Result.error(9991, "请先实名认证!"); return Result.error(9991, "请先实名认证!");
} }
if (StrUtil.isEmpty(userDetailInfo.getAccountNo()) || StrUtil.isEmpty(userDetailInfo.getMobile())) { if (StrUtil.isEmpty(userDetailInfo.getAccountNo()) || StrUtil.isEmpty(userDetailInfo.getMobile())) {
return Result.error(9991, "需重新完成实名认证后才可提现!"); return Result.error(9991, "需重新完成实名认证后才可提现!");
} }
if (StrUtil.isEmpty(userDetailInfo.getProvince())
|| StrUtil.isEmpty(userDetailInfo.getCity())
|| StrUtil.isEmpty(userDetailInfo.getBankBranch())
) {
return Result.error(9991, "请补充实名认证信息后提现!");
}
if (StrUtil.isEmpty(userDetailInfo.getBankName()) && StrUtil.isNotEmpty(userDetailInfo.getRespJson())) { if (StrUtil.isEmpty(userDetailInfo.getBankName()) && StrUtil.isNotEmpty(userDetailInfo.getRespJson())) {
userDetailInfo.setBankName(getBankName(userDetailInfo.getRespJson())); userDetailInfo.setBankName(getBankName(userDetailInfo.getRespJson()));
userInfoService.updateById(userDetailInfo); userInfoService.updateById(userDetailInfo);
@ -611,6 +618,11 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
cashOut.setZhifubao(alipayAccount); cashOut.setZhifubao(alipayAccount);
cashOut.setZhifubaoName(alipayName); cashOut.setZhifubaoName(alipayName);
cashOut.setBankName(bankName); cashOut.setBankName(bankName);
if (userDetailInfo != null) {
cashOut.setProvince(userDetailInfo.getProvince());
cashOut.setCity(userDetailInfo.getCity());
cashOut.setBankBranch(userDetailInfo.getBankBranch());
}
cashOut.setState(0); cashOut.setState(0);
cashOut.setRate(0.00); cashOut.setRate(0.00);
cashOut.setCreateAt(DateUtil.now()); cashOut.setCreateAt(DateUtil.now());
@ -639,7 +651,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
try { try {
wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString())); wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()));
cashOut.setStatus(4); cashOut.setStatus(4);
BaseResp baseResp = wuyouPay.extractOrder(isAlipay, outOrderNo, cashOut.getUserId(), false, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName()); BaseResp baseResp = wuyouPay.extractOrder(isAlipay, outOrderNo, cashOut.getUserId(), false, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName(), null, null, null);
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) { if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
sysUserMoneyDetails.setContent("成功提现:" + money); sysUserMoneyDetails.setContent("成功提现:" + money);
cashOut.setState(1); cashOut.setState(1);
@ -691,7 +703,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
try { try {
wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString())); wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()));
cashOut.setStatus(4); cashOut.setStatus(4);
BaseResp baseResp = wuyouPay.extractOrder(isAlipay, outOrderNo, cashOut.getUserId(), true, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName()); BaseResp baseResp = wuyouPay.extractOrder(isAlipay, outOrderNo, cashOut.getUserId(), true, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName(), cashOut.getProvince(), cashOut.getCity(), cashOut.getBankBranch());
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) { if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
userMoneyDetails.setContent("成功提现:" + money); userMoneyDetails.setContent("成功提现:" + money);
cashOut.setState(1); cashOut.setState(1);
@ -848,7 +860,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
entity.setOrderNumber(outOrderNo); entity.setOrderNumber(outOrderNo);
} }
// 执行提现操作 // 执行提现操作
BaseResp baseResp = wuyouPay.extractOrderExt(isHistoryData, true, entity.getOrderNumber(), entity.getUserId(), isUser, entity.getMoney(), entity.getZhifubao(), entity.getZhifubaoName(), entity.getBankName()); BaseResp baseResp = wuyouPay.extractOrderExt(isHistoryData, true, entity.getOrderNumber(), entity.getUserId(), isUser, entity.getMoney(), entity.getZhifubao(), entity.getZhifubaoName(), entity.getBankName(), StrUtil.emptyToDefault(entity.getProvince(), "1"), StrUtil.emptyToDefault(entity.getCity(), "1"), StrUtil.emptyToDefault(entity.getBankBranch(), "1"));
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) { if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
entity.setState(1); entity.setState(1);
} else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) { } else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) {

View File

@ -125,7 +125,7 @@ public class WuyouPay {
} }
boolean ret = money.compareTo(new BigDecimal(info.getValue())) <= 0; boolean ret = money.compareTo(new BigDecimal(info.getValue())) <= 0;
if(!ret){ if (!ret) {
throw new ValidateException("单次提现超额"); throw new ValidateException("单次提现超额");
} }
} }
@ -159,7 +159,7 @@ public class WuyouPay {
* 提现 * 提现
* *
* @param outOrderNo 提现订单号 * @param outOrderNo 提现订单号
* @param userId * @param userId 用户ID
* @param isUser 是否普通用户 普通用户-true代理用户-false * @param isUser 是否普通用户 普通用户-true代理用户-false
* @param amount 提现金额 * @param amount 提现金额
* @param account 收款账户支付宝账号 / 银行卡号 * @param account 收款账户支付宝账号 / 银行卡号
@ -167,8 +167,8 @@ public class WuyouPay {
* @param bankName 开户行支付宝提现可以不用传 * @param bankName 开户行支付宝提现可以不用传
*/ */
public BaseResp extractOrder(boolean isAlipay, String outOrderNo, Long userId, boolean isUser, String amount, String account, public BaseResp extractOrder(boolean isAlipay, String outOrderNo, Long userId, boolean isUser, String amount, String account,
String userName, String bankName) { String userName, String bankName, String province, String city, String bankBranch) {
return extractOrderExt(isAlipay, false, outOrderNo, userId, isUser, amount, account, userName, bankName); return extractOrderExt(isAlipay, false, outOrderNo, userId, isUser, amount, account, userName, bankName, province, city, bankBranch);
} }
/** /**
@ -178,19 +178,19 @@ public class WuyouPay {
* @param userName 支付宝名称 * @param userName 支付宝名称
*/ */
/** /**
* @param isAlipay 是否是支付宝提现true是 * @param isAlipay 是否是支付宝提现true是
* @param ignoreConfig 是否忽略配置开关true忽略 * @param ignoreConfig 是否忽略配置开关true忽略
* @param outOrderNo 提现订单号 * @param outOrderNo 提现订单号
* @param userId * @param userId 用户ID
* @param isUser 是否普通用户 普通用户-true代理用户-false * @param isUser 是否普通用户 普通用户-true代理用户-false
* @param amount 提现金额 * @param amount 提现金额
* @param account 收款账户支付宝账号 / 银行卡号 * @param account 收款账户支付宝账号 / 银行卡号
* @param userName 真实姓名 / 用户名 * @param userName 真实姓名 / 用户名
* @param bankName 开户行支付宝提现可以不用传 * @param bankName 开户行支付宝提现可以不用传
* @return * @return
*/ */
public BaseResp extractOrderExt(boolean isAlipay, boolean ignoreConfig, String outOrderNo, Long userId, boolean isUser, String amount, String account, public BaseResp extractOrderExt(boolean isAlipay, boolean ignoreConfig, String outOrderNo, Long userId, boolean isUser, String amount, String account,
String userName, String bankName) { String userName, String bankName, String province, String city, String bankBranch) {
if (!ignoreConfig) { if (!ignoreConfig) {
String payConfig = commonInfoService.findOne(927).getValue(); String payConfig = commonInfoService.findOne(927).getValue();
if (!"1".equals(payConfig)) { if (!"1".equals(payConfig)) {
@ -207,12 +207,16 @@ public class WuyouPay {
params.put("bank_account_name", userName); params.put("bank_account_name", userName);
if (isAlipay) { if (isAlipay) {
params.put("bank_name", "1"); params.put("bank_name", "1");
params.put("bank_branch", "1");
params.put("province", "1");
params.put("city", "1");
} else { } else {
params.put("bank_name", isUser ? bankName : "1"); params.put("bank_name", isUser ? bankName : "1");
params.put("bank_branch", bankBranch);
params.put("province", province);
params.put("city", city);
} }
params.put("bank_branch", "1");
params.put("province", "1");
params.put("city", "1");
params.put("notify_url", extractNotifyUrl); params.put("notify_url", extractNotifyUrl);
String sign = Encrypt.getParamsSign(params); String sign = Encrypt.getParamsSign(params);