ソースを参照

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

bilingfeng 4 ヶ月 前
コミット
87372d2bbc

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

+ 5 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/CallBackControlParam.java

@@ -28,4 +28,9 @@ public class CallBackControlParam {
      * 角色id, 当行为类型为激活(创建角色)时, 需要传
      */
     private String roleId;
+
+    /**
+     * 角色等级
+     */
+    private Long level;
 }

+ 45 - 23
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameBackLogMediaSdkServiceImpl.java

@@ -88,32 +88,36 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         resultMap.put("userId", userData.getUserId());
         resultMap.put("gameId", userData.getGameId());
         resultMap.put("callBack", Boolean.FALSE);
-        //查询玩家信息
-        User user = userService.getById(userData.getUserId());
-        //参数判断和测试账号判断
-        if (!this.callBackParamCheck(param, resultMap) || this.userEventTest(param, user, resultMap)) {
+        //参数判断, 检测不通过
+        if (!this.callBackParamCheck(param, resultMap)) {
             return resultMap;
         }
-        //玩家渠道信息回传检测
-        Tuple2<Boolean, Agent> userAgentCheckTuple2 = this.userAgentCheck(user, resultMap);
-        if (!userAgentCheckTuple2.first) {
-            return resultMap;
-        }
-        //渠道
-        Agent agent = userAgentCheckTuple2.second;
-        //线程锁
+        //线程锁, 避免重复请求
         String lockKey = this.getLockKey(param, userData.getUserId());
-        //上锁
         if (!distributedLockComponent.doLock(lockKey, 0L, 20L, TimeUnit.SECONDS)) {
             log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
             return resultMap;
         }
-        //执行回传判断
         try {
-            this.checkCallBack(user, agent, resultMap, param);
+            //查询玩家信息
+            User user = userService.getById(userData.getUserId());
+            //测试账号判断
+            if (this.userEventTest(param, user, resultMap)) {
+                return resultMap;
+            }
+            //玩家渠道信息回传检测
+            Tuple2<Boolean, Agent> userAgentCheckTuple2 = this.userAgentCheck(user, resultMap);
+            if (!userAgentCheckTuple2.first) {
+                return resultMap;
+            }
+            //执行回传条件判断
+            this.checkCallBack(user, userAgentCheckTuple2.second, resultMap, param);
         } catch (Exception e) {
-            log.error("事件回传判断, 出现异常, param : {},  userData : {}, e : {}",
-                    JsonUtil.toString(param), JsonUtil.toString(userData), e.getMessage(), e);
+            log.error("事件回传判断, 出现异常, param : {},  userData : {}, e : {}", JsonUtil.toString(param),
+                    JsonUtil.toString(userData), e.getMessage(), e);
+            resultMap.put("backMsg", "事件回传判断, 出现异常");
+        } finally {
+            distributedLockComponent.unlock(lockKey);
         }
         //返回结果
         return resultMap;
@@ -124,10 +128,20 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
         CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
         //线程锁
         String lockKey = RedisKeyConstant.CALL_BACK_JUDGE_LOCK + callBackTypeEnum.getValue() + "_" + userId;
-        if (Strings.isNotBlank(param.getRoleId())) {
-            lockKey = lockKey + "_" + param.getRoleId();
+        //创角, 新手引导回传锁
+        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)
+                || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_CREATE_ROLE)
+                || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_TUTORIAL_FINISH)) {
+            if (Strings.isNotBlank(param.getRoleId())) {
+                lockKey = lockKey + "_" + param.getRoleId();
+            }
+        }
+        //等级提升回传锁
+        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL) && param.getLevel() != null) {
+            lockKey = lockKey + "_" + param.getRoleId() + "_" + param.getLevel();
         }
-        if (Strings.isNotBlank(param.getOrderId())) {
+        //付费回传锁
+        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER) && Strings.isNotBlank(param.getOrderId())) {
             lockKey = lockKey + "_" + param.getOrderId();
         }
         return lockKey;
@@ -135,17 +149,25 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
 
     private boolean callBackParamCheck(CallBackControlParam param, Map<String, Object> resultMap) {
         CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
-        //创角, 新手引导, 等级提升回传, 必须传角色id
+        //创角, 新手引导, 必须传角色id
         if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)
                 || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_CREATE_ROLE)
-                || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_TUTORIAL_FINISH)
-                || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL)) {
+                || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_TUTORIAL_FINISH)) {
             if (Strings.isBlank(param.getRoleId())) {
                 resultMap.put("backMsg", "参数错误, 创角, 新手引导或者等级提升回传, 必须传角色id");
                 return false;
             }
             resultMap.put("roleId", param.getRoleId());
         }
+        //等级提升回传, 必须传角色id, 角色当前等级
+        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL)) {
+            if (Strings.isBlank(param.getRoleId()) || param.getLevel() == null) {
+                resultMap.put("backMsg", "参数错误,等级提升回传, 必须传角色id和角色当前等级");
+                return false;
+            }
+            resultMap.put("roleId", param.getRoleId());
+            resultMap.put("level", param.getLevel());
+        }
         //付费回传, 必须传订单id
         if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
             if (Strings.isBlank(param.getOrderId())) {