|
@@ -24,7 +24,9 @@ import org.apache.logging.log4j.util.Strings;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import reactor.util.function.Tuple2;
|
|
|
import reactor.util.function.Tuple3;
|
|
|
+import reactor.util.function.Tuples;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Map;
|
|
@@ -90,6 +92,9 @@ public class LoginServiceImpl implements IRegisterLoginService {
|
|
|
@Autowired
|
|
|
private IGameService gameService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IGameUserRoleService gameUserRoleService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData) {
|
|
@@ -178,11 +183,18 @@ public class LoginServiceImpl implements IRegisterLoginService {
|
|
|
}
|
|
|
//渠道更新和回传判断
|
|
|
agentService.userAgentUpdate(user, userData.getChannel());
|
|
|
+ //登录信息
|
|
|
+ UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
|
|
|
+ Tuple2<Boolean, Long> tuple2 = this.userGuideCheck(user);
|
|
|
+ //导量用户返回原有的用户id
|
|
|
+ if (tuple2.getT1()) {
|
|
|
+ userLoginVO.setUserId(tuple2.getT2());
|
|
|
+ }
|
|
|
//返回登录信息
|
|
|
- return ResultVO.ok(this.createUserLoginVO(user, userData));
|
|
|
+ return ResultVO.ok(userLoginVO);
|
|
|
}
|
|
|
//用户注册, 用户名密码校验
|
|
|
- HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
|
|
|
+ HttpStatusEnum checkRegisterEnum = this.checkRegister(userData.getGameId(), username, password);
|
|
|
if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
return ResultVO.fail(checkRegisterEnum.getMsg());
|
|
|
}
|
|
@@ -218,14 +230,11 @@ public class LoginServiceImpl implements IRegisterLoginService {
|
|
|
//渠道更新和回传判断
|
|
|
agentService.userAgentUpdate(user, userData.getChannel());
|
|
|
UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
|
|
|
- Game game = gameService.getById(user.getGameId());
|
|
|
//判断是否导量用户
|
|
|
- if (user.getRelationUserId() != null && game.getGuideGameId() != null) {
|
|
|
- User relationUser = userService.getById(user.getRelationUserId());
|
|
|
- if (relationUser != null) {
|
|
|
- //导量用户返回原有的用户id
|
|
|
- userLoginVO.setUserId(relationUser.getId());
|
|
|
- }
|
|
|
+ Tuple2<Boolean, Long> tuple2 = this.userGuideCheck(user);
|
|
|
+ //导量用户返回原有的用户id
|
|
|
+ if (tuple2.getT1()) {
|
|
|
+ userLoginVO.setUserId(tuple2.getT2());
|
|
|
}
|
|
|
//返回登录信息
|
|
|
return ResultVO.ok(userLoginVO);
|
|
@@ -236,6 +245,28 @@ public class LoginServiceImpl implements IRegisterLoginService {
|
|
|
return ResultVO.ok(this.createUserLoginVO(user, userData));
|
|
|
}
|
|
|
|
|
|
+ private Tuple2<Boolean, Long> userGuideCheck(User user) {
|
|
|
+ //游戏信息
|
|
|
+ Game game = gameService.getById(user.getGameId());
|
|
|
+ //非导量用户
|
|
|
+ if (user.getRelationUserId() == null || game.getGuideGameId() == null) {
|
|
|
+ return Tuples.of(Boolean.FALSE, 0L);
|
|
|
+ }
|
|
|
+ //导量用户信息
|
|
|
+ User relationUser = userService.getById(user.getRelationUserId());
|
|
|
+ //确定导量匹配
|
|
|
+ if (relationUser != null && Objects.equals(relationUser.getRelationUserId(), user.getId())) {
|
|
|
+ try {
|
|
|
+ //监测角色是否导全, 或者导过之后又跑去小程序创建了其他角色
|
|
|
+ gameUserRoleService.userGuideGameRoleCheck(user, relationUser);
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ }
|
|
|
+ return Tuples.of(Boolean.TRUE, relationUser.getId());
|
|
|
+ }
|
|
|
+ //非导量兜底逻辑
|
|
|
+ return Tuples.of(Boolean.FALSE, 0L);
|
|
|
+ }
|
|
|
+
|
|
|
private User userCreateSave(UserData userData, String userName, String password, String mobile, String openId, String sessionKey) {
|
|
|
//渠道id, 链接参数, 分享人id
|
|
|
Tuple3<Long, Map<String, String>, String> tuple3 = agentService.getUserAgentId(userData);
|
|
@@ -333,13 +364,16 @@ public class LoginServiceImpl implements IRegisterLoginService {
|
|
|
return Boolean.TRUE;
|
|
|
}
|
|
|
|
|
|
- private HttpStatusEnum checkRegister(String username, String password) {
|
|
|
+ private HttpStatusEnum checkRegister(Long gameId, String username, String password) {
|
|
|
//判断用户名是否存在敏感词
|
|
|
if (wordCheckService.hasWord(username)) {
|
|
|
return HttpStatusEnum.USERNAME_SENSITIVE;
|
|
|
}
|
|
|
//判断用户名是否已存在
|
|
|
- if (userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username)) > 0) {
|
|
|
+ if (userService.count(new LambdaQueryWrapper<User>()
|
|
|
+ .eq(User::getGameId, gameId)
|
|
|
+ .eq(User::getUsername, username)
|
|
|
+ ) > 0) {
|
|
|
return HttpStatusEnum.USERNAME_EXISTS;
|
|
|
}
|
|
|
//用户名合规检测
|