From 4f50faaf6de18cfc3379bb47cd4aa782748ece45 Mon Sep 17 00:00:00 2001 From: "PC-202302260912\\Administrator" <1769111741@qq.com> Date: Wed, 16 Aug 2023 10:58:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=BC=80=E6=9C=8D=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jmfy/controller/ServerInfoController.java | 45 ++++++++-------- .../com/jmfy/utils/AutoServerManager.java | 54 +++++++++++-------- src/main/java/com/jmfy/utils/JsonUtil.java | 2 +- src/main/java/com/jmfy/utils/TaskKit.java | 2 +- .../templates/server/AssSettingAdd.html | 2 +- 5 files changed, 57 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/jmfy/controller/ServerInfoController.java b/src/main/java/com/jmfy/controller/ServerInfoController.java index 2dda87a..0b4fad8 100644 --- a/src/main/java/com/jmfy/controller/ServerInfoController.java +++ b/src/main/java/com/jmfy/controller/ServerInfoController.java @@ -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 - int updateAutoServerSetting(@RequestBody AssSetting setting) throws Exception { + int uporsetAutoStartServerSetting(@RequestBody AssSetting setting) throws Exception { AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId()); if (info == null){ - return 0; + serverInfoDao.insertAssSettingInfo(setting); + }else { + serverInfoDao.updateAssSettingInfo(setting); } - serverInfoDao.updateAssSettingInfo(setting); AutoServerManager.initAssSettingMap(); return 1; } @@ -547,24 +548,24 @@ public class ServerInfoController { return 1; } - /** - * 新增自动开服配置 - */ - @RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET}) - public @ResponseBody - int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception { - Set set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet()); - if (!set.contains(setting.getId())){ - return 2;// 子渠道不存在 - } - AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId()); - if (info != null){ - return 0;// 渠道已配置自动开服 - } - serverInfoDao.insertAssSettingInfo(setting); - AutoServerManager.initAssSettingMap(); - return 1; - } +// /** +// * 新增自动开服配置 +// */ +// @RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET}) +// public @ResponseBody +// int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception { +// Set set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet()); +// if (!set.contains(setting.getId())){ +// return 2;// 子渠道不存在 +// } +// AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId()); +// if (info != null){ +// return 0;// 渠道已配置自动开服 +// } +// serverInfoDao.insertAssSettingInfo(setting); +// AutoServerManager.initAssSettingMap(); +// return 1; +// } /** * 删除自动开服配置 diff --git a/src/main/java/com/jmfy/utils/AutoServerManager.java b/src/main/java/com/jmfy/utils/AutoServerManager.java index 4bde5c2..b3eb5dc 100644 --- a/src/main/java/com/jmfy/utils/AutoServerManager.java +++ b/src/main/java/com/jmfy/utils/AutoServerManager.java @@ -2,6 +2,7 @@ package com.jmfy.utils; import com.jmfy.controller.LoginController; import com.jmfy.dao.ServerInfoDao; +import com.jmfy.handler.GMHandler; import com.jmfy.model.AssSetting; import com.jmfy.model.CServerOpenTime; import com.jmfy.model.ServerInfo; @@ -62,7 +63,7 @@ public class AutoServerManager { AutoServerManager.redisPwd = redisPwd; } - private static long date = 0; + private static Map dateMap = new HashMap<>(); private static final long TIME = DateUtil.ONE_MINUTE * 3; @@ -139,7 +140,7 @@ public class AutoServerManager { // 获取全部服务器列表,排除非未运营和准备中的服务器,正序排列 List infoList = getServerInfoMap().values().stream().filter(v->v.getSub_channel().equals(setting.getId())).sorted().collect(Collectors.toList()); if (infoList.isEmpty()) { - return; + continue; } for (int i = 0; i < infoList.size(); i++) { ServerInfo newServer = infoList.get(i); @@ -149,20 +150,22 @@ public class AutoServerManager { // 注册人数 if (REGISTER == setting.getType()) { // 注册人数3分钟检查一次 - if (now >= (date + TIME)) { + long time = dateMap.getOrDefault(setting.getId(), 0L) + TIME; + if (now >= time) { ServerInfo oldServer = getServerIndex(infoList, i - 1); if (oldServer == null){ - startServers(null, newServer); + TaskKit.scheduleWithFixedOne(()-> startServers(null, newServer),0); + }else { // 注册人数 long registerNum = serverInfoDao.getRegisterNum(oldServer.getServer_id()); + LOGGER.info("自动开服,人数判断,条件值:{},当前服务器人数:{}-{},将开服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id()); if (registerNum >= Integer.parseInt(setting.getValue())) { - LOGGER.info("自动开服,注册人数判断,条件值:{},当前服务器人数:{}-{},下一台服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id()); - startServers(oldServer, newServer); + TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0); } } // 更新时间 - date = now; + dateMap.put(setting.getId(), now); } } // 时间开服,每分钟 @@ -170,9 +173,9 @@ public class AutoServerManager { ServerInfo oldServer = getServerIndex(infoList, i - 1); // 比较时间是否一致,精确到分 boolean compareTime = DateUtil.compareTime(setting.getValue()); + LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},将开服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id()); if (compareTime) { - LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},下一台服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id()); - startServers(oldServer, newServer); + TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0); } } break; @@ -187,21 +190,26 @@ public class AutoServerManager { /** * 自动开服封装 */ - private static void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception { - // 停服脚本 - delUser(newServer); - // 间隔30秒再获取开服数据 - Thread.sleep(DateUtil.ONE_SECOND * 30); - // 验证 - boolean serverStatus = verifyServerStatus(newServer); - if (serverStatus){ - // 旧服务器状态更新 - if (oldServer != null){ - updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, oldServer.getServer_id()); + private static void startServers(ServerInfo oldServer, ServerInfo newServer) { + try { + // 停服脚本 + delUser(newServer); + // 间隔30秒再获取开服数据 + Thread.sleep(DateUtil.ONE_SECOND * 30); + // 验证 + boolean serverStatus = verifyServerStatus(newServer); + if (serverStatus){ + // 旧服务器状态更新 + if (oldServer != null){ + updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, oldServer.getServer_id()); + } + // 新服务器状态更新 + updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id()); + LOGGER.info("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕"); +// LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕"); } - // 新服务器状态更新 - updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id()); - LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕"); + }catch (Exception e){ + LOGGER.error("自动开服报错,{}",e.getMessage(),e); } } diff --git a/src/main/java/com/jmfy/utils/JsonUtil.java b/src/main/java/com/jmfy/utils/JsonUtil.java index 9ac754b..8482137 100644 --- a/src/main/java/com/jmfy/utils/JsonUtil.java +++ b/src/main/java/com/jmfy/utils/JsonUtil.java @@ -42,7 +42,7 @@ public class JsonUtil { String[] paramValues = request.getParameterValues(paramName); String paramValue = paramValues[0]; map.put(paramName, paramValue); - LOGGER.info("parameter : " + paramName + "=" + paramValue); +// LOGGER.info("parameter : " + paramName + "=" + paramValue); } return map; } diff --git a/src/main/java/com/jmfy/utils/TaskKit.java b/src/main/java/com/jmfy/utils/TaskKit.java index 8315d8c..ea935c6 100644 --- a/src/main/java/com/jmfy/utils/TaskKit.java +++ b/src/main/java/com/jmfy/utils/TaskKit.java @@ -192,7 +192,7 @@ public abstract class TaskKit { } catch (Throwable e) { // 异常发生时姑且返回10个任务线程池 - count = 5; + count = 10; } LOGGER.info("定时器线程启动,线程数量:{}",count); return count; diff --git a/src/main/resources/templates/server/AssSettingAdd.html b/src/main/resources/templates/server/AssSettingAdd.html index 21c4f9a..c812bf2 100644 --- a/src/main/resources/templates/server/AssSettingAdd.html +++ b/src/main/resources/templates/server/AssSettingAdd.html @@ -199,7 +199,7 @@ "value": values }) , - url: "/addAutoServerSetting", + url: "/uporsetAutoStartServerSetting", dataType: "json", contentType: 'application/json',