Ver Fonte

问题修改:账户入账修改

liweifan há 3 anos atrás
pai
commit
748bcfe4ae

+ 14 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -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())) {