|
@@ -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);
|
|
|
}
|