feat(device): 实现设备创建时关联DNS映射配置
- 新增InterfaceDnsMapping实体及Mapper依赖注入 - 设备创建接口支持网络接口地址配置及DNS服务器绑定 - 优化事务管理,增强异常回滚机制 - 空值校验完善,避免空指针异常 - DNS服务查询逻辑优化,使用Map提高查找效率 - 增加数据库DNS记录不存在的错误码定义
This commit is contained in:
@@ -73,7 +73,8 @@ public enum ErrorCode {
|
|||||||
DNS_NOT_EXISTS_OR_PASSWORD_WRONG(401, "DNS-407", "DNS服务器不存在或密码错误"),
|
DNS_NOT_EXISTS_OR_PASSWORD_WRONG(401, "DNS-407", "DNS服务器不存在或密码错误"),
|
||||||
DNS_UPDATE_FAILED(400, "DNS-408", "DNS服务器更新失败"),
|
DNS_UPDATE_FAILED(400, "DNS-408", "DNS服务器更新失败"),
|
||||||
|
|
||||||
;
|
// 数据库
|
||||||
|
DB_DNS_NOT_FOUND( 404, "DB-401" , "数据库DNS服务器不存在" );
|
||||||
|
|
||||||
private final int httpStatus;
|
private final int httpStatus;
|
||||||
private final String code; // 业务错误码(领域-编号)
|
private final String code; // 业务错误码(领域-编号)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cn.nopj.chaos_api.common.constants.ErrorCode;
|
|||||||
import cn.nopj.chaos_api.common.exceotion.BizException;
|
import cn.nopj.chaos_api.common.exceotion.BizException;
|
||||||
import cn.nopj.chaos_api.domain.entity.Device;
|
import cn.nopj.chaos_api.domain.entity.Device;
|
||||||
import cn.nopj.chaos_api.domain.entity.InterfaceAddressConfig;
|
import cn.nopj.chaos_api.domain.entity.InterfaceAddressConfig;
|
||||||
|
import cn.nopj.chaos_api.domain.entity.InterfaceDnsMapping;
|
||||||
import cn.nopj.chaos_api.domain.entity.NetworkInterface;
|
import cn.nopj.chaos_api.domain.entity.NetworkInterface;
|
||||||
import cn.nopj.chaos_api.dto.request.CreateDeviceRequest;
|
import cn.nopj.chaos_api.dto.request.CreateDeviceRequest;
|
||||||
import cn.nopj.chaos_api.dto.request.DeviceQueryRequest;
|
import cn.nopj.chaos_api.dto.request.DeviceQueryRequest;
|
||||||
@@ -11,6 +12,7 @@ import cn.nopj.chaos_api.dto.request.UpdateDeviceRequest;
|
|||||||
import cn.nopj.chaos_api.dto.response.DeviceResponse;
|
import cn.nopj.chaos_api.dto.response.DeviceResponse;
|
||||||
import cn.nopj.chaos_api.mapper.DeviceMapper;
|
import cn.nopj.chaos_api.mapper.DeviceMapper;
|
||||||
import cn.nopj.chaos_api.mapper.InterfaceAddressConfigMapper;
|
import cn.nopj.chaos_api.mapper.InterfaceAddressConfigMapper;
|
||||||
|
import cn.nopj.chaos_api.mapper.InterfaceDnsMappingMapper;
|
||||||
import cn.nopj.chaos_api.mapper.NetworkInterfaceMapper;
|
import cn.nopj.chaos_api.mapper.NetworkInterfaceMapper;
|
||||||
import cn.nopj.chaos_api.service.DeviceService;
|
import cn.nopj.chaos_api.service.DeviceService;
|
||||||
import cn.nopj.chaos_api.service.DnsServerService;
|
import cn.nopj.chaos_api.service.DnsServerService;
|
||||||
@@ -19,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -36,22 +39,24 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
|||||||
InterfaceAddressConfigMapper interfaceAddressConfigMapper;
|
InterfaceAddressConfigMapper interfaceAddressConfigMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
DnsServerService dnsServerService;
|
DnsServerService dnsServerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
InterfaceDnsMappingMapper interfaceDnsMappingMapper;
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public DeviceResponse createDevice(CreateDeviceRequest createDeviceRequest) {
|
public DeviceResponse createDevice(CreateDeviceRequest createDeviceRequest) {
|
||||||
Device device = new Device();
|
Device device = new Device();
|
||||||
device.setName(createDeviceRequest.getName());
|
BeanUtils.copyProperties(createDeviceRequest, device);
|
||||||
device.setModel(createDeviceRequest.getModel());
|
|
||||||
device.setTypeId(createDeviceRequest.getTypeId());
|
|
||||||
device.setLocationId(createDeviceRequest.getLocationId());
|
|
||||||
device.setSnmpCommunity(createDeviceRequest.getSnmpCommunity());
|
|
||||||
device.setManufacturer(createDeviceRequest.getManufacturer());
|
|
||||||
device.setPurchaseDate(createDeviceRequest.getPurchaseDate());
|
|
||||||
device.setRemark(createDeviceRequest.getRemark());
|
|
||||||
int rows = this.baseMapper.insert(device);
|
int rows = this.baseMapper.insert(device);
|
||||||
|
|
||||||
|
|
||||||
List<CreateDeviceRequest.NetworkInterfaceRequest> interfaces = createDeviceRequest.getInterfaces();
|
List<CreateDeviceRequest.NetworkInterfaceRequest> interfaces = createDeviceRequest.getInterfaces();
|
||||||
|
|
||||||
|
if (interfaces == null || interfaces.isEmpty()) {
|
||||||
|
return new DeviceResponse(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
interfaces.forEach(i -> {
|
interfaces.forEach(i -> {
|
||||||
NetworkInterface networkInterface = new NetworkInterface();
|
NetworkInterface networkInterface = new NetworkInterface();
|
||||||
networkInterface.setDeviceId(device.getId());
|
networkInterface.setDeviceId(device.getId());
|
||||||
@@ -63,8 +68,15 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
|||||||
networkInterface.setRemark(i.getRemark());
|
networkInterface.setRemark(i.getRemark());
|
||||||
networkInterfaceMapper.insert(networkInterface);
|
networkInterfaceMapper.insert(networkInterface);
|
||||||
|
|
||||||
i.getAddressConfigs().forEach(a -> {
|
List<CreateDeviceRequest.InterfaceAddressConfigRequest> addressConfigs = i.getAddressConfigs();
|
||||||
|
|
||||||
|
if (addressConfigs == null || addressConfigs.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
addressConfigs.forEach(a -> {
|
||||||
InterfaceAddressConfig iac = new InterfaceAddressConfig();
|
InterfaceAddressConfig iac = new InterfaceAddressConfig();
|
||||||
|
iac.setInterfaceId(networkInterface.getId());
|
||||||
iac.setVlanId(a.getVlanId());
|
iac.setVlanId(a.getVlanId());
|
||||||
iac.setIpAddress(a.getIpAddress());
|
iac.setIpAddress(a.getIpAddress());
|
||||||
iac.setGatewayIp(a.getGatewayIp());
|
iac.setGatewayIp(a.getGatewayIp());
|
||||||
@@ -76,8 +88,17 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
|||||||
interfaceAddressConfigMapper.insert(iac);
|
interfaceAddressConfigMapper.insert(iac);
|
||||||
|
|
||||||
List<String> dnsServers = a.getDnsServers();
|
List<String> dnsServers = a.getDnsServers();
|
||||||
|
if (dnsServers == null || dnsServers.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<Long> dnsServerIdListByNameList = dnsServerService.getDnsServerIdListByNameList(dnsServers);
|
List<Long> dnsServerIdListByNameList = dnsServerService.getDnsServerIdListByNameList(dnsServers);
|
||||||
|
for (int j = 0; j < dnsServerIdListByNameList.size(); j++) {
|
||||||
|
InterfaceDnsMapping mapping = new InterfaceDnsMapping();
|
||||||
|
mapping.setConfigId(iac.getId());
|
||||||
|
mapping.setDnsServerId(dnsServerIdListByNameList.get(j));
|
||||||
|
mapping.setPriority(j);
|
||||||
|
interfaceDnsMappingMapper.insert(mapping);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DnsServerServiceImpl extends ServiceImpl<DnsServerMapper, DnsServer> implements DnsServerService {
|
public class DnsServerServiceImpl extends ServiceImpl<DnsServerMapper, DnsServer> implements DnsServerService {
|
||||||
@@ -31,6 +33,18 @@ public class DnsServerServiceImpl extends ServiceImpl<DnsServerMapper, DnsServer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Long> getDnsServerIdListByNameList(List<String> nameList) {
|
public List<Long> getDnsServerIdListByNameList(List<String> nameList) {
|
||||||
return nameList.stream().map(this::getDnsServerIdByName).toList();
|
|
||||||
|
List<DnsServer> dnsServers = this.baseMapper.selectList(null);
|
||||||
|
|
||||||
|
if (dnsServers == null || dnsServers.isEmpty() ){
|
||||||
|
throw new BizException(ErrorCode.DB_DNS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Long> map = new HashMap<>();
|
||||||
|
for (DnsServer dnsServer : dnsServers) {
|
||||||
|
map.put(dnsServer.getName(), dnsServer.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
return nameList.stream().map(map::get).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user