|
@@ -211,67 +211,64 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public HttpResponseResult<UserAccountRecord> accountChange(Long recordId, PostStatusEnum postStatus) {
|
|
|
- if (null == postStatus || null == recordId
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecord record, PostStatusEnum postStatus) {
|
|
|
+ if (null == postStatus || null == record
|
|
|
|| (!PostStatusEnum.RECORDED.equals(postStatus) && !PostStatusEnum.CANCEL.equals(postStatus))) {
|
|
|
- throw new BizException("入账状态变更, 参数异常: recordId is {} postStatus is {}", recordId, postStatus.getCode());
|
|
|
- }
|
|
|
- UserAccountRecordVo detail = userAccountRecordService.detail(recordId);
|
|
|
- if (null == detail) {
|
|
|
- throw new BizException("入账状态变更, 未找到记录信息: recordId is {} postStatus is {}", recordId, postStatus.getCode());
|
|
|
+ throw new BizException("入账状态变更, 参数异常: record is {} postStatus is {}", JSONObject.toJSONString(record), postStatus.getCode());
|
|
|
}
|
|
|
- if (!PostStatusEnum.WAIT.equals(detail.getPostStatus())
|
|
|
- && !PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
|
|
|
+ if (!PostStatusEnum.WAIT.equals(record.getPostStatus())
|
|
|
+ && !PostStatusEnum.FROZEN.equals(record.getPostStatus())) {
|
|
|
return HttpResponseResult.succeed();
|
|
|
}
|
|
|
- detail.setPostStatus(postStatus);
|
|
|
+ record.setPostStatus(postStatus);
|
|
|
HttpResponseResult<UserAccountRecord> res = DistributedLock.of(redissonClient)
|
|
|
- .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(recordId)
|
|
|
- , this::doAccountChange, detail, 10L);
|
|
|
+ .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(record.getAccountId())
|
|
|
+ , this::doAccountChange, record, 10L);
|
|
|
if (null != res) {
|
|
|
return res;
|
|
|
} else {
|
|
|
- throw new BizException("记录变更-账户记录变更失败: param is {}", JSONObject.toJSONString(detail));
|
|
|
+ throw new BizException("记录变更-账户记录变更失败: param is {}", JSONObject.toJSONString(record));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecord param) {
|
|
|
//这里需要双重判断,这一次是锁内判断
|
|
|
- UserAccountRecordVo detail = userAccountRecordService.detail(param.getId());
|
|
|
- if (!PostStatusEnum.WAIT.equals(detail.getPostStatus())
|
|
|
- && !PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
|
|
|
+ UserAccountRecord old = userAccountRecordService.getById(param.getId());
|
|
|
+ if (!PostStatusEnum.WAIT.equals(old.getPostStatus())
|
|
|
+ && !PostStatusEnum.FROZEN.equals(old.getPostStatus())) {
|
|
|
return HttpResponseResult.succeed();
|
|
|
}
|
|
|
- detail.setPostStatus(detail.getPostStatus());
|
|
|
//待入账
|
|
|
- if (PostStatusEnum.WAIT.equals(detail.getPostStatus())) {
|
|
|
- if (PostStatusEnum.RECORDED.equals(detail.getPostStatus())) {
|
|
|
+ if (PostStatusEnum.WAIT.equals(old.getPostStatus())) {
|
|
|
+ if (PostStatusEnum.RECORDED.equals(param.getPostStatus())) {
|
|
|
//正常入账
|
|
|
- baseMapper.changeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
|
|
|
+ baseMapper.changeAccount(old.getAccountId(), old.getTransAmount(), old.getInOrOut().getCode());
|
|
|
} else if (PostStatusEnum.CANCEL.equals(param.getPostStatus())) {
|
|
|
//取消入账
|
|
|
}
|
|
|
- } else if (PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
|
|
|
+ } else if (PostStatusEnum.FROZEN.equals(old.getPostStatus())) {
|
|
|
if (PostStatusEnum.RECORDED.equals(param.getPostStatus())) {
|
|
|
//冻结后正常入账
|
|
|
- baseMapper.frozenDeductChangeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
|
|
|
+ baseMapper.frozenDeductChangeAccount(old.getAccountId(), old.getTransAmount(), old.getInOrOut().getCode());
|
|
|
} else if (PostStatusEnum.CANCEL.equals(param.getPostStatus())) {
|
|
|
//冻结后取消入账
|
|
|
- baseMapper.frozenBackChangeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
|
|
|
+ baseMapper.frozenBackChangeAccount(old.getAccountId(), old.getTransAmount(), old.getInOrOut().getCode());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- UserAccountVo accountVo = detail(detail.getAccountId());
|
|
|
+ UserAccountVo accountVo = detail(old.getAccountId());
|
|
|
if (accountVo.getAmountTotal().doubleValue() < 0
|
|
|
|| accountVo.getAmountUsable().doubleValue() < 0 || accountVo.getAmountFrozen().doubleValue() < 0) {
|
|
|
throw new BizException("账户变更失败");
|
|
|
}
|
|
|
//插入账户变更记录
|
|
|
- detail.setAccountBalance(accountVo.getAmountUsable());
|
|
|
- detail.setUpdateTime(new Date());
|
|
|
- userAccountRecordService.updateById(detail);
|
|
|
- return HttpResponseResult.succeed(detail);
|
|
|
+ old.setPostStatus(param.getPostStatus());
|
|
|
+ old.setAccountBalance(accountVo.getAmountUsable());
|
|
|
+ old.setUpdateTime(new Date());
|
|
|
+ userAccountRecordService.updateById(old);
|
|
|
+ return HttpResponseResult.succeed(old);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -432,7 +429,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
|
|
|
return;
|
|
|
}
|
|
|
for (UserAccountRecord userAccount : list) {
|
|
|
- this.accountChange(userAccount.getId(),shareDto.getStatus());
|
|
|
+ this.accountChange(userAccount,shareDto.getStatus());
|
|
|
}
|
|
|
}
|
|
|
|