Forráskód Böngészése

Merge remote-tracking branch 'origin/package' into package

zhangxianyu 4 hónapja
szülő
commit
d23f54138b

+ 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服务启动成功 <腾讯媒体sdk回传兼容API同步回传> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk回传优化> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/constant/RedisKeyConstant.java

@@ -86,4 +86,9 @@ public class RedisKeyConstant {
      * CP推送数据错误日志删除锁
      */
     public static final String CP_PUSH_ERROR_LOG_LOCK = RedisKeyConstant.REDIS_PREFIX + "cp_push_error_log_lock";
+
+    /**
+     * 完成新手引导回传去重锁
+     */
+    public static final String CALL_BACK_TUTORIAL_FINISH_LOCK = RedisKeyConstant.REDIS_PREFIX + "call_back_tutorial_finish_lock_";
 }

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameBackLogMediaSdkServiceImpl.java

@@ -429,6 +429,11 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         ) > 0) {
             return Tuple2.with(Boolean.FALSE, "角色已执行新手引导回传, 不重复执行");
         }
+        //新手引导回传线程锁
+        String lockKey = RedisKeyConstant.CALL_BACK_TUTORIAL_FINISH_LOCK + userId + "_" + roleId;
+        if (!distributedLockComponent.doLock(lockKey, 0L, 30L, TimeUnit.SECONDS)) {
+            return Tuple2.with(Boolean.FALSE, "触发新手引导回传线程锁, 不执行");
+        }
         //渠道关联的策略
         Long backPolicyId = agent.getBackPolicyId();
         //判断角色当前等级是否满足策略限制等级

+ 27 - 15
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameServiceImpl.java

@@ -1,15 +1,19 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.sd4324530.jtuple.Tuple2;
 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.Agent;
 import com.zanxiang.game.module.mybatis.entity.Game;
 import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.mybatis.entity.UserEvent;
 import com.zanxiang.game.module.mybatis.mapper.GameMapper;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IAgentService;
 import com.zanxiang.game.module.sdk.service.IGameService;
+import com.zanxiang.game.module.sdk.service.IUserEventService;
 import com.zanxiang.game.module.sdk.service.IUserService;
 import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -30,11 +34,14 @@ import java.util.Objects;
 @Service
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IGameService {
 
+    @Autowired
+    private IUserService userService;
+
     @Autowired
     private IAgentService agentService;
 
     @Autowired
-    private IUserService userService;
+    private IUserEventService userEventService;
 
     @Override
     public Map<String, Object> getAdSdkConfig(UserData userData) {
@@ -46,13 +53,11 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IG
         if (Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_APP.getId())) {
             return JsonUtil.toMap(game.getAdSdkConfig(), Map.class, Object.class);
         }
-        //不是微信小程序, 不返回配置
-        if (!Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_WX_APPLET.getId())) {
-            //默认返回不初始化
-            return Collections.singletonMap("adSdk", 0);
-        }
-        //目前只有投腾讯才返回
-        Agent agent = this.getUserAgent(userData.getUserId());
+        //查询用户信息以及投放渠道
+        Tuple2<User, Agent> userAndAgent = this.getUserAndAgent(userData.getUserId());
+        User user = userAndAgent.first;
+        Agent agent = userAndAgent.second;
+        //渠道判断, 目前只有投腾讯才返回
         if (agent != null) {
             //腾讯广告
             if (Objects.equals(agent.getAccountType(), AccountTypeEnum.TENCENT_MINI_GAME.getValue())) {
@@ -63,22 +68,29 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IG
                 return Collections.singletonMap("adSdk", 0);
             }
         }
-        //当前调试阶段
-        if (userData.getUserId() != null && Objects.equals(game.getStatus(), 2)) {
-            return JsonUtil.toMap(game.getAdSdkConfig(), Map.class, Object.class);
+        //用户判断, 是否调试阶段和测试用户
+        if (user != null) {
+            if (Objects.equals(game.getStatus(), 2) || userEventService.count(new LambdaQueryWrapper<UserEvent>()
+                    .eq(UserEvent::getGameId, user.getGameId())
+                    .and(qw -> qw.eq(UserEvent::getUsername, user.getUsername())
+                            .or().eq(UserEvent::getUsername, user.getOpenId())
+                            .or().eq(UserEvent::getMobile, user.getMobile()))
+            ) > 0) {
+                return JsonUtil.toMap(game.getAdSdkConfig(), Map.class, Object.class);
+            }
         }
         //默认返回不初始化
         return Collections.singletonMap("adSdk", 0);
     }
 
-    private Agent getUserAgent(Long userId) {
+    private Tuple2<User, Agent> getUserAndAgent(Long userId) {
         if (userId == null) {
-            return null;
+            return Tuple2.with(null, null);
         }
         User user = userService.getById(userId);
         if (user == null) {
-            return null;
+            return Tuple2.with(null, null);
         }
-        return agentService.getById(user.getAgentId());
+        return Tuple2.with(user, agentService.getById(user.getAgentId()));
     }
 }