| 
					
				 | 
			
			
				@@ -1,24 +1,27 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.zanxiang.game.back.serve.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.github.sd4324530.jtuple.Tuple2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameBackLogMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameRoleRegister; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.back.serve.pojo.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameCallbackService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.module.util.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.zanxiang.module.util.JsonUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.zanxiang.module.util.URIUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.AllArgsConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.Builder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.Data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.NoArgsConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.logging.log4j.util.Strings; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.http.ResponseEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,6 +38,12 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RestTemplate restTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IGameTencentMiniGameUserService gameTencentMiniGameUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IGameTencentMiniGameCallbackService gameTencentMiniGameCallbackService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Tuple2<BackStatusEnum, String> userBack(GameTencentMiniGameUser userLog) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,7 +151,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("腾讯小游戏回传参数:{}", JsonUtil.toString(request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ResponseEntity<Map> response = restTemplate.postForEntity("http://tracking.e.qq.com/conv", request, Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ResponseEntity<Map> response = restTemplate.postForEntity(this.getCallBackUrl(backLog), request, Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             log.error("腾讯小游戏回传完成:{}", JsonUtil.toString(response.getBody())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (response.getStatusCode().is2xxSuccessful()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (Objects.equals(response.getBody().get("code").toString(), "0")) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,6 +165,45 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String getCallBackUrl(GameTencentMiniGameBackLog backLog) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GameTencentMiniGameUser user = gameTencentMiniGameUserService.getOne(new LambdaQueryWrapper<GameTencentMiniGameUser>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(GameTencentMiniGameUser::getGameId, backLog.getGameId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(GameTencentMiniGameUser::getWechatAppId, backLog.getWechatAppId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(GameTencentMiniGameUser::getWechatOpenid, backLog.getWechatOpenid()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(GameTencentMiniGameUser::getAdAccountId, backLog.getAdAccountId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .orderByDesc(GameTencentMiniGameUser::getCreateTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .last("limit 1")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String callBackUrl = Optional.ofNullable(user) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .map(GameTencentMiniGameUser::getCallBackUrl) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .orElse(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Strings.isNotBlank(callBackUrl)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return callBackUrl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GameTencentMiniGameCallback tencentMiniGameCallback = gameTencentMiniGameCallbackService.getOne( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new LambdaQueryWrapper<GameTencentMiniGameCallback>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(GameTencentMiniGameCallback::getWechatOpenid, backLog.getWechatOpenid()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .and(qw -> qw.eq(GameTencentMiniGameCallback::getImpressionId, backLog.getClickId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .or().eq(GameTencentMiniGameCallback::getRequestId, backLog.getClickId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .orderByDesc(GameTencentMiniGameCallback::getClickTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .last("limit 1")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String callBack = Optional.ofNullable(tencentMiniGameCallback) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .map(GameTencentMiniGameCallback::getCallback) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .orElse(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Strings.isBlank(callBack)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return "http://tracking.e.qq.com/conv"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        callBackUrl = URIUtil.decodeURIComponent(callBack); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (user != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            gameTencentMiniGameUserService.update(new LambdaUpdateWrapper<GameTencentMiniGameUser>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .set(GameTencentMiniGameUser::getCallBackUrl, callBackUrl) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(GameTencentMiniGameUser::getId, user.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return callBackUrl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @NoArgsConstructor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @AllArgsConstructor 
			 |