feat: 删除字典值 name 字段.
This commit is contained in:
@@ -9,16 +9,12 @@ package com.orion.ops.framework.common.constant;
|
|||||||
*/
|
*/
|
||||||
public interface ValidConst {
|
public interface ValidConst {
|
||||||
|
|
||||||
String CHAR_NUMBER_1_32_PATTERN = "^[a-zA-Z0-9]{1,32}$";
|
String USERNAME_4_32_PATTERN = "^[a-zA-Z0-9_]{4,32}$";
|
||||||
|
|
||||||
String CHAR_NUMBER_1_32_MESSAGE = "只能为 1-32 位的数字或字母";
|
String USERNAME_4_32_MESSAGE = "只能为 4-32 位的数字,字母或下滑线";
|
||||||
|
|
||||||
String CHAR_NUMBER_2_32_PATTERN = "^[a-zA-Z0-9]{2,32}$";
|
String DICT_1_32_PATTERN = "^[a-zA-Z0-9_]{1,32}$";
|
||||||
|
|
||||||
String CHAR_NUMBER_2_32_MESSAGE = "只能为 2-32 位的数字或字母";
|
String DICT_1_32_MESSAGE = "只能为 1-32 位的数字,字母或下滑线";
|
||||||
|
|
||||||
String CHAR_NUMBER_4_32_PATTERN = "^[a-zA-Z0-9]{4,32}$";
|
|
||||||
|
|
||||||
String CHAR_NUMBER_4_32_MESSAGE = "只能为 4-32 位的数字或字母";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||||
import com.orion.lang.utils.Strings;
|
import com.orion.lang.utils.Strings;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* redis string 工具类
|
* redis string 工具类
|
||||||
@@ -75,6 +77,52 @@ public class RedisStrings extends RedisUtils {
|
|||||||
return (T) JSON.parseObject(value, type);
|
return (T) JSON.parseObject(value, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 json 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static List<JSONObject> getJsonList(List<String> keys) {
|
||||||
|
List<String> values = redisTemplate.opsForValue().multiGet(keys);
|
||||||
|
if (values == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return values.stream()
|
||||||
|
.map(JSON::parseObject)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 json 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @param define define
|
||||||
|
* @param <T> T
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static <T> List<T> getJsonList(List<String> keys, CacheKeyDefine define) {
|
||||||
|
return getJsonList(keys, (Class<T>) define.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 json 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @param type type
|
||||||
|
* @param <T> T
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static <T> List<T> getJsonList(List<String> keys, Class<T> type) {
|
||||||
|
List<String> values = redisTemplate.opsForValue().multiGet(keys);
|
||||||
|
if (values == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return values.stream()
|
||||||
|
.map(s -> JSON.parseObject(s, type))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取 json
|
* 获取 json
|
||||||
*
|
*
|
||||||
@@ -128,6 +176,52 @@ public class RedisStrings extends RedisUtils {
|
|||||||
return JSON.parseArray(value, type);
|
return JSON.parseArray(value, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 jsonArray 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static List<JSONArray> getJsonArrayList(List<String> keys) {
|
||||||
|
List<String> values = redisTemplate.opsForValue().multiGet(keys);
|
||||||
|
if (values == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return values.stream()
|
||||||
|
.map(JSON::parseArray)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 jsonArray 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @param define define
|
||||||
|
* @param <T> T
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static <T> List<List<T>> getJsonArrayList(List<String> keys, CacheKeyDefine define) {
|
||||||
|
return getJsonArrayList(keys, (Class<T>) define.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 jsonArray 列表
|
||||||
|
*
|
||||||
|
* @param keys keys
|
||||||
|
* @param type type
|
||||||
|
* @param <T> T
|
||||||
|
* @return cache
|
||||||
|
*/
|
||||||
|
public static <T> List<List<T>> getJsonArrayList(List<String> keys, Class<T> type) {
|
||||||
|
List<String> values = redisTemplate.opsForValue().multiGet(keys);
|
||||||
|
if (values == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return values.stream()
|
||||||
|
.map(s -> JSON.parseArray(s, type))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置 json
|
* 设置 json
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ public class CodeGenerator {
|
|||||||
private static void printTips() {
|
private static void printTips() {
|
||||||
String line = AnsiAppender.create()
|
String line = AnsiAppender.create()
|
||||||
.append(AnsiForeground.BRIGHT_GREEN.and(AnsiFont.BOLD), "\n:: 代码生成完毕 ^_^ ::\n")
|
.append(AnsiForeground.BRIGHT_GREEN.and(AnsiFont.BOLD), "\n:: 代码生成完毕 ^_^ ::\n")
|
||||||
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码复制后请先 clean 模块父工程\n")
|
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码复制后请先 clean 父工程\n")
|
||||||
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码需要自行修改缓存逻辑\n")
|
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码需要自行修改缓存逻辑\n")
|
||||||
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码修改完成后请先执行单元测试检测是否正常\n")
|
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- 后端代码修改完成后请先执行单元测试检测是否正常\n")
|
||||||
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 代码需要注意同一模块的 router 需要自行合并\n")
|
.append(AnsiForeground.BRIGHT_BLUE.and(AnsiFont.BOLD), "- vue 代码需要注意同一模块的 router 需要自行合并\n")
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.orion.ops.module.infra.controller;
|
package com.orion.ops.module.infra.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.orion.lang.define.wrapper.DataGrid;
|
import com.orion.lang.define.wrapper.DataGrid;
|
||||||
import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog;
|
import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog;
|
||||||
import com.orion.ops.framework.common.validator.group.Page;
|
import com.orion.ops.framework.common.validator.group.Page;
|
||||||
@@ -70,16 +71,9 @@ public class DictValueController {
|
|||||||
|
|
||||||
@IgnoreLog(IgnoreLogMode.RET)
|
@IgnoreLog(IgnoreLogMode.RET)
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@Operation(summary = "查询字典配置值")
|
@Operation(summary = "查询字典配置值选项")
|
||||||
public List<DictValueVO> getDictValueList(@RequestParam("keyName") String keyName) {
|
public Map<String, List<JSONObject>> getDictValueList(@RequestParam("keys") List<String> keys) {
|
||||||
return dictValueService.getDictValueList(keyName);
|
return dictValueService.getDictValueList(keys);
|
||||||
}
|
|
||||||
|
|
||||||
@IgnoreLog(IgnoreLogMode.RET)
|
|
||||||
@GetMapping("/enum")
|
|
||||||
@Operation(summary = "查询字典配置值枚举")
|
|
||||||
public Map<String, Map<String, Object>> getDictValueEnum(@RequestParam("keyName") String keyName) {
|
|
||||||
return dictValueService.getDictValueEnum(keyName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@IgnoreLog(IgnoreLogMode.RET)
|
@IgnoreLog(IgnoreLogMode.RET)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.orion.ops.module.infra.convert;
|
package com.orion.ops.module.infra.convert;
|
||||||
|
|
||||||
import com.orion.ops.module.infra.entity.domain.DictValueDO;
|
import com.orion.ops.module.infra.entity.domain.DictValueDO;
|
||||||
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.DictValueCreateRequest;
|
||||||
import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest;
|
import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest;
|
||||||
import com.orion.ops.module.infra.entity.request.dict.DictValueUpdateRequest;
|
import com.orion.ops.module.infra.entity.request.dict.DictValueUpdateRequest;
|
||||||
@@ -33,8 +32,4 @@ public interface DictValueConvert {
|
|||||||
|
|
||||||
List<DictValueVO> to(List<DictValueDO> list);
|
List<DictValueVO> to(List<DictValueDO> list);
|
||||||
|
|
||||||
DictValueVO to(DictValueCacheDTO cache);
|
|
||||||
|
|
||||||
DictValueCacheDTO toCache(DictValueDO domain);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.orion.lang.define.cache.CacheKeyBuilder;
|
import com.orion.lang.define.cache.CacheKeyBuilder;
|
||||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||||
import com.orion.ops.module.infra.entity.dto.DictKeyCacheDTO;
|
import com.orion.ops.module.infra.entity.dto.DictKeyCacheDTO;
|
||||||
import com.orion.ops.module.infra.entity.dto.DictValueCacheDTO;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ public interface DictCacheKeyDefine {
|
|||||||
CacheKeyDefine DICT_VALUE = new CacheKeyBuilder()
|
CacheKeyDefine DICT_VALUE = new CacheKeyBuilder()
|
||||||
.key("dict:values:{}")
|
.key("dict:values:{}")
|
||||||
.desc("字典配置值 ${key}")
|
.desc("字典配置值 ${key}")
|
||||||
.type(DictValueCacheDTO.class)
|
.type(JSONObject.class)
|
||||||
.timeout(1, TimeUnit.DAYS)
|
.timeout(1, TimeUnit.DAYS)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|||||||
@@ -38,10 +38,6 @@ public class DictValueDO extends BaseDO {
|
|||||||
@TableField("key_name")
|
@TableField("key_name")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
@TableField("name")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
@TableField("value")
|
@TableField("value")
|
||||||
private String value;
|
private String value;
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
package com.orion.ops.module.infra.entity.dto;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 字典配置值 缓存对象
|
|
||||||
*
|
|
||||||
* @author Jiahang Li
|
|
||||||
* @version 1.0.0
|
|
||||||
* @since 2023-10-16 16:33
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Schema(name = "DictValueCacheDTO", description = "字典配置值 缓存对象")
|
|
||||||
public class DictValueCacheDTO implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Schema(description = "id")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "配置项id")
|
|
||||||
private Long keyId;
|
|
||||||
|
|
||||||
@Schema(description = "配置项")
|
|
||||||
private String keyName;
|
|
||||||
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "配置值")
|
|
||||||
private String value;
|
|
||||||
|
|
||||||
@Schema(description = "配置描述")
|
|
||||||
private String label;
|
|
||||||
|
|
||||||
@Schema(description = "额外参数")
|
|
||||||
private String extra;
|
|
||||||
|
|
||||||
@Schema(description = "排序")
|
|
||||||
private Integer sort;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
@Schema(description = "修改时间")
|
|
||||||
private Date updateTime;
|
|
||||||
|
|
||||||
@Schema(description = "创建人")
|
|
||||||
private String creator;
|
|
||||||
|
|
||||||
@Schema(description = "修改人")
|
|
||||||
private String updater;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -28,7 +28,7 @@ public class DictKeyCreateRequest implements Serializable {
|
|||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 32)
|
@Size(max = 32)
|
||||||
@Pattern(regexp = ValidConst.CHAR_NUMBER_2_32_PATTERN, message = ValidConst.CHAR_NUMBER_2_32_MESSAGE)
|
@Pattern(regexp = ValidConst.DICT_1_32_PATTERN, message = ValidConst.DICT_1_32_MESSAGE)
|
||||||
@Schema(description = "配置项")
|
@Schema(description = "配置项")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class DictKeyUpdateRequest implements Serializable {
|
|||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 32)
|
@Size(max = 32)
|
||||||
@Pattern(regexp = ValidConst.CHAR_NUMBER_2_32_PATTERN, message = ValidConst.CHAR_NUMBER_2_32_MESSAGE)
|
@Pattern(regexp = ValidConst.DICT_1_32_PATTERN, message = ValidConst.DICT_1_32_MESSAGE)
|
||||||
@Schema(description = "配置项")
|
@Schema(description = "配置项")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.orion.ops.module.infra.entity.request.dict;
|
package com.orion.ops.module.infra.entity.request.dict;
|
||||||
|
|
||||||
import com.orion.ops.framework.common.constant.ValidConst;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@@ -9,7 +8,6 @@ import lombok.NoArgsConstructor;
|
|||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.Pattern;
|
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@@ -31,12 +29,6 @@ public class DictValueCreateRequest implements Serializable {
|
|||||||
@Schema(description = "配置项id")
|
@Schema(description = "配置项id")
|
||||||
private Long keyId;
|
private Long keyId;
|
||||||
|
|
||||||
@NotBlank
|
|
||||||
@Size(max = 32)
|
|
||||||
@Pattern(regexp = ValidConst.CHAR_NUMBER_1_32_PATTERN, message = ValidConst.CHAR_NUMBER_1_32_MESSAGE)
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 512)
|
@Size(max = 512)
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
|
|||||||
@@ -28,10 +28,6 @@ public class DictValueQueryRequest extends PageRequest {
|
|||||||
@Schema(description = "配置项名称")
|
@Schema(description = "配置项名称")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
@Size(max = 32)
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Size(max = 512)
|
@Size(max = 512)
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
private String value;
|
private String value;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.orion.ops.module.infra.entity.request.dict;
|
package com.orion.ops.module.infra.entity.request.dict;
|
||||||
|
|
||||||
import com.orion.ops.framework.common.constant.ValidConst;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@@ -9,7 +8,6 @@ import lombok.NoArgsConstructor;
|
|||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.Pattern;
|
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@@ -35,12 +33,6 @@ public class DictValueUpdateRequest implements Serializable {
|
|||||||
@Schema(description = "配置项id")
|
@Schema(description = "配置项id")
|
||||||
private Long keyId;
|
private Long keyId;
|
||||||
|
|
||||||
@NotBlank
|
|
||||||
@Size(max = 32)
|
|
||||||
@Pattern(regexp = ValidConst.CHAR_NUMBER_1_32_PATTERN, message = ValidConst.CHAR_NUMBER_1_32_MESSAGE)
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 512)
|
@Size(max = 512)
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class SystemUserCreateRequest implements Serializable {
|
|||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 32)
|
@Size(max = 32)
|
||||||
@Pattern(regexp = ValidConst.CHAR_NUMBER_4_32_PATTERN, message = ValidConst.CHAR_NUMBER_4_32_MESSAGE)
|
@Pattern(regexp = ValidConst.USERNAME_4_32_PATTERN, message = ValidConst.USERNAME_4_32_MESSAGE)
|
||||||
@Schema(description = "用户名")
|
@Schema(description = "用户名")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
|
|||||||
@@ -34,9 +34,6 @@ public class DictValueEnumVO implements Serializable {
|
|||||||
@Schema(description = "配置项")
|
@Schema(description = "配置项")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
@Schema(description = "配置名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ public class DictValueVO implements Serializable {
|
|||||||
@Schema(description = "配置项")
|
@Schema(description = "配置项")
|
||||||
private String keyName;
|
private String keyName;
|
||||||
|
|
||||||
@Schema(description = "配置名称")
|
@Schema(description = "配置描述")
|
||||||
private String name;
|
private String keyDescription;
|
||||||
|
|
||||||
@Schema(description = "配置值")
|
@Schema(description = "配置值")
|
||||||
private String value;
|
private String value;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.orion.ops.module.infra.service;
|
package com.orion.ops.module.infra.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.orion.lang.define.wrapper.DataGrid;
|
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.DictValueCreateRequest;
|
||||||
import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest;
|
import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest;
|
||||||
@@ -44,20 +45,12 @@ public interface DictValueService {
|
|||||||
Integer rollbackDictValueById(DictValueRollbackRequest request);
|
Integer rollbackDictValueById(DictValueRollbackRequest request);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询全部字典配置值
|
* 查询字典配置值
|
||||||
*
|
*
|
||||||
* @param keyName keyName
|
* @param keys keys
|
||||||
* @return rows
|
* @return rows
|
||||||
*/
|
*/
|
||||||
List<DictValueVO> getDictValueList(String keyName);
|
Map<String, List<JSONObject>> getDictValueList(List<String> keys);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询全部字典配置值枚举
|
|
||||||
*
|
|
||||||
* @param keyName keyName
|
|
||||||
* @return enum
|
|
||||||
*/
|
|
||||||
Map<String, Map<String, Object>> getDictValueEnum(String keyName);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询字典配置值
|
* 分页查询字典配置值
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public class DictKeyServiceImpl implements DictKeyService {
|
|||||||
return list.stream()
|
return list.stream()
|
||||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
||||||
.map(DictKeyConvert.MAPPER::to)
|
.map(DictKeyConvert.MAPPER::to)
|
||||||
.sorted(Comparator.comparing(DictKeyVO::getKeyName))
|
.sorted(Comparator.comparing(DictKeyVO::getId).reversed())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ public class DictKeyServiceImpl implements DictKeyService {
|
|||||||
.map(DictKeyDO::getKeyName)
|
.map(DictKeyDO::getKeyName)
|
||||||
.map(DictCacheKeyDefine.DICT_SCHEMA::format)
|
.map(DictCacheKeyDefine.DICT_SCHEMA::format)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
RedisMaps.delete(schemaKeys);
|
RedisUtils.delete(schemaKeys);
|
||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +243,7 @@ public class DictKeyServiceImpl implements DictKeyService {
|
|||||||
.and(Strings.isNotEmpty(searchValue), c -> c
|
.and(Strings.isNotEmpty(searchValue), c -> c
|
||||||
.like(DictKeyDO::getKeyName, searchValue).or()
|
.like(DictKeyDO::getKeyName, searchValue).or()
|
||||||
.like(DictKeyDO::getDescription, searchValue)
|
.like(DictKeyDO::getDescription, searchValue)
|
||||||
);
|
).orderByDesc(DictKeyDO::getId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.orion.lang.define.wrapper.DataGrid;
|
import com.orion.lang.define.wrapper.DataGrid;
|
||||||
import com.orion.lang.utils.Strings;
|
import com.orion.lang.utils.Strings;
|
||||||
import com.orion.lang.utils.collect.Lists;
|
import com.orion.lang.utils.collect.Lists;
|
||||||
import com.orion.lang.utils.collect.Maps;
|
|
||||||
import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs;
|
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.utils.Valid;
|
import com.orion.ops.framework.common.utils.Valid;
|
||||||
import com.orion.ops.framework.mybatis.core.query.Conditions;
|
import com.orion.ops.framework.mybatis.core.query.Conditions;
|
||||||
import com.orion.ops.framework.redis.core.utils.RedisMaps;
|
import com.orion.ops.framework.redis.core.utils.RedisMaps;
|
||||||
|
import com.orion.ops.framework.redis.core.utils.RedisStrings;
|
||||||
import com.orion.ops.module.infra.convert.DictValueConvert;
|
import com.orion.ops.module.infra.convert.DictValueConvert;
|
||||||
import com.orion.ops.module.infra.dao.DictKeyDAO;
|
import com.orion.ops.module.infra.dao.DictKeyDAO;
|
||||||
import com.orion.ops.module.infra.dao.DictValueDAO;
|
import com.orion.ops.module.infra.dao.DictValueDAO;
|
||||||
@@ -20,7 +20,6 @@ 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.DictKeyDO;
|
||||||
import com.orion.ops.module.infra.entity.domain.DictValueDO;
|
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.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.DictValueCreateRequest;
|
||||||
import com.orion.ops.module.infra.entity.request.dict.DictValueQueryRequest;
|
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.DictValueRollbackRequest;
|
||||||
@@ -36,10 +35,9 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Comparator;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字典配置值 服务实现类
|
* 字典配置值 服务实现类
|
||||||
@@ -123,7 +121,7 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
Valid.notNull(history, ErrorMessage.HISTORY_ABSENT);
|
Valid.notNull(history, ErrorMessage.HISTORY_ABSENT);
|
||||||
// 记录日志参数
|
// 记录日志参数
|
||||||
OperatorLogs.add(OperatorLogs.KEY_NAME, record.getKeyName());
|
OperatorLogs.add(OperatorLogs.KEY_NAME, record.getKeyName());
|
||||||
OperatorLogs.add(OperatorLogs.LABEL, record.getName());
|
OperatorLogs.add(OperatorLogs.LABEL, record.getLabel());
|
||||||
OperatorLogs.add(OperatorLogs.VALUE, history.getBeforeValue());
|
OperatorLogs.add(OperatorLogs.VALUE, history.getBeforeValue());
|
||||||
// 更新
|
// 更新
|
||||||
DictValueDO updateRecord = new DictValueDO();
|
DictValueDO updateRecord = new DictValueDO();
|
||||||
@@ -139,61 +137,51 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
public Map<String, List<JSONObject>> getDictValueList(List<String> keys) {
|
||||||
public List<DictValueVO> getDictValueList(String keyName) {
|
Map<String, List<JSONObject>> result = new HashMap<>();
|
||||||
// 查询缓存
|
// 查询缓存
|
||||||
String cacheKey = DictCacheKeyDefine.DICT_VALUE.format(keyName);
|
List<String> cacheKeyList = keys.stream()
|
||||||
List<DictValueCacheDTO> list = RedisMaps.valuesJson(cacheKey, (Class<DictValueCacheDTO>) DictCacheKeyDefine.DICT_VALUE.getType());
|
.map(DictCacheKeyDefine.DICT_VALUE::format)
|
||||||
if (list.isEmpty()) {
|
.collect(Collectors.toList());
|
||||||
// 查询数据库
|
List<List<JSONObject>> jsonArrayList = RedisStrings.getJsonArrayList(cacheKeyList, JSONObject.class);
|
||||||
list = dictValueDAO.of()
|
// 检查数据
|
||||||
.createWrapper()
|
List<String> emptyKeyList = new ArrayList<>();
|
||||||
.eq(DictValueDO::getKeyName, keyName)
|
IntStream.range(0, jsonArrayList.size()).forEach(i -> {
|
||||||
.then()
|
String key = keys.get(i);
|
||||||
.list(DictValueConvert.MAPPER::toCache);
|
List<JSONObject> value = jsonArrayList.get(i);
|
||||||
// 添加默认值 防止穿透
|
result.put(key, value);
|
||||||
if (list.isEmpty()) {
|
// 需要查询的数据
|
||||||
list.add(DictValueCacheDTO.builder()
|
if (value == null) {
|
||||||
.id(Const.NONE_ID)
|
emptyKeyList.add(key);
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
if (!emptyKeyList.isEmpty()) {
|
||||||
|
// 查询数据库
|
||||||
|
Map<String, List<DictValueDO>> valueGrouping = dictValueDAO.of()
|
||||||
|
.createWrapper()
|
||||||
|
.in(DictValueDO::getKeyName, emptyKeyList)
|
||||||
|
.then()
|
||||||
|
.stream()
|
||||||
|
.collect(Collectors.groupingBy(DictValueDO::getKeyName));
|
||||||
// 设置缓存
|
// 设置缓存
|
||||||
RedisMaps.putAllJson(cacheKey, s -> s.getId().toString(), list);
|
emptyKeyList.parallelStream().forEach(s -> {
|
||||||
RedisMaps.setExpire(cacheKey, DictCacheKeyDefine.DICT_VALUE);
|
// 转为配置
|
||||||
|
List<JSONObject> options = this.toCacheOptions(s, valueGrouping.get(s));
|
||||||
|
// 设置缓存
|
||||||
|
RedisStrings.setJson(DictCacheKeyDefine.DICT_VALUE.format(s),
|
||||||
|
DictCacheKeyDefine.DICT_VALUE,
|
||||||
|
options);
|
||||||
|
// 设置值
|
||||||
|
result.put(s, options);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
// 删除默认值
|
// 删除默认值
|
||||||
return list.stream()
|
for (List<JSONObject> options : result.values()) {
|
||||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
if (options.size() == 1 && options.get(0).remove(Const.DOLLAR) != null) {
|
||||||
.map(DictValueConvert.MAPPER::to)
|
Iterator<JSONObject> iterator = options.iterator();
|
||||||
.sorted(Comparator.comparing(DictValueVO::getSort))
|
iterator.next();
|
||||||
.collect(Collectors.toList());
|
iterator.remove();
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Map<String, Object>> getDictValueEnum(String keyName) {
|
|
||||||
// 查询配置值
|
|
||||||
List<DictValueVO> values = this.getDictValueList(keyName);
|
|
||||||
if (values.isEmpty()) {
|
|
||||||
return Maps.empty();
|
|
||||||
}
|
|
||||||
// 查询配置项
|
|
||||||
Map<String, String> schema = dictKeyService.getDictSchema(keyName);
|
|
||||||
// 返回
|
|
||||||
Map<String, Map<String, Object>> result = Maps.newLinkedMap();
|
|
||||||
for (DictValueVO value : values) {
|
|
||||||
Map<String, Object> item = Maps.newMap();
|
|
||||||
item.put(Const.NAME, value.getName());
|
|
||||||
item.put(Const.LABEL, value.getLabel());
|
|
||||||
item.put(Const.VALUE, DictValueTypeEnum.of(schema.get(Const.VALUE)).parse(value.getValue()));
|
|
||||||
// 额外值
|
|
||||||
String extra = value.getExtra();
|
|
||||||
if (!Strings.isBlank(extra)) {
|
|
||||||
JSONObject extraObject = JSON.parseObject(extra);
|
|
||||||
for (String extraKey : extraObject.keySet()) {
|
|
||||||
item.put(extraKey, DictValueTypeEnum.of(schema.get(extraKey)).parse(extraObject.getString(extraKey)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
result.put(value.getName(), item);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -203,9 +191,24 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
// 条件
|
// 条件
|
||||||
LambdaQueryWrapper<DictValueDO> wrapper = this.buildQueryWrapper(request);
|
LambdaQueryWrapper<DictValueDO> wrapper = this.buildQueryWrapper(request);
|
||||||
// 查询
|
// 查询
|
||||||
return dictValueDAO.of(wrapper)
|
DataGrid<DictValueVO> dataGrid = dictValueDAO.of(wrapper)
|
||||||
.page(request)
|
.page(request)
|
||||||
.dataGrid(DictValueConvert.MAPPER::to);
|
.dataGrid(DictValueConvert.MAPPER::to);
|
||||||
|
if (!dataGrid.isEmpty()) {
|
||||||
|
List<Long> keyIdList = dataGrid.stream()
|
||||||
|
.map(DictValueVO::getKeyId)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
// 查询 key 信息
|
||||||
|
List<DictKeyDO> keys = dictKeyDAO.selectBatchIds(keyIdList);
|
||||||
|
Map<Long, String> keyDescMapping = keys.stream()
|
||||||
|
.collect(Collectors.toMap(DictKeyDO::getId, DictKeyDO::getDescription));
|
||||||
|
// 设置 key 描述
|
||||||
|
dataGrid.forEach(s -> {
|
||||||
|
s.setKeyDescription(keyDescMapping.get(s.getKeyId()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return dataGrid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -230,7 +233,7 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
DictValueDO record = dictValueDAO.selectById(id);
|
DictValueDO record = dictValueDAO.selectById(id);
|
||||||
Valid.notNull(record, ErrorMessage.CONFIG_ABSENT);
|
Valid.notNull(record, ErrorMessage.CONFIG_ABSENT);
|
||||||
// 添加日志参数
|
// 添加日志参数
|
||||||
OperatorLogs.add(OperatorLogs.VALUE, record.getKeyName() + "-" + record.getName());
|
OperatorLogs.add(OperatorLogs.VALUE, record.getKeyName() + "-" + record.getLabel());
|
||||||
// 删除
|
// 删除
|
||||||
return this.deleteDictValue(Lists.singleton(id), Lists.singleton(record));
|
return this.deleteDictValue(Lists.singleton(id), Lists.singleton(record));
|
||||||
}
|
}
|
||||||
@@ -242,7 +245,7 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
List<DictValueDO> records = dictValueDAO.selectBatchIds(idList);
|
List<DictValueDO> records = dictValueDAO.selectBatchIds(idList);
|
||||||
// 添加日志参数
|
// 添加日志参数
|
||||||
String value = records.stream()
|
String value = records.stream()
|
||||||
.map(s -> s.getKeyName() + "-" + s.getName())
|
.map(s -> s.getKeyName() + "-" + s.getLabel())
|
||||||
.collect(Collectors.joining(Const.COMMA));
|
.collect(Collectors.joining(Const.COMMA));
|
||||||
OperatorLogs.add(OperatorLogs.VALUE, value);
|
OperatorLogs.add(OperatorLogs.VALUE, value);
|
||||||
// 删除
|
// 删除
|
||||||
@@ -330,7 +333,7 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
.ne(DictValueDO::getId, domain.getId())
|
.ne(DictValueDO::getId, domain.getId())
|
||||||
// 用其他字段做重复校验
|
// 用其他字段做重复校验
|
||||||
.eq(DictValueDO::getKeyId, domain.getKeyId())
|
.eq(DictValueDO::getKeyId, domain.getKeyId())
|
||||||
.eq(DictValueDO::getName, domain.getName());
|
.eq(DictValueDO::getValue, domain.getValue());
|
||||||
// 检查是否存在
|
// 检查是否存在
|
||||||
boolean present = dictValueDAO.of(wrapper).present();
|
boolean present = dictValueDAO.of(wrapper).present();
|
||||||
Valid.isFalse(present, ErrorMessage.CONFIG_PRESENT);
|
Valid.isFalse(present, ErrorMessage.CONFIG_PRESENT);
|
||||||
@@ -346,10 +349,44 @@ public class DictValueServiceImpl implements DictValueService {
|
|||||||
return dictValueDAO.wrapper()
|
return dictValueDAO.wrapper()
|
||||||
.eq(DictValueDO::getKeyId, request.getKeyId())
|
.eq(DictValueDO::getKeyId, request.getKeyId())
|
||||||
.like(DictValueDO::getKeyName, request.getKeyName())
|
.like(DictValueDO::getKeyName, request.getKeyName())
|
||||||
.like(DictValueDO::getName, request.getName())
|
|
||||||
.eq(DictValueDO::getValue, request.getValue())
|
.eq(DictValueDO::getValue, request.getValue())
|
||||||
.like(DictValueDO::getLabel, request.getLabel())
|
.like(DictValueDO::getLabel, request.getLabel())
|
||||||
.orderByDesc(DictValueDO::getId);
|
.orderByDesc(DictValueDO::getId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转为配置
|
||||||
|
*
|
||||||
|
* @param key key
|
||||||
|
* @param values values
|
||||||
|
* @return options
|
||||||
|
*/
|
||||||
|
private List<JSONObject> toCacheOptions(String key, List<DictValueDO> values) {
|
||||||
|
// 添加默认值
|
||||||
|
if (Lists.isEmpty(values)) {
|
||||||
|
JSONObject item = new JSONObject();
|
||||||
|
item.put(Const.DOLLAR, Const.DOLLAR);
|
||||||
|
return Lists.of(item);
|
||||||
|
}
|
||||||
|
// 查询 schema
|
||||||
|
Map<String, String> schema = dictKeyService.getDictSchema(key);
|
||||||
|
// 转换
|
||||||
|
return values.stream()
|
||||||
|
.map(s -> {
|
||||||
|
// 设置值
|
||||||
|
JSONObject item = new JSONObject();
|
||||||
|
item.put(Const.LABEL, s.getLabel());
|
||||||
|
item.put(Const.VALUE, DictValueTypeEnum.of(schema.get(Const.VALUE)).parse(s.getValue()));
|
||||||
|
// 额外值
|
||||||
|
String extra = s.getExtra();
|
||||||
|
if (!Strings.isBlank(extra)) {
|
||||||
|
JSONObject extraObject = JSON.parseObject(extra);
|
||||||
|
for (String extraKey : extraObject.keySet()) {
|
||||||
|
item.put(extraKey, DictValueTypeEnum.of(schema.get(extraKey)).parse(extraObject.getString(extraKey)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
<id column="id" property="id"/>
|
<id column="id" property="id"/>
|
||||||
<result column="key_id" property="keyId"/>
|
<result column="key_id" property="keyId"/>
|
||||||
<result column="key_name" property="keyName"/>
|
<result column="key_name" property="keyName"/>
|
||||||
<result column="name" property="name"/>
|
|
||||||
<result column="value" property="value"/>
|
<result column="value" property="value"/>
|
||||||
<result column="label" property="label"/>
|
<result column="label" property="label"/>
|
||||||
<result column="extra" property="extra"/>
|
<result column="extra" property="extra"/>
|
||||||
@@ -21,7 +20,7 @@
|
|||||||
|
|
||||||
<!-- 通用查询结果列 -->
|
<!-- 通用查询结果列 -->
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, key_id, key_name, name, value, label, extra, sort, create_time, update_time, creator, updater, deleted
|
id, key_id, key_name, value, label, extra, sort, create_time, update_time, creator, updater, deleted
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user