|
|
|
|
@@ -7,6 +7,8 @@ import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
@@ -184,8 +186,9 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
titles.add("编号");
|
|
|
|
|
titles.add("用户类型");
|
|
|
|
|
titles.add("用户名称");
|
|
|
|
|
titles.add("支付宝账号");
|
|
|
|
|
titles.add("支付宝名称");
|
|
|
|
|
titles.add("收款账号");
|
|
|
|
|
titles.add("真实姓名");
|
|
|
|
|
titles.add("开户银行");
|
|
|
|
|
titles.add("提现金币");
|
|
|
|
|
titles.add("状态");
|
|
|
|
|
titles.add("拒绝原因");
|
|
|
|
|
@@ -206,6 +209,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
}
|
|
|
|
|
row.add(cashOut.getZhifubao());
|
|
|
|
|
row.add(cashOut.getZhifubaoName());
|
|
|
|
|
row.add(StrUtil.nullToDefault(cashOut.getBankName(), ""));
|
|
|
|
|
row.add(cashOut.getMoney());
|
|
|
|
|
|
|
|
|
|
if (cashOut.getState() == -1) {
|
|
|
|
|
@@ -391,6 +395,18 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
// UserMoney userMoney=userMoneyService.selectUserMoneyByUserId(userId);
|
|
|
|
|
InviteMoney inviteMoney = inviteMoneyService.selectInviteMoneyByUserId(userId);
|
|
|
|
|
UserEntity userEntity = userService.selectUserById(userId);
|
|
|
|
|
UserInfo userInfo = userInfoService.getByUserId(userId);
|
|
|
|
|
if (userInfo == null) {
|
|
|
|
|
return Result.success("未完成实名认证,请先完成实名认证再进行提现操作!");
|
|
|
|
|
}
|
|
|
|
|
if (StrUtil.isNotEmpty(userInfo.getCertName())
|
|
|
|
|
&& StrUtil.isNotEmpty(userInfo.getCertNo())
|
|
|
|
|
&& StrUtil.isNotEmpty(userInfo.getAccountNo())
|
|
|
|
|
&& StrUtil.isNotEmpty(userInfo.getMobile())
|
|
|
|
|
) {
|
|
|
|
|
} else {
|
|
|
|
|
return Result.success("未完成实名认证,请先完成实名认证再进行提现操作!");
|
|
|
|
|
}
|
|
|
|
|
// 提现判断金币是否足够 金币=提现金币+手续费
|
|
|
|
|
Double moneySum = AmountCalUtils.add(new BigDecimal(money), new BigDecimal(mul)).doubleValue();
|
|
|
|
|
// 用户金币足够
|
|
|
|
|
@@ -412,8 +428,8 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
userMoneyDetailsService.save(userMoneyDetails);
|
|
|
|
|
CashOut cashOut = new CashOut();
|
|
|
|
|
cashOut.setState(0);
|
|
|
|
|
cashOut.setZhifubao(userEntity.getZhiFuBao());
|
|
|
|
|
cashOut.setZhifubaoName(userEntity.getZhiFuBaoName());
|
|
|
|
|
cashOut.setZhifubao(userInfo.getAccountNo());
|
|
|
|
|
cashOut.setZhifubaoName(userInfo.getCertName());
|
|
|
|
|
cashOut.setMoney(money.toString());
|
|
|
|
|
cashOut.setCreateAt(sdf.format(new Date()));
|
|
|
|
|
cashOut.setUserId(userEntity.getUserId());
|
|
|
|
|
@@ -502,6 +518,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
|
|
|
|
|
String alipayAccount;
|
|
|
|
|
String alipayName;
|
|
|
|
|
String bankName;
|
|
|
|
|
Set<String> withdrawCheckNameSet = new HashSet<>();
|
|
|
|
|
if (isSys) {
|
|
|
|
|
SysUserEntity sysUserEntity = sysUserService.getById(userId);
|
|
|
|
|
@@ -514,15 +531,13 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
}
|
|
|
|
|
alipayAccount = sysUserEntity.getZhiFuBao();
|
|
|
|
|
alipayName = sysUserEntity.getZhiFuBaoName();
|
|
|
|
|
bankName = null;
|
|
|
|
|
withdrawCheckNameSet.add(alipayName);
|
|
|
|
|
} else {
|
|
|
|
|
UserEntity userInfo = userService.queryByUserId(userId);
|
|
|
|
|
if (userInfo.getStatus().equals(0)) {
|
|
|
|
|
return Result.error(9999, "账号不存在!");
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isBlank(userInfo.getZhiFuBao()) || StringUtils.isBlank(userInfo.getZhiFuBaoName())) {
|
|
|
|
|
return Result.error(9999, "请先绑定支付宝账号!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserInfo userDetailInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, userId));
|
|
|
|
|
if (userDetailInfo == null || StrUtil.isBlank(userDetailInfo.getCertName())) {
|
|
|
|
|
@@ -531,15 +546,18 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
if (StrUtil.isEmpty(userDetailInfo.getAccountNo()) || StrUtil.isEmpty(userDetailInfo.getMobile())) {
|
|
|
|
|
return Result.error(9991, "需重新完成实名认证后才可提现!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!userInfo.getZhiFuBaoName().equals(userDetailInfo.getCertName())) {
|
|
|
|
|
return Result.error(500, "支付宝和实名姓名不符无法提现!");
|
|
|
|
|
if (StrUtil.isEmpty(userDetailInfo.getBankName()) && StrUtil.isNotEmpty(userDetailInfo.getRespJson())) {
|
|
|
|
|
userDetailInfo.setBankName(getBankName(userDetailInfo.getRespJson()));
|
|
|
|
|
userInfoService.updateById(userDetailInfo);
|
|
|
|
|
}
|
|
|
|
|
alipayAccount = userInfo.getZhiFuBao();
|
|
|
|
|
alipayName = userInfo.getZhiFuBaoName();
|
|
|
|
|
String certName = userDetailInfo.getCertName();
|
|
|
|
|
if (StrUtil.isEmpty(userDetailInfo.getBankName())) {
|
|
|
|
|
userInfoService.removeById(userDetailInfo.getId());
|
|
|
|
|
return Result.error(9991, "需重新完成实名认证后才可提现!");
|
|
|
|
|
}
|
|
|
|
|
alipayAccount = userDetailInfo.getAccountNo();
|
|
|
|
|
alipayName = userDetailInfo.getCertName();
|
|
|
|
|
bankName = userDetailInfo.getBankName();
|
|
|
|
|
withdrawCheckNameSet.add(alipayName);
|
|
|
|
|
withdrawCheckNameSet.add(certName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 最低提现金额
|
|
|
|
|
@@ -560,7 +578,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
|
|
|
|
|
cashOut.setZhifubao(alipayAccount);
|
|
|
|
|
cashOut.setZhifubaoName(alipayName);
|
|
|
|
|
|
|
|
|
|
cashOut.setBankName(bankName);
|
|
|
|
|
cashOut.setState(0);
|
|
|
|
|
cashOut.setRate(0.00);
|
|
|
|
|
cashOut.setCreateAt(DateUtil.now());
|
|
|
|
|
@@ -588,7 +606,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
}
|
|
|
|
|
if (wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()))) {
|
|
|
|
|
cashOut.setStatus(4);
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), false, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), false, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
|
|
|
|
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
|
|
|
|
sysUserMoneyDetails.setContent("成功提现:" + money);
|
|
|
|
|
cashOut.setState(1);
|
|
|
|
|
@@ -632,7 +650,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
} else {
|
|
|
|
|
if (wuyouPay.checkCanCash(userId, WithdrawTypeEnum.MANUAL, new BigDecimal(money.toString()))) {
|
|
|
|
|
cashOut.setStatus(4);
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), true, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrder(outOrderNo, cashOut.getUserId(), true, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName(), cashOut.getBankName());
|
|
|
|
|
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
|
|
|
|
userMoneyDetails.setContent("成功提现:" + money);
|
|
|
|
|
cashOut.setState(1);
|
|
|
|
|
@@ -654,6 +672,20 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
return Result.success("提现成功,将在三个工作日内到账,请耐心等待!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getBankName(String respJson) {
|
|
|
|
|
JSONObject ret = JSONUtil.parseObj(respJson);
|
|
|
|
|
JSONObject result = ret.getJSONObject("result");
|
|
|
|
|
Integer errorCode = ret.getInt("error_code");
|
|
|
|
|
String respCode = result.getStr("respCode");
|
|
|
|
|
if (errorCode == 0 && "0".equals(respCode)) {
|
|
|
|
|
boolean isExist = result.containsKey("bancardInfor");
|
|
|
|
|
if (isExist) {
|
|
|
|
|
return result.getJSONObject("bancardInfor").getStr("bankName");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public PageUtils auditPage(Map<String, Object> params) {
|
|
|
|
|
PageHelper.startPage(ParamPageUtils.getPageNum(params), ParamPageUtils.getPageSize(params));
|
|
|
|
|
@@ -672,6 +704,9 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
if (StrUtil.isNotBlank(cashOut.getZhifubao())) {
|
|
|
|
|
queryWrapper.like(CashOut::getZhifubao, cashOut.getZhifubao());
|
|
|
|
|
}
|
|
|
|
|
if (StrUtil.isNotBlank(cashOut.getBankName())) {
|
|
|
|
|
queryWrapper.like(CashOut::getBankName, cashOut.getBankName());
|
|
|
|
|
}
|
|
|
|
|
if (cashOut.getUserType() != null) {
|
|
|
|
|
queryWrapper.eq(CashOut::getUserType, cashOut.getUserType());
|
|
|
|
|
}
|
|
|
|
|
@@ -747,6 +782,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
if (userEntity == null) {
|
|
|
|
|
throw new SqxException("提现用户信息不存在!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
SysUserEntity sysUserEntity = sysUserService.getById(entity.getUserId());
|
|
|
|
|
if (sysUserEntity == null) {
|
|
|
|
|
@@ -758,6 +794,11 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
backCashAmount(entity);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
boolean isHistoryData = false;
|
|
|
|
|
// 历史数据使用原有的提现方式,新数据再进行银行卡提现
|
|
|
|
|
if (isAgree == 1 && isUser && StrUtil.isBlank(cashOut.getBankName())) {
|
|
|
|
|
isHistoryData = true;
|
|
|
|
|
}
|
|
|
|
|
entity.setState(4);
|
|
|
|
|
baseMapper.update(entity, new LambdaQueryWrapper<CashOut>().eq(CashOut::getUserId, entity.getUserId()).eq(CashOut::getId, entity.getId()));
|
|
|
|
|
if (StrUtil.isBlank(entity.getOrderNumber())) {
|
|
|
|
|
@@ -765,20 +806,20 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
|
|
|
|
|
entity.setOrderNumber(outOrderNo);
|
|
|
|
|
}
|
|
|
|
|
// 执行提现操作
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrderForAudit(entity.getOrderNumber(), entity.getUserId(), isUser, entity.getMoney(), entity.getZhifubao(), entity.getZhifubaoName());
|
|
|
|
|
BaseResp baseResp = wuyouPay.extractOrderForAudit(isHistoryData, entity.getOrderNumber(), entity.getUserId(), isUser, entity.getMoney(), entity.getZhifubao(), entity.getZhifubaoName(), entity.getBankName());
|
|
|
|
|
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
|
|
|
|
entity.setState(1);
|
|
|
|
|
} else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) {
|
|
|
|
|
entity.setState(2);
|
|
|
|
|
if (baseResp.getErrorMsg().contains("收款人账户号出款属性不匹配")) {
|
|
|
|
|
entity.setRefund("提现失败,请检查支付宝账号与收款人姓名后,重试。");
|
|
|
|
|
entity.setRefund("提现失败,请检查收款账号与收款人姓名后重试。");
|
|
|
|
|
} else {
|
|
|
|
|
entity.setRefund(baseResp.getErrorMsg());
|
|
|
|
|
}
|
|
|
|
|
backCashAmount(entity);
|
|
|
|
|
} else if (StringUtils.isNotBlank(baseResp.getMsg())) {
|
|
|
|
|
entity.setState(2);
|
|
|
|
|
entity.setRefund("提现失败,请检查支付宝账号与收款人姓名后,重试。");
|
|
|
|
|
entity.setRefund("提现失败,请检查收款账号与收款人姓名后重试。");
|
|
|
|
|
backCashAmount(entity);
|
|
|
|
|
}
|
|
|
|
|
updateByUserId(entity);
|
|
|
|
|
|