diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java index 6161c807..8019c8e0 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java @@ -51,6 +51,7 @@ public enum ExceptionConstant { // 端口池管理(13000) PORT_CANNOT_REPEAT(13000,"端口不能重复"), PORT_NOT_EXIST(13001, "该端口在端口池中不存在"), + PORT_RANGE_FAIL(13002, "端口值范围为MIN-MAX"), // 端口映射管理(14000) PORT_MAPPING_NOT_EXIST(14000, "端口映射记录不存在"), PORT_CANNOT_REPEAT_MAPPING(14001, "服务端口[{}]不能重复映射"), diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/PortPoolController.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/PortPoolController.java index e3de45f2..26db07de 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/PortPoolController.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/PortPoolController.java @@ -71,7 +71,7 @@ public class PortPoolController { @Authorization(onlyAdmin = true) public PortPoolCreateRes create(PortPoolCreateReq req) { ParamCheckUtil.checkNotNull(req, "req"); - ParamCheckUtil.checkNotNull(req.getPort(), "port"); + ParamCheckUtil.checkNotEmpty(req.getPort(), "port"); ParamCheckUtil.checkNotNull(req.getGroupId(), "groupId"); return portPoolService.create(req); diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/req/system/PortPoolCreateReq.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/req/system/PortPoolCreateReq.java index 802dfd15..4654b0bd 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/req/system/PortPoolCreateReq.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/controller/req/system/PortPoolCreateReq.java @@ -30,7 +30,7 @@ import lombok.Data; */ @Data public class PortPoolCreateReq { - private Integer port; + private String port; private Integer groupId; } diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java index b5faf42d..037dba9c 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java @@ -18,7 +18,9 @@ import fun.asgc.neutrino.proxy.server.dal.PortMappingMapper; import fun.asgc.neutrino.proxy.server.dal.PortPoolMapper; import fun.asgc.neutrino.proxy.server.dal.entity.*; import fun.asgc.neutrino.proxy.server.util.ParamCheckUtil; +import lombok.extern.slf4j.Slf4j; import ma.glasnost.orika.MapperFacade; +import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.solon.annotation.Db; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; @@ -26,13 +28,17 @@ import org.noear.solon.annotation.Inject; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import java.util.stream.Collectors; +import static fun.asgc.neutrino.proxy.server.constant.ExceptionConstant.*; + /** * * @author: aoshiguchen * @date: 2022/8/7 */ +@Slf4j @Component public class PortPoolService { @Inject @@ -83,23 +89,38 @@ public class PortPoolService { } public PortPoolCreateRes create(PortPoolCreateReq req) { - PortPoolDO oldPortPoolDO = portPoolMapper.findByPort(req.getPort()); - ParamCheckUtil.checkMustNull(oldPortPoolDO, ExceptionConstant.PORT_CANNOT_REPEAT); - PortGroupDO portGroupDO = portGroupMapper.selectById(req.getGroupId()); - ParamCheckUtil.checkNotNull(portGroupDO, ExceptionConstant.PORT_GROUP_NAME_DOES_NOT_EXIST); - - Date now = new Date(); - - portPoolMapper.insert(new PortPoolDO() - .setPort(req.getPort()) - .setGroupId(req.getGroupId()) - .setEnable(EnableStatusEnum.ENABLE.getStatus()) - .setCreateTime(now) - .setUpdateTime(now) - ); - // 更新visitorChannel - visitorChannelService.updateVisitorChannelByPortPool(req.getPort(), EnableStatusEnum.ENABLE.getStatus()); - + Consumer consumer = port -> { + PortPoolDO oldPortPoolDO = portPoolMapper.findByPort(port); + ParamCheckUtil.checkMustNull(oldPortPoolDO, PORT_CANNOT_REPEAT); + PortGroupDO portGroupDO = portGroupMapper.selectById(req.getGroupId()); + ParamCheckUtil.checkNotNull(portGroupDO, PORT_GROUP_NAME_DOES_NOT_EXIST); + Date now = new Date(); + portPoolMapper.insert(new PortPoolDO() + .setPort(port) + .setGroupId(req.getGroupId()) + .setEnable(EnableStatusEnum.ENABLE.getStatus()) + .setCreateTime(now) + .setUpdateTime(now) + ); + // 更新visitorChannel + visitorChannelService.updateVisitorChannelByPortPool(port, EnableStatusEnum.ENABLE.getStatus()); + }; + String[] portArr = StringUtils.split(req.getPort(), "-"); + if(portArr.length == 1){ + Integer port = Integer.valueOf(portArr[0]); + consumer.accept(port); + }else if(portArr.length == 2){ + int min = Integer.parseInt(portArr[0]),max = Integer.parseInt(portArr[1]); + for (int i = min; i <= max; i++) { + try { + consumer.accept(i); + } catch (Exception e) { + log.warn("bulk add port err:{}",e.getMessage()); + } + } + }else{ + throw ServiceException.create(PORT_RANGE_FAIL); + } return new PortPoolCreateRes(); }