|  | @@ -88,32 +88,36 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
 | 
											
												
													
														|  |          resultMap.put("userId", userData.getUserId());
 |  |          resultMap.put("userId", userData.getUserId());
 | 
											
												
													
														|  |          resultMap.put("gameId", userData.getGameId());
 |  |          resultMap.put("gameId", userData.getGameId());
 | 
											
												
													
														|  |          resultMap.put("callBack", Boolean.FALSE);
 |  |          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;
 |  |              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());
 |  |          String lockKey = this.getLockKey(param, userData.getUserId());
 | 
											
												
													
														|  | -        //上锁
 |  | 
 | 
											
												
													
														|  |          if (!distributedLockComponent.doLock(lockKey, 0L, 20L, TimeUnit.SECONDS)) {
 |  |          if (!distributedLockComponent.doLock(lockKey, 0L, 20L, TimeUnit.SECONDS)) {
 | 
											
												
													
														|  |              log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
 |  |              log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
 | 
											
												
													
														|  |              return resultMap;
 |  |              return resultMap;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        //执行回传判断
 |  | 
 | 
											
												
													
														|  |          try {
 |  |          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) {
 |  |          } 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;
 |  |          return resultMap;
 | 
											
										
											
												
													
														|  | @@ -124,10 +128,20 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
 | 
											
												
													
														|  |          CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
 |  |          CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
 | 
											
												
													
														|  |          //线程锁
 |  |          //线程锁
 | 
											
												
													
														|  |          String lockKey = RedisKeyConstant.CALL_BACK_JUDGE_LOCK + callBackTypeEnum.getValue() + "_" + userId;
 |  |          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();
 |  |              lockKey = lockKey + "_" + param.getOrderId();
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          return lockKey;
 |  |          return lockKey;
 | 
											
										
											
												
													
														|  | @@ -135,17 +149,25 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      private boolean callBackParamCheck(CallBackControlParam param, Map<String, Object> resultMap) {
 |  |      private boolean callBackParamCheck(CallBackControlParam param, Map<String, Object> resultMap) {
 | 
											
												
													
														|  |          CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
 |  |          CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
 | 
											
												
													
														|  | -        //创角, 新手引导, 等级提升回传, 必须传角色id
 |  | 
 | 
											
												
													
														|  | 
 |  | +        //创角, 新手引导, 必须传角色id
 | 
											
												
													
														|  |          if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)
 |  |          if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)
 | 
											
												
													
														|  |                  || Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_CREATE_ROLE)
 |  |                  || 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())) {
 |  |              if (Strings.isBlank(param.getRoleId())) {
 | 
											
												
													
														|  |                  resultMap.put("backMsg", "参数错误, 创角, 新手引导或者等级提升回传, 必须传角色id");
 |  |                  resultMap.put("backMsg", "参数错误, 创角, 新手引导或者等级提升回传, 必须传角色id");
 | 
											
												
													
														|  |                  return false;
 |  |                  return false;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              resultMap.put("roleId", param.getRoleId());
 |  |              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
 |  |          //付费回传, 必须传订单id
 | 
											
												
													
														|  |          if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
 |  |          if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
 | 
											
												
													
														|  |              if (Strings.isBlank(param.getOrderId())) {
 |  |              if (Strings.isBlank(param.getOrderId())) {
 |