From b4793046872db1c0137112574508de18b615ca20 Mon Sep 17 00:00:00 2001 From: Chaos Date: Sat, 29 Nov 2025 07:23:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(device):=20=E5=AE=9E=E7=8E=B0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=88=9B=E5=BB=BA=E6=97=B6=E5=85=B3=E8=81=94DNS?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增InterfaceDnsMapping实体及Mapper依赖注入 - 设备创建接口支持网络接口地址配置及DNS服务器绑定 - 优化事务管理,增强异常回滚机制 - 空值校验完善,避免空指针异常 - DNS服务查询逻辑优化,使用Map提高查找效率 - 增加数据库DNS记录不存在的错误码定义 --- .../chaos_api/common/constants/ErrorCode.java | 3 +- .../service/impl/DeviceServiceImpl.java | 43 ++++++++++++++----- .../service/impl/DnsServerServiceImpl.java | 16 ++++++- 3 files changed, 49 insertions(+), 13 deletions(-) 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(); } }