feat(device): 完善设备及网络接口管理功能

- 新增网络接口及地址配置相关实体类与映射
- 扩展 CreateDeviceRequest 支持嵌套接口与地址配置
- 调整设备类型实体类字段并增强逻辑删除支持
- 优化数据表结构,分离接口属性与地址配置
- 新增 DNS 服务器及相关映射实体支持
- 实现设备创建事务中同步保存接口与地址信息
- 调整 MyBatis Plus 逻辑删除配置与时间字段类型
- 重构 data.sql 初始化脚本,完善表间外键约束
This commit is contained in:
Chaos
2025-11-28 21:46:52 +08:00
parent 3f8dc871ab
commit cc70d867c1
17 changed files with 705 additions and 184 deletions

View File

@@ -3,26 +3,36 @@ package cn.nopj.chaos_api.service.impl;
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.NetworkInterface;
import cn.nopj.chaos_api.dto.request.CreateDeviceRequest;
import cn.nopj.chaos_api.dto.request.DeviceQueryRequest;
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.NetworkInterfaceMapper;
import cn.nopj.chaos_api.service.DeviceService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Objects;
@Service
@Slf4j
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
@Autowired
NetworkInterfaceMapper networkInterfaceMapper;
@Autowired
InterfaceAddressConfigMapper interfaceAddressConfigMapper;
@Override
@Transactional
public DeviceResponse createDevice(CreateDeviceRequest createDeviceRequest) {
@@ -34,10 +44,37 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
device.setSnmpCommunity(createDeviceRequest.getSnmpCommunity());
device.setManufacturer(createDeviceRequest.getManufacturer());
device.setPurchaseDate(createDeviceRequest.getPurchaseDate());
device.setStatus(createDeviceRequest.getStatus());
device.setRemark(createDeviceRequest.getRemark());
int rows = this.baseMapper.insert(device);
List<CreateDeviceRequest.NetworkInterfaceRequest> interfaces = createDeviceRequest.getInterfaces();
interfaces.forEach(i -> {
NetworkInterface networkInterface = new NetworkInterface();
networkInterface.setDeviceId(device.getId());
networkInterface.setName(i.getName());
networkInterface.setType(i.getType());
networkInterface.setMacAddress(i.getMacAddress());
networkInterface.setPortSpeed(i.getPortSpeed());
networkInterface.setDuplex(i.getDuplex());
networkInterface.setRemark(i.getRemark());
networkInterfaceMapper.insert(networkInterface);
i.getAddressConfigs().forEach(a -> {
InterfaceAddressConfig iac = new InterfaceAddressConfig();
iac.setVlanId(a.getVlanId());
iac.setIpAddress(a.getIpAddress());
iac.setGatewayIp(a.getGatewayIp());
iac.setSubnetMask(a.getSubnetMask());
iac.setBroadcastAddress(a.getBroadcastAddress());
iac.setIsPrimary(a.getIsPrimary());
iac.setIsDhcp(a.getIsDhcp());
iac.setMtu(a.getMtu());
interfaceAddressConfigMapper.insert(iac);
});
});
if (rows > 0){
return new DeviceResponse(device);
}else {

View File

@@ -2,7 +2,6 @@ package cn.nopj.chaos_api.service.impl;
import cn.nopj.chaos_api.domain.entity.Role;
import cn.nopj.chaos_api.dto.response.OptionResponse;
import cn.nopj.chaos_api.dto.response.RoleResponse;
import cn.nopj.chaos_api.mapper.RoleMapper;
import cn.nopj.chaos_api.service.RoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;