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;
/**
* 主机配置父类
* 标准数据模型
*
* @author Jiahang Li
* @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 java.util.Map;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
/**
* 主机配置策略
* 标准数据处理策略
*
* @author Jiahang Li
* @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
* @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;
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.strategy.HostConfigStrategy;
import com.orion.ops.module.asset.handler.host.config.strategy.HostSshConfigStrategy;
import com.orion.spring.SpringHolder;
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;
public static HostConfigTypeEnum of(String type) {
@@ -43,17 +46,9 @@ public enum HostConfigTypeEnum {
return null;
}
public Class<? extends HostConfigModel> getType() {
return type;
}
@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);
}
public Integer getDefaultStatus() {
return defaultStatus;
}
}

View File

@@ -1,5 +1,6 @@
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 io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
@@ -24,7 +25,7 @@ import javax.validation.constraints.Size;
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "HostSftpConfig", description = "主机 SSH 配置")
public class HostSshConfigModel implements HostConfigModel, UpdatePasswordAction {
public class HostSshConfigModel implements GenericsDataModel, UpdatePasswordAction {
@NotNull
@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.ops.framework.common.constant.Const;
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.utils.Valid;
import com.orion.ops.module.asset.dao.HostIdentityDAO;
@@ -26,7 +27,7 @@ import java.util.Map;
* @since 2023/9/19 14:26
*/
@Component
public class HostSshConfigStrategy implements HostConfigStrategy<HostSshConfigModel> {
public class HostSshConfigStrategy implements MapDataStrategy<HostSshConfigModel> {
@Resource
private HostKeyDAO hostKeyDAO;

View File

@@ -1,10 +1,10 @@
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.HostConfigUpdateStatusRequest;
import com.orion.ops.module.asset.entity.vo.HostConfigVO;
import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
import com.orion.ops.module.asset.handler.host.config.model.HostConfigModel;
import java.util.List;
@@ -33,7 +33,7 @@ public interface HostConfigService {
* @param type type
* @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.ErrorMessage;
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.module.asset.convert.HostConfigConvert;
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.vo.HostConfigVO;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -59,7 +59,8 @@ public class HostConfigServiceImpl implements HostConfigService {
}
@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());
if (config == null) {
@@ -95,7 +96,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());
HostConfigModel config = JSON.parseObject(request.getConfig(), type.getType());
GenericsDataModel config = JSON.parseObject(request.getConfig(), type.getType());
// 查询主机
HostDO host = hostDAO.selectById(record.getHostId());
Valid.notNull(host, ErrorMessage.HOST_ABSENT);
@@ -105,11 +106,11 @@ public class HostConfigServiceImpl implements HostConfigService {
OperatorLogs.add(OperatorLogs.TYPE, type.name());
// 检查版本
Valid.eq(record.getVersion(), request.getVersion(), ErrorMessage.DATA_MODIFIED);
HostConfigStrategy<HostConfigModel> strategy = type.getStrategy();
MapDataStrategy<GenericsDataModel> strategy = type.getStrategy();
// 预校验参数
strategy.preValidConfig(config);
// 更新填充
HostConfigModel beforeConfig = JSON.parseObject(record.getConfig(), type.getType());
GenericsDataModel beforeConfig = JSON.parseObject(record.getConfig(), type.getType());
strategy.updateFill(beforeConfig, config);
// 检查参数
strategy.validConfig(config);

View File

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

View File

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