refactor: 定义标准数据模型.

This commit is contained in:
lijiahangmax
2023-12-20 22:17:43 +08:00
parent 2506d567b8
commit a365b8a955
10 changed files with 52 additions and 40 deletions

View File

@@ -1,15 +1,15 @@
package com.orion.ops.module.asset.handler.host.config.model; package com.orion.ops.framework.common.handler.data.model;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
/** /**
* 主机配置父类 * 标准数据模型
* *
* @author Jiahang Li * @author Jiahang Li
* @version 1.0.0 * @version 1.0.0
* @since 2023/9/13 14:47 * @since 2023/12/20 22:07
*/ */
public interface HostConfigModel { public interface GenericsDataModel {
/** /**
* 序列化 * 序列化

View File

@@ -1,17 +1,15 @@
package com.orion.ops.module.asset.handler.host.config.strategy; package com.orion.ops.framework.common.handler.data.strategy;
import com.orion.ops.module.asset.handler.host.config.model.HostConfigModel; import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import java.util.Map;
/** /**
* 主机配置策略 * 标准数据处理策略
* *
* @author Jiahang Li * @author Jiahang Li
* @version 1.0.0 * @version 1.0.0
* @since 2023/9/19 14:27 * @since 2023/12/20 22:09
*/ */
public interface HostConfigStrategy<Config extends HostConfigModel> { public interface GenericsDataStrategy<Config extends GenericsDataModel, View> {
/** /**
* 获取默认值 * 获取默认值
@@ -48,6 +46,6 @@ public interface HostConfigStrategy<Config extends HostConfigModel> {
* @param config config * @param config config
* @return 视图配置 * @return 视图配置
*/ */
Map<String, Object> toView(String config); View toView(String config);
} }

View File

@@ -0,0 +1,16 @@
package com.orion.ops.framework.common.handler.data.strategy;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import java.util.Map;
/**
* map 数据处理策略
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/20 22:11
*/
public interface MapDataStrategy<Config extends GenericsDataModel> extends GenericsDataStrategy<Config, Map<String, Object>> {
}

View File

@@ -1,12 +1,13 @@
package com.orion.ops.module.asset.enums; package com.orion.ops.module.asset.enums;
import com.orion.ops.framework.common.enums.EnableStatus; import com.orion.ops.framework.common.enums.EnableStatus;
import com.orion.ops.module.asset.handler.host.config.model.HostConfigModel; 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.model.HostSshConfigModel;
import com.orion.ops.module.asset.handler.host.config.strategy.HostConfigStrategy;
import com.orion.ops.module.asset.handler.host.config.strategy.HostSshConfigStrategy; import com.orion.ops.module.asset.handler.host.config.strategy.HostSshConfigStrategy;
import com.orion.spring.SpringHolder; import com.orion.spring.SpringHolder;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter;
/** /**
* 主机配置类型枚举 * 主机配置类型枚举
@@ -25,10 +26,12 @@ public enum HostConfigTypeEnum {
; ;
private final Class<? extends HostConfigModel> type; @Getter
private final Class<? extends GenericsDataModel> type;
private final Class<? extends HostConfigStrategy<? extends HostConfigModel>> strategy; private final Class<? extends MapDataStrategy<? extends GenericsDataModel>> strategy;
@Getter
private final Integer defaultStatus; private final Integer defaultStatus;
public static HostConfigTypeEnum of(String type) { public static HostConfigTypeEnum of(String type) {
@@ -43,17 +46,9 @@ public enum HostConfigTypeEnum {
return null; return null;
} }
public Class<? extends HostConfigModel> getType() {
return type;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <Config extends HostConfigModel, T extends HostConfigStrategy<Config>> T getStrategy() { public <Config extends GenericsDataModel, T extends MapDataStrategy<Config>> T getStrategy() {
return (T) SpringHolder.getBean(strategy); return (T) SpringHolder.getBean(strategy);
} }
public Integer getDefaultStatus() {
return defaultStatus;
}
} }

View File

@@ -1,5 +1,6 @@
package com.orion.ops.module.asset.handler.host.config.model; package com.orion.ops.module.asset.handler.host.config.model;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import com.orion.ops.framework.common.security.UpdatePasswordAction; import com.orion.ops.framework.common.security.UpdatePasswordAction;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -24,7 +25,7 @@ import javax.validation.constraints.Size;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Schema(name = "HostSftpConfig", description = "主机 SSH 配置") @Schema(name = "HostSftpConfig", description = "主机 SSH 配置")
public class HostSshConfigModel implements HostConfigModel, UpdatePasswordAction { public class HostSshConfigModel implements GenericsDataModel, UpdatePasswordAction {
@NotNull @NotNull
@Range(min = 1, max = 65535) @Range(min = 1, max = 65535)

View File

@@ -7,6 +7,7 @@ import com.orion.lang.utils.Exceptions;
import com.orion.lang.utils.Strings; import com.orion.lang.utils.Strings;
import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy;
import com.orion.ops.framework.common.security.PasswordModifier; import com.orion.ops.framework.common.security.PasswordModifier;
import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.asset.dao.HostIdentityDAO; import com.orion.ops.module.asset.dao.HostIdentityDAO;
@@ -26,7 +27,7 @@ import java.util.Map;
* @since 2023/9/19 14:26 * @since 2023/9/19 14:26
*/ */
@Component @Component
public class HostSshConfigStrategy implements HostConfigStrategy<HostSshConfigModel> { public class HostSshConfigStrategy implements MapDataStrategy<HostSshConfigModel> {
@Resource @Resource
private HostKeyDAO hostKeyDAO; private HostKeyDAO hostKeyDAO;

View File

@@ -1,10 +1,10 @@
package com.orion.ops.module.asset.service; package com.orion.ops.module.asset.service;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest; import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateStatusRequest; import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateStatusRequest;
import com.orion.ops.module.asset.entity.vo.HostConfigVO; import com.orion.ops.module.asset.entity.vo.HostConfigVO;
import com.orion.ops.module.asset.enums.HostConfigTypeEnum; import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
import com.orion.ops.module.asset.handler.host.config.model.HostConfigModel;
import java.util.List; import java.util.List;
@@ -33,7 +33,7 @@ public interface HostConfigService {
* @param type type * @param type type
* @return 配置 * @return 配置
*/ */
<T extends HostConfigModel> T getHostConfig(Long hostId, HostConfigTypeEnum type); <T extends GenericsDataModel> T getHostConfig(Long hostId, HostConfigTypeEnum type);
/** /**
* 获取配置 * 获取配置

View File

@@ -5,6 +5,8 @@ import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs;
import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.enums.EnableStatus; import com.orion.ops.framework.common.enums.EnableStatus;
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.common.utils.Valid;
import com.orion.ops.module.asset.convert.HostConfigConvert; import com.orion.ops.module.asset.convert.HostConfigConvert;
import com.orion.ops.module.asset.dao.HostConfigDAO; import com.orion.ops.module.asset.dao.HostConfigDAO;
@@ -15,8 +17,6 @@ import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateRequest;
import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateStatusRequest; import com.orion.ops.module.asset.entity.request.host.HostConfigUpdateStatusRequest;
import com.orion.ops.module.asset.entity.vo.HostConfigVO; import com.orion.ops.module.asset.entity.vo.HostConfigVO;
import com.orion.ops.module.asset.enums.HostConfigTypeEnum; import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
import com.orion.ops.module.asset.handler.host.config.model.HostConfigModel;
import com.orion.ops.module.asset.handler.host.config.strategy.HostConfigStrategy;
import com.orion.ops.module.asset.service.HostConfigService; import com.orion.ops.module.asset.service.HostConfigService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -59,7 +59,8 @@ public class HostConfigServiceImpl implements HostConfigService {
} }
@Override @Override
public <T extends HostConfigModel> T getHostConfig(Long hostId, HostConfigTypeEnum type) { @SuppressWarnings("unchecked")
public <T extends GenericsDataModel> T getHostConfig(Long hostId, HostConfigTypeEnum type) {
// 查询配置 // 查询配置
HostConfigDO config = hostConfigDAO.getHostConfigByHostId(hostId, type.name()); HostConfigDO config = hostConfigDAO.getHostConfigByHostId(hostId, type.name());
if (config == null) { if (config == null) {
@@ -95,7 +96,7 @@ public class HostConfigServiceImpl implements HostConfigService {
HostConfigDO record = hostConfigDAO.selectById(id); HostConfigDO record = hostConfigDAO.selectById(id);
Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); Valid.notNull(record, ErrorMessage.CONFIG_ABSENT);
HostConfigTypeEnum type = Valid.valid(HostConfigTypeEnum::of, record.getType()); HostConfigTypeEnum type = Valid.valid(HostConfigTypeEnum::of, record.getType());
HostConfigModel config = JSON.parseObject(request.getConfig(), type.getType()); GenericsDataModel config = JSON.parseObject(request.getConfig(), type.getType());
// 查询主机 // 查询主机
HostDO host = hostDAO.selectById(record.getHostId()); HostDO host = hostDAO.selectById(record.getHostId());
Valid.notNull(host, ErrorMessage.HOST_ABSENT); Valid.notNull(host, ErrorMessage.HOST_ABSENT);
@@ -105,11 +106,11 @@ public class HostConfigServiceImpl implements HostConfigService {
OperatorLogs.add(OperatorLogs.TYPE, type.name()); OperatorLogs.add(OperatorLogs.TYPE, type.name());
// 检查版本 // 检查版本
Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED); Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED);
HostConfigStrategy<HostConfigModel> strategy = type.getStrategy(); MapDataStrategy<GenericsDataModel> strategy = type.getStrategy();
// 预校验参数 // 预校验参数
strategy.preValidConfig(config); strategy.preValidConfig(config);
// 更新填充 // 更新填充
HostConfigModel beforeConfig = JSON.parseObject(record.getConfig(), type.getType()); GenericsDataModel beforeConfig = JSON.parseObject(record.getConfig(), type.getType());
strategy.updateFill(beforeConfig, config); strategy.updateFill(beforeConfig, config);
// 检查参数 // 检查参数
strategy.validConfig(config); strategy.validConfig(config);

View File

@@ -42,7 +42,7 @@ public class DataAliasServiceImpl implements DataAliasService {
update.setRelId(request.getRelId()); update.setRelId(request.getRelId());
update.setType(type); update.setType(type);
update.setItem(DataExtraItems.ALIAS); update.setItem(DataExtraItems.ALIAS);
update.setValue(request.getAlias()); update.setValue(Refs.json(request.getAlias()));
Integer effect = dataExtraService.updateExtraItem(update); Integer effect = dataExtraService.updateExtraItem(update);
// 删除缓存 // 删除缓存
RedisMaps.delete(DataExtraCacheKeyDefine.DATA_ALIAS.format(userId, type)); RedisMaps.delete(DataExtraCacheKeyDefine.DATA_ALIAS.format(userId, type));

View File

@@ -1,8 +1,8 @@
package com.orion.ops.module.infra.service.impl; package com.orion.ops.module.infra.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.orion.lang.function.Functions; import com.orion.lang.function.Functions;
import com.orion.lang.utils.Refs;
import com.orion.lang.utils.collect.Maps; import com.orion.lang.utils.collect.Maps;
import com.orion.ops.module.infra.dao.DataExtraDAO; import com.orion.ops.module.infra.dao.DataExtraDAO;
import com.orion.ops.module.infra.entity.domain.DataExtraDO; import com.orion.ops.module.infra.entity.domain.DataExtraDO;
@@ -54,13 +54,13 @@ public class DataExtraServiceImpl implements DataExtraService {
insert.setRelId(relId); insert.setRelId(relId);
insert.setType(type); insert.setType(type);
insert.setItem(item); insert.setItem(item);
insert.setValue(Refs.json(value)); insert.setValue(JSON.toJSONString(value));
return dataExtraDAO.insert(insert); return dataExtraDAO.insert(insert);
} else { } else {
// 修改 // 修改
DataExtraDO update = new DataExtraDO(); DataExtraDO update = new DataExtraDO();
update.setId(extraItem.getId()); update.setId(extraItem.getId());
update.setValue(Refs.json(value)); update.setValue(JSON.toJSONString(value));
return dataExtraDAO.updateById(update); return dataExtraDAO.updateById(update);
} }
} }
@@ -76,7 +76,7 @@ public class DataExtraServiceImpl implements DataExtraService {
.map(s -> { .map(s -> {
DataExtraDO extra = new DataExtraDO(); DataExtraDO extra = new DataExtraDO();
extra.setId(s.getKey()); extra.setId(s.getKey());
extra.setValue(Refs.json(s.getValue())); extra.setValue(JSON.toJSONString(s.getValue()));
return extra; return extra;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
dataExtraDAO.updateBatch(list); dataExtraDAO.updateBatch(list);