端口池添加时,可输入端口范围:如10000-10005

This commit is contained in:
谭勇
2023-03-28 17:04:31 +08:00
parent 00d2918e76
commit d0de78ce60
4 changed files with 41 additions and 19 deletions
@@ -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, "服务端口[{}]不能重复映射"),
@@ -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);
@@ -30,7 +30,7 @@ import lombok.Data;
*/
@Data
public class PortPoolCreateReq {
private Integer port;
private String port;
private Integer groupId;
}
@@ -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<Integer> 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();
}