|
@@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
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.enums.GameServerExcelEnum;
|
|
|
import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
|
|
|
+import com.zanxiang.game.module.manage.pojo.dto.GameServerExcelDTO;
|
|
|
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;
|
|
@@ -23,14 +25,17 @@ import com.zanxiang.game.module.mybatis.entity.GameServer;
|
|
|
import com.zanxiang.game.module.mybatis.entity.GameSupper;
|
|
|
import com.zanxiang.game.module.mybatis.mapper.GameServerMapper;
|
|
|
import com.zanxiang.module.util.bean.BeanUtil;
|
|
|
+import com.zanxiang.module.util.excel.ExcelUtil;
|
|
|
import com.zanxiang.module.util.exception.BaseException;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
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 org.springframework.web.multipart.MultipartFile;
|
|
|
import reactor.util.function.Tuple2;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
import java.util.*;
|
|
@@ -55,6 +60,102 @@ public class GameServerServiceImpl extends ServiceImpl<GameServerMapper, GameSer
|
|
|
@Autowired
|
|
|
private IGameSupperService gameSupperService;
|
|
|
|
|
|
+ @Override
|
|
|
+ public Boolean gameServerExcelImport(MultipartFile multipartFile, GameServerExcelEnum gameServerExcelEnum, Long gameId) {
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ List<GameServerExcelDTO> gameServerExcelList;
|
|
|
+ //文件流转换
|
|
|
+ try {
|
|
|
+ gameServerExcelList = ExcelUtil.importFromStream(multipartFile.getInputStream(), GameServerExcelDTO.class, stringBuilder);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new BaseException(stringBuilder.toString());
|
|
|
+ }
|
|
|
+ //原始区服添加
|
|
|
+ if (Objects.equals(gameServerExcelEnum, GameServerExcelEnum.SERVER_ADD)) {
|
|
|
+ List<GameServer> gameServerList = new ArrayList<>();
|
|
|
+ gameServerExcelList.forEach(excelDTO -> {
|
|
|
+ //判断单游戏内区服id不可重复
|
|
|
+ if (super.count(new LambdaQueryWrapper<GameServer>()
|
|
|
+ .eq(GameServer::getGameId, gameId)
|
|
|
+ .eq(GameServer::getServerId, excelDTO.getServerId())
|
|
|
+ ) > 0) {
|
|
|
+ throw new BaseException("该游戏区服id : " + excelDTO.getServerId() + "已存在, 禁止重复添加");
|
|
|
+ }
|
|
|
+ gameServerList.add(this.transform(excelDTO, gameId));
|
|
|
+ });
|
|
|
+ return super.saveBatch(gameServerList);
|
|
|
+ }
|
|
|
+ //合服添加
|
|
|
+ List<GameServer> gameServerList = new ArrayList<>();
|
|
|
+ List<String> mergeSerIdList = new ArrayList<>();
|
|
|
+ gameServerExcelList.forEach(excelDTO -> {
|
|
|
+ Set<String> sonServerIdList = Arrays.stream(excelDTO.getServerIds().split(",")).collect(Collectors.toSet());
|
|
|
+ List<GameServer> sonServerList = super.list(new LambdaQueryWrapper<GameServer>()
|
|
|
+ .eq(GameServer::getGameId, gameId)
|
|
|
+ .in(GameServer::getServerId, sonServerIdList));
|
|
|
+ if (sonServerIdList.size() != sonServerList.size()) {
|
|
|
+ List<String> collect = sonServerList.stream().map(GameServer::getServerId).collect(Collectors.toList());
|
|
|
+ List<String> list = sonServerIdList.stream().filter(son -> !collect.contains(son)).collect(Collectors.toList());
|
|
|
+ throw new BaseException("提交的子服中存在错误的区服id : " + list.toString());
|
|
|
+ }
|
|
|
+ Set<String> sourceServerIds = new HashSet<>();
|
|
|
+ sonServerList.forEach(gameServer -> {
|
|
|
+ if (gameServer.getIsSourceServer()) {
|
|
|
+ sourceServerIds.add(gameServer.getServerId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (Strings.isNotBlank(gameServer.getSourceServerIds())) {
|
|
|
+ Collections.addAll(sourceServerIds, gameServer.getSourceServerIds().split(","));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ gameServerList.add(this.transform(excelDTO, sonServerIdList, sourceServerIds, gameId));
|
|
|
+ mergeSerIdList.addAll(sonServerIdList);
|
|
|
+ });
|
|
|
+ super.saveBatch(gameServerList);
|
|
|
+ return super.update(new LambdaUpdateWrapper<GameServer>()
|
|
|
+ .set(GameServer::getIsMerge, Boolean.TRUE)
|
|
|
+ .set(GameServer::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(GameServer::getGameId, gameId)
|
|
|
+ .in(GameServer::getServerId, mergeSerIdList));
|
|
|
+ }
|
|
|
+
|
|
|
+ private GameServer transform(GameServerExcelDTO excelDTO, Long gameId) {
|
|
|
+ return GameServer.builder()
|
|
|
+ .gameId(gameId)
|
|
|
+ .serverId(excelDTO.getServerId())
|
|
|
+ .serverName(excelDTO.getServerName())
|
|
|
+ .nickName(excelDTO.getNickName())
|
|
|
+ .startTime(excelDTO.getStartTime())
|
|
|
+ .isDelete(DeleteEnum.NO.getCode())
|
|
|
+ .createBy(SecurityUtil.getUserId())
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .isSourceServer(Boolean.TRUE)
|
|
|
+ .isMerge(Boolean.FALSE)
|
|
|
+ .updateBy(SecurityUtil.getUserId())
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private GameServer transform(GameServerExcelDTO excelDTO, Set<String> sonServerIds, Set<String> sourceServerIds, Long gameId) {
|
|
|
+ return GameServer.builder()
|
|
|
+ .gameId(gameId)
|
|
|
+ .serverId(UUID.randomUUID().toString())
|
|
|
+ .serverName(excelDTO.getServerName())
|
|
|
+ .isSourceServer(Boolean.FALSE)
|
|
|
+ .mainServerId(excelDTO.getMainServerId())
|
|
|
+ .isMerge(Boolean.FALSE)
|
|
|
+ .sonServerIds(String.join(",", sonServerIds))
|
|
|
+ .sourceServerIds(String.join(",", sourceServerIds))
|
|
|
+ .mergeTime(excelDTO.getMergeTime())
|
|
|
+ .startTime(excelDTO.getMergeTime())
|
|
|
+ .isDelete(DeleteEnum.NO.getCode())
|
|
|
+ .createBy(SecurityUtil.getUserId())
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .updateBy(SecurityUtil.getUserId())
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<String> listServerId(Long gameId, String serverName) {
|
|
|
if (Strings.isBlank(serverName)) {
|