diff --git a/chaos_api_common/src/main/java/cn/nopj/chaos_api/common/constants/ErrorCode.java b/chaos_api_common/src/main/java/cn/nopj/chaos_api/common/constants/ErrorCode.java index 128a772..a907cc6 100644 --- a/chaos_api_common/src/main/java/cn/nopj/chaos_api/common/constants/ErrorCode.java +++ b/chaos_api_common/src/main/java/cn/nopj/chaos_api/common/constants/ErrorCode.java @@ -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; // 业务错误码(领域-编号) diff --git a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DeviceServiceImpl.java b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DeviceServiceImpl.java index 438087d..cd0fc4e 100644 --- a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DeviceServiceImpl.java +++ b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DeviceServiceImpl.java @@ -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 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 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 impleme networkInterface.setRemark(i.getRemark()); networkInterfaceMapper.insert(networkInterface); - i.getAddressConfigs().forEach(a -> { + List 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 impleme interfaceAddressConfigMapper.insert(iac); List dnsServers = a.getDnsServers(); + if (dnsServers == null || dnsServers.isEmpty()) { + return; + } List 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); + } }); }); diff --git a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DnsServerServiceImpl.java b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DnsServerServiceImpl.java index 98f264a..55b1800 100644 --- a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DnsServerServiceImpl.java +++ b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/DnsServerServiceImpl.java @@ -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 implements DnsServerService { @@ -31,6 +33,18 @@ public class DnsServerServiceImpl extends ServiceImpl getDnsServerIdListByNameList(List nameList) { - return nameList.stream().map(this::getDnsServerIdByName).toList(); + + List dnsServers = this.baseMapper.selectList(null); + + if (dnsServers == null || dnsServers.isEmpty() ){ + throw new BizException(ErrorCode.DB_DNS_NOT_FOUND); + } + + Map map = new HashMap<>(); + for (DnsServer dnsServer : dnsServers) { + map.put(dnsServer.getName(), dnsServer.getId()); + } + + return nameList.stream().map(map::get).toList(); } }