Ver Fonte

fix : 腾讯媒体sdk测试修改100

bilingfeng há 4 meses atrás
pai
commit
a5588ed66b

+ 5 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameBackLogMediaSdk.java

@@ -54,6 +54,11 @@ public class GameBackLogMediaSdk implements Serializable {
      */
     private String roleId;
 
+    /**
+     * 角色等级
+     */
+    private Long level;
+
     /**
      * 订单id
      */

+ 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测试修改1001> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk测试修改100> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

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

@@ -94,7 +94,7 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         }
         //线程锁, 避免重复请求
         String lockKey = this.getLockKey(param, userData.getUserId());
-        if (!distributedLockComponent.doLock(lockKey, 0L, 20L, TimeUnit.SECONDS)) {
+        if (!distributedLockComponent.doLock(lockKey, 0L, 1L, TimeUnit.MINUTES)) {
             log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
             return resultMap;
         }
@@ -202,6 +202,18 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
                 return false;
             }
         }
+        //等级提升回传, 判断当前等级是否已执行回传
+        if (Objects.equals(param.getCallBackTypeEnum(), CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL)) {
+            if (super.count(new LambdaQueryWrapper<GameBackLogMediaSdk>()
+                    .eq(GameBackLogMediaSdk::getGameId, user.getGameId())
+                    .eq(GameBackLogMediaSdk::getUserId, user.getId())
+                    .eq(GameBackLogMediaSdk::getRoleId, param.getRoleId())
+                    .eq(GameBackLogMediaSdk::getLevel, param.getLevel())
+                    .eq(GameBackLogMediaSdk::getCallBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL.getValue())
+            ) > 0) {
+                return false;
+            }
+        }
         //测试账号, 回传默认全量回传, 不做判断
         resultMap.put("callBack", Boolean.TRUE);
         resultMap.put("backMsg", "测试账号, 回传默认全量回传, 不做判断");
@@ -245,6 +257,8 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         Long gameId = agent.getGameId();
         //角色id
         String roleId = param.getRoleId();
+        //角色等级
+        Long level = param.getLevel();
         //回传类型
         CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
         //按不同类型判断
@@ -254,11 +268,11 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
             case CALL_BACK_REGISTER:
             case CALL_BACK_ACTIVATE:
             case CALL_BACK_CREATE_ROLE:
-                Tuple2<Boolean, String> distinctCheck = this.callBackDistinctCheck(callBackTypeEnum, gameId, userId, roleId);
+            case CALL_BACK_UPDATE_LEVEL:
+                Tuple2<Boolean, String> distinctCheck = this.callBackDistinctCheck(callBackTypeEnum, gameId, userId, roleId, level);
                 resultMap.put("callBack", distinctCheck.first);
                 resultMap.put("backMsg", distinctCheck.second);
                 break;
-            case CALL_BACK_UPDATE_LEVEL:
             case CALL_BACK_ADD_TO_WISHLIST:
             case CALL_BACK_ON_SHARE_TIME_LINE:
             case CALL_BACK_ON_SHARE_APP_MESSAGE:
@@ -288,7 +302,8 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         }
     }
 
-    private Tuple2<Boolean, String> callBackDistinctCheck(CallBackTypeEnum callBackTypeEnum, Long gameId, Long userId, String roleId) {
+    private Tuple2<Boolean, String> callBackDistinctCheck(CallBackTypeEnum callBackTypeEnum, Long gameId, Long userId,
+                                                          String roleId, Long level) {
         //注册回传去重判断
         if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_REGISTER)
                 && super.count(new LambdaQueryWrapper<GameBackLogMediaSdk>()
@@ -320,6 +335,28 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
                 return Tuple2.with(Boolean.FALSE, "当前用户注册未回传, 无法执行创角回传");
             }
         }
+        //等级提升回传去重和前置条件判断
+        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL)) {
+            //当前等级是否已回传, 已回传则不重复执行
+            if (super.count(new LambdaQueryWrapper<GameBackLogMediaSdk>()
+                    .eq(GameBackLogMediaSdk::getGameId, gameId)
+                    .eq(GameBackLogMediaSdk::getUserId, userId)
+                    .eq(GameBackLogMediaSdk::getRoleId, roleId)
+                    .eq(GameBackLogMediaSdk::getLevel, level)
+                    .eq(GameBackLogMediaSdk::getCallBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL.getValue())
+            ) > 0) {
+                return Tuple2.with(Boolean.FALSE, "角色当前等级已回传, 不重复执行");
+            }
+            //腾讯小游戏的等级提升回传, 可以判断前置创角回传是否已执行, 未执行无法回传
+            if (super.count(new LambdaQueryWrapper<GameBackLogMediaSdk>()
+                    .eq(GameBackLogMediaSdk::getGameId, gameId)
+                    .eq(GameBackLogMediaSdk::getUserId, userId)
+                    .eq(GameBackLogMediaSdk::getRoleId, roleId)
+                    .eq(GameBackLogMediaSdk::getCallBackTypeEnum, CallBackTypeEnum.CALL_BACK_CREATE_ROLE.getValue())
+            ) <= 0) {
+                return Tuple2.with(Boolean.FALSE, "角色创角未回传, 无法执行等级提升回传");
+            }
+        }
         return Tuple2.with(Boolean.TRUE, "执行回传");
     }
 
@@ -391,7 +428,8 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         GameUserRole gameUserRole = gameUserRoleService.getOne(new LambdaQueryWrapper<GameUserRole>()
                 .eq(GameUserRole::getUserId, userId)
                 .eq(GameUserRole::getGameId, gameId)
-                .eq(GameUserRole::getRoleId, roleId));
+                .eq(GameUserRole::getRoleId, roleId)
+                .orderByDesc(GameUserRole::getCreateTime).last("limit 1"));
         if (gameUserRole == null || gameUserRole.getRoleLevel() == null) {
             return Tuple2.with(Boolean.FALSE, "角色信息或者角色等级信息不存在, 无法执行新手引导回传, roleId : " + roleId);
         }
@@ -443,6 +481,9 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
             if (callBackJudgeResult.containsKey("orderId")) {
                 gameBackLogMediaSdk.setOrderId(String.valueOf(callBackJudgeResult.get("orderId")));
             }
+            if (callBackJudgeResult.containsKey("level")) {
+                gameBackLogMediaSdk.setLevel(Long.parseLong(String.valueOf(callBackJudgeResult.get("level"))));
+            }
         }
         return super.save(gameBackLogMediaSdk);
     }