|
@@ -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())) {
|