diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/GenericsDataDefinition.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/GenericsDataDefinition.java new file mode 100644 index 00000000..171f9964 --- /dev/null +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/GenericsDataDefinition.java @@ -0,0 +1,56 @@ +package com.orion.ops.framework.common.handler.data; + +import com.alibaba.fastjson.JSON; +import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; +import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.spring.SpringHolder; + +/** + * 标准数据定义 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/21 0:07 + */ +public interface GenericsDataDefinition { + + /** + * 获取数据模型类型 + * + * @return class + */ + Class getType(); + + /** + * 获取数据处理策略 + * + * @return class + */ + Class> getStrategy(); + + /** + * 获取数据模型策略处理器 + * + * @param Model + * @param Strategy + * @return StrategyBean + */ + @SuppressWarnings("unchecked") + default > Strategy getStrategyBean() { + return (Strategy) SpringHolder.getBean(this.getStrategy()); + } + + /** + * 反序列化对象 + * + * @param json json + * @param Model + * @return object + */ + @SuppressWarnings("unchecked") + default Model parse(String json) { + return (Model) JSON.parseObject(json, this.getType()); + } + + +} diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/GenericsDataStrategy.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/GenericsDataStrategy.java index edad1453..0947da95 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/GenericsDataStrategy.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/GenericsDataStrategy.java @@ -9,43 +9,60 @@ import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; * @version 1.0.0 * @since 2023/12/20 22:09 */ -public interface GenericsDataStrategy { +public interface GenericsDataStrategy { /** * 获取默认值 * * @return 默认值 */ - Config getDefault(); + Model getDefault(); /** * 更新填充 * - * @param before 修改前配置 - * @param after 修改后配置 + * @param beforeModel 修改前的配置 + * @param afterModel 修改后的配置 */ - void updateFill(Config before, Config after); + void updateFill(Model beforeModel, Model afterModel); /** * 预校验参数 * - * @param config config + * @param model model */ - void preValidConfig(Config config); + void preValid(Model model); /** * 校验参数 * - * @param config config + * @param model model */ - void validConfig(Config config); + void valid(Model model); + + /** + * 执行完整验证链 + *

+ * preValid > updateFill > preValid + * + * @param beforeModel beforeModel + * @param afterModel afterModel + */ + default void doValidChain(Model beforeModel, Model afterModel) { + // 预校验参数 + this.preValid(afterModel); + // 更新填充 + this.updateFill(beforeModel, afterModel); + // 校验参数 + this.valid(afterModel); + } /** * 转为视图配置 * - * @param config config + * @param model model * @return 视图配置 */ - View toView(String config); + View toView(String model); } diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/MapDataStrategy.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/MapDataStrategy.java index f6ed667e..7b776dfe 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/MapDataStrategy.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/handler/data/strategy/MapDataStrategy.java @@ -1,5 +1,6 @@ package com.orion.ops.framework.common.handler.data.strategy; +import com.alibaba.fastjson.JSONObject; import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; import java.util.Map; @@ -11,6 +12,11 @@ import java.util.Map; * @version 1.0.0 * @since 2023/12/20 22:11 */ -public interface MapDataStrategy extends GenericsDataStrategy> { +public interface MapDataStrategy extends GenericsDataStrategy> { + + @Override + default Map toView(String model) { + return JSONObject.parseObject(model); + } } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.http b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.http index eb7226a0..fc70d1fb 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.http +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.http @@ -8,4 +8,31 @@ Authorization: {{token}} "name": "alias" } +### 获取主机拓展信息 +GET {{baseUrl}}/asset/host-extra/get?hostId=1&item=ssh +Authorization: {{token}} + +### 获取多个主机拓展信息 +POST {{baseUrl}}/asset/host-extra/list +Content-Type: application/json +Authorization: {{token}} + +{ + "hostId": 1, + "items": [ + "ssh" + ] +} + +### 修改主机拓展信息 +PUT {{baseUrl}}/asset/host-extra/update +Content-Type: application/json +Authorization: {{token}} + +{ + "hostId": 1, + "item": "ssh", + "extra": "{\"authType\":\"DEFAULT\"}" +} + ### diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.java index 57692f2b..b0d5ef9f 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/HostExtraController.java @@ -1,18 +1,21 @@ package com.orion.ops.module.asset.controller; +import com.orion.ops.framework.log.core.annotation.IgnoreLog; +import com.orion.ops.framework.log.core.enums.IgnoreLogMode; import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest; +import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest; +import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest; import com.orion.ops.module.asset.service.HostExtraService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Map; /** * 主机拓展信息 api @@ -39,5 +42,27 @@ public class HostExtraController { return hostExtraService.updateHostAlias(request); } + @IgnoreLog(IgnoreLogMode.RET) + @GetMapping("/get") + @Operation(summary = "获取主机拓展信息") + @Parameter(name = "hostId", description = "hostId", required = true) + @Parameter(name = "item", description = "item", required = true) + public Map getHostExtra(@RequestParam("hostId") Long hostId, @RequestParam("item") String item) { + return hostExtraService.getHostExtra(hostId, item); + } + + @IgnoreLog(IgnoreLogMode.RET) + @PostMapping("/list") + @Operation(summary = "获取多个主机拓展信息") + public Map> getHostExtraList(@Validated @RequestBody HostExtraQueryRequest request) { + return hostExtraService.getHostExtraList(request); + } + + @GetMapping("/update") + @Operation(summary = "修改主机拓展信息") + public Integer updateHostExtra(@Validated @RequestBody HostExtraUpdateRequest request) { + return hostExtraService.updateHostExtra(request); + } + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraQueryRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraQueryRequest.java new file mode 100644 index 00000000..843e1990 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraQueryRequest.java @@ -0,0 +1,35 @@ +package com.orion.ops.module.asset.entity.request.host; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 主机拓展信息查询请求 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/20 21:36 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostExtraQueryRequest", description = "主机拓展信息查询请求") +public class HostExtraQueryRequest { + + @NotNull + @Schema(description = "主机id") + private Long hostId; + + @NotEmpty + @Schema(description = "配置项") + private List items; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraUpdateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraUpdateRequest.java new file mode 100644 index 00000000..d788c601 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostExtraUpdateRequest.java @@ -0,0 +1,38 @@ +package com.orion.ops.module.asset.entity.request.host; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 主机拓展信息更新请求 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/20 21:36 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "HostExtraUpdateRequest", description = "主机拓展信息更新请求") +public class HostExtraUpdateRequest { + + @NotNull + @Schema(description = "主机id") + private Long hostId; + + @NotNull + @Schema(description = "配置项") + private String item; + + @NotBlank + @Schema(description = "拓展信息") + private String extra; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostAuthTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigSshAuthTypeEnum.java similarity index 71% rename from orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostAuthTypeEnum.java rename to orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigSshAuthTypeEnum.java index 76f30a09..62637c41 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostAuthTypeEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigSshAuthTypeEnum.java @@ -1,13 +1,13 @@ package com.orion.ops.module.asset.enums; /** - * 主机验证类型 + * 主机验证类型 - ssh * * @author Jiahang Li * @version 1.0.0 * @since 2023/9/21 19:01 */ -public enum HostAuthTypeEnum { +public enum HostConfigSshAuthTypeEnum { /** * 密码验证 @@ -26,11 +26,11 @@ public enum HostAuthTypeEnum { ; - public static HostAuthTypeEnum of(String type) { + public static HostConfigSshAuthTypeEnum of(String type) { if (type == null) { return null; } - for (HostAuthTypeEnum value : values()) { + for (HostConfigSshAuthTypeEnum value : values()) { if (value.name().equals(type)) { return value; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigTypeEnum.java index 3ecfe6ce..801f5a11 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigTypeEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostConfigTypeEnum.java @@ -1,11 +1,11 @@ package com.orion.ops.module.asset.enums; import com.orion.ops.framework.common.enums.EnableStatus; +import com.orion.ops.framework.common.handler.data.GenericsDataDefinition; import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy; import com.orion.ops.module.asset.handler.host.config.model.HostSshConfigModel; import com.orion.ops.module.asset.handler.host.config.strategy.HostSshConfigStrategy; -import com.orion.spring.SpringHolder; import lombok.AllArgsConstructor; import lombok.Getter; @@ -16,8 +16,9 @@ import lombok.Getter; * @version 1.0.0 * @since 2023/9/11 14:37 */ +@Getter @AllArgsConstructor -public enum HostConfigTypeEnum { +public enum HostConfigTypeEnum implements GenericsDataDefinition { /** * SSH 配置 @@ -26,12 +27,10 @@ public enum HostConfigTypeEnum { ; - @Getter private final Class type; private final Class> strategy; - @Getter private final Integer defaultStatus; public static HostConfigTypeEnum of(String type) { @@ -46,9 +45,4 @@ public enum HostConfigTypeEnum { return null; } - @SuppressWarnings("unchecked") - public > T getStrategy() { - return (T) SpringHolder.getBean(strategy); - } - } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraItemEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraItemEnum.java new file mode 100644 index 00000000..67e848a9 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraItemEnum.java @@ -0,0 +1,47 @@ +package com.orion.ops.module.asset.enums; + +import com.orion.ops.framework.common.handler.data.GenericsDataDefinition; +import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; +import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.ops.module.asset.handler.host.extra.model.HostSshExtraModel; +import com.orion.ops.module.asset.handler.host.extra.strategy.HostSshExtraStrategy; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 主机额外配置项枚举 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/20 22:48 + */ +@Getter +@AllArgsConstructor +public enum HostExtraItemEnum implements GenericsDataDefinition { + + /** + * SSH 额外配置 + */ + SSH("ssh", HostSshExtraModel.class, HostSshExtraStrategy.class), + + ; + + private final String item; + + private final Class type; + + private final Class> strategy; + + public static HostExtraItemEnum of(String type) { + if (type == null) { + return null; + } + for (HostExtraItemEnum value : values()) { + if (value.item.equals(type)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraSshAuthTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraSshAuthTypeEnum.java new file mode 100644 index 00000000..c4158f01 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostExtraSshAuthTypeEnum.java @@ -0,0 +1,41 @@ +package com.orion.ops.module.asset.enums; + +/** + * 主机认证类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/12/20 21:41 + */ +public enum HostExtraSshAuthTypeEnum { + + /** + * 默认验证方式 + */ + DEFAULT, + + /** + * 秘钥验证 + */ + KEY, + + /** + * 身份验证 + */ + IDENTITY, + + ; + + public static HostExtraSshAuthTypeEnum of(String type) { + if (type == null) { + return DEFAULT; + } + for (HostExtraSshAuthTypeEnum value : values()) { + if (value.name().equals(type)) { + return value; + } + } + return DEFAULT; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java index 001460a4..5be2dc1d 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/config/strategy/HostSshConfigStrategy.java @@ -12,7 +12,7 @@ import com.orion.ops.framework.common.security.PasswordModifier; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.module.asset.dao.HostIdentityDAO; import com.orion.ops.module.asset.dao.HostKeyDAO; -import com.orion.ops.module.asset.enums.HostAuthTypeEnum; +import com.orion.ops.module.asset.enums.HostConfigSshAuthTypeEnum; import com.orion.ops.module.asset.handler.host.config.model.HostSshConfigModel; import org.springframework.stereotype.Component; @@ -44,6 +44,7 @@ public class HostSshConfigStrategy implements MapDataStrategy { + + @Override + public HostSshExtraModel getDefault() { + return HostSshExtraModel.builder() + .authType(HostExtraSshAuthTypeEnum.DEFAULT.name()) + .build(); + } + + @Override + public void updateFill(HostSshExtraModel beforeModel, HostSshExtraModel afterModel) { + + } + + @Override + public void preValid(HostSshExtraModel model) { + + } + + @Override + public void valid(HostSshExtraModel model) { + + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostExtraService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostExtraService.java index 237fd935..abe77ad6 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostExtraService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostExtraService.java @@ -1,8 +1,10 @@ package com.orion.ops.module.asset.service; import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.RequestBody; +import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest; +import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest; + +import java.util.Map; /** * 主机拓展信息 服务 @@ -19,6 +21,45 @@ public interface HostExtraService { * @param request request * @return effect */ - Integer updateHostAlias(@Validated @RequestBody HostAliasUpdateRequest request); + Integer updateHostAlias(HostAliasUpdateRequest request); + + /** + * 获取主机额外配置 + * + * @param hostId hostId + * @param item item + * @return extra + */ + Map getHostExtra(Long hostId, String item); + + /** + * 获取多个主机拓展信息 + * + * @param request request + * @return type:extra + */ + Map> getHostExtraList(HostExtraQueryRequest request); + + /** + * 修改主机拓展信息 + * + * @param request request + * @return effect + */ + Integer updateHostExtra(HostExtraUpdateRequest request); + + /** + * 删除主机秘钥回调 + * + * @param id id + */ + void deleteHostKeyCallback(Long id); + + /** + * 删除主机身份回调 + * + * @param id id + */ + void deleteHostIdentityCallback(Long id); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConfigServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConfigServiceImpl.java index c69b9b59..86b46c66 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConfigServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConfigServiceImpl.java @@ -44,6 +44,8 @@ public class HostConfigServiceImpl implements HostConfigService { @Resource private HostConfigDAO hostConfigDAO; + // FIXME 动态初始化 + @Override public HostConfigVO getHostConfig(Long hostId, String type) { HostConfigTypeEnum configType = Valid.valid(HostConfigTypeEnum::of, type); @@ -53,7 +55,7 @@ public class HostConfigServiceImpl implements HostConfigService { // 转换 HostConfigVO vo = HostConfigConvert.MAPPER.to(config); // 获取配置 - Map configMap = configType.getStrategy().toView(config.getConfig()); + Map configMap = configType.getStrategyBean().toView(config.getConfig()); vo.setConfig(configMap); return vo; } @@ -82,7 +84,7 @@ public class HostConfigServiceImpl implements HostConfigService { HostConfigVO vo = HostConfigConvert.MAPPER.to(s); // 获取配置 Map config = HostConfigTypeEnum.of(s.getType()) - .getStrategy() + .getStrategyBean() .toView(s.getConfig()); vo.setConfig(config); return vo; @@ -96,7 +98,7 @@ public class HostConfigServiceImpl implements HostConfigService { HostConfigDO record = hostConfigDAO.selectById(id); Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); HostConfigTypeEnum type = Valid.valid(HostConfigTypeEnum::of, record.getType()); - GenericsDataModel config = JSON.parseObject(request.getConfig(), type.getType()); + GenericsDataModel newConfig = type.parse(request.getConfig()); // 查询主机 HostDO host = hostDAO.selectById(record.getHostId()); Valid.notNull(host, ErrorMessage.HOST_ABSENT); @@ -106,19 +108,15 @@ public class HostConfigServiceImpl implements HostConfigService { OperatorLogs.add(OperatorLogs.TYPE, type.name()); // 检查版本 Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED); - MapDataStrategy strategy = type.getStrategy(); - // 预校验参数 - strategy.preValidConfig(config); - // 更新填充 - GenericsDataModel beforeConfig = JSON.parseObject(record.getConfig(), type.getType()); - strategy.updateFill(beforeConfig, config); - // 检查参数 - strategy.validConfig(config); + MapDataStrategy strategy = type.getStrategyBean(); + GenericsDataModel beforeConfig = type.parse(record.getConfig()); + // 更新前校验 + strategy.doValidChain(beforeConfig, newConfig); // 修改配置 HostConfigDO update = new HostConfigDO(); update.setId(id); update.setVersion(request.getVersion()); - update.setConfig(config.serial()); + update.setConfig(newConfig.serial()); int effect = hostConfigDAO.updateById(update); Valid.version(effect); return update.getVersion(); @@ -158,7 +156,7 @@ public class HostConfigServiceImpl implements HostConfigService { insert.setHostId(hostId); insert.setType(s.name()); insert.setStatus(s.getDefaultStatus()); - insert.setConfig(s.getStrategy().getDefault().serial()); + insert.setConfig(s.getStrategyBean().getDefault().serial()); insert.setVersion(Const.DEFAULT_VERSION); return insert; }).collect(Collectors.toList()); diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostExtraServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostExtraServiceImpl.java index 454d2417..bb7fa659 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostExtraServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostExtraServiceImpl.java @@ -1,14 +1,30 @@ package com.orion.ops.module.asset.service.impl; +import com.orion.lang.function.Functions; +import com.orion.lang.utils.collect.Maps; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.handler.data.model.GenericsDataModel; +import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy; +import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest; +import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest; +import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest; +import com.orion.ops.module.asset.enums.HostExtraItemEnum; import com.orion.ops.module.asset.service.HostExtraService; import com.orion.ops.module.infra.api.DataAliasApi; +import com.orion.ops.module.infra.api.DataExtraApi; import com.orion.ops.module.infra.entity.dto.data.DataAliasUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraQueryDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraSetDTO; import com.orion.ops.module.infra.enums.DataExtraTypeEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 主机拓展信息 服务实现类 @@ -23,6 +39,9 @@ public class HostExtraServiceImpl implements HostExtraService { @Resource private DataAliasApi dataAliasApi; + @Resource + private DataExtraApi dataExtraApi; + @Override public Integer updateHostAlias(HostAliasUpdateRequest request) { DataAliasUpdateDTO update = DataAliasUpdateDTO.builder() @@ -33,4 +52,112 @@ public class HostExtraServiceImpl implements HostExtraService { return dataAliasApi.updateDataAlias(update, DataExtraTypeEnum.HOST); } + @Override + public Map getHostExtra(Long hostId, String item) { + HostExtraItemEnum extraItem = Valid.valid(HostExtraItemEnum::of, item); + // 查询配置项 + Long userId = SecurityUtils.getLoginUserId(); + DataExtraQueryDTO query = DataExtraQueryDTO.builder() + .userId(userId) + .relId(hostId) + .item(item) + .build(); + String extraValue = dataExtraApi.getExtraValue(query, DataExtraTypeEnum.HOST); + // 检查初始化并转为视图 + return this.checkItemAndToView(extraItem, extraValue, userId, hostId); + } + + @Override + public Map> getHostExtraList(HostExtraQueryRequest request) { + Long hostId = request.getHostId(); + List items = request.getItems(); + List extraItems = items.stream() + .map(s -> Valid.valid(HostExtraItemEnum::of, s)) + .collect(Collectors.toList()); + // 查询配置项 + Long userId = SecurityUtils.getLoginUserId(); + DataExtraQueryDTO query = DataExtraQueryDTO.builder() + .userId(userId) + .relId(hostId) + .items(items) + .build(); + Map extraValues = dataExtraApi.getExtraItems(query, DataExtraTypeEnum.HOST) + .stream() + .collect(Collectors.toMap( + DataExtraDTO::getItem, + DataExtraDTO::getValue, + Functions.right()) + ); + // 检查初始化 + Map> result = Maps.newMap(); + for (HostExtraItemEnum extraItem : extraItems) { + String item = extraItem.getItem(); + // 检查初始化并转为视图 + Map extraValue = this.checkItemAndToView(extraItem, extraValues.get(item), userId, hostId); + result.put(item, extraValue); + } + return result; + } + + @Override + public Integer updateHostExtra(HostExtraUpdateRequest request) { + String item = request.getItem(); + Long hostId = request.getHostId(); + Long userId = SecurityUtils.getLoginUserId(); + HostExtraItemEnum extraItem = Valid.valid(HostExtraItemEnum::of, item); + MapDataStrategy strategy = extraItem.getStrategyBean(); + // 查询原始配置 + DataExtraQueryDTO query = DataExtraQueryDTO.builder() + .userId(userId) + .relId(hostId) + .item(item) + .build(); + DataExtraDTO beforeExtraItem = dataExtraApi.getExtraItem(query, DataExtraTypeEnum.HOST); + Valid.notNull(beforeExtraItem, ErrorMessage.CONFIG_ABSENT); + GenericsDataModel newExtra = extraItem.parse(request.getExtra()); + GenericsDataModel beforeExtra = extraItem.parse(beforeExtraItem.getValue()); + // 更新验证 + strategy.doValidChain(beforeExtra, newExtra); + // 更新配置 + return dataExtraApi.updateExtraValue(beforeExtraItem.getId(), newExtra.serial()); + } + + + @Override + public void deleteHostKeyCallback(Long id) { + + } + + @Override + public void deleteHostIdentityCallback(Long id) { + + } + + /** + * 检查配置项并且转为视图 (不存在则初始化默认值) + * + * @param extraItem extraItem + * @param extraValue extraValue + * @param userId userId + * @param hostId hostId + * @return viewMap + */ + private Map checkItemAndToView(HostExtraItemEnum extraItem, String extraValue, Long userId, Long hostId) { + String item = extraItem.getItem(); + MapDataStrategy strategy = extraItem.getStrategyBean(); + if (extraValue == null) { + // 初始化默认数据 + extraValue = strategy.getDefault().serial(); + // 插入默认值 + DataExtraSetDTO set = DataExtraSetDTO.builder() + .userId(userId) + .relId(hostId) + .item(item) + .value(extraValue) + .build(); + dataExtraApi.addExtraItem(set, DataExtraTypeEnum.HOST); + } + return strategy.toView(extraValue); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataExtraApi.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataExtraApi.java index a08ee02b..c627271c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataExtraApi.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/DataExtraApi.java @@ -2,7 +2,7 @@ package com.orion.ops.module.infra.api; import com.orion.ops.module.infra.entity.dto.data.DataExtraDTO; import com.orion.ops.module.infra.entity.dto.data.DataExtraQueryDTO; -import com.orion.ops.module.infra.entity.dto.data.DataExtraUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraSetDTO; import com.orion.ops.module.infra.enums.DataExtraTypeEnum; import java.util.List; @@ -18,20 +18,38 @@ import java.util.Map; public interface DataExtraApi { /** - * 更新数据拓展信息 + * 更新数据拓展信息 不存在则新增 * * @param type type * @param dto dto * @return effect */ - Integer updateExtraItem(DataExtraUpdateDTO dto, DataExtraTypeEnum type); + Integer setExtraItem(DataExtraSetDTO dto, DataExtraTypeEnum type); + + /** + * 新增数据拓展信息 + * + * @param dto dto + * @param type type + * @return id + */ + Long addExtraItem(DataExtraSetDTO dto, DataExtraTypeEnum type); + + /** + * 更新数据拓展信息 + * + * @param id id + * @param value value + * @return effect + */ + Integer updateExtraValue(Long id, String value); /** * 批量更新数据拓展信息 * * @param map map */ - void batchUpdate(Map map); + void batchUpdateExtraValue(Map map); /** * 查询额外配置项 @@ -40,7 +58,7 @@ public interface DataExtraApi { * @param dto dto * @return item */ - String getExtraItem(DataExtraQueryDTO dto, DataExtraTypeEnum type); + String getExtraValue(DataExtraQueryDTO dto, DataExtraTypeEnum type); /** * 查询额外配置项 @@ -49,7 +67,7 @@ public interface DataExtraApi { * @param type type * @return item */ - Map getExtraItemList(DataExtraQueryDTO dto, DataExtraTypeEnum type); + Map getExtraItemValues(DataExtraQueryDTO dto, DataExtraTypeEnum type); /** * 查询额外配置 @@ -58,7 +76,16 @@ public interface DataExtraApi { * @param type type * @return effect */ - List getExtraList(DataExtraQueryDTO dto, DataExtraTypeEnum type); + DataExtraDTO getExtraItem(DataExtraQueryDTO dto, DataExtraTypeEnum type); + + /** + * 查询额外配置 + * + * @param dto dto + * @param type type + * @return effect + */ + List getExtraItems(DataExtraQueryDTO dto, DataExtraTypeEnum type); /** * 通过 relId 删除 diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraDTO.java index 7e2e3417..383939cf 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraDTO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraDTO.java @@ -36,10 +36,10 @@ public class DataExtraDTO implements Serializable { @Schema(description = "数据类型") private String type; - @Schema(description = "拓展项") + @Schema(description = "配置项") private String item; - @Schema(description = "拓展值") + @Schema(description = "配置值") private String value; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraUpdateDTO.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraSetDTO.java similarity index 78% rename from orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraUpdateDTO.java rename to orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraSetDTO.java index a57c18ab..54ea2275 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraUpdateDTO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/entity/dto/data/DataExtraSetDTO.java @@ -22,8 +22,8 @@ import java.io.Serializable; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "DataExtraUpdateDTO", description = "数据拓展信息 更新请求业务对象") -public class DataExtraUpdateDTO implements Serializable { +@Schema(name = "DataExtraSetDTO", description = "数据拓展信息 更新请求业务对象") +public class DataExtraSetDTO implements Serializable { private static final long serialVersionUID = 1L; @@ -37,11 +37,11 @@ public class DataExtraUpdateDTO implements Serializable { @NotBlank @Size(max = 32) - @Schema(description = "拓展项") + @Schema(description = "配置项") private String item; @NotBlank - @Schema(description = "拓展值") + @Schema(description = "配置值") private String value; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataExtraApiImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataExtraApiImpl.java index 335dbfc2..421ac5a8 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataExtraApiImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/DataExtraApiImpl.java @@ -3,11 +3,12 @@ package com.orion.ops.module.infra.api.impl; import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.module.infra.api.DataExtraApi; import com.orion.ops.module.infra.convert.DataExtraProviderConvert; +import com.orion.ops.module.infra.entity.domain.DataExtraDO; import com.orion.ops.module.infra.entity.dto.data.DataExtraDTO; import com.orion.ops.module.infra.entity.dto.data.DataExtraQueryDTO; -import com.orion.ops.module.infra.entity.dto.data.DataExtraUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraSetDTO; import com.orion.ops.module.infra.entity.request.data.DataExtraQueryRequest; -import com.orion.ops.module.infra.entity.request.data.DataExtraUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataExtraSetRequest; import com.orion.ops.module.infra.enums.DataExtraTypeEnum; import com.orion.ops.module.infra.service.DataExtraService; import lombok.extern.slf4j.Slf4j; @@ -33,42 +34,65 @@ public class DataExtraApiImpl implements DataExtraApi { private DataExtraService dataExtraService; @Override - public Integer updateExtraItem(DataExtraUpdateDTO dto, DataExtraTypeEnum type) { + public Integer setExtraItem(DataExtraSetDTO dto, DataExtraTypeEnum type) { Valid.valid(dto); // 更新 - DataExtraUpdateRequest request = DataExtraProviderConvert.MAPPER.to(dto); + DataExtraSetRequest request = DataExtraProviderConvert.MAPPER.to(dto); request.setType(type.name()); - return dataExtraService.updateExtraItem(request); + return dataExtraService.setExtraItem(request); } @Override - public void batchUpdate(Map map) { - dataExtraService.batchUpdate(map); + public Long addExtraItem(DataExtraSetDTO dto, DataExtraTypeEnum type) { + Valid.valid(dto); + // 更新 + DataExtraSetRequest request = DataExtraProviderConvert.MAPPER.to(dto); + request.setType(type.name()); + return dataExtraService.addExtraItem(request); } @Override - public String getExtraItem(DataExtraQueryDTO dto, DataExtraTypeEnum type) { + public Integer updateExtraValue(Long id, String value) { + return dataExtraService.updateExtraValue(id, value); + } + + @Override + public void batchUpdateExtraValue(Map map) { + dataExtraService.batchUpdateExtraValue(map); + } + + @Override + public String getExtraValue(DataExtraQueryDTO dto, DataExtraTypeEnum type) { Valid.allNotNull(dto.getUserId(), dto.getRelId(), dto.getItem()); // 查询 DataExtraQueryRequest request = DataExtraProviderConvert.MAPPER.to(dto); request.setType(type.name()); - return dataExtraService.getExtraItem(request); + return dataExtraService.getExtraItemValue(request); } @Override - public Map getExtraItemList(DataExtraQueryDTO dto, DataExtraTypeEnum type) { + public Map getExtraItemValues(DataExtraQueryDTO dto, DataExtraTypeEnum type) { Valid.allNotNull(dto.getUserId(), dto.getRelIdList(), dto.getItem()); // 查询 DataExtraQueryRequest request = DataExtraProviderConvert.MAPPER.to(dto); request.setType(type.name()); - return dataExtraService.getExtraItemList(request); + return dataExtraService.getExtraItemValues(request); } @Override - public List getExtraList(DataExtraQueryDTO dto, DataExtraTypeEnum type) { + public DataExtraDTO getExtraItem(DataExtraQueryDTO dto, DataExtraTypeEnum type) { + Valid.allNotNull(dto.getUserId(), dto.getRelId(), dto.getItem()); DataExtraQueryRequest request = DataExtraProviderConvert.MAPPER.to(dto); request.setType(type.name()); - return dataExtraService.getExtraList(request) + DataExtraDO extraItem = dataExtraService.getExtraItem(request); + return DataExtraProviderConvert.MAPPER.to(extraItem); + } + + @Override + public List getExtraItems(DataExtraQueryDTO dto, DataExtraTypeEnum type) { + DataExtraQueryRequest request = DataExtraProviderConvert.MAPPER.to(dto); + request.setType(type.name()); + return dataExtraService.getExtraItems(request) .stream() .map(DataExtraProviderConvert.MAPPER::to) .collect(Collectors.toList()); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataExtraProviderConvert.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataExtraProviderConvert.java index d0413b76..3a9dcb29 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataExtraProviderConvert.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/convert/DataExtraProviderConvert.java @@ -3,9 +3,9 @@ package com.orion.ops.module.infra.convert; import com.orion.ops.module.infra.entity.domain.DataExtraDO; import com.orion.ops.module.infra.entity.dto.data.DataExtraDTO; import com.orion.ops.module.infra.entity.dto.data.DataExtraQueryDTO; -import com.orion.ops.module.infra.entity.dto.data.DataExtraUpdateDTO; +import com.orion.ops.module.infra.entity.dto.data.DataExtraSetDTO; import com.orion.ops.module.infra.entity.request.data.DataExtraQueryRequest; -import com.orion.ops.module.infra.entity.request.data.DataExtraUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataExtraSetRequest; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -23,7 +23,7 @@ public interface DataExtraProviderConvert { DataExtraQueryRequest to(DataExtraQueryDTO query); - DataExtraUpdateRequest to(DataExtraUpdateDTO update); + DataExtraSetRequest to(DataExtraSetDTO update); DataExtraDTO to(DataExtraDO domain); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/DataExtraDO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/DataExtraDO.java index b8235b82..0ae4bfdf 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/DataExtraDO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/domain/DataExtraDO.java @@ -42,11 +42,11 @@ public class DataExtraDO extends BaseDO { @TableField("type") private String type; - @Schema(description = "拓展项") + @Schema(description = "配置项") @TableField("item") private String item; - @Schema(description = "拓展值") + @Schema(description = "配置值") @TableField("value") private String value; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraSetRequest.java similarity index 78% rename from orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraUpdateRequest.java rename to orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraSetRequest.java index ed46e420..a45101fc 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraUpdateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/data/DataExtraSetRequest.java @@ -22,8 +22,8 @@ import java.io.Serializable; @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(name = "DataExtraUpdateRequest", description = "数据拓展信息 更新请求对象") -public class DataExtraUpdateRequest implements Serializable { +@Schema(name = "DataExtraSetRequest", description = "数据拓展信息 更新请求对象") +public class DataExtraSetRequest implements Serializable { private static final long serialVersionUID = 1L; @@ -42,11 +42,11 @@ public class DataExtraUpdateRequest implements Serializable { @NotBlank @Size(max = 32) - @Schema(description = "拓展项") + @Schema(description = "配置项") private String item; @NotBlank - @Schema(description = "拓展值") - private Object value; + @Schema(description = "配置值") + private String value; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataExtraService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataExtraService.java index d267f724..e3f174e0 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataExtraService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DataExtraService.java @@ -2,7 +2,7 @@ package com.orion.ops.module.infra.service; import com.orion.ops.module.infra.entity.domain.DataExtraDO; import com.orion.ops.module.infra.entity.request.data.DataExtraQueryRequest; -import com.orion.ops.module.infra.entity.request.data.DataExtraUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataExtraSetRequest; import java.util.List; import java.util.Map; @@ -17,19 +17,36 @@ import java.util.Map; public interface DataExtraService { /** - * 更新数据拓展信息 + * 更新数据拓展信息 不存在则新增 * * @param request request * @return effect */ - Integer updateExtraItem(DataExtraUpdateRequest request); + Integer setExtraItem(DataExtraSetRequest request); + + /** + * 新增数据拓展信息 + * + * @param request request + * @return id + */ + Long addExtraItem(DataExtraSetRequest request); + + /** + * 更新数据拓展信息 + * + * @param id id + * @param value value + * @return effect + */ + Integer updateExtraValue(Long id, String value); /** * 批量更新数据拓展信息 * * @param map map */ - void batchUpdate(Map map); + void batchUpdateExtraValue(Map map); /** * 查询额外配置项 @@ -37,7 +54,7 @@ public interface DataExtraService { * @param request request * @return item */ - String getExtraItem(DataExtraQueryRequest request); + String getExtraItemValue(DataExtraQueryRequest request); /** * 查询额外配置项 @@ -45,7 +62,7 @@ public interface DataExtraService { * @param request request * @return item */ - Map getExtraItemList(DataExtraQueryRequest request); + Map getExtraItemValues(DataExtraQueryRequest request); /** * 查询额外配置 @@ -53,7 +70,15 @@ public interface DataExtraService { * @param request request * @return rows */ - List getExtraList(DataExtraQueryRequest request); + DataExtraDO getExtraItem(DataExtraQueryRequest request); + + /** + * 查询额外配置 + * + * @param request request + * @return rows + */ + List getExtraItems(DataExtraQueryRequest request); /** * 通过 userId 删除 diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataAliasServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataAliasServiceImpl.java index a75d9fd5..b71a19cb 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataAliasServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataAliasServiceImpl.java @@ -8,7 +8,7 @@ import com.orion.ops.module.infra.constant.DataExtraItems; import com.orion.ops.module.infra.define.cache.DataExtraCacheKeyDefine; import com.orion.ops.module.infra.entity.request.data.DataAliasUpdateRequest; import com.orion.ops.module.infra.entity.request.data.DataExtraQueryRequest; -import com.orion.ops.module.infra.entity.request.data.DataExtraUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataExtraSetRequest; import com.orion.ops.module.infra.service.DataAliasService; import com.orion.ops.module.infra.service.DataExtraService; import lombok.extern.slf4j.Slf4j; @@ -37,13 +37,13 @@ public class DataAliasServiceImpl implements DataAliasService { Long userId = request.getUserId(); String type = request.getType(); // 更新 - DataExtraUpdateRequest update = new DataExtraUpdateRequest(); + DataExtraSetRequest update = new DataExtraSetRequest(); update.setUserId(userId); update.setRelId(request.getRelId()); update.setType(type); update.setItem(DataExtraItems.ALIAS); update.setValue(Refs.json(request.getAlias())); - Integer effect = dataExtraService.updateExtraItem(update); + Integer effect = dataExtraService.setExtraItem(update); // 删除缓存 RedisMaps.delete(DataExtraCacheKeyDefine.DATA_ALIAS.format(userId, type)); return effect; @@ -66,7 +66,7 @@ public class DataAliasServiceImpl implements DataAliasService { .type(type) .item(DataExtraItems.ALIAS) .build(); - Map extras = dataExtraService.getExtraItemList(request); + Map extras = dataExtraService.getExtraItemValues(request); entities = Maps.map(extras, String::valueOf, Refs::unrefToString); // 设置屏障 防止穿透 CacheBarriers.MAP.check(entities); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataExtraServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataExtraServiceImpl.java index 3569d2c0..e9690671 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataExtraServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DataExtraServiceImpl.java @@ -1,13 +1,13 @@ package com.orion.ops.module.infra.service.impl; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.function.Functions; import com.orion.lang.utils.collect.Maps; +import com.orion.ops.framework.common.constant.Const; import com.orion.ops.module.infra.dao.DataExtraDAO; import com.orion.ops.module.infra.entity.domain.DataExtraDO; import com.orion.ops.module.infra.entity.request.data.DataExtraQueryRequest; -import com.orion.ops.module.infra.entity.request.data.DataExtraUpdateRequest; +import com.orion.ops.module.infra.entity.request.data.DataExtraSetRequest; import com.orion.ops.module.infra.service.DataExtraService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -32,41 +32,49 @@ public class DataExtraServiceImpl implements DataExtraService { private DataExtraDAO dataExtraDAO; @Override - public Integer updateExtraItem(DataExtraUpdateRequest request) { - Long userId = request.getUserId(); - Long relId = request.getRelId(); - String type = request.getType(); - String item = request.getItem(); - Object value = request.getValue(); + public Integer setExtraItem(DataExtraSetRequest request) { // 查询配置是否存在 DataExtraDO extraItem = dataExtraDAO.of() .createWrapper() - .eq(DataExtraDO::getUserId, userId) - .eq(DataExtraDO::getRelId, relId) - .eq(DataExtraDO::getType, type) - .eq(DataExtraDO::getItem, item) + .eq(DataExtraDO::getUserId, request.getUserId()) + .eq(DataExtraDO::getRelId, request.getRelId()) + .eq(DataExtraDO::getType, request.getType()) + .eq(DataExtraDO::getItem, request.getItem()) .then() .getOne(); if (extraItem == null) { // 插入 - DataExtraDO insert = new DataExtraDO(); - insert.setUserId(userId); - insert.setRelId(relId); - insert.setType(type); - insert.setItem(item); - insert.setValue(JSON.toJSONString(value)); - return dataExtraDAO.insert(insert); + this.addExtraItem(request); + return Const.N_1; } else { // 修改 - DataExtraDO update = new DataExtraDO(); - update.setId(extraItem.getId()); - update.setValue(JSON.toJSONString(value)); - return dataExtraDAO.updateById(update); + return this.updateExtraValue(extraItem.getId(), request.getValue()); } } @Override - public void batchUpdate(Map map) { + public Long addExtraItem(DataExtraSetRequest request) { + // 插入 + DataExtraDO insert = new DataExtraDO(); + insert.setUserId(request.getUserId()); + insert.setRelId(request.getRelId()); + insert.setType(request.getType()); + insert.setItem(request.getItem()); + insert.setValue(request.getValue()); + dataExtraDAO.insert(insert); + return insert.getId(); + } + + @Override + public Integer updateExtraValue(Long id, String value) { + DataExtraDO update = new DataExtraDO(); + update.setId(id); + update.setValue(value); + return dataExtraDAO.updateById(update); + } + + @Override + public void batchUpdateExtraValue(Map map) { if (Maps.isEmpty(map)) { return; } @@ -76,14 +84,14 @@ public class DataExtraServiceImpl implements DataExtraService { .map(s -> { DataExtraDO extra = new DataExtraDO(); extra.setId(s.getKey()); - extra.setValue(JSON.toJSONString(s.getValue())); + extra.setValue(s.getValue()); return extra; }).collect(Collectors.toList()); dataExtraDAO.updateBatch(list); } @Override - public String getExtraItem(DataExtraQueryRequest request) { + public String getExtraItemValue(DataExtraQueryRequest request) { return dataExtraDAO.of() .wrapper(this.buildWrapper(request)) .optionalOne() @@ -92,7 +100,7 @@ public class DataExtraServiceImpl implements DataExtraService { } @Override - public Map getExtraItemList(DataExtraQueryRequest request) { + public Map getExtraItemValues(DataExtraQueryRequest request) { return dataExtraDAO.of() .wrapper(this.buildWrapper(request)) .stream() @@ -103,7 +111,14 @@ public class DataExtraServiceImpl implements DataExtraService { } @Override - public List getExtraList(DataExtraQueryRequest request) { + public DataExtraDO getExtraItem(DataExtraQueryRequest request) { + return dataExtraDAO.of() + .wrapper(this.buildWrapper(request)) + .getOne(); + } + + @Override + public List getExtraItems(DataExtraQueryRequest request) { return dataExtraDAO.of() .wrapper(this.buildWrapper(request)) .list(); diff --git a/sql/init-2-schema-tables.sql b/sql/init-2-schema-tables.sql index 16d6a834..4ee784c0 100644 --- a/sql/init-2-schema-tables.sql +++ b/sql/init-2-schema-tables.sql @@ -78,8 +78,8 @@ CREATE TABLE `data_extra` `user_id` bigint(0) NULL DEFAULT NULL COMMENT '用户id', `rel_id` bigint(0) NULL DEFAULT NULL COMMENT '数据id', `type` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据类型', - `item` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拓展项', - `value` json NULL COMMENT '拓展值', + `item` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '配置项', + `value` json NULL COMMENT '配置值', `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',