|
@@ -42,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
@@ -213,40 +212,50 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
|
|
if (useDecimal.compareTo(totalAmount) < 0) {
|
|
if (useDecimal.compareTo(totalAmount) < 0) {
|
|
return HttpResponseResult.failed("账户余额不足");
|
|
return HttpResponseResult.failed("账户余额不足");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ int successNum = 0;
|
|
|
|
+ String msg = "执行完成!";
|
|
for (Long id : ids) {
|
|
for (Long id : ids) {
|
|
AuthOperaReq param = new AuthOperaReq();
|
|
AuthOperaReq param = new AuthOperaReq();
|
|
param.setId(id.toString());
|
|
param.setId(id.toString());
|
|
param.setReason(authOperaReq.getReason());
|
|
param.setReason(authOperaReq.getReason());
|
|
param.setPass(authOperaReq.getPass());
|
|
param.setPass(authOperaReq.getPass());
|
|
-
|
|
|
|
|
|
+ param.setUserId(sysUser.getId());
|
|
try {
|
|
try {
|
|
- DistributedLock.of(redissonClient)
|
|
|
|
- .runIfLockCanGet(CacheNameEnum.LOCK_WITHDRAWAL.getRedisKey(id.toString())
|
|
|
|
- , () -> doAuth(param, sysUser), 60L, TimeUnit.SECONDS);
|
|
|
|
|
|
+ HttpResponseResult<UserWithdrawalVo> res = DistributedLock.of(redissonClient)
|
|
|
|
+ .runIfLockToFunction(CacheNameEnum.LOCK_WITHDRAWAL.getRedisKey(id.toString())
|
|
|
|
+ , this::doAuth, param, 10L);
|
|
|
|
+ if (!res.getStatus()) {
|
|
|
|
+ msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:" + res.getMsg();
|
|
|
|
+ return HttpResponseResult.failed(msg);
|
|
|
|
+ } else {
|
|
|
|
+ successNum++;
|
|
|
|
+ }
|
|
} catch (BizException e) {
|
|
} catch (BizException e) {
|
|
- return HttpResponseResult.failed(e.getMessage());
|
|
|
|
|
|
+ msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:" + e.getMessage();
|
|
|
|
+ return HttpResponseResult.failed(msg);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
- return HttpResponseResult.failed("结算失败");
|
|
|
|
|
|
+ msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:结算失败";
|
|
|
|
+ return HttpResponseResult.failed(msg);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return HttpResponseResult.succeed();
|
|
return HttpResponseResult.succeed();
|
|
}
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public void doAuth(AuthOperaReq authOperaReq, SysUser sysUser) {
|
|
|
|
|
|
+ public HttpResponseResult<UserWithdrawalVo> doAuth(AuthOperaReq authOperaReq) {
|
|
UserWithdrawalVo build = detail(Long.parseLong(authOperaReq.getId()));
|
|
UserWithdrawalVo build = detail(Long.parseLong(authOperaReq.getId()));
|
|
if (null == build || !AuthStatusEnum.DOING.equals(build.getAuthStatus())) {
|
|
if (null == build || !AuthStatusEnum.DOING.equals(build.getAuthStatus())) {
|
|
- return;
|
|
|
|
|
|
+ return HttpResponseResult.succeed();
|
|
}
|
|
}
|
|
build.setAuthStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
|
|
build.setAuthStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
|
|
build.setReason(authOperaReq.getReason());
|
|
build.setReason(authOperaReq.getReason());
|
|
- build.setAuthUserId(sysUser.getId());
|
|
|
|
|
|
+ build.setAuthUserId(authOperaReq.getUserId());
|
|
build.setUpdateTime(new Date());
|
|
build.setUpdateTime(new Date());
|
|
build.setAuthTime(new Date());
|
|
build.setAuthTime(new Date());
|
|
|
|
|
|
SysUser withdrawalUser = sysUserService.findUserById(build.getUserId());
|
|
SysUser withdrawalUser = sysUserService.findUserById(build.getUserId());
|
|
|
|
+ HttpResponseResult res = HttpResponseResult.succeed(build);
|
|
if (authOperaReq.getPass()) {
|
|
if (authOperaReq.getPass()) {
|
|
//交易流水号生成
|
|
//交易流水号生成
|
|
Long transNo = idGeneratorService.generatorId("withdrawNo");
|
|
Long transNo = idGeneratorService.generatorId("withdrawNo");
|
|
@@ -262,6 +271,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
|
|
build.setAuthStatus(AuthStatusEnum.DOING);
|
|
build.setAuthStatus(AuthStatusEnum.DOING);
|
|
build.setTradeStatus(TradeStatusEnum.failed);
|
|
build.setTradeStatus(TradeStatusEnum.failed);
|
|
build.setErrorMsg(withdraw.getMsg());
|
|
build.setErrorMsg(withdraw.getMsg());
|
|
|
|
+ res = HttpResponseResult.failed("结算" + authOperaReq.getId() + "失败,失败原因:" + withdraw.getMsg());
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
//审核不通过,账户解冻
|
|
//审核不通过,账户解冻
|
|
@@ -277,6 +287,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
|
|
unpassSend(build.getUserId(), build.getPhone(), authOperaReq.getReason());
|
|
unpassSend(build.getUserId(), build.getPhone(), authOperaReq.getReason());
|
|
}
|
|
}
|
|
updateById(build);
|
|
updateById(build);
|
|
|
|
+ return res;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|