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_UPDATE_FAILED(400, "DNS-408", "DNS服务器更新失败"),
|
||||
|
||||
;
|
||||
// 数据库
|
||||
DB_DNS_NOT_FOUND( 404, "DB-401" , "数据库DNS服务器不存在" );
|
||||
|
||||
private final int httpStatus;
|
||||
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.domain.entity.Device;
|
||||
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.dto.request.CreateDeviceRequest;
|
||||
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.mapper.DeviceMapper;
|
||||
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.service.DeviceService;
|
||||
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.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -36,22 +39,24 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
||||
InterfaceAddressConfigMapper interfaceAddressConfigMapper;
|
||||
@Autowired
|
||||
DnsServerService dnsServerService;
|
||||
|
||||
@Autowired
|
||||
InterfaceDnsMappingMapper interfaceDnsMappingMapper;
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public DeviceResponse createDevice(CreateDeviceRequest createDeviceRequest) {
|
||||
Device device = new Device();
|
||||
device.setName(createDeviceRequest.getName());
|
||||
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());
|
||||
BeanUtils.copyProperties(createDeviceRequest, device);
|
||||
int rows = this.baseMapper.insert(device);
|
||||
|
||||
|
||||
List<CreateDeviceRequest.NetworkInterfaceRequest> interfaces = createDeviceRequest.getInterfaces();
|
||||
|
||||
if (interfaces == null || interfaces.isEmpty()) {
|
||||
return new DeviceResponse(device);
|
||||
}
|
||||
|
||||
|
||||
interfaces.forEach(i -> {
|
||||
NetworkInterface networkInterface = new NetworkInterface();
|
||||
networkInterface.setDeviceId(device.getId());
|
||||
@@ -63,8 +68,15 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
||||
networkInterface.setRemark(i.getRemark());
|
||||
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();
|
||||
iac.setInterfaceId(networkInterface.getId());
|
||||
iac.setVlanId(a.getVlanId());
|
||||
iac.setIpAddress(a.getIpAddress());
|
||||
iac.setGatewayIp(a.getGatewayIp());
|
||||
@@ -76,8 +88,17 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
|
||||
interfaceAddressConfigMapper.insert(iac);
|
||||
|
||||
List<String> dnsServers = a.getDnsServers();
|
||||
if (dnsServers == null || dnsServers.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
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 org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class DnsServerServiceImpl extends ServiceImpl<DnsServerMapper, DnsServer> implements DnsServerService {
|
||||
@@ -31,6 +33,18 @@ public class DnsServerServiceImpl extends ServiceImpl<DnsServerMapper, DnsServer
|
||||
|
||||
@Override
|
||||
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