From f13395f35108a7f0af614b2084fd273d2616eea3 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Tue, 17 Oct 2023 11:33:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E5=85=B8=E5=80=BC?= =?UTF-8?q?=E9=80=BB=E8=BE=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/ErrorMessage.java | 2 + .../log/core/constant/OperatorLogKeys.java | 2 + .../ops/module/infra/api/HistoryValueApi.java | 10 ++ .../infra/api/impl/HistoryValueApiImpl.java | 13 +++ .../infra/controller/DictValueController.java | 9 ++ .../define/operator/DictKeyOperatorType.java | 7 +- .../operator/DictValueOperatorType.java | 10 +- .../request/dict/DictKeyCreateRequest.java | 2 + .../request/dict/DictKeyUpdateRequest.java | 2 + .../request/dict/DictValueCreateRequest.java | 2 + .../dict/DictValueRollbackRequest.java | 34 +++++++ .../request/dict/DictValueUpdateRequest.java | 2 + .../module/infra/enums/DictValueTypeEnum.java | 49 ++++++++++ .../infra/service/DictValueService.java | 9 ++ .../infra/service/HistoryValueService.java | 10 ++ .../service/impl/DictKeyServiceImpl.java | 35 +++++-- .../service/impl/DictValueServiceImpl.java | 96 ++++++++++++++----- .../service/impl/HistoryValueServiceImpl.java | 11 +++ 18 files changed, 261 insertions(+), 44 deletions(-) create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueRollbackRequest.java create mode 100644 orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/DictValueTypeEnum.java diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java index 845753de..fa54f903 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java @@ -51,6 +51,8 @@ public interface ErrorMessage { String MAX_LOGIN_FAILED = "登陆失败次数已上限"; + String HISTORY_ABSENT = "历史值不存在"; + String USER_ABSENT = "用户不存在"; String HOST_ABSENT = "主机不存在"; diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java index 21555fbd..f157099e 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-biz-operator-log/src/main/java/com/orion/ops/framework/biz/operator/log/core/constant/OperatorLogKeys.java @@ -13,6 +13,8 @@ public interface OperatorLogKeys { String ID_LIST = "idList"; + String KEY = "key"; + String CODE = "code"; String NAME = "name"; diff --git a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/HistoryValueApi.java b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/HistoryValueApi.java index 4227a0cb..e5100aa6 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/HistoryValueApi.java +++ b/orion-ops-module-infra/orion-ops-module-infra-provider/src/main/java/com/orion/ops/module/infra/api/HistoryValueApi.java @@ -32,6 +32,16 @@ public interface HistoryValueApi { */ HistoryValueDTO getHistoryValueById(Long id); + /** + * 查询历史归档 + * + * @param id id + * @param relId relId + * @param type type + * @return row + */ + HistoryValueDTO getHistoryValueByRelId(Long id, Long relId, HistoryValueTypeEnum type); + /** * 删除历史归档 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/HistoryValueApiImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/HistoryValueApiImpl.java index 71408579..ed42e104 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/HistoryValueApiImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/api/impl/HistoryValueApiImpl.java @@ -56,6 +56,19 @@ public class HistoryValueApiImpl implements HistoryValueApi { return HistoryValueProviderConvert.MAPPER.to(record); } + @Override + public HistoryValueDTO getHistoryValueByRelId(Long id, Long relId, HistoryValueTypeEnum type) { + log.info("HistoryValueApi.getHistoryValueByRelId id: {}, relId: {}, type: {}", id, relId, type); + Valid.allNotNull(id, relId, type); + // 修改 + HistoryValueDO record = historyValueService.getHistoryByRelId(id, relId, type.name()); + if (record == null) { + return null; + } + // 转换 + return HistoryValueProviderConvert.MAPPER.to(record); + } + @Override public Integer deleteByRelId(HistoryValueTypeEnum type, Long relId) { return historyValueService.deleteByRelId(type.name(), relId); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/DictValueController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/DictValueController.java index eda973bf..4ecfdf7d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/DictValueController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/DictValueController.java @@ -9,6 +9,7 @@ import com.orion.ops.framework.web.core.annotation.RestWrapper; import com.orion.ops.module.infra.define.operator.DictValueOperatorType; import com.orion.ops.module.infra.entity.request.dict.DictValueCreateRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest; +import com.orion.ops.module.infra.entity.request.dict.DictValueRollbackRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueUpdateRequest; import com.orion.ops.module.infra.entity.vo.DictValueVO; import com.orion.ops.module.infra.service.DictValueService; @@ -58,6 +59,14 @@ public class DictValueController { return dictValueService.updateDictValueById(request); } + @OperatorLog(DictValueOperatorType.UPDATE) + @PutMapping("/rollback") + @Operation(summary = "回滚字典配置值") + @PreAuthorize("@ss.hasPermission('infra:dict-value:update')") + public Integer rollbackDictValue(@Validated @RequestBody DictValueRollbackRequest request) { + return dictValueService.rollbackDictValueById(request); + } + @IgnoreLog(IgnoreLogMode.RET) @GetMapping("/list") @Operation(summary = "查询字典配置值") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictKeyOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictKeyOperatorType.java index c065788b..1f93546d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictKeyOperatorType.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictKeyOperatorType.java @@ -25,10 +25,9 @@ public class DictKeyOperatorType extends InitializingOperatorTypes { @Override public OperatorType[] types() { return new OperatorType[]{ - // todo 添加参数 - new OperatorType(L, CREATE, "创建字典配置项"), - new OperatorType(M, UPDATE, "更新字典配置项"), - new OperatorType(H, DELETE, "删除字典配置项"), + new OperatorType(L, CREATE, "创建字典配置项 ${key}"), + new OperatorType(M, UPDATE, "更新字典配置项 ${key}"), + new OperatorType(H, DELETE, "删除字典配置项 ${key}"), }; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictValueOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictValueOperatorType.java index e6355c68..175fa9f5 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictValueOperatorType.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/operator/DictValueOperatorType.java @@ -20,18 +20,14 @@ public class DictValueOperatorType extends InitializingOperatorTypes { public static final String UPDATE = "dict-value:update"; - // todo 实现 - public static final String ROLLBACK = "dict-value:rollback"; - public static final String DELETE = "dict-value:delete"; @Override public OperatorType[] types() { return new OperatorType[]{ - // todo 添加参数 - new OperatorType(L, CREATE, "创建字典配置值"), - new OperatorType(M, UPDATE, "更新字典配置值"), - new OperatorType(H, DELETE, "删除字典配置值"), + new OperatorType(L, CREATE, "创建字典配置值 ${key} ${label}=${value}"), + new OperatorType(M, UPDATE, "更新字典配置值 ${key} ${label}=${value}"), + new OperatorType(H, DELETE, "删除字典配置值 ${value}"), }; } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyCreateRequest.java index adc9ca4a..9e84e6ad 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyCreateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyCreateRequest.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; @@ -26,6 +27,7 @@ public class DictKeyCreateRequest implements Serializable { @NotBlank @Size(max = 32) + @Pattern(regexp = "^[a-zA-Z0-9]{4,32}$") @Schema(description = "配置项") private String key; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyUpdateRequest.java index 03da80b3..45f8d97c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyUpdateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictKeyUpdateRequest.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; @@ -31,6 +32,7 @@ public class DictKeyUpdateRequest implements Serializable { @NotBlank @Size(max = 32) + @Pattern(regexp = "^[a-zA-Z0-9]{4,32}$") @Schema(description = "配置项") private String key; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueCreateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueCreateRequest.java index 45792871..1bf43902 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueCreateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueCreateRequest.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; @@ -31,6 +32,7 @@ public class DictValueCreateRequest implements Serializable { @NotBlank @Size(max = 32) + @Pattern(regexp = "^[a-zA-Z0-9]{4,32}$") @Schema(description = "配置名称") private String label; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueRollbackRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueRollbackRequest.java new file mode 100644 index 00000000..0971e2aa --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueRollbackRequest.java @@ -0,0 +1,34 @@ +package com.orion.ops.module.infra.entity.request.dict; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 字典配置值 回滚请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-10-16 16:33 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "DictValueRollbackRequest", description = "字典配置值 回滚请求对象") +public class DictValueRollbackRequest implements Serializable { + + @NotNull + @Schema(description = "id") + private Long id; + + @NotNull + @Schema(description = "历史值id") + private Long valueId; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueUpdateRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueUpdateRequest.java index 47930b04..56e5a045 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueUpdateRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/dict/DictValueUpdateRequest.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; @@ -35,6 +36,7 @@ public class DictValueUpdateRequest implements Serializable { @NotBlank @Size(max = 32) + @Pattern(regexp = "^[a-zA-Z0-9]{4,32}$") @Schema(description = "配置名称") private String label; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/DictValueTypeEnum.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/DictValueTypeEnum.java new file mode 100644 index 00000000..7e4ec7b3 --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/enums/DictValueTypeEnum.java @@ -0,0 +1,49 @@ +package com.orion.ops.module.infra.enums; + +import lombok.Getter; + +/** + * 字典值类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/10/17 11:18 + */ +@Getter +public enum DictValueTypeEnum { + + /** + * 字符串 + */ + STRING, + + /** + * 数值 + */ + NUMBER, + + /** + * 布尔值 + */ + BOOLEAN, + + /** + * 颜色 + */ + COLOR, + + ; + + public static DictValueTypeEnum of(String type) { + if (type == null) { + return STRING; + } + for (DictValueTypeEnum value : values()) { + if (value.name().equals(type)) { + return value; + } + } + return STRING; + } + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DictValueService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DictValueService.java index 7d5b9ca3..2e26748b 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DictValueService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/DictValueService.java @@ -3,6 +3,7 @@ package com.orion.ops.module.infra.service; import com.orion.lang.define.wrapper.DataGrid; import com.orion.ops.module.infra.entity.request.dict.DictValueCreateRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest; +import com.orion.ops.module.infra.entity.request.dict.DictValueRollbackRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueUpdateRequest; import com.orion.ops.module.infra.entity.vo.DictValueVO; @@ -33,6 +34,14 @@ public interface DictValueService { */ Integer updateDictValueById(DictValueUpdateRequest request); + /** + * 更新字典配置值 + * + * @param request request + * @return effect + */ + Integer rollbackDictValueById(DictValueRollbackRequest request); + /** * 查询全部字典配置值 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/HistoryValueService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/HistoryValueService.java index 3df8b539..c320054e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/HistoryValueService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/HistoryValueService.java @@ -41,6 +41,16 @@ public interface HistoryValueService { */ HistoryValueDO getHistoryById(Long id); + /** + * 通过 id 查询 + * + * @param id id + * @param relId relId + * @param type type + * @return value + */ + HistoryValueDO getHistoryByRelId(Long id, Long relId, String type); + /** * 删除历史归档 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictKeyServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictKeyServiceImpl.java index 1b09196b..a6719e95 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictKeyServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictKeyServiceImpl.java @@ -3,6 +3,7 @@ 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.utils.Objects1; +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.utils.Valid; @@ -15,6 +16,7 @@ import com.orion.ops.module.infra.entity.dto.DictKeyCacheDTO; import com.orion.ops.module.infra.entity.request.dict.DictKeyCreateRequest; import com.orion.ops.module.infra.entity.request.dict.DictKeyUpdateRequest; import com.orion.ops.module.infra.entity.vo.DictKeyVO; +import com.orion.ops.module.infra.enums.DictValueTypeEnum; import com.orion.ops.module.infra.service.DictKeyService; import com.orion.ops.module.infra.service.DictValueService; import lombok.extern.slf4j.Slf4j; @@ -45,7 +47,8 @@ public class DictKeyServiceImpl implements DictKeyService { @Override public Long createDictKey(DictKeyCreateRequest request) { - log.info("DictKeyService-createDictKey request: {}" , JSON.toJSONString(request)); + log.info("DictKeyService-createDictKey request: {}", JSON.toJSONString(request)); + Valid.valid(DictValueTypeEnum::of, request.getValueType()); // 转换 DictKeyDO record = DictKeyConvert.MAPPER.to(request); // 查询数据是否冲突 @@ -53,7 +56,7 @@ public class DictKeyServiceImpl implements DictKeyService { // 插入 int effect = dictKeyDAO.insert(record); Long id = record.getId(); - log.info("DictKeyService-createDictKey id: {}, effect: {}" , id, effect); + log.info("DictKeyService-createDictKey id: {}, effect: {}", id, effect); // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_KEY); return id; @@ -63,10 +66,11 @@ public class DictKeyServiceImpl implements DictKeyService { @Transactional(rollbackFor = Exception.class) public Integer updateDictKeyById(DictKeyUpdateRequest request) { Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); - log.info("DictKeyService-updateDictKeyById id: {}, request: {}" , id, JSON.toJSONString(request)); + log.info("DictKeyService-updateDictKeyById id: {}, request: {}", id, JSON.toJSONString(request)); + Valid.valid(DictValueTypeEnum::of, request.getValueType()); // 查询 DictKeyDO record = dictKeyDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); // 转换 DictKeyDO updateRecord = DictKeyConvert.MAPPER.to(request); // 查询数据是否冲突 @@ -79,7 +83,7 @@ public class DictKeyServiceImpl implements DictKeyService { } // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_KEY); - log.info("DictKeyService-updateDictKeyById effect: {}" , effect); + log.info("DictKeyService-updateDictKeyById effect: {}", effect); return effect; } @@ -110,27 +114,38 @@ public class DictKeyServiceImpl implements DictKeyService { @Override public Integer deleteDictKeyById(Long id) { - log.info("DictKeyService-deleteDictKeyById id: {}" , id); + log.info("DictKeyService-deleteDictKeyById id: {}", id); // 检查数据是否存在 DictKeyDO record = dictKeyDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); + OperatorLogs.add(OperatorLogs.KEY, record.getKey()); // 删除配置项 int effect = dictKeyDAO.deleteById(id); // 删除配置值 dictValueService.deleteDictValueByKeyId(id); // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_KEY, id); - log.info("DictKeyService-deleteDictKeyById id: {}, effect: {}" , id, effect); + log.info("DictKeyService-deleteDictKeyById id: {}, effect: {}", id, effect); return effect; } @Override public Integer deleteDictKeyByIdList(List idList) { - log.info("DictKeyService-deleteDictKeyByIdList idList: {}" , idList); + log.info("DictKeyService-deleteDictKeyByIdList idList: {}", idList); + // 检查数据是否存在 + List dictKeys = dictKeyDAO.selectBatchIds(idList); + if (dictKeys.isEmpty()) { + return 0; + } + String keys = dictKeys.stream() + .map(DictKeyDO::getKey) + .collect(Collectors.joining(Const.COMMA)); + OperatorLogs.add(OperatorLogs.KEY, keys); + // 删除配置项 int effect = dictKeyDAO.deleteBatchIds(idList); // 删除配置值 dictValueService.deleteDictValueByKeyIdList(idList); - log.info("DictKeyService-deleteDictKeyByIdList effect: {}" , effect); + log.info("DictKeyService-deleteDictKeyByIdList effect: {}", effect); // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_KEY, idList); return effect; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictValueServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictValueServiceImpl.java index 19cb28c3..b885082d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictValueServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/DictValueServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.collect.Lists; +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.utils.Valid; @@ -15,9 +16,11 @@ import com.orion.ops.module.infra.dao.DictValueDAO; import com.orion.ops.module.infra.define.cache.DictCacheKeyDefine; import com.orion.ops.module.infra.entity.domain.DictKeyDO; import com.orion.ops.module.infra.entity.domain.DictValueDO; +import com.orion.ops.module.infra.entity.domain.HistoryValueDO; import com.orion.ops.module.infra.entity.dto.DictValueCacheDTO; import com.orion.ops.module.infra.entity.request.dict.DictValueCreateRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest; +import com.orion.ops.module.infra.entity.request.dict.DictValueRollbackRequest; import com.orion.ops.module.infra.entity.request.dict.DictValueUpdateRequest; import com.orion.ops.module.infra.entity.request.history.HistoryValueCreateRequest; import com.orion.ops.module.infra.entity.vo.DictValueVO; @@ -54,7 +57,7 @@ public class DictValueServiceImpl implements DictValueService { @Override public Long createDictValue(DictValueCreateRequest request) { - log.info("DictValueService-createDictValue request: {}" , JSON.toJSONString(request)); + log.info("DictValueService-createDictValue request: {}", JSON.toJSONString(request)); // 转换 DictValueDO record = DictValueConvert.MAPPER.to(request); // 查询 dictKey 是否存在 @@ -63,10 +66,11 @@ public class DictValueServiceImpl implements DictValueService { // 查询数据是否冲突 this.checkDictValuePresent(record); // 插入 + OperatorLogs.add(OperatorLogs.KEY, dictKey); record.setKey(key); int effect = dictValueDAO.insert(record); Long id = record.getId(); - log.info("DictValueService-createDictValue id: {}, effect: {}" , id, effect); + log.info("DictValueService-createDictValue id: {}, effect: {}", id, effect); // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_VALUE.format(key)); return id; @@ -74,11 +78,11 @@ public class DictValueServiceImpl implements DictValueService { @Override public Integer updateDictValueById(DictValueUpdateRequest request) { - log.info("DictValueService-updateDictValueById id: {}, request: {}" , request.getId(), JSON.toJSONString(request)); + log.info("DictValueService-updateDictValueById id: {}, request: {}", request.getId(), JSON.toJSONString(request)); // 查询 Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); DictValueDO record = dictValueDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); // 查询 dictKey 是否存在 DictKeyDO dictKey = dictKeyDAO.selectById(request.getKeyId()); String key = Valid.notNull(dictKey, ErrorMessage.CONFIG_ABSENT).getKey(); @@ -87,23 +91,41 @@ public class DictValueServiceImpl implements DictValueService { // 查询数据是否冲突 this.checkDictValuePresent(updateRecord); // 更新 + OperatorLogs.add(OperatorLogs.KEY, dictKey); updateRecord.setKey(key); int effect = dictValueDAO.updateById(updateRecord); - log.info("DictValueService-updateDictValueById effect: {}" , effect); + log.info("DictValueService-updateDictValueById effect: {}", effect); // 删除缓存 RedisMaps.delete(DictCacheKeyDefine.DICT_VALUE.format(key)); - // 检查值是否发生改变 - String beforeValue = record.getValue(); - String afterValue = request.getValue(); - if (!beforeValue.equals(afterValue)) { - // 记录历史值 - HistoryValueCreateRequest historyRequest = new HistoryValueCreateRequest(); - historyRequest.setRelId(id); - historyRequest.setType(HistoryValueTypeEnum.DICT.name()); - historyRequest.setBeforeValue(beforeValue); - historyRequest.setAfterValue(afterValue); - historyValueService.createHistoryValue(historyRequest); - } + // 记录历史归档 + this.checkRecordHistory(updateRecord, record); + return effect; + } + + @Override + public Integer rollbackDictValueById(DictValueRollbackRequest request) { + Long id = request.getId(); + log.info("DictValueService-updateDictValueById id: {}, request: {}", id, JSON.toJSONString(request)); + // 查询 + DictValueDO record = dictValueDAO.selectById(id); + Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); + // 查询历史值 + HistoryValueDO history = historyValueService.getHistoryByRelId(request.getValueId(), id, HistoryValueTypeEnum.DICT.name()); + Valid.notNull(history, ErrorMessage.HISTORY_ABSENT); + // 记录日志参数 + OperatorLogs.add(OperatorLogs.KEY, record.getKey()); + OperatorLogs.add(OperatorLogs.LABEL, record.getLabel()); + OperatorLogs.add(OperatorLogs.VALUE, history.getBeforeValue()); + // 更新 + DictValueDO updateRecord = new DictValueDO(); + updateRecord.setId(id); + updateRecord.setValue(history.getBeforeValue()); + int effect = dictValueDAO.updateById(updateRecord); + log.info("DictValueService-rollbackDictValueById effect: {}", effect); + // 删除缓存 + RedisMaps.delete(DictCacheKeyDefine.DICT_VALUE.format(record.getKey())); + // 记录历史归档 + this.checkRecordHistory(updateRecord, record); return effect; } @@ -165,26 +187,33 @@ public class DictValueServiceImpl implements DictValueService { @Override public Integer deleteDictValueById(Long id) { - log.info("DictValueService-deleteDictValueById id: {}" , id); + log.info("DictValueService-deleteDictValueById id: {}", id); // 检查数据是否存在 DictValueDO record = dictValueDAO.selectById(id); - Valid.notNull(record, ErrorMessage.DATA_ABSENT); + Valid.notNull(record, ErrorMessage.CONFIG_ABSENT); + // 添加日志参数 + OperatorLogs.add(OperatorLogs.VALUE, record.getKey() + "-" + record.getLabel()); // 删除 return this.deleteDictValue(Lists.singleton(id), Lists.singleton(record)); } @Override public Integer deleteDictValueByIdList(List idList) { - log.info("DictValueService-deleteDictValueByIdList idList: {}" , idList); + log.info("DictValueService-deleteDictValueByIdList idList: {}", idList); // 查询数据 List records = dictValueDAO.selectBatchIds(idList); + // 添加日志参数 + String value = records.stream() + .map(s -> s.getKey() + "-" + s.getLabel()) + .collect(Collectors.joining(Const.COMMA)); + OperatorLogs.add(OperatorLogs.VALUE, value); // 删除 return this.deleteDictValue(idList, records); } @Override public Integer deleteDictValueByKeyId(Long keyId) { - log.info("DictValueService-deleteDictValueByKeyId keyId: {}" , keyId); + log.info("DictValueService-deleteDictValueByKeyId keyId: {}", keyId); // 查询数据 List records = dictValueDAO.selectList(Conditions.eq(DictValueDO::getKeyId, keyId)); // 删除 @@ -196,7 +225,7 @@ public class DictValueServiceImpl implements DictValueService { @Override public Integer deleteDictValueByKeyIdList(List keyIdList) { - log.info("DictValueService-deleteDictValueByKeyIdList keyIdList: {}" , keyIdList); + log.info("DictValueService-deleteDictValueByKeyIdList keyIdList: {}", keyIdList); // 查询数据 List records = dictValueDAO.selectList(Conditions.in(DictValueDO::getKeyId, keyIdList)); // 删除 @@ -219,7 +248,7 @@ public class DictValueServiceImpl implements DictValueService { } // 删除 int effect = dictValueDAO.deleteBatchIds(idList); - log.info("DictValueService-deleteDictValue effect: {}" , effect); + log.info("DictValueService-deleteDictValue effect: {}", effect); // 删除缓存 List keyList = records.stream() .map(DictValueDO::getKey) @@ -230,6 +259,27 @@ public class DictValueServiceImpl implements DictValueService { return effect; } + /** + * 检查是否保存默认值 + * + * @param updateRecord 修改后 + * @param record 修改前 + */ + private void checkRecordHistory(DictValueDO updateRecord, DictValueDO record) { + // 检查值是否发生改变 + String beforeValue = record.getValue(); + String afterValue = updateRecord.getValue(); + if (!beforeValue.equals(afterValue)) { + // 记录历史值 + HistoryValueCreateRequest historyRequest = new HistoryValueCreateRequest(); + historyRequest.setRelId(record.getId()); + historyRequest.setType(HistoryValueTypeEnum.DICT.name()); + historyRequest.setBeforeValue(beforeValue); + historyRequest.setAfterValue(afterValue); + historyValueService.createHistoryValue(historyRequest); + } + } + /** * 检查对象是否存在 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/HistoryValueServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/HistoryValueServiceImpl.java index 174a2cc1..a12b0aa2 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/HistoryValueServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/HistoryValueServiceImpl.java @@ -58,6 +58,17 @@ public class HistoryValueServiceImpl implements HistoryValueService { return historyValueDAO.selectById(id); } + @Override + public HistoryValueDO getHistoryByRelId(Long id, Long relId, String type) { + return historyValueDAO.of() + .createWrapper() + .eq(HistoryValueDO::getId, id) + .eq(HistoryValueDO::getRelId, relId) + .eq(HistoryValueDO::getType, type) + .then() + .getOne(); + } + @Override public Integer deleteByRelId(String type, Long relId) { log.info("HistoryValueService-deleteByRelId type: {}, relId: {}", type, relId);