Przeglądaj źródła

Merge branch 'package' of GameCenter/game-center into dev

zhimo 2 miesięcy temu
rodzic
commit
a6afc94a4e

+ 1 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java

@@ -18,7 +18,7 @@ public class GameBackApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(GameBackApplication.class, args);
-        System.out.println("腾讯小游戏上报新增类型 (腾讯小游戏投放监测链接调试完成´・・)ノ(._.`)  \n" +
+        System.out.println("腾讯小游戏上报新增类型 (腾讯小游戏回传URL获取解析方式变更´・・)ノ(._.`)  \n" +
                 " ______  __     __     \n" +
                 "/_____/\\/__/\\ /__/\\    \n" +
                 "\\:::__\\/\\ \\::\\\\:.\\ \\   \n" +

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java

@@ -79,6 +79,11 @@ public class GameTencentMiniGameUser implements Serializable {
      */
     private Integer backStatus;
 
+    /**
+     * 回传地址
+     */
+    private String callBackUrl;
+
     /**
      * 创建时间
      */

+ 53 - 5
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java

@@ -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