|
@@ -216,33 +216,37 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
|
|
|
|| (!PostStatusEnum.RECORDED.equals(postStatus) && !PostStatusEnum.CANCEL.equals(postStatus))) {
|
|
|
throw new BizException("入账状态变更, 参数异常: recordId is {} postStatus is {}", recordId, postStatus.getCode());
|
|
|
}
|
|
|
- UserAccountRecord param = new UserAccountRecord();
|
|
|
- param.setId(recordId);
|
|
|
- param.setPostStatus(postStatus);
|
|
|
+ UserAccountRecordVo detail = userAccountRecordService.detail(recordId);
|
|
|
+ if (null == detail) {
|
|
|
+ throw new BizException("入账状态变更, 未找到记录信息: recordId is {} postStatus is {}", recordId, postStatus.getCode());
|
|
|
+ }
|
|
|
+ if (!PostStatusEnum.WAIT.equals(detail.getPostStatus())
|
|
|
+ && !PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
|
|
|
+ return HttpResponseResult.succeed();
|
|
|
+ }
|
|
|
+ detail.setPostStatus(postStatus);
|
|
|
HttpResponseResult<UserAccountRecord> res = DistributedLock.of(redissonClient)
|
|
|
.runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(recordId)
|
|
|
- , this::doAccountChange, param, 10L);
|
|
|
+ , this::doAccountChange, detail, 10L);
|
|
|
if (null != res) {
|
|
|
return res;
|
|
|
} else {
|
|
|
- throw new BizException("记录变更-账户记录变更失败: param is {}", JSONObject.toJSONString(param));
|
|
|
+ throw new BizException("记录变更-账户记录变更失败: param is {}", JSONObject.toJSONString(detail));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecord param) {
|
|
|
+ //这里需要双重判断,这一次是锁内判断
|
|
|
UserAccountRecordVo detail = userAccountRecordService.detail(param.getId());
|
|
|
- if (null == detail) {
|
|
|
- throw new BizException("入账状态变更, 未找到记录信息: recordId is {} postStatus is {}", param.getId(), param.getPostStatus().getCode());
|
|
|
- }
|
|
|
if (!PostStatusEnum.WAIT.equals(detail.getPostStatus())
|
|
|
&& !PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
|
|
|
return HttpResponseResult.succeed();
|
|
|
}
|
|
|
- detail.setPostStatus(param.getPostStatus());
|
|
|
+ detail.setPostStatus(detail.getPostStatus());
|
|
|
//待入账
|
|
|
if (PostStatusEnum.WAIT.equals(detail.getPostStatus())) {
|
|
|
- if (PostStatusEnum.RECORDED.equals(param.getPostStatus())) {
|
|
|
+ if (PostStatusEnum.RECORDED.equals(detail.getPostStatus())) {
|
|
|
//正常入账
|
|
|
baseMapper.changeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
|
|
|
} else if (PostStatusEnum.CANCEL.equals(param.getPostStatus())) {
|