From 7b157aa56608423c9e7de63e12240e8044b3afd9 Mon Sep 17 00:00:00 2001
From: lihang <lihang@vci-tech.com>
Date: 星期一, 17 四月 2023 16:51:06 +0800
Subject: [PATCH] 元数据管理ver初始

---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java         |   43 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java         |   39 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java    |  105 +++++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java         |   46 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java            |   40 ++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java          |   53 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java    |   60 +++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml                         |   40 ++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java             |   43 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java    |   14 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java      |   63 +++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java          |  173 ++++++++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdFieldTypeEnum.java       |  103 +++++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java  |   43 ++
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java           |   23 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java          |   22 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdCompareTypeEnum.java     |   99 ++++
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java            |   36 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java |   97 ++++
 19 files changed, 1,142 insertions(+), 0 deletions(-)

diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java
new file mode 100644
index 0000000..449ada2
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/OmdAttributeCache.java
@@ -0,0 +1,63 @@
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.feign.IOmdAttributeClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+
+/**
+ * 鍏冩暟鎹�(灞炴��)缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class OmdAttributeCache {
+
+	private static final String ATTR_ID = "attr:id";
+	private static final String ATTR_LIST = "attr:list";
+	private static final String ATTR_CACHE = "ubcs:attr";
+
+	private static IOmdAttributeClient attrClient;
+
+	private static IOmdAttributeClient getAttributeClient() {
+		if (attrClient == null) {
+			attrClient = SpringUtil.getBean(IOmdAttributeClient.class);
+		}
+		return attrClient;
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹疄浣�
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹疄浣撳璞�
+	 */
+	public static OmdAttribute getById(Long id) {
+		String keyPrefix = ATTR_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ATTR_CACHE, keyPrefix, id, () -> {
+			R<OmdAttribute> result = getAttributeClient().getById(id);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹泦鍚�
+	 *
+	 * @param key 灞炴�у悕绉�
+	 */
+	public static List<OmdAttribute> getList(String key) {
+		String keyPrefix = ATTR_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(DICT_CACHE, keyPrefix, key, () -> {
+			R<List<OmdAttribute>> result = getAttributeClient().getList(key);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java
new file mode 100644
index 0000000..16a6bca
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/OmdCacheConstant.java
@@ -0,0 +1,14 @@
+package com.vci.ubcs.omd.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/4
+ */
+public class OmdCacheConstant {
+	/**
+	 * 鍏冩暟鎹�
+	 */
+	public static final String ATTR_CACHE = "ubcs:attr";
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java
new file mode 100644
index 0000000..3365ca7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/OmdAttributeDTO.java
@@ -0,0 +1,22 @@
+package com.vci.ubcs.omd.dto;
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * Description: 鍏冩暟鎹〉闈紶杈撳璞�
+ *
+ * @author LiHang
+ * @date 2023/4/4
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class OmdAttributeDTO extends OmdAttribute {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 5515095331865594996L;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
new file mode 100644
index 0000000..b3babc8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdAttribute.java
@@ -0,0 +1,173 @@
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.data.annotation.Transient;
+
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴�ф睜)
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName("pl_omd_attribute")
+@ApiModel(value = "灞炴�у璞�", description = "灞炴�у璞�")
+public class OmdAttribute extends BaseEntity {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = -6792640675358002410L;
+
+	/**
+	 * 绉熸埛ID
+	 */
+	@ApiModelProperty(value = "绉熸埛ID")
+	private String tenantId;
+
+	/**
+	 * 瀛楁缂栧彿
+	 */
+	@ApiModelProperty(value = "瀛楁缂栧彿")
+	@NotNull
+	private String key;
+
+	/**
+	 * 瀛楁鍚嶇О
+	 */
+	@ApiModelProperty(value = "瀛楁鍚嶇О")
+	private String label;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏哥爜
+	 */
+	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏哥爜")
+	private String typeCode;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏稿��
+	 */
+	@ApiModelProperty(value = "灞炴�х被鍨嬪瓧鍏稿��")
+	private String typeKey;
+
+	/**
+	 * 灞炴�х被鍨嬪瓧鍏告樉绀哄悕绉�
+	 */
+	@Transient
+	private String typeValue;
+
+
+	/**
+	 * 鏍囩
+	 */
+	@ApiModelProperty(value = "鏍囩")
+	private String hashtag;
+
+	/**
+	 * 鎻忚堪
+	 */
+	@ApiModelProperty(value = "鎻忚堪")
+	private String description;
+
+	/**
+	 * 鏄惁涓虹┖
+	 */
+	@ApiModelProperty("鏄惁涓虹┖")
+	private String nullable;
+
+	/**
+	 * 鏈�澶ч暱搴�
+	 */
+	@ApiModelProperty("鏈�澶ч暱搴�")
+	private Integer maxLength;
+
+	/**
+	 * 绮惧害
+	 */
+	@ApiModelProperty("绮惧害")
+	private Integer precision;
+
+	/**
+	 * 鍙傜収鐨勭被鍨�
+	 */
+	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鐮�")
+	private String referTypeCode;
+
+	/**
+	 * 鍙傜収绫诲瀷瀛楀吀鍊�
+	 */
+	@ApiModelProperty("鍙傜収绫诲瀷瀛楀吀鍊�")
+	private String referTypeKey;
+
+	/**
+	 * 鍙傜収绫诲瀷瀛楀吀鏄剧ず鍚嶇О
+	 */
+	@Transient
+	private String referTypeValue;
+
+	/**
+	 * 鍙傜収瀵硅薄
+	 */
+	@ApiModelProperty("鍙傜収鐨勪富閿�")
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long referToId;
+
+	/**
+	 * 鍙傜収瀵硅薄鐨勫悕绉�
+	 */
+	@ApiModelProperty("鍙傜収瀵硅薄鍚嶇О")
+	private String referToName;
+
+	/**
+	 * 浣跨敤瀛楀吀
+	 */
+	@ApiModelProperty("浣跨敤瀛楀吀")
+	private String usingDict;
+
+	/**
+	 * 瀛楀吀鐮�
+	 */
+	@ApiModelProperty("瀛楀吀鐮�")
+	private String dictCode;
+
+	/**
+	 * 瀛楀吀閿��
+	 */
+	@ApiModelProperty("瀛楀吀閿��")
+	private String dictKey;
+
+	/**
+	 * 瀛楀吀鏄剧ず鍊�
+	 */
+	@Transient
+	private String dictValue;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	@ApiModelProperty("榛樿鍊�")
+	private String defaultValue;
+	/**
+	 * 姣旇緝鏂瑰紡
+	 */
+	@Transient
+	private String calculateType;
+
+	/**
+	 * 姣旇緝鍊�
+	 */
+	@Transient
+	private String calculateValue;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java
new file mode 100644
index 0000000..80eea5f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/OmdFieldRange.java
@@ -0,0 +1,39 @@
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springblade.core.mp.base.BaseEntity;
+
+
+/**
+ * Description: 瀛楁鑼冨洿
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@TableName("pl_omd_field_range")
+@ApiModel(value = "瀛楁鑼冨洿",description = "瀛楁鑼冨洿")
+public class OmdFieldRange extends BaseEntity {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 7849276277821126507L;
+	/**
+	 * 姣旇緝鏂瑰紡
+	 */
+	@ApiModelProperty("姣旇緝鏂瑰紡")
+	private String calculateType;
+
+	/**
+	 * 姣旇緝鍊�
+	 */
+	@ApiModelProperty("姣旇緝鍊�")
+	private String calculateValue;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdCompareTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdCompareTypeEnum.java
new file mode 100644
index 0000000..419a522
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdCompareTypeEnum.java
@@ -0,0 +1,99 @@
+package com.vci.ubcs.omd.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Description: 灞炴�х被鍨嬫灇涓�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Getter
+@AllArgsConstructor
+public enum OmdCompareTypeEnum {
+	/**
+	 * 澶т簬
+	 */
+	GRATE_THAN("grate_than",">"),
+	/**
+	 * 灏忎簬
+	 */
+	LESS_THAN("less_than","<"),
+	/**
+	 * 澶т簬绛変簬
+	 */
+	GRATE_EQUAL("grate_equal",">="),
+	/**
+	 * 灏忎簬绛変簬
+	 */
+	LESS_EQUAL("less_equal","<="),
+	/**
+	 * 绛変簬
+	 */
+	EQUAL("equal","="),
+	/**
+	 * 涓嶇瓑浜�
+	 */
+	NOT_EQUAL("not_equal","!="),
+	/**
+	 * 鑼冨洿
+	 */
+	BETWEEN("between","[]"),
+	;
+	/**
+     * 缂栧彿
+	 */
+	private final String value;
+
+	/**
+     * 鏄剧ず鍊�
+	 */
+	private final String text;
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+	 *
+	 * @param text 鍚嶇О
+	 * @return 鏋氫妇鍊�
+	 */
+	public static String getValueByText(String text) {
+		for (OmdCompareTypeEnum item : OmdCompareTypeEnum.values()) {
+			if (item.getText().equalsIgnoreCase(text)) {
+				return item.getValue();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鍚嶇О
+	 */
+	public static String getTextByValue(String value) {
+		for (OmdCompareTypeEnum item : OmdCompareTypeEnum.values()) {
+			if (item.getValue().equalsIgnoreCase(value)) {
+				return item.getText();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧璞�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鏋氫妇瀵硅薄
+	 */
+	public static OmdCompareTypeEnum forValue(String value) {
+		for (OmdCompareTypeEnum item : OmdCompareTypeEnum.values()) {
+			if (item.getValue().equalsIgnoreCase(value)) {
+				return item;
+			}
+		}
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdFieldTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdFieldTypeEnum.java
new file mode 100644
index 0000000..c9a065c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/OmdFieldTypeEnum.java
@@ -0,0 +1,103 @@
+package com.vci.ubcs.omd.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Description: 灞炴�х被鍨嬫灇涓�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Getter
+@AllArgsConstructor
+public enum OmdFieldTypeEnum {
+	/**
+	 * 瀛楃涓�
+	 */
+	VTSTRING("VTString","瀛楃涓�"),
+	/**
+	 * 鏁存暟
+	 */
+	VTINTEGER("VTInteger","鏁存暟"),
+	/**
+	 * 甯冨皵
+	 */
+	VTBOOLEAN("VTBoolean","甯冨皵"),
+	/**
+	 * 闀挎暣鏁�
+	 */
+	VTLONG("VTLong","闀挎暣鏁�"),
+	/**
+	 * 娴偣鏁�
+	 */
+	VTDOUBLE("VTDouble","娴偣鏁�"),
+	/**
+	 * 鏃ユ湡
+	 */
+	VTDATE("VTDate","鏃ユ湡"),
+	/**
+	 * 鏃堕棿
+	 */
+	VTTIME("VTTime","鏃堕棿"),
+	/**
+	 * 鏃ユ湡鏃堕棿
+	 */
+	VTDATETIME("VTDateTime","鏃ユ湡鏃堕棿"),
+	;
+	/**
+	 * 缂栧彿
+	 */
+	private final String value;
+
+	/**
+	 * 鏄剧ず鍊�
+	 */
+	private final String text;
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+	 *
+	 * @param text 鍚嶇О
+	 * @return 鏋氫妇鍊�
+	 */
+	public static String getValueByText(String text) {
+		for (OmdFieldTypeEnum item : OmdFieldTypeEnum.values()) {
+			if (item.getText().equalsIgnoreCase(text)) {
+				return item.getValue();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鍚嶇О
+	 */
+	public static String getTextByValue(String value) {
+		for (OmdFieldTypeEnum item : OmdFieldTypeEnum.values()) {
+			if (item.getValue().equalsIgnoreCase(value)) {
+				return item.getText();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧璞�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鏋氫妇瀵硅薄
+	 */
+	public static OmdFieldTypeEnum forValue(String value) {
+		for (OmdFieldTypeEnum item : OmdFieldTypeEnum.values()) {
+			if (item.getValue().equalsIgnoreCase(value)) {
+				return item;
+			}
+		}
+		return null;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java
new file mode 100644
index 0000000..f3f0042
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeClient.java
@@ -0,0 +1,60 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Feign鎺ュ彛绫�
+ *
+ * @author Chill
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IOmdAttributeFallback.class
+)
+public interface IOmdAttributeClient {
+
+	String API_PREFIX = "/client";
+	String GET_BY_ID = API_PREFIX + "/attribute/get-by-id";
+	String GET_LIST = API_PREFIX + "/attribute/get-list";
+
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹璞�
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹璞�
+	 */
+	@GetMapping(GET_BY_ID)
+	R<OmdAttribute> getById(@RequestParam("id") Long id);
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹垪琛�
+	 * @param key 鏌ヨ灞炴�у悕
+	 * @return 鍏冩暟鎹垪琛�
+	 */
+	@GetMapping(GET_LIST)
+	R<List<OmdAttribute>> getList(@RequestParam("key") String key);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java
new file mode 100644
index 0000000..40dc9ea
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IOmdAttributeFallback.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IOmdAttributeFallback implements IOmdAttributeClient {
+	@Override
+	public R<OmdAttribute> getById(Long id) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<OmdAttribute>> getList(String code) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java
new file mode 100644
index 0000000..33edc96
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdAttributeVO.java
@@ -0,0 +1,40 @@
+package com.vci.ubcs.omd.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+ * Description: 鍏冩暟鎹樉绀哄璞�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "鍏冩暟鎹樉绀哄璞�", description = "鍏冩暟鎹樉绀哄璞�")
+public class OmdAttributeVO extends OmdAttribute {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 279638479374768539L;
+
+	/**
+	 * 涓婚敭ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	@ApiModelProperty("瀛楁鑼冨洿")
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	List<OmdFieldRangeVO> fieldRanges;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java
new file mode 100644
index 0000000..87edbe1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/OmdFieldRangeVO.java
@@ -0,0 +1,23 @@
+package com.vci.ubcs.omd.vo;
+
+import com.vci.ubcs.omd.entity.OmdFieldRange;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * Description: 瀛楁鑼冨洿鏄剧ず瀵硅薄
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "瀛楁鑼冨洿鏄剧ず瀵硅薄", description = "瀛楁鑼冨洿鏄剧ず瀵硅薄")
+public class OmdFieldRangeVO extends OmdFieldRange {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 1770817945737478318L;
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
new file mode 100644
index 0000000..bcf4d68
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/OmdAttributeController.java
@@ -0,0 +1,105 @@
+package com.vci.ubcs.omd.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.omd.constant.OmdCacheConstant;
+import com.vci.ubcs.omd.dto.OmdAttributeDTO;
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.service.IOmdAttributeService;
+import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import com.vci.ubcs.omd.wrapper.OmdAttributeWrapper;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鎺у埗鍣�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@NonDS
+@RestController
+@AllArgsConstructor
+@RequestMapping("/attribute")
+@Api(value = "鍏冩暟鎹帶鍒跺櫒", tags = "鍏冩暟鎹帶鍒跺櫒")
+public class OmdAttributeController extends BladeController {
+	/**
+	 * 鍏冩暟鎹湇鍔�
+	 */
+	private IOmdAttributeService attributeService;
+
+	/**
+	 * 鏌ョ湅璇︽儏
+	 * @param id 涓婚敭
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "鏌ョ湅璇︽儏", notes = "浼犲叆涓婚敭")
+	public R<OmdAttributeVO> detail(Long id) {
+		return R.data(attributeService.getAttributeDetail(id));
+	}
+
+	/**
+	 * 鍒楄〃
+	 * @param condition 鏌ヨ鏉′欢
+	 * @return 鎵ц缁撴灉
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "key", value = "灞炴�у悕", paramType = "query", dataType = "string"),
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鏌ヨ鍒楄〃", notes = "浼犲叆鏌ヨ")
+	public R<List<OmdAttributeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
+		return R.data(OmdAttributeWrapper.build().listEntityVO(attributeService.list(Condition.getQueryWrapper(condition, OmdAttribute.class).lambda().orderByAsc(OmdAttribute::getKey))));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆鍏冩暟鎹璞�")
+	public R submit(@Valid @RequestBody OmdAttributeDTO dto) {
+		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
+		return R.status(attributeService.submit(dto));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鍒犻櫎", notes = "涓婚敭闆嗗悎")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
+		return R.status(attributeService.removeAttrs(ids));
+	}
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 * @param id 涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@GetMapping("/applyRange")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏌ョ湅搴旂敤鑼冨洿",notes = "浼犲叆涓婚敭")
+	public R applyRange(Long id){
+		return R.data(attributeService.applyRange(id));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java
new file mode 100644
index 0000000..dfc3e88
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/OmdAttributeClient.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.service.IOmdAttributeService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description: 鍏冩暟鎹湇鍔eign璋冪敤绫�
+ *
+ * @author LiHang
+ * @date 2023/4/4
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class OmdAttributeClient implements IOmdAttributeClient{
+	private final IOmdAttributeService service;
+
+	@Override
+	@GetMapping(GET_BY_ID)
+	public R<OmdAttribute> getById(Long id) {
+		return R.data(service.getById(id));
+	}
+
+	@Override
+	@GetMapping(GET_LIST)
+	public R<List<OmdAttribute>> getList(String key) {
+		Map<String,Object> condition = new HashMap<>();
+		condition.put("key",key);
+		return R.data(service.list(Condition.getQueryWrapper(condition, OmdAttribute.class).lambda().orderByAsc(OmdAttribute::getKey)));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java
new file mode 100644
index 0000000..6b47932
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/OmdAttributeMapper.java
@@ -0,0 +1,36 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import org.springblade.core.mp.mapper.BladeMapper;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Description:鍏冩暟鎹暟鎹眰
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public interface OmdAttributeMapper extends BladeMapper<OmdAttribute> {
+
+	/**
+	 * 鏌ヨ鍏ㄩ儴
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<OmdAttribute> selectAll();
+
+	/**
+	 * 涓婚敭鏌ヨ
+	 * @param primaryKey 涓婚敭
+	 * @return 鏌ヨ缁撴灉
+	 */
+	OmdAttribute selectByPrimaryKey(Long primaryKey);
+
+	/**
+	 * 涓婚敭鎵归噺鏌ヨ
+	 * @param primaryKeyCollection 涓婚敭闆嗗悎
+	 * @return 鏌ヨ缁撴灉
+	 */
+	List<OmdAttribute> selectByPrimaryKeyCollection(Collection<String> primaryKeyCollection);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
new file mode 100644
index 0000000..fa0dd2c
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IOmdAttributeService.java
@@ -0,0 +1,46 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.dto.OmdAttributeDTO;
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔℃帴鍙�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public interface IOmdAttributeService extends BaseService<OmdAttribute> {
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹鎯�
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹樉绀哄璞�
+	 */
+	OmdAttributeVO getAttributeDetail(Long id);
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 * @param dto 椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+    boolean submit(OmdAttributeDTO dto);
+
+	/**
+	 * 鍒犻櫎
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	boolean removeAttrs(String ids);
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 * @param id 涓婚敭
+	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	List<String> applyRange(Long id);
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
new file mode 100644
index 0000000..9a483fe
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/OmdAttributeServiceImpl.java
@@ -0,0 +1,97 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.core.log.exception.ServiceException;
+import com.vci.ubcs.omd.constant.OmdCacheConstant;
+import com.vci.ubcs.omd.dto.OmdAttributeDTO;
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.mapper.OmdAttributeMapper;
+import com.vci.ubcs.omd.service.IOmdAttributeService;
+import com.vci.ubcs.omd.vo.OmdAttributeVO;
+import com.vci.ubcs.omd.wrapper.OmdAttributeWrapper;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Description: 鍏冩暟鎹�(灞炴��)鐨勬湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+@Service
+public class OmdAttributeServiceImpl extends ServiceImpl<OmdAttributeMapper, OmdAttribute>  implements IOmdAttributeService {
+
+	@Override
+	public boolean deleteLogic(@NotEmpty List<Long> ids) {
+		return false;
+	}
+
+	@Override
+	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
+		return false;
+	}
+
+	/**
+	 * 鑾峰彇鍏冩暟鎹鎯�
+	 *
+	 * @param id 涓婚敭
+	 * @return 鍏冩暟鎹樉绀哄璞�
+	 */
+	@Override
+	public OmdAttributeVO getAttributeDetail(Long id) {
+		Func.requireNotNull(id,"涓婚敭涓嶈兘涓虹┖");
+		return OmdAttributeWrapper.build().entityVO(baseMapper.selectByPrimaryKey(id));
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀�
+	 *
+	 * @param dto 椤甸潰浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public boolean submit(OmdAttributeDTO dto) {
+		LambdaQueryWrapper<OmdAttribute> wrapper = Wrappers.<OmdAttribute>query().lambda().eq(OmdAttribute::getKey, dto.getKey());
+		Long count = baseMapper.selectCount((Func.isEmpty(dto.getId())) ? wrapper : wrapper.notIn(OmdAttribute::getId, dto.getId()));
+		if (count > 0L) {
+			throw new ServiceException("灞炴�у悕宸插瓨鍦�!");
+		}
+		dto.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		OmdAttribute omdAttribute = BeanUtil.copy(dto, OmdAttribute.class);
+		CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
+		return saveOrUpdate(omdAttribute);
+	}
+
+	/**
+	 * 鍒犻櫎
+	 *
+	 * @param ids 涓婚敭闆嗗悎
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public boolean removeAttrs(String ids) {
+		List<Long> idList = Func.toLongList(ids);
+		return !deleteLogic(idList) && removeByIds(idList);
+	}
+
+	/**
+	 * 鏌ョ湅搴旂敤鑼冨洿
+	 *
+	 * @param id 涓婚敭
+	 * @return 鏌ヨ宸插簲鐢ㄧ殑涓氬姟绫诲瀷鍚嶇О
+	 */
+	@Override
+	public List<String> applyRange(Long id) {
+		return new ArrayList<>();
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java
new file mode 100644
index 0000000..6ab81a8
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdAttributeWrapper.java
@@ -0,0 +1,53 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.cache.DictBizCache;
+import com.vci.ubcs.omd.entity.OmdAttribute;
+import com.vci.ubcs.omd.vo.*;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍏冩暟鎹璞$殑鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public class OmdAttributeWrapper extends BaseEntityWrapper<OmdAttribute, OmdAttributeVO> {
+
+	public static OmdAttributeWrapper build() {
+		return new OmdAttributeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public OmdAttributeVO entityVO(OmdAttribute entity) {
+		OmdAttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdAttributeVO.class));
+		vo.setTypeValue(DictBizCache.getValue(vo.getTypeCode(),vo.getTypeKey()));
+		if (StringUtil.isNotBlank(vo.getReferTypeCode())){
+			vo.setReferTypeValue(DictBizCache.getValue(vo.getReferTypeCode(),vo.getReferTypeKey()));
+		}
+		if (StringUtil.isNotBlank(vo.getDictCode())){
+			vo.setDictValue(DictBizCache.getValue(vo.getDictCode(),vo.getDictKey()));
+		}
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<OmdAttributeVO> listEntityVO(List<OmdAttribute> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java
new file mode 100644
index 0000000..60090b0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/OmdFiledRangeWrapper.java
@@ -0,0 +1,43 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.OmdFieldRange;
+import com.vci.ubcs.omd.vo.OmdFieldRangeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * Description: 瀛楁鑼冨洿鐨勫寘瑁呯被
+ *
+ * @author LiHang
+ * @date 2023/4/3
+ */
+public class OmdFiledRangeWrapper extends BaseEntityWrapper<OmdFieldRange, OmdFieldRangeVO> {
+
+	public static OmdFiledRangeWrapper build() {
+		return new OmdFiledRangeWrapper();
+	}
+
+	/**
+	 * do2vo
+	 * @param entity pojo
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public OmdFieldRangeVO entityVO(OmdFieldRange entity) {
+		OmdFieldRangeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OmdFieldRangeVO.class));
+		return vo;
+	}
+
+	/**
+	 * 鎵归噺杞瑅o
+	 * @param list pojo闆嗗悎
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	public List<OmdFieldRangeVO> listEntityVO(List<OmdFieldRange> list) {
+		return list.stream().map(this::entityVO).collect(Collectors.toList());
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
new file mode 100644
index 0000000..a7f1891
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/OmdAttributeMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.omd.mapper.OmdAttributeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="baseResultMap" type="com.vci.ubcs.omd.entity.OmdAttribute">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser" jdbcType="NUMBER"/>
+        <result column="create_dept" property="createDept" jdbcType="NUMBER"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="update_user" property="updateUser" jdbcType="NUMBER"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <result column="status" property="status" jdbcType="NUMBER"/>
+        <result column="is_deleted" property="isDeleted" jdbcType="NUMBER"/>
+        <result column="tenant_id" property="tenantId" jdbcType="NUMBER"/>
+        <result column="key" property="key" jdbcType="VARCHAR"/>
+        <result column="label" property="label" jdbcType="VARCHAR"/>
+        <result column="type" property="type" jdbcType="VARCHAR"/>
+        <result column="hashtag" property="hashtag" jdbcType="VARCHAR"/>
+        <result column="description" property="description" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <resultMap id="extraResultMap" type="com.vci.ubcs.omd.entity.OmdAttribute">
+        <result column="nullable" property="nullable" jdbcType="VARCHAR"/>
+        <result column="max_length" property="maxLength" jdbcType="NUMBER"/>
+        <result column="precision" property="precision" jdbcType="NUMBER"/>
+        <result column="refer_to_id" property="referToId" jdbcType="NUMBER"/>
+        <result column="refer_type" property="referType" jdbcType="VARCHAR"/>
+        <result column="refer_to_name" property="referToName" jdbcType="VARCHAR"/>
+        <result column="using_enum" property="usingEnum" jdbcType="VARCHAR"/>
+        <result column="enum_key" property="enumKey" jdbcType="VARCHAR"/>
+        <result column="enum_name" property="enumName" jdbcType="VARCHAR"/>
+        <result column="default_value" property="defaultValue" jdbcType="VARCHAR"/>
+        <result column="calculate_type" property="calculateType" jdbcType="VARCHAR"/>
+        <result column="calculate_value" property="calculateValue" jdbcType="VARCHAR"/>
+    </resultMap>
+
+
+
+</mapper>

--
Gitblit v1.9.3