瀏覽代碼

-fix : 兼容腾讯私域APP回传

bilingfeng 9 月之前
父節點
當前提交
11fea728e5

+ 6 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentAppApiUserAgentQueryRpcDTO.java

@@ -1,11 +1,17 @@
 package com.zanxiang.game.back.base.pojo.dto;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class TencentAppApiUserAgentQueryRpcDTO implements Serializable {
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <解决token重复重现的问题> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <兼容腾讯私域APP回传> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 38 - 10
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

@@ -4,6 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.sd4324530.jtuple.Tuple2;
+import com.zanxiang.game.back.base.ServerInfo;
+import com.zanxiang.game.back.base.pojo.dto.TencentAppApiUserAgentQueryRpcDTO;
+import com.zanxiang.game.back.base.rpc.ITencentAppApiBackRpc;
+import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
 import com.zanxiang.game.module.mybatis.mapper.AgentMapper;
@@ -13,6 +18,7 @@ import com.zanxiang.game.module.sdk.service.*;
 import com.zanxiang.module.util.DateUtil;
 import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -29,6 +35,9 @@ import java.util.*;
 @Service
 public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements IAgentService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private ITencentAppApiBackRpc tencentAppApiBackRpc;
+
     @Autowired
     private IUserService userService;
 
@@ -169,19 +178,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             Agent agent = super.getOne(new LambdaQueryWrapper<Agent>().eq(Agent::getAgentKey, userData.getChannel()));
             return Tuples.of(agent == null ? 0 : agent.getId(), Collections.singletonMap("agentKey", userData.getChannel()), Strings.EMPTY);
         }
-        //不投放, 不回传, 只归因渠道, -- 不投放, 且回传只存在于导量情况, 导量无注册行为
-        if (Objects.equals(game.getIsPut(), Boolean.FALSE) && Objects.equals(gameExt.getAdCallBackSwitch(), Boolean.FALSE)) {
-            //查询访问记录
-            UserVisitLog userVisitLog = this.getUserVisitLog(userData);
-            //返回渠道信息
-            return Tuples.of(userVisitLog == null ? 0L : userVisitLog.getAgentId(), Collections.emptyMap(), Strings.EMPTY);
-        }
-        //投放, 且回传 -- 投放, 且不回传这种情况不存在
-        if (Objects.equals(game.getIsPut(), Boolean.TRUE) && Objects.equals(gameExt.getAdCallBackSwitch(), Boolean.TRUE)) {
+        //头条私域, 虚拟游戏方式
+        if (Objects.equals(game.getPutType(), 3)) {
             //查询访问记录
             UserVisitLog userVisitLog = this.getUserVisitLog(userData);
             if (userVisitLog == null) {
-                //未匹配到访问信息, 返回自然
+                //未匹配到访问信息, 返回自然量
                 return Tuples.of(0L, Collections.emptyMap(), Strings.EMPTY);
             }
             //解析访问记录中得请求参数
@@ -191,6 +193,32 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             //返回渠道信息
             return Tuples.of(agent == null ? 0L : agent.getId(), urlParamMap, Strings.EMPTY);
         }
+        //腾讯私域, 直接加企微方式
+        if (Objects.equals(game.getPutType(), 4)) {
+            TencentAppApiUserAgentQueryRpcDTO tencentAppApiUserAgentQueryRpcDTO = TencentAppApiUserAgentQueryRpcDTO.builder()
+                    .gameId(game.getId())
+                    .regIp(userData.getIp())
+                    .registerTime(LocalDateTime.now())
+                    .imei(userData.getImei())
+                    .oaid(userData.getOaid())
+                    .androidId(userData.getAndroidId())
+                    .idfa(userData.getIdfa())
+                    .caid(userData.getCaid())
+                    .build();
+            Tuple2<String, Long> tuple2 = tencentAppApiBackRpc.queryUserAgentFromCallback(tencentAppApiUserAgentQueryRpcDTO).getData();
+            Map<String, String> map = new HashMap<>(2);
+            map.put("agentKey", tuple2.first);
+            map.put("callbackId", tuple2.second.toString());
+            Agent agent = super.getOne(new LambdaQueryWrapper<Agent>().eq(Agent::getAgentKey, tuple2.first));
+            return Tuples.of(agent == null ? 0 : agent.getId(), map, Strings.EMPTY);
+        }
+        //不投放, 不回传, 只归因渠道, -- 不投放, 且回传只存在于导量情况, 导量无注册行为
+        if (Objects.equals(game.getIsPut(), Boolean.FALSE) && Objects.equals(gameExt.getAdCallBackSwitch(), Boolean.FALSE)) {
+            //查询访问记录
+            UserVisitLog userVisitLog = this.getUserVisitLog(userData);
+            //返回渠道信息
+            return Tuples.of(userVisitLog == null ? 0L : userVisitLog.getAgentId(), Collections.emptyMap(), Strings.EMPTY);
+        }
         //默认返回自然量
         return Tuples.of(0L, Collections.emptyMap(), Strings.EMPTY);
     }

+ 86 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zanxiang.game.back.base.ServerInfo;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.vo.OrderBackQueryRpcVO;
-import com.zanxiang.game.back.base.rpc.ITencentMiniGameBackRpc;
-import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
-import com.zanxiang.game.back.base.rpc.ITtAppBackRpc;
-import com.zanxiang.game.back.base.rpc.ITtMiniGameBackRpc;
+import com.zanxiang.game.back.base.rpc.*;
 import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
@@ -41,6 +38,9 @@ import java.util.stream.Collectors;
 @Service
 public class CallBackServiceImpl implements ICallBackService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private ITencentAppApiBackRpc tencentAppApiBackRpc;
+
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private ITencentUserActionBackRpc tencentUserActionBackRpc;
 
@@ -218,6 +218,12 @@ public class CallBackServiceImpl implements ICallBackService {
                 tencentMiniGameBackRpc.backUser(tencentUserDTO);
                 gameBackLogService.addLog(user.getId(), null, "腾讯小游戏用户回传提交", JsonUtil.toString(tencentUserDTO));
             }
+            //腾讯APP私域
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_APP_API.getValue())) {
+                TencentUserAppApiRpcDTO tencentUserAppApiRpcDTO = this.transform(user, agent, urlParamMap.get("callbackId"));
+                tencentAppApiBackRpc.backUser(tencentUserAppApiRpcDTO);
+                gameBackLogService.addLog(user.getId(), null, "腾讯APP私域用户回传提交", JsonUtil.toString(tencentUserAppApiRpcDTO));
+            }
             //头条回传
             if (CollectionUtils.isNotEmpty(urlParamMap) && Objects.equals(agent.getAccountType(), AccountTypeEnum.BYTE.getValue())) {
                 Game game = gameService.getById(agent.getGameId());
@@ -270,6 +276,12 @@ public class CallBackServiceImpl implements ICallBackService {
                 tencentMiniGameBackRpc.backRoleRegister(tencentRoleRegisterRpcDTO);
                 gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "腾讯小游戏创角回传提交", JsonUtil.toString(tencentRoleRegisterRpcDTO));
             }
+            //腾讯APP私域
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_APP_API.getValue())) {
+                TencentRoleRegisterAppApiRpcDTO tencentRoleRegisterAppApiRpcDTO = this.transform(gameUserRole, user, agent);
+                tencentAppApiBackRpc.backRoleRegister(tencentRoleRegisterAppApiRpcDTO);
+                gameBackLogService.addLog(user.getId(), null, "腾讯APP私域创角回传提交", JsonUtil.toString(tencentRoleRegisterAppApiRpcDTO));
+            }
             //头条回传
             if (Objects.equals(agent.getAccountType(), AccountTypeEnum.BYTE.getValue())) {
                 Game game = gameService.getById(agent.getGameId());
@@ -326,6 +338,12 @@ public class CallBackServiceImpl implements ICallBackService {
                 tencentMiniGameBackRpc.backOrder(tencentOrderDTO);
                 gameBackLogService.addLog(user.getId(), platformOrderDTO.getOrderId(), "腾讯小游戏订单回传提交", JsonUtil.toString(tencentOrderDTO));
             }
+            //腾讯APP私域
+            if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_APP_API.getValue())) {
+                TencentOrderAppApiRpcDTO tencentOrderAppApiRpcDTO = this.transform(user, agent, platformOrderDTO);
+                tencentAppApiBackRpc.backOrder(tencentOrderAppApiRpcDTO);
+                gameBackLogService.addLog(user.getId(), platformOrderDTO.getOrderId(), "腾讯APP私域订单回传提交", JsonUtil.toString(tencentOrderAppApiRpcDTO));
+            }
             //头条回传
             if (Objects.equals(agent.getAccountType(), AccountTypeEnum.BYTE.getValue())) {
                 //判断游戏类型
@@ -538,4 +556,68 @@ public class CallBackServiceImpl implements ICallBackService {
                 .roleId(roleId)
                 .build();
     }
+
+    private TencentUserAppApiRpcDTO transform(User user, Agent agent, String callbackId) {
+        return TencentUserAppApiRpcDTO.builder()
+                .backPolicyId(agent.getBackPolicyId())
+                .userId(user.getId().toString())
+                .gameId(agent.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(user.getCreateTime())
+                .channel(agent.getAgentKey())
+                .mac(user.getMac())
+                .imei(user.getImei())
+                .oaid(user.getOaid())
+                .androidId(user.getAndroidId())
+                .idfa(user.getIdfa())
+                .caid(user.getCaid())
+                .regIp(user.getIp())
+                .userActionSetId(agent.getUserActionSetId())
+                .callbackId(Strings.isBlank(callbackId) ? null : Long.valueOf(callbackId))
+                .build();
+    }
+
+    private TencentRoleRegisterAppApiRpcDTO transform(GameUserRole gameUserRole, User user, Agent agent) {
+        return TencentRoleRegisterAppApiRpcDTO.builder()
+                .backPolicyId(agent.getBackPolicyId())
+                .userId(user.getId().toString())
+                .gameId(agent.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(user.getCreateTime())
+                .channel(agent.getAgentKey())
+                .roleId(gameUserRole.getRoleId())
+                .roleName(gameUserRole.getRoleName())
+                .mac(user.getMac())
+                .imei(user.getImei())
+                .oaid(user.getOaid())
+                .androidId(user.getAndroidId())
+                .idfa(user.getIdfa())
+                .caid(user.getCaid())
+                .build();
+    }
+
+    private TencentOrderAppApiRpcDTO transform(User user, Agent agent, PlatformOrderDTO platformOrderDTO) {
+        return TencentOrderAppApiRpcDTO.builder()
+                .backPolicyId(agent.getBackPolicyId())
+                .userId(user.getId().toString())
+                .gameId(agent.getGameId())
+                .adAccountId(agent.getAccountId())
+                .registerTime(user.getCreateTime())
+                .rechargeMoney(platformOrderDTO.getAmount().multiply(new BigDecimal(100)).longValue())
+                .rechargeTime(platformOrderDTO.getCreateTime())
+                .orderId(platformOrderDTO.getOrderId())
+                .channel(agent.getAgentKey())
+                .orderStatus(platformOrderDTO.getStatus())
+                .payTime(platformOrderDTO.getPayTime())
+                .roleId(platformOrderDTO.getRoleId())
+                .roleName(platformOrderDTO.getRoleName())
+                .mac(user.getMac())
+                .imei(user.getImei())
+                .oaid(user.getOaid())
+                .androidId(user.getAndroidId())
+                .idfa(user.getIdfa())
+                .caid(user.getCaid())
+                .build();
+
+    }
 }