自动开服功能修改

master
PC-202302260912\Administrator 2023-08-16 10:58:23 +08:00
parent 35b289ff97
commit 4f50faaf6d
5 changed files with 57 additions and 48 deletions

View File

@ -517,14 +517,15 @@ public class ServerInfoController {
/** /**
* *
*/ */
@RequestMapping(value = "/updateAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET}) @RequestMapping(value = "/uporsetAutoStartServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody public @ResponseBody
int updateAutoServerSetting(@RequestBody AssSetting setting) throws Exception { int uporsetAutoStartServerSetting(@RequestBody AssSetting setting) throws Exception {
AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId()); AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId());
if (info == null){ if (info == null){
return 0; serverInfoDao.insertAssSettingInfo(setting);
} }else {
serverInfoDao.updateAssSettingInfo(setting); serverInfoDao.updateAssSettingInfo(setting);
}
AutoServerManager.initAssSettingMap(); AutoServerManager.initAssSettingMap();
return 1; return 1;
} }
@ -547,24 +548,24 @@ public class ServerInfoController {
return 1; return 1;
} }
/** // /**
* // * 新增自动开服配置
*/ // */
@RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET}) // @RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody // public @ResponseBody
int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception { // int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception {
Set<String> set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet()); // Set<String> set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet());
if (!set.contains(setting.getId())){ // if (!set.contains(setting.getId())){
return 2;// 子渠道不存在 // return 2;// 子渠道不存在
} // }
AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId()); // AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId());
if (info != null){ // if (info != null){
return 0;// 渠道已配置自动开服 // return 0;// 渠道已配置自动开服
} // }
serverInfoDao.insertAssSettingInfo(setting); // serverInfoDao.insertAssSettingInfo(setting);
AutoServerManager.initAssSettingMap(); // AutoServerManager.initAssSettingMap();
return 1; // return 1;
} // }
/** /**
* *

View File

@ -2,6 +2,7 @@ package com.jmfy.utils;
import com.jmfy.controller.LoginController; import com.jmfy.controller.LoginController;
import com.jmfy.dao.ServerInfoDao; import com.jmfy.dao.ServerInfoDao;
import com.jmfy.handler.GMHandler;
import com.jmfy.model.AssSetting; import com.jmfy.model.AssSetting;
import com.jmfy.model.CServerOpenTime; import com.jmfy.model.CServerOpenTime;
import com.jmfy.model.ServerInfo; import com.jmfy.model.ServerInfo;
@ -62,7 +63,7 @@ public class AutoServerManager {
AutoServerManager.redisPwd = redisPwd; AutoServerManager.redisPwd = redisPwd;
} }
private static long date = 0; private static Map<String, Long> dateMap = new HashMap<>();
private static final long TIME = DateUtil.ONE_MINUTE * 3; private static final long TIME = DateUtil.ONE_MINUTE * 3;
@ -139,7 +140,7 @@ public class AutoServerManager {
// 获取全部服务器列表,排除非未运营和准备中的服务器,正序排列 // 获取全部服务器列表,排除非未运营和准备中的服务器,正序排列
List<ServerInfo> infoList = getServerInfoMap().values().stream().filter(v->v.getSub_channel().equals(setting.getId())).sorted().collect(Collectors.toList()); List<ServerInfo> infoList = getServerInfoMap().values().stream().filter(v->v.getSub_channel().equals(setting.getId())).sorted().collect(Collectors.toList());
if (infoList.isEmpty()) { if (infoList.isEmpty()) {
return; continue;
} }
for (int i = 0; i < infoList.size(); i++) { for (int i = 0; i < infoList.size(); i++) {
ServerInfo newServer = infoList.get(i); ServerInfo newServer = infoList.get(i);
@ -149,20 +150,22 @@ public class AutoServerManager {
// 注册人数 // 注册人数
if (REGISTER == setting.getType()) { if (REGISTER == setting.getType()) {
// 注册人数3分钟检查一次 // 注册人数3分钟检查一次
if (now >= (date + TIME)) { long time = dateMap.getOrDefault(setting.getId(), 0L) + TIME;
if (now >= time) {
ServerInfo oldServer = getServerIndex(infoList, i - 1); ServerInfo oldServer = getServerIndex(infoList, i - 1);
if (oldServer == null){ if (oldServer == null){
startServers(null, newServer); TaskKit.scheduleWithFixedOne(()-> startServers(null, newServer),0);
}else { }else {
// 注册人数 // 注册人数
long registerNum = serverInfoDao.getRegisterNum(oldServer.getServer_id()); long registerNum = serverInfoDao.getRegisterNum(oldServer.getServer_id());
LOGGER.info("自动开服,人数判断,条件值:{},当前服务器人数:{}-{},将开服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id());
if (registerNum >= Integer.parseInt(setting.getValue())) { if (registerNum >= Integer.parseInt(setting.getValue())) {
LOGGER.info("自动开服,注册人数判断,条件值:{},当前服务器人数:{}-{},下一台服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id()); TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0);
startServers(oldServer, newServer);
} }
} }
// 更新时间 // 更新时间
date = now; dateMap.put(setting.getId(), now);
} }
} }
// 时间开服,每分钟 // 时间开服,每分钟
@ -170,9 +173,9 @@ public class AutoServerManager {
ServerInfo oldServer = getServerIndex(infoList, i - 1); ServerInfo oldServer = getServerIndex(infoList, i - 1);
// 比较时间是否一致,精确到分 // 比较时间是否一致,精确到分
boolean compareTime = DateUtil.compareTime(setting.getValue()); boolean compareTime = DateUtil.compareTime(setting.getValue());
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},将开服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id());
if (compareTime) { if (compareTime) {
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},下一台服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id()); TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0);
startServers(oldServer, newServer);
} }
} }
break; break;
@ -187,7 +190,8 @@ public class AutoServerManager {
/** /**
* *
*/ */
private static void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception { private static void startServers(ServerInfo oldServer, ServerInfo newServer) {
try {
// 停服脚本 // 停服脚本
delUser(newServer); delUser(newServer);
// 间隔30秒再获取开服数据 // 间隔30秒再获取开服数据
@ -201,7 +205,11 @@ public class AutoServerManager {
} }
// 新服务器状态更新 // 新服务器状态更新
updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id()); updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id());
LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕"); LOGGER.info("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
// LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
}
}catch (Exception e){
LOGGER.error("自动开服报错,{}",e.getMessage(),e);
} }
} }

View File

@ -42,7 +42,7 @@ public class JsonUtil {
String[] paramValues = request.getParameterValues(paramName); String[] paramValues = request.getParameterValues(paramName);
String paramValue = paramValues[0]; String paramValue = paramValues[0];
map.put(paramName, paramValue); map.put(paramName, paramValue);
LOGGER.info("parameter : " + paramName + "=" + paramValue); // LOGGER.info("parameter : " + paramName + "=" + paramValue);
} }
return map; return map;
} }

View File

@ -192,7 +192,7 @@ public abstract class TaskKit {
} }
catch (Throwable e) { catch (Throwable e) {
// 异常发生时姑且返回10个任务线程池 // 异常发生时姑且返回10个任务线程池
count = 5; count = 10;
} }
LOGGER.info("定时器线程启动,线程数量:{}",count); LOGGER.info("定时器线程启动,线程数量:{}",count);
return count; return count;

View File

@ -199,7 +199,7 @@
"value": values "value": values
}) })
, ,
url: "/addAutoServerSetting", url: "/uporsetAutoStartServerSetting",
dataType: "json", dataType: "json",
contentType: 'application/json', contentType: 'application/json',