|
@@ -2,6 +2,7 @@ package com.zanxiang.game.module.manage.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.zanxiang.erp.security.util.SecurityUtil;
|
|
|
import com.zanxiang.game.module.base.pojo.enums.DeleteEnum;
|
|
|
import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
|
|
|
+import com.zanxiang.game.module.manage.pojo.params.GameMergeServerParam;
|
|
|
import com.zanxiang.game.module.manage.pojo.params.GameServerAddUpdateParam;
|
|
|
import com.zanxiang.game.module.manage.pojo.params.GameServerListParam;
|
|
|
import com.zanxiang.game.module.manage.pojo.vo.GameServerListVO;
|
|
@@ -28,9 +30,8 @@ import reactor.util.function.Tuple2;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -85,6 +86,8 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
|
|
|
.isDelete(DeleteEnum.NO.getCode())
|
|
|
.createBy(param.getId() == null ? SecurityUtil.getUserId() : null)
|
|
|
.createTime(param.getId() == null ? LocalDateTime.now() : null)
|
|
|
+ .isSourceServer(Boolean.TRUE)
|
|
|
+ .isMerge(Boolean.FALSE)
|
|
|
.updateBy(SecurityUtil.getUserId())
|
|
|
.updateTime(LocalDateTime.now())
|
|
|
.build();
|
|
@@ -121,9 +124,116 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
|
|
|
GameServerListVO gameServerListVO = BeanUtil.copy(gameServer, GameServerListVO.class);
|
|
|
GameDTO gameDTO = gameService.getById(gameServer.getGameId());
|
|
|
gameServerListVO.setGameName(gameDTO == null ? null : gameDTO.getName());
|
|
|
+ List<String> serverIdList = new ArrayList<>();
|
|
|
+ String[] sonServerIdArray = null;
|
|
|
+ String[] sourceServerIdArray = null;
|
|
|
+ if (Strings.isNotBlank(gameServer.getMainServerId())) {
|
|
|
+ serverIdList.add(gameServer.getMainServerId());
|
|
|
+ }
|
|
|
+ if (Strings.isNotBlank(gameServer.getSonServerIds())) {
|
|
|
+ sonServerIdArray = gameServer.getSonServerIds().split(",");
|
|
|
+ Collections.addAll(serverIdList, sonServerIdArray);
|
|
|
+ }
|
|
|
+ if (Strings.isNotBlank(gameServer.getSourceServerIds())) {
|
|
|
+ sourceServerIdArray = gameServer.getSourceServerIds().split(",");
|
|
|
+ Collections.addAll(serverIdList, sourceServerIdArray);
|
|
|
+ }
|
|
|
+ //关联区服信息
|
|
|
+ Map<String, GameServer> gameServerMap = super.list(new LambdaQueryWrapper<GameServer>()
|
|
|
+ .in(GameServer::getServerId, serverIdList)
|
|
|
+ ).stream().collect(Collectors.toMap(GameServer::getServerId, Function.identity()));
|
|
|
+ //合服主服名称
|
|
|
+ if (Strings.isNotBlank(gameServer.getMainServerId())) {
|
|
|
+ GameServer mainServer = gameServerMap.get(gameServer.getMainServerId());
|
|
|
+ gameServerListVO.setMainServerName(mainServer == null ? null : mainServer.getServerName());
|
|
|
+ }
|
|
|
+ //合服子服列表
|
|
|
+ if (sonServerIdArray != null) {
|
|
|
+ List<GameServerListVO.ServerBean> sonServerList = new ArrayList<>();
|
|
|
+ for (String sonServerId : sonServerIdArray) {
|
|
|
+ GameServer sonServer = gameServerMap.get(sonServerId);
|
|
|
+ if (sonServer == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ sonServerList.add(GameServerListVO.ServerBean.builder()
|
|
|
+ .serverId(sonServerId)
|
|
|
+ .serverName(sonServer.getServerName())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ gameServerListVO.setSonServerList(sonServerList);
|
|
|
+ }
|
|
|
+ //合服原始服列表
|
|
|
+ if (sourceServerIdArray != null) {
|
|
|
+ List<GameServerListVO.ServerBean> sourceServerList = new ArrayList<>();
|
|
|
+ for (String sourceServerId : sourceServerIdArray) {
|
|
|
+ GameServer sourceServer = gameServerMap.get(sourceServerId);
|
|
|
+ if (sourceServer != null) {
|
|
|
+ sourceServerList.add(GameServerListVO.ServerBean.builder()
|
|
|
+ .serverId(sourceServerId)
|
|
|
+ .serverName(sourceServer.getServerName())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ gameServerListVO.setSourceServerList(sourceServerList);
|
|
|
+ }
|
|
|
return gameServerListVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Boolean mergeServerAddUpdate(GameMergeServerParam param) {
|
|
|
+ List<GameServer> gameServerList = super.list(new LambdaQueryWrapper<GameServer>()
|
|
|
+ .eq(GameServer::getGameId, param.getGameId())
|
|
|
+ .in(GameServer::getServerId, param.getServerIdList()));
|
|
|
+ Set<String> sourceServerIds = new HashSet<>();
|
|
|
+ gameServerList.forEach(gameServer -> {
|
|
|
+ if (gameServer.getIsSourceServer()) {
|
|
|
+ sourceServerIds.add(gameServer.getServerId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (Strings.isBlank(gameServer.getSourceServerIds())) {
|
|
|
+ Collections.addAll(sourceServerIds, gameServer.getSourceServerIds().split(","));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //新增
|
|
|
+ if (param.getId() == null) {
|
|
|
+ super.save(this.transform(param, sourceServerIds));
|
|
|
+ } else {
|
|
|
+ super.update(new LambdaUpdateWrapper<GameServer>()
|
|
|
+ .set(GameServer::getGameId, param.getGameId())
|
|
|
+ .set(GameServer::getMainServerId, param.getMainServerId())
|
|
|
+ .set(GameServer::getSonServerIds, String.join(",", param.getServerIdList()))
|
|
|
+ .set(GameServer::getSourceServerIds, String.join(",", sourceServerIds))
|
|
|
+ .set(GameServer::getServerName, param.getServerName())
|
|
|
+ .set(GameServer::getMergeTime, param.getMergeTime())
|
|
|
+ .set(GameServer::getUpdateBy, SecurityUtil.getUserId())
|
|
|
+ .set(GameServer::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(GameServer::getId, param.getId()));
|
|
|
+ }
|
|
|
+ return super.update(new LambdaUpdateWrapper<GameServer>()
|
|
|
+ .set(GameServer::getIsMerge, Boolean.TRUE)
|
|
|
+ .set(GameServer::getUpdateTime, LocalDateTime.now())
|
|
|
+ .in(GameServer::getServerId, param.getServerIdList()));
|
|
|
+ }
|
|
|
+
|
|
|
+ private GameServer transform(GameMergeServerParam param, Set<String> sourceServerIds) {
|
|
|
+ return GameServer.builder()
|
|
|
+ .gameId(param.getGameId())
|
|
|
+ .serverId(UUID.randomUUID().toString())
|
|
|
+ .serverName(param.getServerName())
|
|
|
+ .isSourceServer(Boolean.FALSE)
|
|
|
+ .mainServerId(param.getMainServerId())
|
|
|
+ .isMerge(Boolean.FALSE)
|
|
|
+ .sonServerIds(String.join(",", param.getServerIdList()))
|
|
|
+ .sourceServerIds(String.join(",", sourceServerIds))
|
|
|
+ .mergeTime(param.getMergeTime())
|
|
|
+ .isDelete(DeleteEnum.NO.getCode())
|
|
|
+ .createBy(SecurityUtil.getUserId())
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .updateBy(SecurityUtil.getUserId())
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean deleteById(Long id) {
|