From 17670792495756b30d70bd4babbec819b6ccde3d Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Fri, 6 Jun 2025 15:58:49 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E5=A4=8D=E5=88=B6=E4=B8=BB=E6=9C=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asset/controller/HostController.java | 11 ++++++ .../module/asset/convert/HostConvert.java | 2 ++ .../visor/module/asset/dao/HostConfigDAO.java | 14 ++++++++ .../asset/service/HostConfigService.java | 11 ++++++ .../asset/service/HostExtraService.java | 8 +++++ .../module/asset/service/HostService.java | 9 +++++ .../service/impl/HostConfigServiceImpl.java | 34 +++++++++++++++++++ .../service/impl/HostExtraServiceImpl.java | 23 +++++++++++++ .../asset/service/impl/HostServiceImpl.java | 25 +++++++++++--- 9 files changed, 133 insertions(+), 4 deletions(-) diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostController.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostController.java index 3b7629f7..9520f585 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostController.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostController.java @@ -84,6 +84,17 @@ public class HostController { return hostService.updateHostById(request); } + @DemoDisableApi + @OperatorLog(HostOperatorType.CREATE) + @PostMapping("/copy") + @Operation(summary = "复制主机") + @PreAuthorize("@ss.hasPermission('asset:host:create')") + public Long copyHost(@Validated @RequestBody HostUpdateRequest request) { + Long id = request.getId(); + request.setId(null); + return hostService.copyHost(id, request); + } + @DemoDisableApi @OperatorLog(HostOperatorType.UPDATE_STATUS) @PutMapping("/update-status") diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/convert/HostConvert.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/convert/HostConvert.java index b91ed80e..55fc70e1 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/convert/HostConvert.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/convert/HostConvert.java @@ -61,6 +61,8 @@ public interface HostConvert { HostBaseVO toBase(HostDO domain); + HostCreateRequest toCreate(HostUpdateRequest request); + List toList(List domain); List toBaseList(List domain); diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostConfigDAO.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostConfigDAO.java index 59dd7e6d..53b52021 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostConfigDAO.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/dao/HostConfigDAO.java @@ -57,6 +57,20 @@ public interface HostConfigDAO extends IMapper { .getOne(); } + /** + * 通过 hostId 查询 + * + * @param hostId hostId + * @return config + */ + default List selectByHostId(Long hostId) { + return this.of() + .createWrapper() + .eq(HostConfigDO::getHostId, hostId) + .then() + .list(); + } + /** * 更新配置状态 * diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostConfigService.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostConfigService.java index c3efacc4..2595ba88 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostConfigService.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostConfigService.java @@ -26,6 +26,8 @@ import org.dromara.visor.common.handler.data.model.GenericsDataModel; import org.dromara.visor.module.asset.entity.request.host.HostConfigQueryRequest; import org.dromara.visor.module.asset.entity.request.host.HostConfigUpdateRequest; +import java.util.List; + /** * 主机配置 服务类 * @@ -43,6 +45,15 @@ public interface HostConfigService { */ Integer updateHostConfig(HostConfigUpdateRequest request); + /** + * 复制主机配置 + * + * @param originId originId + * @param newId newId + * @param types types + */ + void copyHostConfig(Long originId, Long newId, List types); + /** * 获取主机配置 * diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostExtraService.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostExtraService.java index 181dfd83..2a512c05 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostExtraService.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostExtraService.java @@ -75,4 +75,12 @@ public interface HostExtraService { */ Integer updateHostExtra(HostExtraUpdateRequest request); + /** + * 复制主机拓展信息 + * + * @param originId originId + * @param newId newId + */ + void copyHostExtra(Long originId, Long newId); + } diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostService.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostService.java index 3866c505..f9f33e10 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostService.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/HostService.java @@ -47,6 +47,15 @@ public interface HostService { */ Long createHost(HostCreateRequest request); + /** + * 复制主机 + * + * @param originId originId + * @param request request + * @return id + */ + Long copyHost(Long originId, HostUpdateRequest request); + /** * 通过 id 更新主机 * diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostConfigServiceImpl.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostConfigServiceImpl.java index 0e291d2e..d3370f8d 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostConfigServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostConfigServiceImpl.java @@ -22,6 +22,8 @@ */ package org.dromara.visor.module.asset.service.impl; +import cn.orionsec.kit.lang.function.Functions; +import cn.orionsec.kit.lang.utils.Strings; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.dromara.visor.common.constant.ErrorMessage; @@ -42,6 +44,10 @@ import org.dromara.visor.module.asset.service.HostConfigService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 主机配置 服务实现类 @@ -102,6 +108,34 @@ public class HostConfigServiceImpl implements HostConfigService { } } + @Override + public void copyHostConfig(Long originId, Long newId, List types) { + // 查询原始主机配置 + Map originHostConfigMap = hostConfigDAO.selectByHostId(originId) + .stream() + .collect(Collectors.toMap(HostConfigDO::getType, + HostConfigDO::getConfig, + Functions.right())); + // 新增 + List records = new ArrayList<>(); + for (String type : types) { + // 获取原始配置 + String configValue = originHostConfigMap.get(type); + if (Strings.isBlank(configValue)) { + // 获取默认值 + configValue = HostTypeEnum.of(type).getDefault().serial(); + } + HostConfigDO newConfig = HostConfigDO.builder() + .hostId(newId) + .type(type) + .status(EnableStatus.ENABLED.name()) + .config(configValue) + .build(); + records.add(newConfig); + } + hostConfigDAO.insertBatch(records); + } + @Override public T getHostConfig(Long hostId, String type) { // 查询配置信息 diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostExtraServiceImpl.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostExtraServiceImpl.java index e1e4fc1a..fadede43 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostExtraServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostExtraServiceImpl.java @@ -123,6 +123,29 @@ public class HostExtraServiceImpl implements HostExtraService { return dataExtraApi.updateExtraValue(beforeExtraItem.getId(), newExtra.serial()); } + @Override + public void copyHostExtra(Long originId, Long newId) { + // 查询原始配置 + DataExtraQueryDTO query = DataExtraQueryDTO.builder() + .userId(Const.SYSTEM_USER_ID) + .relId(originId) + .build(); + List items = dataExtraApi.getExtraItems(query, DataExtraTypeEnum.HOST); + if (items.isEmpty()) { + return; + } + // 插入新配置 + List newItems = items.stream() + .map(s -> DataExtraSetDTO.builder() + .userId(Const.SYSTEM_USER_ID) + .relId(newId) + .item(s.getItem()) + .value(s.getValue()) + .build()) + .collect(Collectors.toList()); + dataExtraApi.addExtraItems(newItems, DataExtraTypeEnum.HOST); + } + /** * 检查配置项并且转为视图 (不存在则初始化默认值) * diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostServiceImpl.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostServiceImpl.java index 7ea0a61d..0dc34d70 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostServiceImpl.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/service/impl/HostServiceImpl.java @@ -49,10 +49,7 @@ import org.dromara.visor.module.asset.entity.vo.HostVO; import org.dromara.visor.module.asset.enums.HostExtraItemEnum; import org.dromara.visor.module.asset.enums.HostStatusEnum; import org.dromara.visor.module.asset.handler.host.extra.model.HostSpecExtraModel; -import org.dromara.visor.module.asset.service.ExecJobHostService; -import org.dromara.visor.module.asset.service.ExecTemplateHostService; -import org.dromara.visor.module.asset.service.HostExtraService; -import org.dromara.visor.module.asset.service.HostService; +import org.dromara.visor.module.asset.service.*; import org.dromara.visor.module.infra.api.DataExtraApi; import org.dromara.visor.module.infra.api.DataGroupRelApi; import org.dromara.visor.module.infra.api.FavoriteApi; @@ -91,6 +88,9 @@ public class HostServiceImpl implements HostService { @Resource private HostConfigDAO hostConfigDAO; + @Resource + private HostConfigService hostConfigService; + @Resource private HostExtraService hostExtraService; @@ -138,6 +138,23 @@ public class HostServiceImpl implements HostService { return id; } + @Override + @Transactional(rollbackFor = Exception.class) + public Long copyHost(Long originId, HostUpdateRequest request) { + log.info("HostService-copyHost originId: {}, request: {}", originId, JSON.toJSONString(request)); + // 查询原始主机 + HostDO originHost = hostDAO.selectById(originId); + Valid.notNull(originHost, ErrorMessage.HOST_ABSENT); + // 创建主机 + Long newId = SpringHolder.getBean(HostService.class) + .createHost(HostConvert.MAPPER.toCreate(request)); + // 复制主机额外信息 + hostExtraService.copyHostExtra(originId, newId); + // 复制主机配置信息 + hostConfigService.copyHostConfig(originId, newId, request.getTypes()); + return newId; + } + @Override @Transactional(rollbackFor = Exception.class) public Integer updateHostById(HostUpdateRequest request) {