| 
														
															@@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.apache.dubbo.config.annotation.DubboReference; 
														 | 
														
														 | 
														
															 import org.apache.dubbo.config.annotation.DubboReference; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.apache.dubbo.config.annotation.DubboService; 
														 | 
														
														 | 
														
															 import org.apache.dubbo.config.annotation.DubboService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.springframework.beans.factory.annotation.Autowired; 
														 | 
														
														 | 
														
															 import org.springframework.beans.factory.annotation.Autowired; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import org.springframework.data.redis.core.RedisTemplate; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.time.LocalDateTime; 
														 | 
														
														 | 
														
															 import java.time.LocalDateTime; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.Collections; 
														 | 
														
														 | 
														
															 import java.util.Collections; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -46,6 +47,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private IDistributedLockComponent distributedLockComponent; 
														 | 
														
														 | 
														
															     private IDistributedLockComponent distributedLockComponent; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private RedisTemplate<String, Object> redisTemplate; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private IGameOceanengineAppCallbackService gameOceanengineAppCallbackService; 
														 | 
														
														 | 
														
															     private IGameOceanengineAppCallbackService gameOceanengineAppCallbackService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Override 
														 | 
														
														 | 
														
															     @Override 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -131,7 +134,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         // 此处加锁防止 cp 方调用过快,导致查询回传结果时判断逻辑没走完 
														 | 
														
														 | 
														
															         // 此处加锁防止 cp 方调用过快,导致查询回传结果时判断逻辑没走完 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId(); 
														 | 
														
														 | 
														
															         String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        distributedLockComponent.doLock(lockKey, 0L, 60L, TimeUnit.SECONDS); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        redisTemplate.opsForValue().set(lockKey, dto.getOrderId(), 2L, TimeUnit.MINUTES); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // distributedLockComponent.doLock(lockKey, 0L, 60L, TimeUnit.SECONDS); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         try { 
														 | 
														
														 | 
														
															         try { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             GameOceanengineAppOrderLog orderLog = GameOceanengineAppOrderLog.builder() 
														 | 
														
														 | 
														
															             GameOceanengineAppOrderLog orderLog = GameOceanengineAppOrderLog.builder() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     .userId(dto.getUserId()) 
														 | 
														
														 | 
														
															                     .userId(dto.getUserId()) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -166,7 +170,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             gameOceanengineAppOrderLogService.save(orderLog); 
														 | 
														
														 | 
														
															             gameOceanengineAppOrderLogService.save(orderLog); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return ResultVO.ok(gameOceanengineAppOrderLogService.callback(orderLog)); 
														 | 
														
														 | 
														
															             return ResultVO.ok(gameOceanengineAppOrderLogService.callback(orderLog)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } finally { 
														 | 
														
														 | 
														
															         } finally { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            distributedLockComponent.unlock(lockKey); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            redisTemplate.delete(lockKey); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            // distributedLockComponent.unlock(lockKey); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -229,16 +234,15 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public ResultVO<OrderBackQueryRpcVO> orderBackQuery(TtAppOrderBackQueryRpcDTO dto) { 
														 | 
														
														 | 
														
															     public ResultVO<OrderBackQueryRpcVO> orderBackQuery(TtAppOrderBackQueryRpcDTO dto) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         log.error("头条APP订单回传结果查询:{}", JsonUtil.toString(dto)); 
														 | 
														
														 | 
														
															         log.error("头条APP订单回传结果查询:{}", JsonUtil.toString(dto)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        // 加锁最大等待 60s 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        distributedLockComponent.doLock(lockKey, 60, 1L, TimeUnit.SECONDS); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        GameOceanengineAppOrderLog orderLog = gameOceanengineAppOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppOrderLog>() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                .eq(GameOceanengineAppOrderLog::getOrderNo, dto.getOrderId()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                .eq(GameOceanengineAppOrderLog::getGameId, dto.getGameId()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                .eq(GameOceanengineAppOrderLog::getAgentKey, dto.getAgentKey()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                .eq(GameOceanengineAppOrderLog::getUserId, dto.getUserId()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        ); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        GameOceanengineAppOrderLog orderLog = queryOrder(dto); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if (orderLog == null) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            try { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Thread.sleep(5 *  1000L); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } catch (Exception e) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                log.error(e.getMessage(), e); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            orderLog = queryOrder(dto); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if  (orderLog == null) { 
														 | 
														
														 | 
														
															         if  (orderLog == null) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return ResultVO.ok(OrderBackQueryRpcVO.builder() 
														 | 
														
														 | 
														
															             return ResultVO.ok(OrderBackQueryRpcVO.builder() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                             .doBack(Boolean.FALSE) 
														 | 
														
														 | 
														
															                             .doBack(Boolean.FALSE) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -267,4 +271,31 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         GameOceanengineAppCallback callback = gameOceanengineAppCallbackService.getUserCallback(dto.getGameId(), dto.getImei(), dto.getOaid(), dto.getAndroidId(), dto.getIdfa(), dto.getCaid()); 
														 | 
														
														 | 
														
															         GameOceanengineAppCallback callback = gameOceanengineAppCallbackService.getUserCallback(dto.getGameId(), dto.getImei(), dto.getOaid(), dto.getAndroidId(), dto.getIdfa(), dto.getCaid()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return ResultVO.ok(callback == null ? null : callback.getAgentKey()); 
														 | 
														
														 | 
														
															         return ResultVO.ok(callback == null ? null : callback.getAgentKey()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private GameOceanengineAppOrderLog queryOrder(TtAppOrderBackQueryRpcDTO dto) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        int maxCount = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        while (true) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (redisTemplate.opsForValue().get(lockKey) == null) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                break; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (maxCount++ >= 120 / 10) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                break; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            try { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Thread.sleep(10 * 1000L); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } catch (Exception e) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                log.error(e.getMessage(), e); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // 加锁最大等待 120s 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // distributedLockComponent.doLock(lockKey, 60, 1L, TimeUnit.SECONDS); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        return gameOceanengineAppOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppOrderLog>() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .eq(GameOceanengineAppOrderLog::getOrderNo, dto.getOrderId()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .eq(GameOceanengineAppOrderLog::getGameId, dto.getGameId()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .eq(GameOceanengineAppOrderLog::getAgentKey, dto.getAgentKey()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .eq(GameOceanengineAppOrderLog::getUserId, dto.getUserId()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 |