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