From 3579af2945dd38d841a23cd340acd474bb63773a Mon Sep 17 00:00:00 2001
From: lihang <lihang@vci-tech.com>
Date: 星期四, 04 五月 2023 18:02:01 +0800
Subject: [PATCH] 业务类型与DDL服务相关的添加

---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java                                          |  190 +
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java                                            |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java                      |   39 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java                                   |   14 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java                                |   79 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java                            |   20 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java                                     |   24 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java                                        |   76 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java                                  |   42 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java                           |   19 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java                                              |   16 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java                        |  618 -----
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java                                |   27 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java                                       |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java                             |  100 +
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java                               |   18 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml                                                                                      |    8 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java                  |    1 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                                             |   31 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java                               |   36 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java                                |   20 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java                         |   16 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java                                           |    2 
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java                               |    1 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java                               |   40 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java                                 |  193 -
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java                                 |   50 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java                        |  691 -------
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java                                |   29 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java                                   |   42 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java                                           |   34 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java                                      |    3 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java                               |  158 -
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java                                                |    4 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java                         |   14 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java                            |  112 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java                                  |   13 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java                            |  160 -
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java                                              |   20 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java                                   |   35 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java                                  |    1 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java                                           |    1 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java                                 |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java                                 |   13 
 Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java                                     |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java                         |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java                           |   20 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java                                |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java                           |   34 
 Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml                                                                                     |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java                           |   68 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java                           |  151 -
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java                           |  135 -
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java                                   |   14 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java                                 |   75 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java                                               |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java                                            |   13 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java                                |   41 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java                                 |   26 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java                           |   44 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java                                      |  596 +++++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java                             |   12 
 /dev/null                                                                                                                              |   50 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java                                            |  201 --
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java                                         |   28 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java                                   |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java                           |   29 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                               |    6 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java                          |   53 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java                                     |   17 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java                                     |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java                                      |   11 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java                                           |   15 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java                                   |   14 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java                                          |   91 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java                          |   36 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java                                  |   11 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java                                    |   26 
 Source/UBCS/ubcs-service/ubcs-ddl/pom.xml                                                                                              |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java                                  |  510 ++--
 81 files changed, 2,195 insertions(+), 3,173 deletions(-)

diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
index fa92a46..ff73742 100644
--- a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -41,19 +41,19 @@
 	 * nacos dev 鍦板潃
 	 */
 	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "192.168.93.183:38848";
+	String NACOS_DEV_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * nacos prod 鍦板潃
 	 */
 	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_PROD_ADDR = "192.168.93.129:38848";
+	String NACOS_PROD_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * nacos test 鍦板潃
 	 */
 	//String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_TEST_ADDR = "192.168.93.133:38848";
+	String NACOS_TEST_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * sentinel dev 鍦板潃
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
index 172d3d2..7508dda 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
@@ -16,7 +16,6 @@
  */
 package com.vci.flow.test.launch;
 
-import com.vci.ubcs.common.constant.LauncherConstant;
 import org.springblade.core.auto.service.AutoService;
 import org.springblade.core.launch.service.LauncherService;
 import org.springblade.core.launch.utils.PropsUtil;
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
index 3ae7b79..935f785 100644
--- a/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
@@ -1,6 +1,5 @@
 package com.vci.ubcs.xxl.job.admin;
 
-import com.vci.ubcs.common.constant.LauncherConstant;
 import org.springblade.core.cloud.client.UbcsCloudApplication;
 import org.springblade.core.launch.UbcsApplication;
 
diff --git a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
index b793a5a..2715f72 100644
--- a/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
+++ b/Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
@@ -16,7 +16,6 @@
  */
 package com.vci.ubcs.job.executor;
 
-import com.vci.ubcs.common.constant.LauncherConstant;
 import org.springblade.core.cloud.client.UbcsCloudApplication;
 import org.springblade.core.launch.UbcsApplication;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
index a1095d2..c341358 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
@@ -12,11 +12,6 @@
     <name>${project.artifactId}</name>
     <version>${bladex.project.version}</version>
     <dependencies>
-        <dependency>
-            <groupId>com.github.jsqlparser</groupId>
-            <artifactId>jsqlparser</artifactId>
-            <version>4.2</version>
-        </dependency>
 
 <!--        <dependency>-->
 <!--            <groupId>com.thoughtworks.xstream</groupId>-->
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
index a766e26..9d106fd 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
@@ -19,7 +19,7 @@
 	/**
 	 * 鍒嗙被鐮佹涓婚敭
 	 */
-	private String codeClassifySecOid;
+	private String codeclassifysecoid;
 
 	/**
 	 * 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -28,26 +28,26 @@
 	/**
 	 * 鐮佸�煎簭鍙�
 	 */
-	private Integer orderNum;
+	private Integer ordernum;
 
 	/**
 	 * 涓婄骇鍒嗙被鐮佸�间富閿�
 	 */
-	private String parentClassifyValueOid;
+	private String parentclassifyvalueoid;
 
 
 	/**
 	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
 	 */
-	public String getCodeClassifySecOid (){
-		return codeClassifySecOid;
+	public String getCodeclassifysecoid (){
+		return codeclassifysecoid;
 	}
 
 	/**
 	 * 璁剧疆 鍒嗙被鐮佹涓婚敭
 	 */
-	public void setCodeClassifySecOid (String codeClassifySecOid){
-		this.codeClassifySecOid = codeClassifySecOid;
+	public void setCodeclassifysecoid (String codeclassifysecoid){
+		this.codeclassifysecoid = codeclassifysecoid;
 	}
 
 	/**
@@ -66,39 +66,39 @@
 	/**
 	 * 鑾峰彇 鐮佸�煎簭鍙�
 	 */
-	public Integer getOrderNum (){
-		return orderNum;
+	public Integer getOrdernum (){
+		return ordernum;
 	}
 
 	/**
 	 * 璁剧疆 鐮佸�煎簭鍙�
 	 */
-	public void setOrderNum (Integer orderNum){
-		this.orderNum = orderNum;
+	public void setOrdernum (Integer ordernum){
+		this.ordernum = ordernum;
 	}
 
 	/**
 	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
 	 */
-	public String getParentClassifyValueOid (){
-		return parentClassifyValueOid;
+	public String getParentclassifyvalueoid (){
+		return parentclassifyvalueoid;
 	}
 
 	/**
 	 * 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
 	 */
-	public void setParentClassifyValueOid (String parentClassifyValueOid){
-		this.parentClassifyValueOid = parentClassifyValueOid;
+	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
+		this.parentclassifyvalueoid = parentclassifyvalueoid;
 	}
 
 
 	@Override
 	public String toString() {
 		return "CodeClassifyValueDTO{" +
-		"codeClassifySecOid='" + codeClassifySecOid +"',"+
+		"codeclassifysecoid='" + codeclassifysecoid +"',"+
 		"codeclassifysecoidName='" + codeclassifysecoidName +"'," +
-		"orderNum='" + orderNum +"',"+
-		"parentClassifyValueOid='" + parentClassifyValueOid +"',"+
+		"ordernum='" + ordernum +"',"+
+		"parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
 		"}" + super.toString();
 	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
index 930e082..80770a5 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
@@ -17,12 +17,4 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>com.vci.ubcs</groupId>
-            <artifactId>ubcs-omd-api</artifactId>
-            <version>3.0.1.RELEASE</version>
-        </dependency>
-    </dependencies>
-
 </project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
new file mode 100644
index 0000000..101f07f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
@@ -0,0 +1,75 @@
+package com.vci.ubcs.ddl.bo;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/28
+ */
+@Getter
+public class DdlFieldMappingAttrBO {
+
+	/**
+	 * 绫诲瀷
+	 */
+	private final String dataType;
+
+	/**
+	 * 闀垮害
+	 */
+	@Setter
+	private Integer dataLength;
+
+	/**
+	 * 绮惧害
+	 */
+	@Setter
+	private Integer dataPrecision;
+
+	/**
+	 * 鍏佽涓虹┖
+	 */
+	@Setter
+	private Boolean nullable;
+
+	/**
+	 * 榛樿鍊�
+	 */
+	@Setter
+	private String defaultValue;
+
+
+	public DdlFieldMappingAttrBO(String dataType, Integer dataLength, Integer dataPrecision, Boolean nullable, String defaultValue) {
+		this.dataType = dataType;
+		this.dataLength = dataLength;
+		this.dataPrecision = dataPrecision;
+		this.nullable = nullable;
+		this.defaultValue = defaultValue;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder stringBuilder = new StringBuilder().append(dataType);
+		if (dataLength != null){
+			stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
+		}
+		if (dataPrecision != null){
+			stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength == null ? 22 : dataLength).append(StringPool.COMMA).append(dataPrecision).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
+		}
+		if (!nullable){
+			stringBuilder.append(StringPool.SPACE).append("not null").append(StringPool.SPACE);
+		}
+		if (StringUtil.isNotBlank(defaultValue)){
+			stringBuilder.append(StringPool.SPACE).append("default").append(StringPool.SPACE).append(defaultValue).append(StringPool.SPACE);
+		}
+		return stringBuilder.toString();
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java
new file mode 100644
index 0000000..ae9b98b
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java
@@ -0,0 +1,35 @@
+package com.vci.ubcs.ddl.enums;
+
+/**
+ * Description:瀵硅薄寤烘ā绫诲瀷
+ *
+ * @author LiHang
+ * @date 2023/4/30
+ */
+public enum BusinessTypeEnum {
+	/**
+	 * 涓氬姟绫诲瀷
+	 */
+	BTM("bussiness_type_model","涓氬姟绫诲瀷"),
+	/**
+	 * 閾炬帴绫诲瀷
+	 */
+	LINK("link_type_model","閾炬帴绫诲瀷")
+	;
+	private String value;
+
+	private String name;
+
+	BusinessTypeEnum(String value, String name) {
+		this.value = value;
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public String getName() {
+		return name;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java
new file mode 100644
index 0000000..56479b9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java
@@ -0,0 +1,41 @@
+package com.vci.ubcs.ddl.enums;
+
+/**
+ * Description: DDL鎿嶄綔浠诲姟绫诲瀷
+ *
+ * @author LiHang
+ * @date 2023/4/30
+ */
+public enum ModifyTableTaskEnum {
+	/**
+	 * 鏂板缓
+	 */
+	CREATE("create","鏂板缓"),
+	/**
+	 * 淇敼
+	 */
+	EDIT("edit","淇敼"),
+	/**
+	 * 涓�鑷存�ф鏌�
+	 */
+	CONSISTENCY_CHECK("consistency_check","涓�鑷存�ф鏌�")
+	;
+
+	private String value;
+
+	private String name;
+
+	ModifyTableTaskEnum(String value, String name) {
+		this.value = value;
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
index 59526d8..2897d65 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
@@ -22,8 +22,6 @@
 
 	private static final String BTM_DETAIL = "btm:id";
 
-	private static final String BTM_REF = "btm:list";
-
 	private static final String BTM_TYPE_CACHE = "ubcs:btm";
 
 	private static final String BTM_IDS = "btm:ids";
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java
new file mode 100644
index 0000000..67c34cc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.omd.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+public class BtmTypeFieldConstant {
+
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_BTM_MAP;
+
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_FIELD_MAP;
+
+	public static final Boolean DEFAULT_QUERY_SECRET;
+
+	public static final Boolean DEFAULT_QUERY_DATA_RIGHT;
+
+	public static final Map<String, String> REVISION_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> BASIC_FIELD_MAP;
+
+	public static final Map<String, String> BASE_MODEL_COMPATIBILITY_MAP;
+
+	public static final Map<String, String> LIFECYCLE_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> SECRET_MANAGE_FIELD_MAP;
+
+	public static final Map<String, String> LINK_TYPE_FIELD_MAP;
+
+	static {
+		USER_TABLE_COMPATIBILITY_BTM_MAP = new HashMap();
+		USER_TABLE_COMPATIBILITY_FIELD_MAP = new HashMap();
+		DEFAULT_QUERY_SECRET = true;
+		DEFAULT_QUERY_DATA_RIGHT = false;
+		REVISION_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("nameoid", "瀵硅薄涓婚敭");
+				this.put("revisionoid", "鐗堟湰涓婚敭");
+				this.put("lastr", "鏄惁鏈�鏂扮増鏈�");
+				this.put("firstr", "鏄惁鏈�鑰佺増鏈�");
+				this.put("lastv", "鏄惁鏈�鏂扮増娆�");
+				this.put("firstv", "鏄惁鏈�鑰佺増娆�");
+				this.put("revisionrule", "鐗堟湰瑙勫垯");
+				this.put("revisionseq", "鐗堟湰鎺掑簭鍙�");
+				this.put("revisionvalue", "鐗堟湰鍊�");
+				this.put("versionrule", "鐗堟瑙勫垯");
+				this.put("versionseq", "鐗堟鎺掑簭鍙�");
+				this.put("versionvalue", "鐗堟鍊�");
+				this.put("checkinby", "绛惧叆浜�");
+				this.put("checkintime", "绛惧叆鏃堕棿");
+				this.put("checkoutby", "绛惧嚭浜�");
+				this.put("checkouttime", "绛惧嚭鏃堕棿");
+				this.put("copyfromversion", "鎷疯礉鐗堟湰鏉ユ簮");
+			}
+		};
+		BASIC_FIELD_MAP = new HashMap() {
+			{
+				this.put("oid", "涓婚敭");
+				this.put("btmname", "涓氬姟绫诲瀷鐨勫悕绉�");
+				this.put("id", "缂栧彿");
+				this.put("name", "鍚嶇О");
+				this.put("description", "鎻忚堪");
+				this.put("creator", "鍒涘缓浜�");
+				this.put("createtime", "鍒涘缓鏃堕棿");
+				this.put("lastmodifier", "鏈�鍚庢椂闂翠汉");
+				this.put("lastmodifytime", "鏈�鍚庝慨鏀规椂闂�");
+				this.put("ts", "鏃堕棿鎴�");
+				this.put("owner", "鎷ユ湁鑰�");
+			}
+		};
+		BASE_MODEL_COMPATIBILITY_MAP = new HashMap() {
+			{
+				this.put("lastr", "islastr");
+				this.put("firstr", "isfirstr");
+				this.put("lastv", "islastv");
+				this.put("firstv", "isfirstv");
+			}
+		};
+		LIFECYCLE_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("lcstatus", "鐢熷懡鍛ㄦ湡鍊�");
+			}
+		};
+		SECRET_MANAGE_FIELD_MAP = new HashMap() {
+			{
+				this.put("secretgrade", "瀵嗙骇鍊�");
+			}
+		};
+		LINK_TYPE_FIELD_MAP = new HashMap() {
+			{
+				this.put("oid", "涓婚敭");
+				this.put("creator", "鍒涘缓浜�");
+				this.put("createtime", "鍒涘缓鏃堕棿");
+				this.put("lastmodifier", "鏈�鍚庢椂闂翠汉");
+				this.put("lastmodifytime", "鏈�鍚庝慨鏀规椂闂�");
+				this.put("f_oid", "from绔富閿�");
+				this.put("f_revisionoid", "from绔増鏈富閿�");
+				this.put("f_nameoid", "from绔璞′富閿�");
+				this.put("f_btmname", "from绔笟鍔$被鍨�");
+				this.put("t_oid", "to绔富閿�");
+				this.put("t_revisionoid", "to绔増鏈富閿�");
+				this.put("t_nameoid", "to绔璞′富閿�");
+				this.put("t_btmname", "to绔笟鍔$被鍨�");
+				this.put("ts", "鏃堕棿鎴�");
+			}
+		};
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java
new file mode 100644
index 0000000..458a829
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java
@@ -0,0 +1,16 @@
+package com.vci.ubcs.omd.constant;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+public class BtmTypeLcStatusConstant {
+	public static final String FRAME_WORK_LIFE_CYCLE_NAME = "frameworkDataLc";
+	public static final String EMTYPE_LIFE_CYCLE = "defaultLC";
+	public static final String RELEASE_LIFE_CYCLE = "releaseDataLc";
+
+	public BtmTypeLcStatusConstant() {
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java
new file mode 100644
index 0000000..e8d2f75
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.omd.dto;
+
+import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
+@Data
+public class BtmAndLinkTypeDdlDTO implements Serializable {
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 1199602927699648522L;
+
+	List<BtmTypeVO> btmTypeList;
+
+	List<LinkTypeVO> linkTypeList;
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
index 4cdba00..723c7ea 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
@@ -137,7 +137,7 @@
     /**
      * 娣诲姞鎴栬�呯Щ闄ょ殑灞炴�т俊鎭�
      */
-    private List<BtmTypeLinkAttributesDTO> attributesDTOList;
+    private List<BtmTypeLinkAttributesDTO> attributes;
 
     /**
      * 鏃堕棿鎴筹紝鐢ㄤ簬鏍¢獙鏄惁鏈�鏂版暟鎹�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
index 141f7ef..c221329 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
@@ -48,7 +48,10 @@
      */
     private String description;
 
-
+	/**
+	 * 鏄惁鎺у埗鐗堟湰
+	 */
+	private String revisionFlag;
     /**
      * 鐗堟湰瑙勫垯鐨勭紪鍙�
      */
@@ -88,6 +91,11 @@
      * C#
      */
     private String shape;
+
+	/**
+	 * 鏄惁鎺у埗鐢熷懡鍛ㄦ湡
+	 */
+	private String lifeCycleFlag;
 
     /**
      * 鐢熷懡鍛ㄦ湡鐨勮嫳鏂囧悕绉�
@@ -168,9 +176,4 @@
 	 * 涓�鑷存�ф爣璇�
 	 */
 	private String consistence;
-
-	/**
-	 * 鏁版嵁搴撹〃涓庝笟鍔$被鍨嬪悓姝ュけ璐ユ鏁�
-	private Integer syncFailTimes;
-	 */
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfoDO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
similarity index 66%
rename from Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfoDO.java
rename to Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
index 50ea8d6..6526d96 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfoDO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
@@ -16,36 +16,36 @@
 @Data
 @TableName("pl_omd_modify_attr_info")
 @ApiModel(value = "闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�", description = "闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭�")
-public class ModifyAttributeInfoDO implements Serializable {
+public class ModifyAttributeInfo implements Serializable {
 
 	/**
 	 * 绂佹淇敼杩欎釜鍊�
 	 */
 	private static final long serialVersionUID = 2996604298980606103L;
 	/**
-	 * 涓氬姟绫诲瀷缂栧彿
+	 * 鑻辨枃鍚嶇О
 	 */
 	private String id;
 
 	/**
-	 * 涓氬姟绫诲瀷鍚嶇О
+	 * 涓枃鍚嶇О
 	 */
 	private String name;
 
 	/**
-	 * 鏄惁涓洪摼鎺ョ被鍨�
+	 * 瀵硅薄绫诲瀷
 	 */
-	private String linkTypeFlag;
+	private String businessType;
 
 	/**
-	 * 琛ㄦ牸鍚嶇О
+	 * 鏁版嵁搴撹〃鍚�
 	 */
 	private String tableName;
 
 	/**
-	 * 鏄惁鍒涘缓琛ㄦ牸
+	 * 浠诲姟鎵цFlag
 	 */
-	private String createTableFlag;
+	private String taskName;
 
 	/**
 	 * 娣诲姞鐨勫睘鎬�
@@ -60,7 +60,7 @@
 	/**
 	 * 鍒犻櫎鐨勫睘鎬�
 	 */
-	private String deleteAttibutes;
+	private String deleteAttributes;
 
 	/**
 	 * 灞炴�т慨鏀瑰墠鐨勫唴瀹�
@@ -125,26 +125,4 @@
 	 * 鍒涘缓鏃堕棿
 	 */
 	private Date createTime;
-
-	private String lastModifier;
-	private Date lastModifyTime;
-
-	private String revisionRule;
-	private int revisionSeq;
-	private String revisionValue;
-	private String versionRule;
-	private int versionSeq;
-	private String versionValue;
-	private String lctid;
-	private String lcStatus;
-	private String lcStatusText;
-	private Date ts;
-	private String owner;
-	private String checkInBy;
-	private Date checkInTime;
-	private String checkOutBy;
-	private Date checkOutTime;
-	private String copyFromVersion;
-	private Integer secretGrade;
-	private String secretGradeText;
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
index 78fb003..01bf78a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
@@ -21,7 +21,7 @@
  */
 @FeignClient(
 	value = AppConstant.APPLICATION_NAME_OMD,
-	fallback = IDictClientFallback.class
+	fallback = IBtmTypeFallback.class
 )
 public interface IBtmTypeClient {
 
@@ -31,6 +31,10 @@
 	String API_PREFIX = "/client";
 	/**
 	 * 鍙傜収鍒楄〃鏌ヨ
+	 */
+	String GET_REF_PAGE = API_PREFIX + "/btm-type/get-ref-page";
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ鏃犲垎椤�
 	 */
 	String GET_REF = API_PREFIX + "/btm-type/get-ref";
 	/**
@@ -62,8 +66,17 @@
 	 * @param domain 棰嗗煙鍊�
 	 * @return 鏌ヨ缁撴灉
 	 */
+	@GetMapping(GET_REF_PAGE)
+	R<IPage<BtmTypeVO>> getRefPage(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain 棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
 	@GetMapping(GET_REF)
-	R<IPage<BtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
+	R<List<BtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("domain") String domain);
 
 	/**
 	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
index 69a0465..d1d54a0 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
@@ -54,7 +54,19 @@
 	 * @return 鏌ヨ缁撴灉
 	 */
 	@Override
-	public R<IPage<BtmTypeVO>> getRef(Map<String, Object> condition, Query query, String domain) {
+	public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
 		return R.fail("鑾峰彇鏁版嵁澶辫触");
 	}
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
index d5879fb..36e1569 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
@@ -27,7 +27,7 @@
  *
  * @author Chill
  */
-@Component
+@Component("Dictclient2")
 public class IDictClientFallback implements IDictClient {
 	@Override
 	public R<Dict> getById(Long id) {
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
index 03cdf93..1c43b92 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
@@ -1,5 +1,7 @@
 package com.vci.ubcs.omd.vo;
 
+import lombok.Data;
+
 import java.util.Date;
 import java.util.List;
 
@@ -9,6 +11,7 @@
  * @author weidy
  * @date 2019/10/11 6:04 PM
  */
+@Data
 public class LinkTypeVO implements java.io.Serializable {
 
     /**
@@ -30,6 +33,11 @@
      * 閾炬帴绫诲瀷涓枃鍚嶇О
      */
     private String name;
+
+	/**
+	 * 鏁版嵁搴撹〃
+	 */
+	private String tableName;
 
     /**
      * 鎻忚堪
@@ -54,7 +62,7 @@
     /**
      * from绔笟鍔$被鍨嬫樉绀哄璞�
      */
-    private List<BtmTypeVO> fromBtmTypeVOS;
+    private List<BtmTypeVO> fromBtmTypes;
 
     /**
      * from绔笟鍔$被鍨嬪悕绉�
@@ -74,12 +82,12 @@
     /**
      * to绔笟鍔$被鍨嬫樉绀哄璞�
      */
-    private List<BtmTypeVO> toBtmTypeVOS;
+    private List<BtmTypeVO> toBtmTypes;
 
     /**
      * 涓氬姟绫诲瀷鍚嶇О
      */
-    private String btmname;
+    private String btmName;
 
     /**
      * 鎷ユ湁鑰�
@@ -115,191 +123,4 @@
      * 鍖呭惈灞炴��
      */
     private List<LinkTypeAttributeVO> attributes;
-
-    public String getOid() {
-        return oid;
-    }
-
-    public void setOid(String oid) {
-        this.oid = oid;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getShape() {
-        return shape;
-    }
-
-    public void setShape(String shape) {
-        this.shape = shape;
-    }
-
-    public String getImplClass() {
-        return implClass;
-    }
-
-    public void setImplClass(String implClass) {
-        this.implClass = implClass;
-    }
-
-    public String getFromBtmType() {
-        return fromBtmType;
-    }
-
-    public void setFromBtmType(String fromBtmType) {
-        this.fromBtmType = fromBtmType;
-    }
-
-    public List<BtmTypeVO> getFromBtmTypeVOS() {
-        return fromBtmTypeVOS;
-    }
-
-    public void setFromBtmTypeVOS(List<BtmTypeVO> fromBtmTypeVOS) {
-        this.fromBtmTypeVOS = fromBtmTypeVOS;
-    }
-
-    public String getFromBtmTypeName() {
-        return fromBtmTypeName;
-    }
-
-    public void setFromBtmTypeName(String fromBtmTypeName) {
-        this.fromBtmTypeName = fromBtmTypeName;
-    }
-
-    public String getToBtmType() {
-        return toBtmType;
-    }
-
-    public void setToBtmType(String toBtmType) {
-        this.toBtmType = toBtmType;
-    }
-
-    public String getToBtmTypeName() {
-        return toBtmTypeName;
-    }
-
-    public void setToBtmTypeName(String toBtmTypeName) {
-        this.toBtmTypeName = toBtmTypeName;
-    }
-
-    public List<BtmTypeVO> getToBtmTypeVOS() {
-        return toBtmTypeVOS;
-    }
-
-    public void setToBtmTypeVOS(List<BtmTypeVO> toBtmTypeVOS) {
-        this.toBtmTypeVOS = toBtmTypeVOS;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getLastModifier() {
-        return lastModifier;
-    }
-
-    public void setLastModifier(String lastModifier) {
-        this.lastModifier = lastModifier;
-    }
-
-    public Date getLastModifyTime() {
-        return lastModifyTime;
-    }
-
-    public void setLastModifyTime(Date lastModifyTime) {
-        this.lastModifyTime = lastModifyTime;
-    }
-
-    public Date getTs() {
-        return ts;
-    }
-
-    public void setTs(Date ts) {
-        this.ts = ts;
-    }
-
-    public List<LinkTypeAttributeVO> getAttributes() {
-        return attributes;
-    }
-
-    public void setAttributes(List<LinkTypeAttributeVO> attributes) {
-        this.attributes = attributes;
-    }
-
-
-    public String getBtmname() {
-        return btmname;
-    }
-
-    public void setBtmname(String btmname) {
-        this.btmname = btmname;
-    }
-
-    public String getOwner() {
-        return owner;
-    }
-
-    public void setOwner(String owner) {
-        this.owner = owner;
-    }
-
-    @Override
-    public String toString() {
-        return "OsLinkTypeVO{" +
-                "oid='" + oid + '\'' +
-                ", id='" + id + '\'' +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                ", shape='" + shape + '\'' +
-                ", implClass='" + implClass + '\'' +
-                ", fromBtmType='" + fromBtmType + '\'' +
-                ", fromBtmTypeVOS=" + fromBtmTypeVOS +
-                ", fromBtmTypeName='" + fromBtmTypeName + '\'' +
-                ", toBtmType='" + toBtmType + '\'' +
-                ", toBtmTypeName='" + toBtmTypeName + '\'' +
-                ", toBtmTypeVOS=" + toBtmTypeVOS +
-                ", btmname='" + btmname + '\'' +
-                ", owner='" + owner + '\'' +
-                ", creator='" + creator + '\'' +
-                ", createTime=" + createTime +
-                ", lastModifier='" + lastModifier + '\'' +
-                ", lastModifyTime=" + lastModifyTime +
-                ", ts=" + ts +
-                ", attributes=" + attributes +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
index e7675ec..40100cc 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
@@ -1,5 +1,4 @@
 package com.vci.ubcs.starter.revision.service;
-//package com.vci.starter.revision.service;
 
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.vci.ubcs.starter.revision.model.BaseModel;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java
deleted file mode 100644
index b40a46a..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vci.ubcs.starter.util;
-
-
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class PatternUtil {
-
-	//*${xxx}*
-	public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
-	public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
-	/**
-	 * 鍒ゆ柇鍐呭涓槸鍚﹀寘鍚姩鎬佸弬鏁�(${key}褰㈠紡鐨�)
-	 *
-	 * @param content 瑕佸垽鏂殑鍐呭
-	 * @return
-	 */
-	public static boolean isContainsDynamicParameter(String content) {
-		if(StringUtils.isBlank(content)){
-			return false;
-		}
-		return dynamic.matcher(content).matches();
-	}
-
-	/**
-	 * 鎸夌収鍔ㄦ�佸唴瀹圭殑鍙傛暟鍑虹幇椤哄簭,灏嗗弬鏁版斁鍒癓ist涓�
-	 *
-	 * @param content
-	 * @return
-	 */
-	public static List<String> getKeyListByContent(String content) {
-		if(StringUtils.isBlank(content)){
-			return new ArrayList<>();
-		}
-		Set<String> paramSet = new LinkedHashSet<>();
-		Matcher m = dynamicLimitCount.matcher(content);
-		while (m.find()) {
-			paramSet.add(m.group(1));
-		}
-		return new ArrayList<>(paramSet);
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
new file mode 100644
index 0000000..246345f
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.starter.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/26
+ */
+@Component
+public class VciSpringUtil implements ApplicationContextAware {
+
+	private static ApplicationContext applicationContext;
+
+	@Override
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+		if (VciSpringUtil.applicationContext == null){
+			VciSpringUtil.applicationContext = applicationContext;
+		}
+	}
+
+	public static ApplicationContext getApplicationContext(){
+		return applicationContext;
+	}
+
+	public static Object getBean(String name){
+		return getApplicationContext().getBean(name);
+	}
+
+	public static <T> T getBean(Class<T> clazz){
+		return getApplicationContext().getBean(clazz);
+	}
+
+	public static <T> T getBean(String name,Class<T> clazz){
+		return getApplicationContext().getBean(name,clazz);
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
index 3e5837e..0efecd3 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
@@ -1,7 +1,19 @@
 package com.vci.ubcs.starter.web.enumpck;
 
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/27
+ */
 public enum BooleanEnum {
+	/**
+	 * true
+	 */
 	TRUE("true"),
+	/**
+	 * false
+	 */
 	FASLE("false");
 
 	private final String value;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
deleted file mode 100644
index 9df9508..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package com.vci.ubcs.starter.web.util;
-
-
-import com.vci.ubcs.starter.web.toolmodel.DateConverter;
-import org.springframework.cglib.beans.BeanCopier;
-import org.springframework.cglib.core.Converter;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-public class BeanUtil {
-	private static final ConcurrentMap<String, BeanCopier> beanCopierMap = new ConcurrentHashMap();
-
-	public BeanUtil() {
-	}
-
-	public static BeanCopier getBeanCopier(Class<?> source, Class<?> target, boolean useConverter) {
-		String beanCopierKey = generateBeanKey(source, target);
-		if (beanCopierMap.containsKey(beanCopierKey)) {
-			return (BeanCopier)beanCopierMap.get(beanCopierKey);
-		} else {
-			BeanCopier beanCopier = BeanCopier.create(source, target, useConverter);
-			beanCopierMap.putIfAbsent(beanCopierKey, beanCopier);
-			return (BeanCopier)beanCopierMap.get(beanCopierKey);
-		}
-	}
-
-	public static String generateBeanKey(Class<?> source, Class<?> target) {
-		return source.getName() + "@" + target.getName();
-	}
-
-	public static void convert(Object source, Object target, boolean useConvert) {
-		if (source != null && target != null) {
-			BeanCopier beanCopier = getBeanCopier(source.getClass(), target.getClass(), useConvert);
-			beanCopier.copy(source, target, useConvert ? new DeepCopyConverter(target) : null);
-		}
-
-	}
-
-	public static void convert(Object source, Object target) {
-		convert(source, target, true);
-	}
-
-	public static class DeepCopyConverter implements Converter {
-		private Object target;
-
-		public DeepCopyConverter(Object target) {
-			this.target = target;
-		}
-
-		public Object convert(Object value, Class targetClazz, Object methodName) {
-			if (value instanceof List) {
-				List values = (List)value;
-				List retList = new ArrayList(values.size());
-				this.copyForCollection(values, retList, methodName);
-				return retList;
-			} else {
-				if (value instanceof Set) {
-					Set values = (Set)value;
-					Set retSet = new HashSet();
-					this.copyForCollection(values, retSet, methodName);
-				} else if (value instanceof Vector) {
-					Vector values = (Vector)value;
-					Vector retVector = new Vector();
-					this.copyForCollection(values, retVector, methodName);
-				} else if (value instanceof Map) {
-					Map values = (Map)value;
-					Map retMap = new HashMap();
-					Iterator var6 = values.keySet().iterator();
-
-					while(var6.hasNext()) {
-						Object key = var6.next();
-						Object mapValue = values.get(key);
-						String tempFieldName = methodName.toString().replace("set", "");
-						String fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
-						Class clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
-						Object targetAttr = null;
-
-						try {
-							targetAttr = clazz.newInstance();
-						} catch (Throwable var15) {
-						}
-
-						BeanUtil.convert(mapValue, targetAttr);
-						retMap.put(key, targetAttr);
-					}
-				} else if (!ClassUtil.isPrimitive(targetClazz)) {
-					Object targetAttr = null;
-
-					try {
-						targetAttr = targetClazz.newInstance();
-					} catch (Throwable var14) {
-					}
-
-					BeanUtil.convert(value, targetAttr);
-					return targetAttr;
-				}
-
-				if (value instanceof Boolean && targetClazz.equals(String.class)) {
-					return String.valueOf(value);
-				} else if (!(value instanceof String) || !targetClazz.equals(Boolean.class) && !targetClazz.equals(Boolean.TYPE)) {
-					if (value instanceof Date && targetClazz.equals(String.class)) {
-						return VciDateUtil.date2Str((Date)value, "yyyy-MM-dd HH:mm:ss.SSS");
-					} else if (value instanceof String && targetClazz.equals(Date.class)) {
-						DateConverter dateConverter = new DateConverter();
-						dateConverter.setAsText((String)value);
-						return dateConverter.getValue();
-					} else {
-						return value;
-					}
-				} else {
-					return "true".equalsIgnoreCase((String)value) ? true : false;
-				}
-			}
-		}
-
-		private void copyForCollection(Collection<?> sourceCollection, Collection targetCollection, Object methodName) {
-			Iterator var4 = sourceCollection.iterator();
-
-			while(true) {
-				while(var4.hasNext()) {
-					Object source = var4.next();
-					if (source instanceof Collection) {
-						List<Object> targetValues = new ArrayList();
-						this.copyForCollection((Collection)source, targetValues, methodName);
-						targetCollection.add(targetValues);
-					} else {
-						String tempFieldName;
-						String fieldName;
-						Class clazz;
-						Object targetAttr;
-						if (!(source instanceof Map)) {
-							tempFieldName = methodName.toString().replace("set", "");
-							fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
-							clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
-							targetAttr = null;
-
-							try {
-								targetAttr = clazz.newInstance();
-							} catch (Throwable var13) {
-							}
-
-							BeanUtil.convert(source, targetAttr);
-							targetCollection.add(targetAttr);
-						} else {
-							tempFieldName = methodName.toString().replace("set", "");
-							fieldName = tempFieldName.substring(0, 1).toLowerCase() + tempFieldName.substring(1);
-							clazz = ClassUtil.getElementType(this.target.getClass(), fieldName);
-							targetAttr = null;
-
-							try {
-								targetAttr = clazz.newInstance();
-							} catch (Throwable var14) {
-							}
-
-							Map map = (Map)source;
-							Iterator var11 = map.keySet().iterator();
-
-							while(var11.hasNext()) {
-								Object key = var11.next();
-								VciBaseUtil.setValueForField(key.toString(), targetAttr, VciBaseUtil.getStringValueFromObject(map.get(key)));
-							}
-
-							targetCollection.add(targetAttr);
-						}
-					}
-				}
-
-				return;
-			}
-		}
-	}
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
deleted file mode 100644
index 353cace..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.vci.ubcs.starter.web.util;
-
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-public class ClassUtil {
-	private static final Map<Class<?>, Class<?>> primitiveMap = new HashMap(9);
-
-	public ClassUtil() {
-	}
-
-	public static boolean isPrimitive(Class<?> clazz) {
-		return primitiveMap.containsKey(clazz) ? true : clazz.isPrimitive();
-	}
-
-	public static Class<?> getElementType(Class<?> tartget, String fieldName) {
-		Class<?> elementTypeClass = null;
-
-		try {
-			Type type = VciBaseUtil.getFieldForObject(fieldName, tartget).getGenericType();
-			ParameterizedType t = (ParameterizedType)type;
-			String classStr = t.getActualTypeArguments()[0].toString().replace("class ", "");
-			if (classStr.contains("<")) {
-				classStr = classStr.substring(classStr.lastIndexOf("<") + 1, classStr.indexOf(">"));
-			}
-
-			elementTypeClass = Thread.currentThread().getContextClassLoader().loadClass(classStr);
-			return elementTypeClass;
-		} catch (SecurityException | ClassNotFoundException var6) {
-			throw new RuntimeException("get fieldName[" + fieldName + "] error", var6);
-		}
-	}
-
-	static {
-		primitiveMap.put(String.class, String.class);
-		primitiveMap.put(Boolean.class, Boolean.TYPE);
-		primitiveMap.put(Byte.class, Byte.TYPE);
-		primitiveMap.put(Character.class, Character.TYPE);
-		primitiveMap.put(Double.class, Double.TYPE);
-		primitiveMap.put(Float.class, Float.TYPE);
-		primitiveMap.put(Integer.class, Integer.TYPE);
-		primitiveMap.put(Long.class, Long.TYPE);
-		primitiveMap.put(Short.class, Short.TYPE);
-		primitiveMap.put(Date.class, Date.class);
-	}
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
index 6f45676..4cc6e8d 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -9,7 +9,6 @@
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.vci.ubcs.starter.exception.VciBaseException;
-import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
 import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
 import com.vci.ubcs.starter.web.toolmodel.DateConverter;
 import org.slf4j.Logger;
@@ -136,11 +135,6 @@
 				return 0.0D;
 			}
 		}
-	}
-
-
-	public static boolean getBoolean(String s) {
-		return BooleanEnum.TRUE.getValue().equals(s);
 	}
 
 	public static String removeComma(String s) {
@@ -1200,20 +1194,6 @@
 		} catch (Throwable var7) {
 			if (log.isErrorEnabled()) {
 				log.error("璁剧疆灞炴�х殑鍊煎嚭閿欎簡閿欒", var7);
-			}
-		}
-
-	}
-
-	public static void setValueForField(String fieldName, Object obj, String value) {
-		try {
-			Field field = getFieldForObject(fieldName, obj);
-			if (field != null) {
-				setValueForField(field, obj, value);
-			}
-		} catch (Exception var4) {
-			if (log.isErrorEnabled()) {
-				log.error("璁剧疆灞炴�х殑鍊煎嚭閿欎簡閿欒", var4);
 			}
 		}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
index a4f1521..c985036 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -23,28 +23,17 @@
             <version>3.0.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-ddl</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.vci.ubcs</groupId>-->
-<!--            <artifactId>ubcs-ddl</artifactId>-->
+<!--            <artifactId>ubcs-omd-api</artifactId>-->
 <!--            <version>3.0.1.RELEASE</version>-->
-<!--            <exclusions>-->
-<!--                <exclusion>-->
-<!--                    <groupId>com.vci</groupId>-->
-<!--                    <artifactId>vci-starter-word</artifactId>-->
-<!--                </exclusion>-->
-<!--            </exclusions>-->
+<!--            <scope>compile</scope>-->
 <!--        </dependency>-->
-        <dependency>
-            <groupId>com.vci.ubcs</groupId>
-            <artifactId>ubcs-omd-api</artifactId>
-            <version>3.0.1.RELEASE</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.vci.ubcs</groupId>
-            <artifactId>ubcs-util-api</artifactId>
-            <version>3.0.1.RELEASE</version>
-        </dependency>
         <dependency>
             <groupId>com.oracle.database.jdbc</groupId>
             <artifactId>ojdbc8</artifactId>
@@ -61,12 +50,6 @@
             <groupId>cn.easyproject</groupId>
             <artifactId>orai18n</artifactId>
             <version>${orai18n.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.vci.ubcs</groupId>
-            <artifactId>ubcs-dict-api</artifactId>
-            <version>3.0.1.RELEASE</version>
-            <scope>compile</scope>
         </dependency>
 
     </dependencies>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
index 3582ec3..3240265 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
@@ -16,10 +16,13 @@
  */
 package com.vci.ubcs.code;
 
+import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import org.springblade.core.cloud.client.UbcsCloudApplication;
 import org.springblade.core.launch.UbcsApplication;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
 
 /**
  * Code鍚姩鍣�
@@ -28,6 +31,7 @@
  * ludc
  */
 @UbcsCloudApplication
+@ComponentScan("com.vci.ubcs.*")
 public class CodeApplication {
 
 	public static void main(String[] args) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
index b443a2b..2d3afc3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -42,7 +42,7 @@
      */
     @GetMapping("/treeCodeClassifyValue")
     public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject)  {
-		return codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
+        return  codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
     }
 
     /**
@@ -81,7 +81,7 @@
      * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
      */
     @DeleteMapping( "/deleteData")
-    public R delCodeClassifyValue(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO) {
+    public R delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
         return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
     }
 
@@ -130,7 +130,7 @@
             CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
             dtoList.add(codeFixedValueDTO);
         }
-        String codeclassifysecoid = (String) param.get("codeClassifySecOid");
+        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
         VciBaseUtil.alertNotNull(dtoList,"鐮佸�奸泦鍚�");
         if (CollectionUtils.isEmpty(dtoList)){
             return R.success("");
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java
index 533194c..2ac1921 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java
@@ -18,15 +18,10 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.dto.CodeClstempattrDTO;
 import com.vci.ubcs.code.entity.CodeClstempattrEntity;
 import com.vci.ubcs.code.service.ICodeClstempattrService;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
-import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
 import com.vci.ubcs.code.wrapper.CodeClstempattrWrapper;
-import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -36,12 +31,9 @@
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.Collection;
-import java.util.List;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 鎺у埗鍣�
@@ -51,11 +43,11 @@
  */
 @RestController
 @AllArgsConstructor
-@RequestMapping("/codeClassifyTempAttrController")
+@RequestMapping("/CodeClstempattr")
 @Api(value = "缂栫爜搴撳畾涔�-妯℃澘灞炴��", tags = "缂栫爜搴撳畾涔�-妯℃澘灞炴�ф帴鍙�")
 public class CodeClstempattrController extends BladeController {
 
-	private final ICodeClstempattrService codeClstempattrService;
+	private final ICodeClstempattrService CodeClstempattrService;
 
 	/**
 	 * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 璇︽儏
@@ -64,7 +56,7 @@
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodeClstempattr")
 	public R<CodeClstempattrVO> detail(CodeClstempattrEntity CodeClstempattr) {
-		CodeClstempattrEntity detail = codeClstempattrService.getOne(Condition.getQueryWrapper(CodeClstempattr));
+		CodeClstempattrEntity detail = CodeClstempattrService.getOne(Condition.getQueryWrapper(CodeClstempattr));
 		return R.data(CodeClstempattrWrapper.build().entityVO(detail));
 	}
 	/**
@@ -74,7 +66,7 @@
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeClstempattr")
 	public R<IPage<CodeClstempattrVO>> list(CodeClstempattrEntity CodeClstempattr, Query query) {
-		IPage<CodeClstempattrEntity> pages = codeClstempattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeClstempattr));
+		IPage<CodeClstempattrEntity> pages = CodeClstempattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeClstempattr));
 		return R.data(CodeClstempattrWrapper.build().pageVO(pages));
 	}
 
@@ -85,7 +77,7 @@
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeClstempattr")
 	public R<IPage<CodeClstempattrVO>> page(CodeClstempattrVO CodeClstempattr, Query query) {
-		IPage<CodeClstempattrVO> pages = codeClstempattrService.selectCodeClstempattrPage(Condition.getPage(query), CodeClstempattr);
+		IPage<CodeClstempattrVO> pages = CodeClstempattrService.selectCodeClstempattrPage(Condition.getPage(query), CodeClstempattr);
 		return R.data(pages);
 	}
 
@@ -96,7 +88,7 @@
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "鏂板", notes = "浼犲叆CodeClstempattr")
 	public R save(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
-		return R.status(codeClstempattrService.save(CodeClstempattr));
+		return R.status(CodeClstempattrService.save(CodeClstempattr));
 	}
 
 	/**
@@ -106,7 +98,7 @@
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "淇敼", notes = "浼犲叆CodeClstempattr")
 	public R update(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
-		return R.status(codeClstempattrService.updateById(CodeClstempattr));
+		return R.status(CodeClstempattrService.updateById(CodeClstempattr));
 	}
 
 	/**
@@ -116,7 +108,7 @@
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodeClstempattr")
 	public R submit(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
-		return R.status(codeClstempattrService.saveOrUpdate(CodeClstempattr));
+		return R.status(CodeClstempattrService.saveOrUpdate(CodeClstempattr));
 	}
 
 	/**
@@ -126,133 +118,8 @@
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
 	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(codeClstempattrService.removeBatchByIds(Func.toLongList(ids)));
+		return R.status(CodeClstempattrService.removeBatchByIds(Func.toLongList(ids)));
 	}
 
-	/**
-	 * 涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛�
-	 */
-	@GetMapping("/gridCodeClassifyTemplateAttr")
-	public DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
-		if(baseQueryObject == null){
-			baseQueryObject = new BaseQueryObject();
-		}
-		return codeClstempattrService.gridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-	}
-
-	/**
-	 * 澧炲姞 涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-	 */
-	@PostMapping( "/addSave")
-	public R<CodeClstempattrVO> addSave(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO){
-		CodeClstempattrVO codeClassifyTemplateAttrVO = codeClstempattrService.addSave(codeClassifyTemplateAttrDTO);
-		return R.data(codeClassifyTemplateAttrVO);
-	}
-
-	/**
-	 * 鎵归噺淇濆瓨鍒楄〃鏁版嵁
-	 * @param list
-	 * @return
-	 */
-	@PostMapping( "/batchAddSave")
-	public R<List<CodeClstempattrVO>> batchAddSaves(@RequestBody List<CodeClstempattrDTO> list){
-		if(CollectionUtils.isEmpty(list)){
-			return R.fail("鍒楄〃涓嶈兘涓虹┖!");
-		}
-		List<CodeClstempattrVO> codeClassifyTemplateAttrVOs = codeClstempattrService.batchAddSave(list);
-		return R.data(codeClassifyTemplateAttrVOs);
-	}
-
-	/**
-	 * 淇敼 涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-	 */
-	@PutMapping("/editSave")
-	public R<CodeClstempattrVO> editSave(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO){
-		return codeClstempattrService.editSave(codeClassifyTemplateAttrDTO);
-	}
-
-	/**
-	 * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-	 */
-	@DeleteMapping( "/deleteData")
-	public R delCodeClassifyTemplateAttr(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO) {
-		return codeClstempattrService.deleteCodeClassifyTemplateAttr(codeClassifyTemplateAttrDTO);
-	}
-
-	/**
-	 * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oid 涓婚敭
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 */
-	@GetMapping("/getObjectByOid")
-	public R<CodeClstempattrVO> getObjectByOid(String oid){
-		CodeClstempattrVO codeClassifyTemplateAttrVO = codeClstempattrService.getObjectByOid(oid);
-		return R.data(codeClassifyTemplateAttrVO);
-	}
-
-
-	/**
-	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 */
-	@GetMapping("/listDataByOids")
-	public R listCodeClassifyTemplateAttrByOids(String oids){
-		Collection<CodeClstempattrVO> voCollection =  codeClstempattrService.listCodeClassifyTemplateAttrByOids(VciBaseUtil.str2List(oids));
-//		BaseResult baseResult = BaseResult.success();
-//		baseResult.setData(voCollection);
-		return  R.data(voCollection);
-	}
-
-	/**
-	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-	 */
-	@GetMapping("/refDataGrid")
-	public DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
-		if(baseQueryObject == null){
-			baseQueryObject = new BaseQueryObject();
-		}
-		return codeClstempattrService.refDataGridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
-	}
-
-	/**
-	 * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�,鎺掗櫎鎺夎繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
-	 * @param baseQueryObject
-	 * @return
-	 */
-	@GetMapping("/codeClassifyTemplateAttrByBtm")
-	public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
-		return codeClstempattrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
-	}
-
-	/**
-	 * 鏌ヨ杩欎釜涓氬姟绫诲瀷涓嬨�佽繖涓ā鏉垮凡缁忓瓨鍦ㄧ殑灞炴��
-	 * @param baseQueryObject
-	 * @return
-	 */
-	@GetMapping("/codeClassifyTemplateAttrByBtmHave")
-	public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
-		return codeClstempattrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
-	}
-
-	/**
-	 * 鍚屾鍒板叾浠栨ā鏉�
-	 * @param codeClassifyAttrDTO   id 鑻辨枃鍚嶇О
-	 * @return 鎵ц缁撴灉
-	 */
-	@PostMapping( "/copyto")
-	public R copyto(@RequestBody CodeClstempattrDTO codeClassifyAttrDTO) {
-		return codeClstempattrService.copyto(codeClassifyAttrDTO);
-	}
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
index db94cd2..4f61b25 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
@@ -25,9 +25,8 @@
 import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
 import com.vci.ubcs.code.service.ICodeClstemplateService;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import com.vci.ubcs.code.wrapper.PlCodeClstemplateWrapper;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.code.wrapper.PlCodeClstemplateWrapper;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import io.swagger.annotations.Api;
@@ -143,37 +142,16 @@
 		return  plCodeClstemplateService.treeCodeClassifyTemplate(treeQueryObject);
 	}
 
-	/**
-	 * 鍒嗙被妯℃澘鍒楄〃
-	 * @param plCodeClstemplate 鍩虹鏌ヨ瀵硅薄
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	@GetMapping("/gridCodeClassifyTemplate")
-	public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query){
-
-		return  plCodeClstemplateService.gridCodeClassifyTemplate(plCodeClstemplate,query);
-
-	}
-
-	/**
-	 * 澧炲姞 鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-	 */
-	@PostMapping( "/addSave")
-	public R<CodeClstemplateVO> addSave(@RequestBody CodeClstemplateDTO codeClassifyTemplateDTO){
-		return plCodeClstemplateService.addSave(codeClassifyTemplateDTO);
-	}
-
-	/**
-	 * 淇敼 鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
-	 */
-	@PutMapping("/editSave")
-	public R<CodeClstemplateVO> editSave(@RequestBody CodeClstemplateDTO codeClassifyTemplateDTO){
-		return plCodeClstemplateService.editSave(codeClassifyTemplateDTO);
-	}
+//	/**
+//	 * 鍒嗙被妯℃澘鍒楄〃
+//	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄
+//	 * @return 鏄剧ず瀵硅薄
+//	 */
+//	@GetMapping("/gridCodeClassifyTemplate")
+//	public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(BaseQueryObject baseQueryObject){
+//
+//		return  plCodeClstemplateService.gridCodeClassifyTemplate(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+//	}
 
 
 	/**
@@ -256,7 +234,7 @@
 	 * @return
 	 */
 	@PostMapping( "/editDate")
-	public R editDate(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
+	public R editDate( CodeClstemplateDTO codeClassifyDTO) {
 		return plCodeClstemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.EDITING.getValue());
 	}
 
@@ -269,27 +247,5 @@
 	public R Upgrade(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
 
 		return plCodeClstemplateService.Upgrade(codeClassifyDTO);
-	}
-
-	@GetMapping( "/upgrade1")
-	public R upgrade1(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
-		return Upgrade(codeClassifyDTO);
-	}
-
-	/**
-	 * 鍏嬮殕
-	 * @param codeClassifyDTO
-	 * @return oid妯℃澘oid
-	 */
-	@PostMapping( "/copy")
-	public R copyTemplate(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
-
-		return plCodeClstemplateService.copyTemplate(codeClassifyDTO);
-	}
-
-	@GetMapping( "/copyTemplate1")
-	public R copyTemplate1(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
-
-		return copyTemplate(codeClassifyDTO);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
index ce03874..a363528 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -81,9 +81,6 @@
 	@MapKey("oid")
 	List<Map<String,Object>> selectAllLevelParentByOid(@Param("oid") String oid);
 
-	@MapKey("oid")
-	List<Map<String,Object>> selectAllLevelParents(@Param("oid") String oid);
-
 
 	@MapKey("oid")
 	List<Map<String,Object>> selectByFieldPath(@Param("fieldPath") String fieldPath);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java
index 38fb156..4b111c0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java
@@ -39,7 +39,6 @@
 	 */
 	List<CodeClstempattrVO> selectCodeClstempattrPage(IPage page, CodeClstempattrVO CodeClstempattr);
 
-
 	/**
 	 * 鏉′欢鏌ヨ鎺掑簭
 	 *
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
index 7d2b7d2..5e87d10 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
@@ -20,11 +20,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
-import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 Mapper 鎺ュ彛
@@ -59,17 +57,5 @@
 	 */
 	int countAllLevelChildOid(@Param("oid") String oid);
 
-	/**
-	 * 鏍¢獙鏄惁鏈変笅绾ц妭鐐癸紝涓嶆牎楠屾槸鍚﹀叧鑱斾簡鏁版嵁
-	 *
-	 * @param nameoid
-	 * @return
-	 */
-//	@MapKey("REVISIONSEQ")
-	Map<String,Object> getNextRevision(@Param("nameoid") String nameoid);
 
-
-
-	List<CodeClstemplateEntity> selectCodeClassifyTemplateDOByTree(@Param("codeclassifyoid") String codeclassifyoid,
-														  @Param("lcstatus") String lcstatus);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
index b6c6d1b..7765694 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
@@ -41,7 +41,4 @@
 
 
 	List<CodePhaseattrEntity> selectByPhasea(String oid);
-
-	List<CodePhaseattrEntity> selectByPhaseaIds(String oids);
-	List<CodePhaseattrEntity> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
index 1e46c34..a9fc3a5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -198,18 +198,4 @@
 	 * @return 涓婚搴撴樉绀烘爲
 	 */
 	List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
-
-	/**
-	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename
-	 */
-	CodeClassify selectBtmOrParentBtm(String oid);
-
-	/**
-	 * 鑾峰彇鎵�鏈変笅绾ф暟鎹�
-	 * @param oid 鏁版嵁涓婚敭
-	 * @return 鏌ヨ缁撴灉
-	 */
-	List<CodeClassify> selectAllLevelParents(String oid);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
index 42150b7..27c01d0 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
@@ -18,18 +18,11 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.dto.CodeClstempattrDTO;
 import com.vci.ubcs.code.entity.CodeClstempattrEntity;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
-import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
-import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.starter.web.pagemodel.PageHelper;
-import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 鏈嶅姟绫�
@@ -68,77 +61,5 @@
 	 * @return 鏄剧ず瀵硅薄
 	 */
 	CodeClstempattrVO codeClassifyTemplateAttrDO2VO(CodeClstempattrEntity codeClassifyTemplateAttrDO);
-	/**
-	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
-	 * @return 鎵ц缁撴灉
-	 */
-    DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper);
 
-
-	/**
-	 * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉
-	 */
-	CodeClstempattrVO addSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
-
-	List<CodeClstempattrVO> batchAddSave(List<CodeClstempattrDTO> list);
-
-	/**
-	 * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉
-	 */
-	R<CodeClstempattrVO> editSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
-
-	/**
-	 * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-	 */
-	R deleteCodeClassifyTemplateAttr(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
-
-	/**
-	 * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oid 涓婚敭
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 */
-	CodeClstempattrVO getObjectByOid(String oid);
-
-	/**
-	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 */
-	Collection<CodeClstempattrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections);
-
-	/**
-	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-	 */
-	DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper);
-
-	/**
-	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
-	 * @param baseQueryObject
-	 * @return
-	 */
-	DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
-	/**
-	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
-	 * @param baseQueryObject
-	 * @return
-	 */
-	DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
-
-	/**
-	 * 鍚屾鍒板叾浠栨ā鏉�
-	 * @param codeClassifyAttrDTO oid
-	 * @return
-	 */
-	R copyto(CodeClstempattrDTO codeClassifyAttrDTO);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
index 6ab44e2..71898f2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
@@ -22,14 +22,11 @@
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 鏈嶅姟绫�
@@ -157,30 +154,4 @@
 	 * 鍗囩増
 	 */
 	R Upgrade(CodeClstemplateDTO codeClassifyDTO);
-	/**
-	 * 妯℃澘鍏嬮殕
-	 */
-	R copyTemplate(CodeClstemplateDTO codeClassifyDTO);
-
-	/**
-	 * 鍒嗙被妯℃澘鍒楄〃
-	 * @param plCodeClstemplate 鏌ヨ鏉′欢
-	 * @param query 鍒嗛〉瀵硅薄
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query);
-
-	/**
-	 * 澧炲姞鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 */
-	R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO);
-
-	/**
-	 * 淇敼鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 */
-	R<CodeClstemplateVO> editSave(CodeClstemplateDTO codeClassifyTemplateDTO);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
index 549ab9d..2ee891a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
@@ -18,12 +18,8 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeClstempattrEntity;
 import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.vci.ubcs.code.vo.CodeTempphaseVO;
-
-import java.util.List;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏈嶅姟绫�
@@ -49,11 +45,4 @@
 	 * @return 鍙楀奖鍝嶇殑鏁版嵁
 	 */
 	int codeTemplateDeleteTrigger(String classifyTemplateOid);
-
-	/**
-	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
-	 * @param codeClassifyTemplateAttrDOInsert 灞炴�х殑鏁版嵁瀵硅薄
-	 * @return 鍙楀奖鍝嶇殑鏁版嵁
-	 */
-	List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
index cab8c88..6237099 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -124,12 +124,8 @@
 		if (CollectionUtils.isEmpty(deleteList)){
 			return true;
 		}
-		boolean deletFlag = false;
 		// 2銆佸啀鍒犻櫎鍩虹鐮佹
-		Set<String> basicOids = deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
-		if(basicOids.size()>0 || !Func.isEmpty(basicOids)){
-			deletFlag = codeBasicSecMapper.deleteBatchIds(basicOids) > 0;
-		}
+		boolean deletFlag = codeBasicSecMapper.deleteBatchIds(deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet())) > 0;
 		// 3銆佸啀鏍规嵁鍒犻櫎鍥哄畾鐮佹锛屼笡鏌ヨ鍑烘潵鐨勫熀纭�鐮佹涓繃婊ゅ嚭鍖呭惈鍥哄畾鐮佹鐨勮褰�
 		List<CodeBasicSec> fixedSecList = deleteList.stream().filter(sec -> {
 			return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
@@ -139,11 +135,8 @@
 			Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
 			// 閫氳繃澶栭敭杩涜鏌ヨ
 			List<CodeFixedValue> fixedValueS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
-			Set<String> collectOid = fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet());
-			if(collectOid.size()>0 || !Func.isEmpty(collectOid)){
-				// 鏍规嵁鏌ヨ鍑烘潵鐨刬d鎵ц鍥哄畾鐮佹鎵ц鍒犻櫎
-				fixedValueMapper.deleteBatchIds(collectOid);
-			}
+			// 鏍规嵁鏌ヨ鍑烘潵鐨刬d鎵ц鍥哄畾鐮佹鎵ц鍒犻櫎
+			deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
 		}
 		// 4銆佸啀鍒犻櫎鍒嗙被鐮佹
 		List<CodeBasicSec> classifySecList = deleteList.stream().filter(sec -> {
@@ -153,12 +146,9 @@
 			// 灏嗚浣滀负鍒犻櫎鏉′欢鐨勫�兼斁鍦ㄤ竴涓泦鍚堥噷闈�
 			Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
 			// 閫氳繃澶栭敭杩涜鏌ヨ
-			List<CodeClassifyValue> classifyValues = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
+			List<CodeClassifyValue> fixedValueS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
 			// 鏍规嵁鏌ヨ鍑烘潵鐨勪富閿甶d鎵ц鍥哄畾鐮佹鎵ц鍒犻櫎
-			Set<String> codeclassifyOids = classifyValues.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet());
-			if(codeclassifyOids.size()>0 || !Func.isEmpty(codeclassifyOids)){
-				fixedValueMapper.deleteBatchIds(codeclassifyOids);
-			}
+			deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
 		}
 		return deletFlag;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
index 3481b1b..6547785 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.code.entity.CodeClassify;
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
@@ -23,15 +25,13 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
-import com.vci.ubcs.core.log.exception.ServiceException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
 import com.vci.ubcs.starter.bo.WriteExcelData;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
 import com.vci.ubcs.starter.poi.bo.WriteExcelOption;
 import com.vci.ubcs.starter.poi.constant.ExcelLangCodeConstant;
 import com.vci.ubcs.starter.poi.util.ExcelUtil;
-import com.vci.ubcs.starter.revision.model.TreeQueryObject;
-import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.LocalFileUtil;
 import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
@@ -40,6 +40,7 @@
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.LangBaseUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -984,41 +985,4 @@
 		return treeCodeClassify(treeQueryObject);
 	}
 
-	/**
-	 * 鑾峰彇杩欎釜鍒嗙被涓嬬殑涓氬姟绫诲瀷锛屽綋鍓嶆病鏈夊氨鑾峰彇涓婄骇鐨勭涓�涓笟鍔$被鍨�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename锛屾病鏈夊氨杩斿洖null
-	 */
-	@Override
-	public CodeClassify selectBtmOrParentBtm(String oid){
-		List<CodeClassify> oidList = selectAllLevelParents(oid);
-		return oidList.size()==0?null:oidList.get(0);
-	}
-
-	/**
-	 * 鑾峰彇鎵�鏈夊眰绾т笂绾у叧鑱斾笟鍔$被鍨嬫暟鎹�
-	 * @param oid 褰撳墠鍒嗙被鐨刼id
-	 * @return oid,id,name,btmtypeid,btmtypename
-	 */
-	@Override
-	public List<CodeClassify> selectAllLevelParents(String oid){
-//		String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
-//		Map< String,String> conditionMap = new HashMap< String,String>();
-//		conditionMap.put("oid",oid);
-//		List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
-		List<Map<String, Object>> dataList = codeClassifyMapper.selectAllLevelParents(oid);
-		List<CodeClassify> oidList = new ArrayList<CodeClassify>();
-		if(!CollectionUtils.isEmpty(dataList)){
-			for(Map data:dataList){
-				CodeClassify codeClassifyDO = new CodeClassify();
-				codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("OID")));
-				codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("ID")));
-				codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("NAME")));
-				codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPEID")));
-				codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPENAME")));
-				oidList.add(codeClassifyDO);
-			}
-		}
-		return oidList;
-	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
index b9b5fdd..e9749c9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -4,11 +4,9 @@
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
-import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
-import com.vci.ubcs.code.enumpack.*;
+import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
 import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
 import com.vci.ubcs.code.service.ICodeBasicSecService;
 import com.vci.ubcs.code.service.ICodeClassifyValueService;
@@ -21,7 +19,6 @@
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -52,7 +49,7 @@
 	/**
 	 * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
 	 */
-	private static final String PARENT_FIELD_NAME = "parentClassifyValueOid";
+	private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
 
 	/**
 	 * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
@@ -63,7 +60,7 @@
 	@Override
 	public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException {
 		// List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
-		List<CodeClassifyValue> doList = selectCodeClassifyValueDO4Tree(treeQueryObject);
+		List<CodeClassifyValue> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
 		List<CodeClassifyValueVO> voList = CodeClassifyValueWrapper.build().listVO(doList);
 		TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
 		treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
@@ -81,13 +78,12 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
 	 */
 	@Override
-	@Transactional(rollbackFor = Exception.class)
 	public boolean addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
 		VciBaseUtil.alertNotNull(codeClassifyValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
 		//娣诲姞瀵圭爜鍊煎瓙鐖剁骇鐨勫垽鏂�
-		if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentClassifyValueOid())){
-			String parentclassifyvalueoid = codeClassifyValueDTO.getParentClassifyValueOid();
-			String codeclassifysecoid = codeClassifyValueDTO.getCodeClassifySecOid();
+		if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
+			String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
+			String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
 			CodeClassifyValue parentDO = codeClassifyValueMapper.selectById(parentclassifyvalueoid);
 			if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
 				throw new VciBaseException("涓嶅厑璁稿湪鐖剁爜鍊间腑鐩存帴娣诲姞瀛愮爜鍊�");
@@ -96,16 +92,6 @@
 		//灏咲TO杞崲涓篋O
 		CodeClassifyValue codeClassifyValueDO = new CodeClassifyValue();
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
-		//濉厖涓�浜涢粯璁ゅ��
-		codeClassifyValueDO.setOid(VciBaseUtil.getPk());
-		codeClassifyValueDO.setRevisionOid(VciBaseUtil.getPk());
-		codeClassifyValueDO.setNameOid(VciBaseUtil.getPk());
-		codeClassifyValueDO.setBtmname(MdmBtmTypeConstant.CODE_CLASSIFY_VALUE);
-		codeClassifyValueDO.setTs(new Date());
-		codeClassifyValueDO.setCreateTime(new Date());
-		codeClassifyValueDO.setCreator(AuthUtil.getUserId().toString());
-		codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
-		codeClassifyValueDO.setLastModifyTime(new Date());
 		//鏌ヨ
 		List<CodeClassifyValue> existList = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query()
 			.lambda().eq(CodeClassifyValue::getCodeClassifySecOid, codeClassifyValueDO.getCodeClassifySecOid())
@@ -128,10 +114,6 @@
 		//灏咲TO杞崲涓篋O
 		CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
 		revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
-		//濉厖涓�浜涢粯璁ゅ��
-		codeClassifyValueDO.setTs(new Date());
-		codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
-		codeClassifyValueDO.setLastModifyTime(new Date());
 		boolean resBoolean = codeClassifyValueMapper.updateById(codeClassifyValueDO) > 0;
 		return resBoolean;
 	}
@@ -221,7 +203,7 @@
 		VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊肩殑涓婚敭");
 		CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
 		R baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
-		if(!baseResult.isSuccess()) {
+		if(baseResult.isSuccess()) {
 			//鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊橰
 			List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
 			if (!CollectionUtils.isEmpty(childrenOids)) {
@@ -298,12 +280,12 @@
 
 		List<CodeClassifyValue> updateList = new ArrayList<>();
 		dtoList.forEach(dto -> {
-			if(StringUtils.isNotBlank(dto.getOid())){
+			if( StringUtils.isNotBlank( dto.getOid() )){
 				List<CodeClassifyValue> collect = valueDOList.stream().filter(value -> {
 					return dto.getOid().equals(value.getOid());
 				}).collect(Collectors.toList());
 				collect.forEach(ccv -> {
-					ccv.setOrderNum(dto.getOrderNum());
+					ccv.setOrderNum(dto.getOrdernum());
 					ccv.setId(dto.getId());
 					ccv.setName(dto.getName());
 					updateList.add(ccv);
@@ -353,8 +335,9 @@
 		List<String> oids = codeBasicSecService.getOidByCodeclassifysecOid(conditionMap.get("codeclassifysecoid"));
 		LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
 			.lambda().in(CodeClassifyValue::getCodeClassifySecOid,oids)
-			.orderByAsc(CodeClassifyValue::getOrderNum);
+			.orderByDesc(CodeClassifyValue::getOrderNum);
 		return codeClassifyValueMapper.selectList(wrapper);
 	}
 
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
index ccc9518..404f4d4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
@@ -16,47 +16,23 @@
  */
 package com.vci.ubcs.code.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.nacos.common.utils.StringUtils;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
-import com.vci.ubcs.code.dto.CodeClstempattrDTO;
 import com.vci.ubcs.code.entity.CodeClstempattrEntity;
-import com.vci.ubcs.code.entity.CodeClstemplateEntity;
-import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
 import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
-import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
-import com.vci.ubcs.code.mapper.CodeOsbtmtypeattributeMapper;
 import com.vci.ubcs.code.service.ICodeClstempattrService;
-import com.vci.ubcs.code.service.ICodeTempphaseService;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
-import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
-import com.vci.ubcs.starter.exception.VciBaseException;
-import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.starter.util.PatternUtil;
+
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.ubcs.starter.web.pagemodel.*;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
-import com.vci.ubcs.starter.web.util.VciDateUtil;
-import com.vci.ubcs.system.entity.DictBiz;
-import com.vci.ubcs.system.feign.IDictBizClient;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cglib.beans.BeanMap;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 鏈嶅姟瀹炵幇绫�
@@ -69,22 +45,6 @@
 
 	@Resource
 	CodeClstempattrMapper codeClstempattrMapper;
-//	@Resource
-//	ICodeTempphaseService codeTempphaseService;
-	@Resource
-	IDictBizClient iDictBizClient;
-	@Resource
-	CodeClstemplateMapper codeClstemplateMapper;
-	@Resource
-	CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
-	@Resource
-	ICodeTempphaseService codeTempphaseService;
-
-	/**
-	 * 瀵硅薄鐨勬搷浣�
-	 */
-	@Autowired(required = false)
-	private RevisionModelUtil revisionModelUtil;
 
 	@Override
 	public IPage<CodeClstempattrVO> selectCodeClstempattrPage(IPage<CodeClstempattrVO> page, CodeClstempattrVO CodeClstempattr) {
@@ -151,648 +111,5 @@
 			vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
 		}
 		return vo;
-	}
-
-	/**
-	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
-	 * @return 鎵ц缁撴灉
-	 */
-    @Override
-    public DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) {
-		DataGrid<CodeClstempattrVO> dataGrid=new DataGrid<CodeClstempattrVO>();
-		//娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
-		if(conditionMap.size()==0){
-			dataGrid.setData(new ArrayList<>());
-			dataGrid.setTotal(0);
-			return dataGrid;
-		}
-
-		if (pageHelper == null) {
-			pageHelper = new PageHelper(-1);
-		}
-		pageHelper.addDefaultAsc("ordernum");
-//		IPage iPage = new IPage();
-		Query query = new Query();
-		query.setAscs("ordernum");
-//		query.setSize(100);
-		if(pageHelper.getLimit() != -1){
-			query.setSize(pageHelper.getLimit());
-			query.setCurrent(pageHelper.getPage());
-		}
-//		Condition.getPage(query)
-		CodeClstempattrVO codeClstempattrVO = new CodeClstempattrVO();
-//		BeanUtil.toBean(map,codeClstempattrVO);
-//		BeanUtil
-		BeanMap beanMap = BeanMap.create(codeClstempattrVO);
-
-		beanMap.putAll(conditionMap);
-//		Condition.getQueryWrapper(
-		IPage<CodeClstempattrEntity> doList = baseMapper.
-			selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClstempattrVO));
-
-
-		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-//			CodeClstempattrEntity codeClstempattrEntity = new CodeClstempattrEntity();
-//			BeanUtils.copyProperties(conditionMap, codeClstempattrEntity);
-//			List<CodeClstempattrEntity> codeClstempattrEntities = new ArrayList<>();
-//			BeanUtils.copyProperties(doList,codeClstempattrEntities);
-//			codeClstempattrEntities.addAll(doList);
-			dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList.getRecords()));
-			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(baseMapper.selectCount(Condition.getQueryWrapper(codeClstempattrVO)))));
-		}
-		return dataGrid;
-    }
-
-	/**
-	 * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉
-	 */
-	@Override
-	public CodeClstempattrVO addSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO){
-		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-		//灏咲TO杞崲涓篋O
-		CodeClstempattrEntity codeClassifyTemplateAttrDO = new CodeClstempattrEntity();
-		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-		baseMapper.insert(codeClassifyTemplateAttrDO);
-		return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
-	}
-
-
-	/**
-	 * 鎵归噺娣诲姞
-	 * @param codeClassifyTemplateAttrDTOs 鏁版嵁浼犺緭瀵硅薄
-	 * @return 淇濆瓨鍚庣殑鏄剧ず瀵硅薄
-	 */
-	@Override
-	@Transactional
-	public List<CodeClstempattrVO> batchAddSave(List<CodeClstempattrDTO> codeClassifyTemplateAttrDTOs) {
-		if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
-			return new ArrayList<>();
-		}
-
-		//鍙栨墍鏈夊睘鎬х殑鑻辨枃鍚嶇О锛岀涓変釜楠岃瘉闇�瑕佺敤鍒�
-		Map<String,CodeClstempattrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
-
-		//鎵惧睘鎬т腑鏂囧悕瀛楅噸澶�
-		Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
-		List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
-		if(!CollectionUtils.isEmpty(repeatNameList)){
-			throw new VciBaseException("妯℃澘灞炴�т腑鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
-		}
-		//鎵惧睘鎬ц嫳鏂囧悕瀛楅噸澶�
-		Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
-		List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
-		if(!CollectionUtils.isEmpty(repeatIdList)){
-			throw new VciBaseException("妯℃澘灞炴�ц嫳鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
-		}
-
-		//妯℃澘oid
-		String CLASSIFYTEMPLATEOID = null;
-		//杞崲
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClstempattrEntity>();
-		List<String> prefix = new ArrayList<>();
-		List<String> suffix = new ArrayList<>();
-		List<String> dateFormates = new ArrayList<>();
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
-			VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-			//灏咲TO杞崲涓篋O
-			CodeClstempattrEntity codeClassifyTemplateAttrDO = new CodeClstempattrEntity();
-			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-			codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
-
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixvalue())){
-				prefix.add(codeClassifyTemplateAttrDO.getPrefixvalue());
-			}
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixvalue())){
-				suffix.add(codeClassifyTemplateAttrDO.getSuffixvalue());
-			}
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodedateformat())){
-				dateFormates.add(codeClassifyTemplateAttrDO.getCodedateformat());
-			}
-			//鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumstring())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumstring())){
-				throw new VciBaseException("{0}{1}灞炴�х殑鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-			}
-			//鍒嗙被娉ㄥ叆
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyinvokeattr())
-				&& !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyinvokelevel())
-				&& VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyinvokelevel()) < 0){
-				throw new VciBaseException("{0}{1}灞炴�х殑鏄垎绫绘敞鍏ワ紝浣嗘槸娉ㄥ叆灞傜骇涓嶈兘灏忎簬0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-			}
-
-			//鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferconfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferconfig())){
-				throw new VciBaseException("{0}{1}灞炴�х殑鍙傜収閰嶇疆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-			}
-			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodedateformat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodedateformat())){
-				throw new VciBaseException("{0}{1}灞炴�х殑鏃堕棿鏍煎紡涓嶇鍚堣姹�",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
-			}
-			//濡傛灉鏄粍鍚堣鍒欙紝閲岄潰浣跨敤鐨勫睘鎬т笉鑳界己澶憋紝涔熼兘寰楁樉绀�
-			String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
-			boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
-			if(isContainsDynamicParameter){
-				List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//鍖呭惈鐨勬墍鏈�${xxx}涓殑xxx
-				if(!CollectionUtils.isEmpty(userdAttrList)){
-					String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
-					if(StringUtils.isNotBlank(unExistAttr)){
-						throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑涓嶅瓨鍦�!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
-					}
-					//瑕佺湅鐪嬭〃鍗曟槸鍚︽樉绀�
-					String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
-						new CodeClstempattrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
-					if(StringUtils.isNotBlank(unFormDisplayAttr)){
-						throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑娌℃湁璁剧疆 琛ㄥ崟鏄剧ず ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
-					}
-				}
-			}
-
-			if(CLASSIFYTEMPLATEOID==null){
-				CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
-			}
-
-		}
-
-		//鎵ц鏁版嵁淇濆瓨鎿嶄綔
-//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-
-		//鍏堥兘鍒犱簡
-//		VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
-		Map<String,Object> condition = new HashMap<>();
-		condition.put("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDODelete = baseMapper.selectByMap(condition);
-
-		//oids
-		List<String> oids = new ArrayList<String>();
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
-			oids.add(codeClassifyTemplateAttrDO.getOid());
-		}
-//		BatchCBO batchCBOTemplateDelete = new BatchCBO();
-		if(!CollectionUtils.isEmpty(oids)){
-			baseMapper.deleteBatchIds(oids);
-		}
-
-		//鍐嶆柊澧�
-		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
-			this.saveBatch(codeClassifyTemplateAttrDOInsert);
-		}
-
-		//璋冪敤闃舵
-		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
-			 codeTempphaseService.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
-
-		}
-
-
-//		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-		//澶勭悊鍙緭鍙�夌殑瀛楃
-		if(!CollectionUtils.isEmpty(prefix)){
-			for (String s : prefix) {
-				DictBiz dictBiz = new DictBiz();
-				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
-				dictBiz.setDictKey(s);
-				dictBiz.setDictValue("prefix");
-				iDictBizClient.getCheck(dictBiz) ;
-			}
-//				.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
-		}
-		if(!CollectionUtils.isEmpty(suffix)){
-			for (String s : suffix) {
-				DictBiz dictBiz = new DictBiz();
-				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
-				dictBiz.setDictKey(s);
-				dictBiz.setDictValue("suffix");
-				iDictBizClient.getCheck(dictBiz) ;
-			}
-//			charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
-		}
-		if(!CollectionUtils.isEmpty(dateFormates)){
-			for (String s : dateFormates) {
-				DictBiz dictBiz = new DictBiz();
-				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
-				dictBiz.setDictKey(s);
-				dictBiz.setDictValue("dateFormates");
-				iDictBizClient.getCheck(dictBiz) ;
-			}
-//			charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
-		}
-
-//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
-//		boService.persistenceBatch(batchCBOTemplateDelete);//涓�璧锋墽琛屼繚瀛�
-		return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
-	}
-
-	public boolean checkKVArr(String kvString){
-		boolean isKV = true;
-		try {
-			JSONObject.parseArray(kvString, KeyValue.class);
-		}catch (Exception e){
-			isKV=false;
-		}
-		return isKV;
-	}
-	public boolean checkKVObj(String kvString){
-		boolean isKV = true;
-		try {
-			JSONObject.parseObject(kvString, UIFormReferVO.class);
-		}catch (Exception e){
-			isKV=false;
-		}
-		return isKV;
-	}
-
-	/**
-	 * 鏍¢獙鏃堕棿鏍煎紡
-	 * @param dateFormat 鏃堕棿鏍煎紡
-	 * @return true琛ㄧず鏍¢獙閫氳繃
-	 */
-	public boolean checkDateFormat(String dateFormat){
-		try{
-			VciDateUtil.date2Str(new Date(),dateFormat);
-			return  true;
-		}catch (Throwable e){
-			return false;
-		}
-	}
-
-
-	/**
-	 * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
-	 * @return 鎵ц缁撴灉
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-	 */
-	@Override
-	public R editSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�т富閿�");
-
-		//鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
-		if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumstring())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumstring())){
-			throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
-		}
-
-		//鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
-		if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
-			throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
-		}
-
-
-		//妫�鏌s
-		CodeClstempattrEntity codeClassifyTemplateAttrDOCopyFromDTO = new CodeClstempattrEntity();
-//		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
-//		boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
-
-		//妫�鏌s
-//		Map<String,Object> condition = new HashMap<>(2);
-//		condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
-//		condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
-		CodeClstempattrEntity detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
-		if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-		}
-
-		//灏咲TO杞崲涓篋O
-		CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
-		revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-		baseMapper.updateById(codeClassifyTemplateAttrDO);
-		return R.data(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
-	}
-
-	/**
-	 * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
-	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
-	 */
-	@Override
-	public R deleteCodeClassifyTemplateAttr(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�х殑涓婚敭");
-		CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
-		R baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
-		if(baseResult.isSuccess()) {
-		}else{
-			return baseResult;
-		}
-		//鎵ц鍒犻櫎鎿嶄綔
-		int deleteNum = baseMapper.deleteById(codeClassifyTemplateAttrDO.getOid());
-		return deleteNum>0?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
-	}
-
-	/**
-	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
-	 * @param codeClassifyTemplateAttrDTO 鏁版嵁浼犺緭瀵硅薄
-	 * @param codeClassifyTemplateAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
-	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
-	 */
-	private R checkIsCanDeleteForDO(CodeClstempattrDTO codeClassifyTemplateAttrDTO, CodeClstempattrEntity codeClassifyTemplateAttrDO) {
-//		boService.checkTs(codeClassifyTemplateAttrDO);
-//		Map<String,Object> condition = new HashMap<>(2);
-//		condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
-//		condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
-		CodeClstempattrEntity detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
-//		.selectOne(Condition.getQueryWrapper(condition,CodeClstempattrEntity.class));
-
-		if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-		}
-		if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
-			return R.success("鍙互鍒犻櫎锛�");
-		}else{
-			return R.fail(DATA_LINKED_NOT_DELETE);
-		}
-	}
-
-	/**
-	 * 鏍¢獙鏄惁琚紩鐢�
-	 * @param oid 涓婚敭
-	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
-	 */
-	private boolean checkIsLinked(String oid) throws VciBaseException{
-		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
-		return false;
-	}
-
-	/**
-	 * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oid 涓婚敭
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
-	 */
-	@Override
-	public  CodeClstempattrVO getObjectByOid(String oid) throws VciBaseException{
-		return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
-	}
-	/**
-	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
-	 * @param oid 涓婚敭
-	 * @return  鏁版嵁瀵硅薄
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
-	 */
-	private CodeClstempattrEntity selectByOid(String oid) throws VciBaseException{
-		VciBaseUtil.alertNotNull(oid,"涓婚敭");
-		CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(oid.trim());
-		if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
-			throw new VciBaseException(DATA_OID_NOT_EXIST);
-		}
-		return codeClassifyTemplateAttrDO;
-	}
-
-	/**
-	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
-	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
-	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
-	 */
-	@Override
-	public Collection<CodeClstempattrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) {
-		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
-		return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
-	}
-
-	/**
-	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
-	 * @param oidCollections 涓婚敭鐨勯泦鍚�
-	 * @return 鏁版嵁瀵硅薄鍒楄〃
-	 */
-	private List<CodeClstempattrEntity> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = new ArrayList<CodeClstempattrEntity>();
-		if(!CollectionUtils.isEmpty(oidCollections)){
-			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
-			for(Collection<String> oids: oidCollectionsList){
-				List<CodeClstempattrEntity> tempDOList = baseMapper.selectBatchIds(oids);
-				if(!CollectionUtils.isEmpty(tempDOList)){
-					codeClassifyTemplateAttrDOList.addAll(tempDOList);
-				}
-			}
-		}
-		return  codeClassifyTemplateAttrDOList;
-	}
-
-	/**
-	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
-	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
-	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
-	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
-	 */
-	@Override
-	public DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
-		if(conditionMap == null){
-			conditionMap = new HashMap<String, String>();
-		}
-		return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
-	}
-
-	/**
-	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
-	 * @param baseQueryObject
-	 * @return
-	 */
-	@Override
-	public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
-		if(baseQueryObject.getConditionMap() == null){
-			baseQueryObject.setConditionMap(new HashMap<>());
-		}
-		DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
-		//妯℃澘oid
-		String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
-		String name = baseQueryObject.getConditionMap().getOrDefault("name","");
-		String id = baseQueryObject.getConditionMap().getOrDefault("id","");
-
-		//娌℃湁oid涓嶆墽琛岄�昏緫
-		if(StringUtils.isBlank(templateAttrOid)){
-			dataGrid.setData(new ArrayList<>());
-			dataGrid.setTotal(0);
-			return dataGrid;
-		}
-
-		//鏌ヨ妯℃澘瀵硅薄
-		CodeClstemplateEntity codeClassifyTemplateDO = codeClstemplateMapper.selectById(templateAttrOid);
-
-		//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
-		List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());// this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
-//		codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
-//		BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
-		//鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
-		if(boAttrs == null){
-			boAttrs = new ArrayList<>();
-		}
-		if(!false){
-//			List<CodeOsbtmtypeattributeVO> finalBoAttrs = boAttrs;
-//			attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
-//				CodeOsbtmtypeattributeVO attributeVO = new CodeOsbtmtypeattributeVO();
-//				BeanUtil.convert(attr, attributeVO);
-//				if ("id".equalsIgnoreCase(attributeVO.getId())) {
-//					attributeVO.setName("浼佷笟缂栫爜");
-//				}
-//				if ("name".equalsIgnoreCase(attributeVO.getId())) {
-//					attributeVO.setName("闆嗗洟鐮�");
-//				}
-//				attributeVO.setAttrDataType(attr.getAttributeDataType());
-//				attributeVO.setAttributeLength(attr.getAttrLength());
-//				attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
-//				attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
-//				finalBoAttrs.add(attributeVO);
-//			});
-//			boAttrs = finalBoAttrs;
-			Object o = null;
-		}
-
-		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
-//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClstempattrMapper.selectByMap(condition);
-
-		List<String> btmOids = new ArrayList<String>();
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
-			btmOids.add(codeClassifyTemplateAttrDO.getId());
-		}
-
-		//杩囨护鎺夊凡缁忓瓨鍦ㄧ殑灞炴��
-		List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
-
-		for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
-			if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
-				//鐪嬬湅鏄笉鏄湁妯$硦鏌ヨ
-				boolean inSearch = true;
-				if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
-					inSearch = false;
-				}
-				if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
-					inSearch = false;
-				}
-				if(inSearch) {
-					boAttrss.add(osBtmTypeAttributeVO);
-				}
-			}
-		}
-		dataGrid.setData(boAttrss);
-		dataGrid.setTotal(boAttrss.size());
-		return dataGrid;
-	}
-
-
-
-	/**
-	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
-	 * @param baseQueryObject
-	 * @return
-	 */
-	@Override
-	public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
-		DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
-		//妯℃澘oid
-		String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
-
-		//娌℃湁oid涓嶆墽琛岄�昏緫
-		if(StringUtils.isBlank(templateAttrOid)){
-			dataGrid.setData(new ArrayList<>());
-			dataGrid.setTotal(0);
-			return dataGrid;
-		}
-
-		//鏌ヨ妯℃澘瀵硅薄
-		CodeClstemplateEntity codeClassifyTemplateDO = codeClstemplateMapper.selectById(templateAttrOid);
-
-		//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
-		List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
-//		codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
-//		BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
-		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
-		//鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
-		if(boAttrs == null){
-			boAttrs = new ArrayList<>();
-		}
-//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
-
-//		Map<String,Object> condition = new HashMap<>(1);
-//		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
-
-		QueryWrapper<CodeClstempattrEntity> wrapper=new QueryWrapper<>();
-		wrapper.eq("CLASSIFYTEMPLATEOID",templateAttrOid);
-
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClstempattrMapper.selectList(wrapper);
-		List<String> btmOids = new ArrayList<String>();
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
-			btmOids.add(codeClassifyTemplateAttrDO.getId());
-		}
-
-		//杩囨护鎺夐櫎浜嗚嚜韬殑鍒殑灞炴��
-		List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
-
-		for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
-			if(btmOids.contains(osBtmTypeAttributeVO.getId())){
-				boAttrss.add(osBtmTypeAttributeVO);
-			}
-		}
-		dataGrid.setData(boAttrss);
-		dataGrid.setTotal(boAttrss.size());
-		return dataGrid;
-	}
-
-
-	/**
-	 * 鍚屾鍒板叾浠栨ā鏉�
-	 * @param codeClassifyTemplateAttrDTO oid
-	 * @return
-	 */
-	@Override
-	public R copyto(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
-
-		String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
-
-		//鏌ヨ鍑烘潵瑕佸鍒剁殑瀵硅薄
-		CodeClstempattrEntity codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
-		String id = codeClassifyTemplateAttrDO.getId();//鑻辨枃鍚嶇О
-		String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifytemplateoid();
-
-		//鏌ヨ鍏朵粬id=id鐨勬ā鏉垮睘鎬�
-//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		queryWrapper.addQueryMap("id",id);
-//		Map<String,Object> condition = new HashMap<>(1);
-//		condition.put("id",id);
-		QueryWrapper<CodeClstempattrEntity> wrapper=new QueryWrapper<>();
-		wrapper.eq("id",id);
-		//鎵�鏈塱d=id鐨勬ā鏉垮睘鎬�
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList =codeClstempattrMapper.selectList(wrapper);
-
-		//瑕佸垹闄ょ殑妯℃澘灞炴�х殑oids
-		List<String> deleteOids = new ArrayList<String>();
-		//瑕佷慨鏀圭殑妯℃澘灞炴�у璞�
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClstempattrEntity>();
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
-			String oid = codeClassifyTemplateAttrDOi.getOid();
-			String templateOldOid = codeClassifyTemplateAttrDOi.getClassifytemplateoid();
-
-			CodeClstempattrEntity codeClassifyTemplateAttrDOInsert = new CodeClstempattrEntity();
-			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
-			codeClassifyTemplateAttrDOInsert.setOid(oid);
-			codeClassifyTemplateAttrDOInsert.setClassifytemplateoid(templateOldOid);
-			codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
-
-			deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
-		}
-
-//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-
-		//鍒犻櫎
-//		BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrDOissifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
-		codeClstempattrMapper.deleteBatchIds(deleteOids);
-		//鍐嶆柊澧�
-//		BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
-//		batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
-		this.saveBatch(codeClassifyTemplateAttrDOListInsert);
-
-//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
-//		boService.persistenceBatch(batchCBOTemplateAttrDelete);//涓�璧锋墽琛屼繚瀛�
-
-		return R.success("鎿嶄綔鎴愬姛锛�");
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
index 1271459..c2f8b5e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -20,37 +20,36 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.code.dto.CodeClstemplateDTO;
-import com.vci.ubcs.code.entity.*;
+import com.vci.ubcs.code.entity.CodeClstempattrEntity;
+import com.vci.ubcs.code.entity.CodeClstemplateEntity;
 import com.vci.ubcs.code.enumpack.CodeClassifyTemplateLC;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
-import com.vci.ubcs.code.mapper.*;
-import com.vci.ubcs.code.service.ICodeClassifyService;
+import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
+import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
 import com.vci.ubcs.code.service.ICodeClstemplateService;
 import com.vci.ubcs.code.vo.CodeClstempattrVO;
 import com.vci.ubcs.code.vo.CodeClstemplateVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+
+
 import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.*;
+import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED;
+import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 import static com.vci.ubcs.code.service.impl.CodeClassifyServiceImpl.PARENT_FIELD_NAME;
 
@@ -84,23 +83,6 @@
 	private CodeTempbuttonServiceImpl codeTempbuttonServiceImpl;
 	@Autowired(required = false)
 	private CodeClsflowtempServiceImpl codeClsflowtempServiceImpl;
-	@Autowired(required = false)
-	private CodeClsflowtempMapper codeClsflowtempMapper;
-	@Autowired(required = false)
-	private CodeTempphaseMapper codeTempphaseMapper;
-	@Autowired(required = false)
-	private CodeTempbuttonMapper codeTempbuttonMapper;
-	@Autowired(required = false)
-	private CodePhaseattrMapper codePhaseattrMapper;
-	@Autowired(required = false)
-	private ICodeClassifyService codeClassifyService;
-	@Autowired(required = false)
-	private CodeClstemplateMapper codeClstemplateMapper;
-	@Autowired(required = false)
-	private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
-
-
-
 	@Override
 	public IPage<CodeClstemplateVO> selectPlCodeClstemplatePage(IPage<CodeClstemplateVO> page, CodeClstemplateVO plCodeClstemplate) {
 		return page.setRecords(baseMapper.selectPlCodeClstemplatePage(page, plCodeClstemplate));
@@ -137,12 +119,8 @@
 //		VciParentQueryOption parentQueryOption = new VciParentQueryOption();
 //		parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
 //		queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-//		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
-//		codeClstemplateEntity.set
-		return baseMapper.selectCodeClassifyTemplateDOByTree(
-			treeQueryObject.getConditionMap().get("codeclassifyoid"),
-			treeQueryObject.getConditionMap().get("lcStatus"));
-//		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
+		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
+		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
 //		return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
 	}
 
@@ -232,20 +210,19 @@
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClstemplateDTO,codeClassifyTemplateDOCopyFromDTO);
 
 		//妫�鏌s
-//		Map<String,Object> condition = new HashMap<>(2);
-//		condition.put("oid",codeClstemplateDTO.getOid());
-//		condition.put("ts",codeClstemplateDTO.getTs());
+		Map<String,Object> condition = new HashMap<>(2);
+		condition.put("oid",codeClstemplateDTO.getOid());
+		condition.put("ts",codeClstemplateDTO.getTs());
 		CodeClstemplateEntity detail = baseMapper
-			.selectById(codeClstemplateDTO.getOid());
-
-		if(!detail.getTs().toString().equals(codeClstemplateDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+			.selectOne(Condition.getQueryWrapper(condition,CodeClstemplateEntity.class));
+		if(detail == null){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
 			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
 		}
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClstemplateEntity.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
 		}
-		return R.success(String.valueOf(checkHasChild(codeClstemplateEntity.getOid())));
+		return R.status(checkHasChild(codeClstemplateEntity.getOid()));
 	}
 
 	/**
@@ -296,7 +273,6 @@
 	 * @param codeClstemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-	@Transactional
 	@Override
 	public R deleteCodeClassifyTemplate(CodeClstemplateDTO codeClstemplateDTO) {
 		checkIsCanDelete(codeClstemplateDTO);
@@ -386,8 +362,8 @@
 	 * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
 	 * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
 	 * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
-	@Transactional
 	@Override
 	public List<Tree> referTree(TreeQueryObject treeQueryObject) {
 		if(treeQueryObject == null){
@@ -442,7 +418,6 @@
 	 * @param lcStatus
 	 * @return
 	 */
-	@Transactional
 	@Override
 	public R updateLcStatus( String oid, String lcStatus){
 		CodeClstemplateEntity codeClassifyTemplateDO = baseMapper.selectById(oid);
@@ -465,7 +440,6 @@
 	 * 鍗囩増
 	 * @param codeClassifyDTO
 	 */
-	@Transactional
 	@Override
 	public R Upgrade(CodeClstemplateDTO codeClassifyDTO) {
 
@@ -480,95 +454,93 @@
 		//闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
 //		ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
 		CodeClstemplateEntity codeCls_template = baseMapper.selectById(templateOldOid);
-		CodeClstemplateEntity codeCls_template_insert = new CodeClstemplateEntity();
+		CodeClstemplateEntity codeCls_template_insert = null;
 //			ClientBusinessObject clientBusinessObject_template_insert = null;
 //		try {
-//			clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
-			codeCls_template_insert.setOid(VciBaseUtil.getPk());
-			codeCls_template_insert.setRevisionOid(VciBaseUtil.getPk());
-			codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
-			codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
-			codeCls_template_insert.setLastR(String.valueOf(1));
-			codeCls_template_insert.setFirstR(String.valueOf(0));
-			codeCls_template_insert.setFirstV(String.valueOf(1));
-			codeCls_template_insert.setLastV(String.valueOf(1));
-			codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
-			codeCls_template_insert.setCreateTime(new Date());
-			codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
-			codeCls_template_insert.setLastModifyTime(new Date());
-			codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
-			codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
-			Map rvObj = baseMapper.getNextRevision(codeCls_template.getNameOid());
-			codeCls_template_insert.setRevisionSeq(Integer.parseInt(rvObj.get("REVISIONSEQ").toString()));
-			codeCls_template_insert.setRevisionValue(rvObj.get("REVISIONVAL").toString());
+////			clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
+////			codeCls_template_insert.setOid((new ObjectUtility()).getNewObjectID36());
+////			toBo.setRevisionid((new ObjectUtility()).getNewObjectID36());
+//			codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
+//			codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
+////			codeCls_template_insert.setIsLast(1);
+////			codeCls_template_insert.setIsFirstr(0);
+////			codeCls_template_insert.setIsFirstv(1);
+////			codeCls_template_insert.setIsLastV(1);
+//			codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
+//			codeCls_template_insert.setCreateTime(new Date());
+//			codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
+//			codeCls_template_insert.setLastModifyTime(new Date());
+//			codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
+//			codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
+//			RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
+//			codeCls_template_insert.setRevisionSeq(rvObj.getRevisionSeq());
+//			codeCls_template_insert.setRevisionValue(rvObj.getRevisionVal());
 //			VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
-			codeCls_template_insert.setVersionSeq(Integer.parseInt(rvObj.get("VERSIONSEQ").toString()));
-			codeCls_template_insert.setVersionValue(rvObj.get("VERSIONVAL").toString());
-			codeCls_template_insert.setLctid(codeCls_template.getLctid());
-			codeCls_template_insert.setLcStatus("Editing");
-			codeCls_template_insert.setId(codeCls_template.getId());
-			codeCls_template_insert.setName(codeCls_template.getName());
-			codeCls_template_insert.setDescription(codeCls_template.getDescription());
-			codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
-//			codeCls_template_insert.setCheckinBy(userName);
-			codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
+//			codeCls_template_insert.setVersionSeq(versionObj.getVersionSeq());
+//			codeCls_template_insert.setVersionValue(versionObj.getVersionVal());
+//			codeCls_template_insert.setLctId(codeCls_template.getLctId());
+//			codeCls_template_insert.setLcStatus(this.getLcFirstStatus(item.lifeCycle));
+//			codeCls_template_insert.setId(codeCls_template.getId());
+//			codeCls_template_insert.setName(codeCls_template.getName());
+//			codeCls_template_insert.setDescription(codeCls_template.getDescription());
+//			codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
+////			codeCls_template_insert.setCheckinBy(userName);
+//			codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
 //		}catch (VCIError e){
 //			e.printStackTrace();
 //			logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
 //			return BaseResult.error("鍗囩増鍑洪敊");
 //		}
-		int insertCount = baseMapper.insert(codeCls_template_insert);
-//		CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
+//
+//
+//		CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
 //		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
 //		WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-		//modify by weidy@2022-2-27
-		//鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
-		//涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
+//		//modify by weidy@2022-2-27
+//		//鍗囩増鍚庝笉鑳戒娇鐢╥nsert鏂规硶锛屽洜涓洪偅涓案杩滄槸鏂板涓�鏉℃暟鎹紝
+//		//涓婃柟鍏堜粠dto杞粰do锛岀劧鍚庢妸鍗囩増鐨勫垵濮嬪寲鐨勫睘鎬ф嫹璐濈粰do锛屾渶鍚庡啀浠巇o鎷疯礉鍒癱bo涓�
 //		WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
-		//鍗囩増杩囧悗鐨勬ā鏉縪id
-		String templateNewOid = codeCls_template_insert.getOid();
-
-		//闇�瑕佸鍒剁殑妯℃澘灞炴��
-		//鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
+//		//鍗囩増杩囧悗鐨勬ā鏉縪id
+//		String templateNewOid = codeClassifyTemplateDO.getOid();
+//
+//		//闇�瑕佸鍒剁殑妯℃澘灞炴��
+//		//鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
 //		VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
 //		codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOldOid);
-		List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
 //		List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
+//		for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
 //			String attrOid = VciBaseUtil.getPk();
-			codeClassifyTemplateAttrDO.setOid(null);
-			codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
-			codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
-		}
-
-		//澶嶅埗妯℃澘娴佺▼
-		List<CodeClsflowtempEntity>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
-		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
-		Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
-
-		List<CodeTempphaseEntity> codeClassifyPhaseDOList = (ArrayList<CodeTempphaseEntity>)phase_attrMap.get("phase");//妯℃澘闃舵
-		List<CodePhaseattrEntity> codePhaseAttrDOList = (ArrayList<CodePhaseattrEntity>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
-
-		//澶嶅埗妯℃澘鎸夐挳
-		List<CodeTempbuttonEntity> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
-
-		//涓�璧蜂繚瀛樻暟鎹�
+//			codeClassifyTemplateAttrDO.setOid(attrOid);
+//			codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
+//		}
+//
+//		//澶嶅埗妯℃澘娴佺▼
+//		List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
+//
+//		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+//		Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
+//
+//		List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//妯℃澘闃舵
+//		List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+//
+//		//澶嶅埗妯℃澘鎸夐挳
+//		List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
+//
+//		//涓�璧蜂繚瀛樻暟鎹�
 //		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-		//淇濆瓨妯℃澘
+//		//淇濆瓨妯℃澘
 //		BatchCBO batchCBOTemplate = new BatchCBO();
-		//batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
-		//batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
-		//浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
+//		//batchCBO淇濆瓨鐨勬椂鍊欐病鏈夎兘澶熻嚜鍔╱pdate婧愭暟鎹殑isLastR
+//		//batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
+//		//浣跨敤saveRevisionBuisnessObject鍙互瑙e喅杩欎釜闂锛岃繖閲屽厛鏆傛椂鎵ц涓ゆ淇濆瓨
 //		try {
 //			clientBusinessObjectOperation.saveRevisionBuinessObject(clientBusinessObject_template_insert);
 //		} catch (VCIError vciError) {
 //			throw new VciBaseException("鍗囩増淇濆瓨鍑洪敊浜�",new String[0],vciError);
 //		}
-		// end --modify by lihang @20220408
-		//codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
-		//淇濆瓨妯℃澘灞炴��
+//		// end --modify by lihang @20220408
+//		//codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
+//		//淇濆瓨妯℃澘灞炴��
 //		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)){
 //			BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
 //			batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
@@ -600,432 +572,8 @@
 //		WebUtil.setPersistence(true);//鎵ц淇濆瓨
 //
 //		boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
-
+//
 //		return BaseResult.success("鍗囩増鎴愬姛锛�");
 		return R.success("鍗囩増鎴愬姛锛�");
-	}
-
-	@Override
-	@Transactional
-	public R copyTemplate(CodeClstemplateDTO codeClassifyDTO) {
-		//鏃х殑妯℃澘oid
-		String oldOid = codeClassifyDTO.getOid();
-		//鏂扮殑妯℃澘oid
-		String newOid = VciBaseUtil.getPk();
-		//鍒嗙被oid,澶嶅埗杩囨潵鐨勬柊鐨勫垎绫籵id
-		String codeClassifyOid = codeClassifyDTO.getCodeClassifyOid();
-
-		//澶嶅埗妯℃澘
-		CodeClstemplateEntity codeClassifyTemplateDO_old = baseMapper.selectById(oldOid);//鏃фā鏉�
-
-		//楠岃瘉锛屼笟鍔$被鍨嬫槸涓嶆槸涓�鑷�
-		CodeClassify codeClassifyDO_old = codeClassifyService.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
-		if(codeClassifyDO_old==null){
-			return R.fail("澶嶅埗鐨勬ā鏉挎墍灞炲垎绫讳互鍙婁笂绾ф病鏈変笟鍔$被鍨嬶紝璇烽噸鏂伴�夋嫨!");
-		}
-
-		//鎵惧綋鍓嶅垎绫讳笅鐨勪笟鍔$被鍨�
-		CodeClassify codeClassifyDO_new = codeClassifyService.selectBtmOrParentBtm(codeClassifyOid);
-		if(codeClassifyDO_new==null){
-			return R.fail("褰撳墠鍒嗙被娌℃湁涓氬姟绫诲瀷锛岃閲嶆柊閫夋嫨!");
-		}
-
-		if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
-			return R.fail("閫夋嫨鐨勫垎绫诲拰褰撳墠鍒嗙被涓氬姟绫诲瀷涓嶄竴鑷达紝璇烽噸鏂伴�夋嫨!");
-		}
-
-		codeClassifyTemplateDO_old.setId(codeClassifyDTO.getId());//鑻辨枃鍚嶇О
-		codeClassifyTemplateDO_old.setName(codeClassifyDTO.getName());//涓枃鍚嶇О
-		codeClassifyTemplateDO_old.setDescription(codeClassifyDTO.getDescription());//鎻忚堪
-		codeClassifyTemplateDO_old.setCodeClassifyOid(codeClassifyOid);//鍒嗙被oid
-		codeClassifyTemplateDO_old.setOid(newOid);
-		List<CodeClstemplateEntity> codeClassifyTemplateDOList = new ArrayList<CodeClstemplateEntity>();
-		codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
-
-		//澶嶅埗妯℃澘灞炴��
-		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
-
-		//澶嶅埗妯℃澘娴佺▼
-		List<CodeClsflowtempEntity> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
-
-		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
-		Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
-
-		List<CodeTempphaseEntity> codeClassifyPhaseDOList = (ArrayList<CodeTempphaseEntity>)phase_attrMap.get("phase");//妯℃澘闃舵
-		List<CodePhaseattrEntity> codePhaseAttrDOList = (ArrayList<CodePhaseattrEntity>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
-
-		//澶嶅埗妯℃澘鎸夐挳
-		List<CodeTempbuttonEntity> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
-
-//		baseMapper.insert(codeClassifyTemplateDOList);
-		this.saveBatch(codeClassifyTemplateDOList);
-		codeTempbuttonServiceImpl.saveBatch(codeClassifyTemplateButtonDOList);
-		codeClsflowtempServiceImpl.saveBatch(codeClassifyProcessTempDOList);
-		codeClstempattrService.saveBatch(codeClassifyTemplateAttrDOList);
-		codeTempphaseServiceImpl.saveBatch(codeClassifyPhaseDOList);
-		codePhaseattrServiceImpl.saveBatch(codePhaseAttrDOList);
-		//涓�璧蜂繚瀛樻暟鎹�
-//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
-//		//淇濆瓨妯℃澘
-//		BatchCBO batchCBOTemplate = codeClassifyTemplateMapper.batchInsert(codeClassifyTemplateDOList);
-//		//淇濆瓨妯℃澘灞炴��
-//		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
-//			BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
-//			batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
-//		}
-//
-//		//淇濆瓨妯℃澘娴佺▼
-//		if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
-//			BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
-//			batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
-//		}
-//
-//		//妯℃澘闃舵
-//		if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
-//			BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
-//			batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
-//		}
-//
-//		//妯℃澘闃舵灞炴��
-//		if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
-//			BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
-//			batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
-//		}
-//
-//		//妯℃澘鎸夐挳
-//		if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
-//			BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
-//			batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
-//		}
-//
-//
-//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
-//
-//		boService.persistenceBatch(batchCBOTemplate);//涓�璧锋墽琛屼繚瀛�
-		return R.success("澶嶅埗鎴愬姛锛�");
-	}
-
-
-	private HashMap<String,Object> getVersionValue(int verRuleName) {
-		HashMap<String,Object> obj = new HashMap<>(2);
-		obj.put("VersionSeq",1);
-		if (verRuleName == 0) {
-			obj.put("VersionVal","1");
-		} else if (verRuleName == 1) {
-			obj.put("VersionVal","a");
-		} else if (verRuleName == 2) {
-			obj.put("VersionVal","0");
-		}
-
-		return obj;
-	}
-
-	/**
-	 * 澶嶅埗妯℃澘娴佺▼
-	 */
-	public List<CodeClsflowtempEntity> copyTemplateProcess(String templateOldOid,String templateNewOid){
-//		VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
-//		processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOldOid);
-		List<CodeClsflowtempEntity> codeClsflowtempEntities = codeClsflowtempMapper.selectByMap(condition);
-//		List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
-		for (CodeClsflowtempEntity codeClassifyProcessTempDO:codeClsflowtempEntities){
-//			String newOid = VciBaseUtil.getPk();
-			codeClassifyProcessTempDO.setOid(null);
-			//codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
-			codeClassifyProcessTempDO.setClassifytemplateoid(templateNewOid);
-//			codeClsflowtempMapper.insert(codeClassifyProcessTempDO);
-			//modify by lihang - @20220406 璁剧疆妯℃澘涓婚敭浣嶇疆鍑洪敊锛屽鑷村崌鐗堢殑妯℃澘涓殑娴佺▼鏄┖鐨勩��
-		}
-		return codeClsflowtempEntities;
-	}
-
-
-	/**
-	 * 澶嶅埗妯℃澘闃舵锛屾ā鏉垮睘鎬�
-	 * @param templateOldOid
-	 * @param templateNewOid
-	 * @return map phase:(List<CodeTemplatePhaseDO>) phaseAttr:(List<CodePhaseAttrDO>)
-	 */
-	public Map copyTemplatePhase_attr(String templateOldOid,String templateNewOid){
-		//妯℃澘闃舵
-//		VciQueryWrapperForDO phaseWrapper = new VciQueryWrapperForDO(CodeTemplatePhaseDO.class);
-//		phaseWrapper.addQueryMap("codeClassifyTemplateOid",templateOldOid);
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("codeclassifyTemplateOid",templateOldOid);
-		List<CodeTempphaseEntity> codeTempphaseEntities = codeTempphaseMapper.selectByMap(condition);
-//		List<CodeTemplatePhaseDO>  codeClassifyPhaseDOList = codeTemplatePhaseDaoI.selectByWrapper(phaseWrapper);//瑕佷繚瀛樼殑鏂扮殑妯℃澘娴佺▼
-		Map<String,String> phaseKeyMap = new HashMap<String,String>();//闇�瑕佸鍒剁殑妯℃澘闃舵灞炴��,key:value,妯℃澘闃舵鑰乷id:妯℃澘灞炴�ф柊oid
-		List<String> phaseOidList = new ArrayList<String>();
-		for (CodeTempphaseEntity codeTemplatePhaseDO:codeTempphaseEntities){
-			String oldoid = codeTemplatePhaseDO.getOid();
-			String newOid = VciBaseUtil.getPk();
-			codeTemplatePhaseDO.setOid(newOid);
-			codeTemplatePhaseDO.setCodeclassifytemplateoid(templateNewOid);
-			phaseKeyMap.put(oldoid,newOid);
-			phaseOidList.add(oldoid);
-		}
-
-		//妯℃澘闃舵鐨勫睘鎬�
-		List<CodePhaseattrEntity> codePhaseAttrDOList = new ArrayList<CodePhaseattrEntity>();
-
-		if(!CollectionUtils.isEmpty(phaseOidList)){//size()==0涓嬭竟鏂规硶浼氭姤閿�
-//			Map<String,String> conditionMap =  new HashMap<>();
-//			conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])) + ")");
-//			codePhaseAttrDOList = codePhaseAttrDaoI.selectByCondition(conditionMap,new PageHelper(-1));
-			codePhaseAttrDOList = codePhaseattrMapper.selectByPhaseaIds(VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])));
-		}
-		for (CodePhaseattrEntity codePhaseAttrDO:codePhaseAttrDOList){
-			String oldPhaseoid = codePhaseAttrDO.getCodephaseoid();
-//			String newOid = VciBaseUtil.getPk();
-			codePhaseAttrDO.setOid(null);
-			codePhaseAttrDO.setCodephaseoid(phaseKeyMap.get(oldPhaseoid));
-//			codePhaseattrMapper.insert(codePhaseAttrDO);
-		}
-		Map phaseMap = new HashMap();
-		phaseMap.put("phase",codeTempphaseEntities);
-		phaseMap.put("phaseAttr",codePhaseAttrDOList);
-		return phaseMap;
-	}
-
-	/**
-	 * 澶嶅埗妯℃澘鎸夐挳
-	 */
-	public List<CodeTempbuttonEntity> copyTemplateButton(String templateOldOid,String templateNewOid){
-
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOldOid);
-//		VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
-//		buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
-		List<CodeTempbuttonEntity> codeTempbuttonEntities = codeTempbuttonMapper.selectByMap(condition);
-//		List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
-		for (CodeTempbuttonEntity codeClassifyTemplateButtonDO:codeTempbuttonEntities){
-//			String newOid = VciBaseUtil.getPk();
-			codeClassifyTemplateButtonDO.setOid(null);
-			codeClassifyTemplateButtonDO.setClassifytemplateoid(templateNewOid);
-		}
-		return codeTempbuttonEntities;
-	}
-
-
-	/**
-	 * 澶嶅埗妯℃澘灞炴��
-	 */
-	public List<CodeClstempattrEntity> copyTemplateAttr(String templateOldOid,String templateNewOid){
-
-//		VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
-//		codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
-
-		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOldOid);
-
-//		List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
-		List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
-
-		for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
-//			String attrOid = VciBaseUtil.getPk();
-			codeClassifyTemplateAttrDO.setOid(null);
-			codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
-//			codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
-		}
-		return codeClstempattrEntities;
-	}
-
-
-	/**
-	 * 鍒嗙被妯℃澘鍒楄〃
-	 *
-	 * @param plCodeClstemplate 鏌ヨ鏉′欢
-	 * @param query   鍒嗛〉瀵硅薄
-	 * @return 鏄剧ず瀵硅薄
-	 * @throws VciBaseException 鏌ヨ鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-	 */
-	@Override
-	public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query) throws VciBaseException {
-		DataGrid<CodeClstemplateVO> dataGrid=new DataGrid<CodeClstemplateVO>();
-		//娌℃湁浼犲垎绫籭d锛屼笉鎵ц鏌ヨ閫昏緫锛岀洿鎺ヨ繑鍥�
-//		if(conditionMap.size()==0){
-//			dataGrid.setData(new ArrayList<>());
-//			dataGrid.setTotal(0);
-//			return dataGrid;
-//		}
-//		if (pageHelper == null) {
-//			pageHelper = new PageHelper(-1);
-//		}
-//		pageHelper.addDefaultDesc("revisionSeq");
-
-
-
-		List<CodeClstemplateVO> doList = codeClstemplateMapper.selectPlCodeClstemplatePage(Condition.getPage(query), plCodeClstemplate);
-		if (!CollectionUtils.isEmpty(doList)) {
-//			QueryWrapper<CodeClstemplateVO> codeClstemplateVOQueryWrapper = new QueryWrapper<>();
-//			codeClstemplateVOQueryWrapper.allEq(plCodeClstemplate);
-			List<CodeClstemplateEntity> codeClstemplateEntity = new ArrayList<>();
-			BeanUtils.copyProperties(doList,codeClstemplateEntity);
-			dataGrid.setData(codeClassifyTemplateDO2VOs(codeClstemplateEntity));
-			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClstemplateMapper.selectCount(Condition.getQueryWrapper(plCodeClstemplate)))));
-		}
-		return dataGrid;
-	}
-
-
-	/**
-	 * 澧炲姞鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-	 */
-	@Override
-	public R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-		VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
-		//灏咲TO杞崲涓篋O
-		CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
-		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-
-		//鏌ヨ鍒嗙被浠ュ強涓婄骇鍒嗙被鐨勪笟鍔$被鍨媌tmtypeid銆乥tmtypename
-		List<CodeClassify> codeClassifyDOList = codeClassifyService.selectAllLevelParents(codeClassifyTemplateDTO.getCodeClassifyOid());
-
-		//鎵�鏈夊垎绫婚兘娌℃湁涓氬姟绫诲瀷锛岃繑鍥炴彁绀�
-		if(codeClassifyDOList.size()==0){
-			return R.fail("娣诲姞妯℃澘娣诲姞澶辫触,鍒嗙被鍜屼笂绾у垎绫婚兘娌℃湁鍏宠仈涓氬姟绫诲瀷锛�");
-		}
-
-		//璁剧疆btmtypeid鍜宯ame
-		CodeClassify codeClassifyDO = codeClassifyDOList.get(0);
-		codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
-		codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
-		codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
-		codeClassifyTemplateDO.setTs(new Date());
-		codeClassifyTemplateDO.setOwner(AuthUtil.getUser().getUserName());
-		codeClassifyTemplateDO.setLctid("codeClsTempLc");
-		codeClassifyTemplateDO.setVersionValue("1");
-		codeClassifyTemplateDO.setVersionSeq(1);
-		codeClassifyTemplateDO.setRevisionValue("1");
-		codeClassifyTemplateDO.setRevisionSeq(1);
-		codeClassifyTemplateDO.setVersionRule("0");
-		codeClassifyTemplateDO.setRevisionRule("numberversionrule");
-		codeClassifyTemplateDO.setLastModifyTime(new Date());
-		codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
-		codeClassifyTemplateDO.setCreator(AuthUtil.getUser().getUserName());
-		codeClassifyTemplateDO.setCreateTime(new Date());
-		codeClassifyTemplateDO.setLastV("1");
-		codeClassifyTemplateDO.setLastR("1");
-		codeClassifyTemplateDO.setFirstV("1");
-		codeClassifyTemplateDO.setFirstR("1");
-		codeClassifyTemplateDO.setBtmname("codeclstemplate");
-
-		baseMapper.insert(codeClassifyTemplateDO);
-		//榛樿娣诲姞妯℃澘灞炴��
-//        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
-
-//        CodeClassifyTemplateAttrDO codeAttr = new CodeClassifyTemplateAttrDO();
-//        codeAttr.setId("id");
-//        codeAttr.setName("浼佷笟缂栫爜");
-//        codeAttr.setAttributeDataType("VTString");
-//        codeAttr.setAttrTableWidth(150);
-//        codeAttr.setOrderNum(1);
-//        codeAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        codeAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        codeAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(codeAttr);
-//
-//
-//        CodeClassifyTemplateAttrDO groupAttr = new CodeClassifyTemplateAttrDO();
-//        groupAttr.setId("name");
-//        groupAttr.setName("闆嗗洟鐮�");
-//        groupAttr.setAttributeDataType("VTString");
-//        groupAttr.setAttrTableWidth(150);
-//        groupAttr.setOrderNum(2);
-//        groupAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        groupAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        groupAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(groupAttr);
-//
-//        CodeClassifyTemplateAttrDO descAttr = new CodeClassifyTemplateAttrDO();
-//        descAttr.setId("description");
-//        descAttr.setName("鎻忚堪");
-//        descAttr.setAttrTableWidth(150);
-//        descAttr.setAttributeDataType("VTString");
-//        descAttr.setOrderNum(3);
-//        descAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        descAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        descAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(descAttr);
-//
-//        CodeClassifyTemplateAttrDO statusAttr = new CodeClassifyTemplateAttrDO();
-//        statusAttr.setId("lcstatus");
-//        statusAttr.setName("鐘舵��");
-//        statusAttr.setAttrTableWidth(70);
-//        statusAttr.setOrderNum(4);
-//        statusAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        statusAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        statusAttr.setAttributeDataType("VTString");
-//        statusAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(statusAttr);
-//
-//
-//        CodeClassifyTemplateAttrDO secAttr = new CodeClassifyTemplateAttrDO();
-//        secAttr.setId("secretgrade");
-//        secAttr.setName("瀵嗙骇");
-//        secAttr.setAttrTableWidth(70);
-//        secAttr.setAttributeDataType(VciFieldTypeEnum.VTInteger.name());
-//        secAttr.setEnumId("Enumsecretgrade");
-//        secAttr.setEnumName("瀵嗙骇");
-//        secAttr.setOrderNum(4);
-//        secAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
-//        secAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
-//        secAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
-//        attrDOList.add(secAttr);
-
-		return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
-	}
-
-	/**
-	 * 淇敼鍒嗙被妯℃澘瀵硅薄
-	 * @param codeClassifyTemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄
-	 * @return 鎵ц缁撴灉
-	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
-	 */
-	@Override
-	public R editSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
-		VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateDTO.getOid(),"鍒嗙被妯℃澘瀵硅薄涓婚敭");
-		//妫�鏌s
-		CodeClstemplateEntity codeClassifyTemplateDOCopyFromDTO = new CodeClstemplateEntity();
-		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
-		CodeClstemplateEntity codeClassifyTemplateDO = null;
-		if(codeClassifyTemplateDOCopyFromDTO.getOid() == null){
-			baseMapper.insert(codeClassifyTemplateDOCopyFromDTO);
-			return R.data(codeClassifyTemplateDOCopyFromDTO);
-		}else{
-//			Map<String,Object> condition = new HashMap<>(2);
-//			condition.put("oid",codeClassifyTemplateDOCopyFromDTO.getOid());
-//			condition.put("ts",codeClassifyTemplateDOCopyFromDTO.getTs());
-			CodeClstemplateEntity detail = baseMapper
-				.selectById(codeClassifyTemplateDOCopyFromDTO.getOid());
-	//		boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOListemplateDOCopyFromDTO);
-			if(detail.getTs().compareTo(codeClassifyTemplateDOCopyFromDTO.getTs()) != 0){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
-				return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
-			}
-
-			//灏咲TO杞崲涓篋O
-			codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
-			String lcstatus = codeClassifyTemplateDO.getLcStatus();
-			String versionvalue = codeClassifyTemplateDO.getVersionValue();
-
-			//鍙湁缂栬緫涓墠鑳戒慨鏀�
-			if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
-				return R.fail("鍙湁缂栬緫涓殑锛屾ā鏉挎墠鑳戒慨鏀癸紒");
-			}
-			revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
-			//涓嶄慨鏀圭増鏈彿鍜岀姸鎬�
-			codeClassifyTemplateDO.setLcStatus(lcstatus);
-			codeClassifyTemplateDO.setVersionValue(versionvalue);
-			codeClassifyTemplateDO.setTs(new Date());
-			codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
-			codeClassifyTemplateDO.setLastModifyTime(new Date());
-			baseMapper.updateById(codeClassifyTemplateDO);
-		}
-		return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
index 5cd0156..07bd3f5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
@@ -18,14 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodeClstempattrEntity;
 import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import com.vci.ubcs.code.entity.CodeTempphaseEntity;
 import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
 import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
 import com.vci.ubcs.code.service.ICodeTempphaseService;
 import com.vci.ubcs.code.vo.CodeTempphaseVO;
-import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -47,8 +45,6 @@
 
 	@Autowired(required = false)
 	private CodePhaseattrMapper codePhaseattrMapper;
-	@Autowired(required = false)
-	private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
 
 	@Override
 	public IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase) {
@@ -65,7 +61,7 @@
 	public int codeTemplateDeleteTrigger(String templateOid) {
 		int updateCount = 0;
 		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("codeclassifytemplateoid",templateOid);
+		condition.put("classifyTemplateOid",templateOid);
 		List<CodeTempphaseEntity> codeTempphaseEntities = baseMapper.selectByMap(condition);
 		if(!CollectionUtils.isEmpty(codeTempphaseEntities)) {
 			updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTempphaseEntity::getOid).collect(Collectors.toList()));
@@ -77,36 +73,6 @@
 			}
 		}
 		return updateCount;
-	}
-	/**
-	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
-	 * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
-	 * @return 鍙楀奖鍝嶇殑鏁版嵁
-	 */
-	@Override
-	public List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> attrDOList){
-		//灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
-//		BatchCBO batchCBO = new BatchCBO();
-		List<CodePhaseattrEntity> phaseAttrDOS =codePhaseattrMapper.listLinkAttrDOByTemplateAttrDOS(VciBaseUtil.toInSql(attrDOList.stream()
-			.map(CodeClstempattrEntity::getId).collect(Collectors.toList()).toArray(new String[0])),attrDOList.get(0).getClassifytemplateoid());
-		if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-			//璇存槑鏈夊睘鎬�,鎴戜滑鍘绘浛鎹竴涓�
-			Map<String, CodeClstempattrEntity> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
-			phaseAttrDOS.stream().forEach(phaseAttrDO->{
-				if(attrDOMap.containsKey(phaseAttrDO.getId())){
-					CodeClstempattrEntity attrDO = attrDOMap.get(phaseAttrDO.getId());
-					phaseAttrDO.setId(attrDO.getId());
-					phaseAttrDO.setName(attrDO.getName());
-					phaseAttrDO.setAttributegroup(attrDO.getAttributegroup());
-				}
-			});
-//			codePhaseattrMapper.
-			codePhaseattrServiceImpl.saveBatch(phaseAttrDOS);
-//			BatchCBO updateCBO =
-//			codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
-//			batchCBO.copyFromOther(updateCBO);
-		}
-		return attrDOList;
 	}
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
index b82e17f..08d3bb8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
@@ -18,9 +18,14 @@
 
 import com.vci.ubcs.code.entity.CodeButtonEntity;
 import com.vci.ubcs.code.vo.CodeButtonVO;
-import com.vci.ubcs.omd.cache.DictCache;
+import com.vci.ubcs.system.cache.DictBizCache;
+import com.vci.ubcs.system.cache.DictCache;
+import com.vci.ubcs.system.enums.DictEnum;
 import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.boot.autoconfigure.security.SecurityProperties;
 
 import java.util.List;
 import java.util.Objects;
@@ -40,8 +45,8 @@
 	@Override
 	public CodeButtonVO entityVO(CodeButtonEntity codebutton) {
 		CodeButtonVO codebuttonVO = Objects.requireNonNull(BeanUtil.copy(codebutton, CodeButtonVO.class));
-		codebuttonVO.setUsedpositiontypeName(DictCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
-		codebuttonVO.setLcstatusName(DictCache.getValue("codeLcstatus", codebutton.getLcstatus()));
+		codebuttonVO.setUsedpositiontypeName(DictBizCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
+		codebuttonVO.setLcstatusName(DictBizCache.getValue("codeLcstatus", codebutton.getLcstatus()));
 		return codebuttonVO;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..29c4455
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.vci.ubcs.starter.revision.service.RevisionModelUtil
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml b/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
index 85cf200..b19d3f3 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
@@ -25,6 +25,11 @@
         </dependency>
         <dependency>
             <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-omd-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
             <artifactId>ubcs-util-api</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
index b06a46d..2683a9a 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -3,17 +3,22 @@
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.vci.ubcs.ddl.bo.DdlTableBO;
 import com.vci.ubcs.ddl.service.IDdlService;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.BtmTypeVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Description: 鏁版嵁搴撴搷浣滄帶鍒跺櫒
@@ -33,14 +38,14 @@
 
 	/**
 	 * 鏂板鎴栦慨鏀规暟鎹簱琛�
-	 * @param dto 涓氬姟绫诲瀷
+	 * @param ddlDTO 涓氬姟绫诲瀷+閾炬帴绫诲瀷
 	 * @return 鎵ц缁撴灉
 	 */
-	@PostMapping("/submitBtmType")
+	@PostMapping("/submit")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆涓氬姟绫诲瀷浼犺緭瀵硅薄")
-	public R submitBtmType(@Valid @RequestBody BtmTypeDTO dto) {
-		return ddlService.submitBtmType(dto);
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "涓氬姟绫诲瀷閾炬帴绫诲瀷浼犺緭瀵硅薄")
+	public R submitBtmType(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO) {
+		return ddlService.submit(ddlDTO);
 	}
 
 	/**
@@ -65,4 +70,17 @@
 	public R<List<DdlTableBO>> getAllTableInfo(){
 		return R.data(ddlService.getAllTableInfo());
 	}
+
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 * @param ddlDTO 鍖呭惈涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬬殑鍖呰
+	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
+	 */
+	@PostMapping("/checkDifferentAndReflex")
+	@ApiOperation(value = "妫�鏌ヤ笟鍔$被鍨嬬殑鏁版嵁涓庢暟鎹簱涓槸鍚︾浉鍚�")
+	@ApiOperationSupport(order = 5)
+	public R<List<ModifyAttributeInfo>> checkDifferentAndReflex(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO){
+		Func.requireNotNull(ddlDTO,"涓氬姟绫诲瀷涓庨摼鎺ュ璞′紶杈撳璞′笉鑳戒负绌�");
+		return R.data(ddlService.checkDifferent(ddlDTO.getBtmTypeList(),ddlDTO.getLinkTypeList()));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
index f0d0635..316ee29 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
@@ -63,8 +63,6 @@
 	 * @param tableName 琛ㄦ牸鐨勫悕绉�
 	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
 	 */
-	@ResultMap("ddlTableColumnInfo")
-	@Select("")
 	List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName") String tableName);
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
index 80ad6ae..561e833 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
@@ -91,8 +91,6 @@
 	 * @param tableName 琛ㄦ牸鐨勫悕绉�
 	 * @return 鏁版嵁搴撹〃鐨勫瓧娈典俊鎭�
 	 */
-	@ResultMap("ddlTableColumnInfo")
-	@Select("")
 	List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName")String tableName);
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java
new file mode 100644
index 0000000..8fee3c0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.ddl.mapper;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/4/26
+ */
+@Repository
+public interface DllMySqlMapper extends DllMapper{
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
index 86caebf..5f77cc6 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -1,8 +1,15 @@
 package com.vci.ubcs.ddl.processor.ddl;
 
 import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
+import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
+import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -16,20 +23,20 @@
 	@Value("${spring.datasource.driver-class-name}")
 	private static final String DATABASE_DRIVER = "";
 
-	public static List<DdlMapperProcessor> processors = Lists.newArrayList();
+	private final static List<DdlMapperProcessor> PROCESSORS = Lists.newArrayList();
 
 	static {
-		processors.add(new DdlMsMapperProcessor());
-		processors.add(new DdlMySqlMapperProcessor());
-		processors.add(new DdlOracleMapperProcessor());
+		PROCESSORS.add(VciSpringUtil.getBean(DdlOracleMapperProcessor.class));
+		PROCESSORS.add(VciSpringUtil.getBean(DdlMySqlMapperProcessor.class));
+		PROCESSORS.add(VciSpringUtil.getBean(DdlMsMapperProcessor.class));
 	}
 
 	public static DdlMapperProcessor getProcessor(){
-		for (DdlMapperProcessor processor : processors) {
+		for (DdlMapperProcessor processor : PROCESSORS) {
 			if (processor.support(DATABASE_DRIVER)){
 				return processor;
 			}
 		}
-		return DdlOracleMapperProcessor.SINGLE.INSTANCE;
+		return VciSpringUtil.getBean(DdlOracleMapperProcessor.class);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
index 4a94892..94a78d2 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
@@ -3,6 +3,7 @@
 import com.vci.ubcs.ddl.bo.DdlTableBO;
 import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
 import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 
 import java.util.List;
 
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
index c69fd05..a21d862 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
@@ -3,7 +3,9 @@
 
 import com.vci.ubcs.ddl.mapper.DdlMSMapper;
 import com.vci.ubcs.ddl.mapper.DdlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
@@ -17,20 +19,20 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DdlMsMapperProcessor extends DdlMapperProcessor{
 
-	@Resource
-	private DdlMSMapper msMapper;
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlMSMapper.class);
 
-	private static DdlMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = msMapper;
-	}
 
 	public DdlMsMapperProcessor() {
 		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Sql Server鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Sql Server鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
 	@Override
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
index 4973cdb..d7e8ca5 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
@@ -3,7 +3,9 @@
 
 import com.vci.ubcs.ddl.mapper.DdlMapper;
 import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Repository;
 import org.springframework.util.CollectionUtils;
 
@@ -17,21 +19,19 @@
  * @author LiHang
  * @date 2023/4/24
  */
-@Repository
+@Component
 public class DdlMySqlMapperProcessor extends DdlMapperProcessor{
 
-	@Resource
-	private DdlMySqlMapper myMapper;
-
-	private static DdlMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = myMapper;
-	}
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlMySqlMapper.class);
 
 	public DdlMySqlMapperProcessor() {
 		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇MySql鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇MySql鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
 	@Override
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
index 52a20fa..174344c 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
@@ -2,6 +2,10 @@
 
 import com.vci.ubcs.ddl.mapper.DdlMapper;
 import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
@@ -12,30 +16,24 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DdlOracleMapperProcessor extends DdlMapperProcessor{
 
-	@Resource
-	private DdlOracleMapper oracleMapper;
+	private static DdlMapper mapper = VciSpringUtil.getBean(DdlOracleMapper.class);
+
+	public DdlOracleMapperProcessor() {
+		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Oracle鏁版嵁搴揇DL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Oracle鏁版嵁搴揇DL鎿嶄綔鏈嶅姟澶辫触");
+		}
+	}
 
 	@Override
 	boolean support(String url) {
 		return "oracle.jdbc.OracleDriver".equals(url);
-	}
-
-	public static class SINGLE {
-		public static DdlOracleMapperProcessor INSTANCE = new DdlOracleMapperProcessor();
-	}
-
-
-	private static DdlMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = oracleMapper;
-	}
-
-	public DdlOracleMapperProcessor() {
-		super(mapper);
 	}
 
 	@Override
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
index a37b163..de6622d 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
@@ -26,80 +26,4 @@
 	 */
 	String DEFAULT = "default";
 
-	/**
-	 * 瀛楃涓�
-	 */
-	String VARCHAR = "varchar2";
-
-	/**
-	 * 鏁板瓧
-	 */
-	String NUMBER = "number";
-
-	/**
-	 * 鏃ユ湡锛屾棩鏈熸椂闂达紝鏃堕棿鎴�
-	 */
-	String TIMESTAMP = "TIMESTAMP";
-
-	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
-	 * @param attributeVOList 灞炴�х殑绔嬬
-	 * @return sql璇彞
-	 */
-	String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
-
-	/**
-	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	String dealNumberCreateSql(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 璋冪敤澶勭悊榛樿鍊煎拰闈炵┖
-	 * @param attributeVO 灞炴��
-	 * @return 鎵ц缁撴灉
-	 */
-	String dealDefaultAndNull(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 澶勭悊榛樿鍊�
-	 * @param defaultValue 榛樿鍊�
-	 * @return sql
-	 */
-	String dealDefaultValue(String defaultValue);
-
-	/**
-	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 澶勭悊闈炵┖
-	 * @return sql
-	 */
-	String dealNullableSql(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO);
-
-	/**
-	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	String dealStringCreateSql(BtmTypeAttributeVO attributeVO);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
index 4ea938e..619a79c 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
@@ -1,8 +1,19 @@
 package com.vci.ubcs.ddl.processor.dll;
 
-import com.vci.ubcs.ddl.mapper.DllMapper;
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
+import com.vci.ubcs.ddl.mapper.*;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
-import org.apache.commons.lang3.StringUtils;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.apache.commons.collections4.BidiMap;
+import org.apache.commons.collections4.bidimap.DualHashBidiMap;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Description:DLL鐨勫鐞嗘帴鍙�
@@ -10,7 +21,57 @@
  * @author LiHang
  * @date 2023/4/24
  */
-public abstract class DllMapperProcessor implements DllBehavior {
+public abstract class DllMapperProcessor {
+
+	private final static BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAPPING_MAP;
+
+	static {
+		FIELD_MAPPING_MAP = new DualHashBidiMap<>();
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMBER",26,8,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR2",5,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR2",100,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("VTClob",null,null,true,null));
+		FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR2",255,null,true,null));
+	}
+
+	protected abstract DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum);
+
+	protected final DdlFieldMappingAttrBO getMappingBOInMap(VciFieldTypeEnum fieldTypeEnum,BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map){
+		if (!map.containsKey(fieldTypeEnum)){
+			throw new VciBaseException("鎵句笉鍒板瓧娈电殑鏄犲皠");
+		}
+		DdlFieldMappingAttrBO bo = map.get(fieldTypeEnum);
+		return BeanUtil.copy(bo,DdlFieldMappingAttrBO.class);
+	}
+
+	protected static BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> getMappingMapCopy(){
+		BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map = new DualHashBidiMap<>();
+		map.putAll(FIELD_MAPPING_MAP);
+		return map;
+	}
+
+	/**
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
+	 */
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr){
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAPPING_MAP);
+	}
+
+	protected final List<VciFieldTypeEnum> listFieldInMapByColumnStr(String columnStr,BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> map){
+		VciBaseUtil.alertNotNull(columnStr,"鏁版嵁搴撳瓧娈电被鍨�",map,"瀛楁鏄犲皠闆嗗悎");
+		List<VciFieldTypeEnum> fieldTypeList = new ArrayList<>();
+		map.values().stream().filter(s -> StringUtil.equals(s.getDataType(),columnStr)).forEach(s -> {
+			fieldTypeList.add(map.getKey(s));
+		});
+		return fieldTypeList;
+	}
 
 	private DllMapper mapper;
 
@@ -64,126 +125,24 @@
 		return mapper.countAll(tableName);
 	}
 
+
+
 	/**
-	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
-	 *
+	 * 鑾峰彇瀛楁鍒涘缓sql
+	 * @param fieldType VT瀛楁绫诲瀷
 	 * @param attributeVO 灞炴��
 	 * @return sql
 	 */
-	@Override
-	public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
-		StringBuilder snb = new StringBuilder().append(NUMBER + SPACE);
-		dealDefaultAndNull(attributeVO);
-		return snb.toString();
-	}
-
-	/**
-	 * 璋冪敤澶勭悊榛樿鍊煎拰闈炵┖
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return 鎵ц缁撴灉
-	 */
-	@Override
-	public String dealDefaultAndNull(BtmTypeAttributeVO attributeVO) {
-		String value = "";
-		if (StringUtils.isNotBlank(attributeVO.getDefaultValue())) {
-			value += dealDefaultValue(attributeVO.getDefaultValue());
+	public String getColumnTypeSql(VciFieldTypeEnum fieldType,BtmTypeAttributeVO attributeVO){
+		DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
+		mappingBO.setDataLength(attributeVO.getAttributeLength());
+		if (fieldType.equals(VciFieldTypeEnum.VTDouble)){
+			mappingBO.setDataPrecision(attributeVO.getPrecisionLength());
 		}
+		mappingBO.setNullable(attributeVO.isNullableFlag());
+		mappingBO.setDefaultValue(attributeVO.getDefaultValue());
+		return mappingBO.toString() + (StringUtil.equals(attributeVO.getId(),"OID") ? StringPool.SPACE +  "primary key" + StringPool.SPACE : "");
 
-		if (!attributeVO.isNullableFlag()){
-			value += dealNullableSql(attributeVO);
-		}
-		return value;
 	}
 
-	/**
-	 * 澶勭悊榛樿鍊�
-	 *
-	 * @return sql
-	 */
-	@Override
-	public String dealDefaultValue(String defualValule) {
-		return DEFAULT + SPACE + defualValule + SPACE;
-	}
-
-	/**
-	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
-		Integer length = attributeVO.getPrecisionLength();
-		if(length == null || length == 0){
-			length = 20;
-		}
-		Integer scaleLength = attributeVO.getScaleLength();
-		if(scaleLength == null){
-			scaleLength = 2;
-		}
-		StringBuilder sb = new StringBuilder().append(NUMBER).append("(").append(String.valueOf(length.intValue()))
-			.append(",").append(String.valueOf(scaleLength.intValue()))
-			.append(")").append(SPACE);
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
-
-	/**
-	 * 澶勭悊闈炵┖
-	 *
-	 * @return sql
-	 */
-	@Override
-	public String dealNullableSql(BtmTypeAttributeVO attributeVO) {
-		if (!attributeVO.isNullableFlag()) {
-			return SPACE + "not null" + SPACE;
-		}
-		return "";
-	}
-
-	/**
-	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
-		StringBuilder sb = new StringBuilder();
-		Integer length2 = attributeVO.getAttributeLength();
-		if (length2 == null) {
-			length2 = 250;
-		}
-		sb.append("VARCHAR").append("(").
-			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
-		if (OID.equalsIgnoreCase(attributeVO.getId())) {
-			sb.append(" primary key ");
-			//寮哄埗璁剧疆OID涓轰富閿�
-		}
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
index 1395817..678ed44 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -1,8 +1,14 @@
 package com.vci.ubcs.ddl.processor.dll;
 
 import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.vci.ubcs.ddl.mapper.DllMsMapper;
+import com.vci.ubcs.ddl.mapper.DllOracleMapper;
+import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -19,8 +25,10 @@
 	public static List<DllMapperProcessor> processors = Lists.newArrayList();
 
 	static {
-		processors.add(new DllOracleMapperProcessor());
-		processors.add(new DllSqlLiteMapperProcessor());
+		processors.add(VciSpringUtil.getBean(DllMsMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllSqlLiteMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllMySqlMapperProcessor.class));
+		processors.add(VciSpringUtil.getBean(DllOracleMapperProcessor.class));
 	}
 
 	public static DllMapperProcessor getProcessor(){
@@ -29,6 +37,6 @@
 				return processor;
 			}
 		}
-		return DllOracleMapperProcessor.SINGLE.INSTANCE;
+		return VciSpringUtil.getBean(DllOracleMapperProcessor.class);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
index 6ade30a..599dc62 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
@@ -1,18 +1,17 @@
 package com.vci.ubcs.ddl.processor.dll;
 
 
+import com.vci.ubcs.ddl.mapper.DdlMSMapper;
 import com.vci.ubcs.ddl.mapper.DllMapper;
 import com.vci.ubcs.ddl.mapper.DllMsMapper;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
-<<<<<<< HEAD
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
-import org.apache.commons.lang3.StringUtils;
-=======
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -21,24 +20,19 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DllMsMapperProcessor extends DllMapperProcessor {
 
-	@Resource
-	private DllMsMapper realMapper;
-
-	private static DllMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = realMapper;
-	}
+	private static DllMapper mapper = VciSpringUtil.getBean(DllMsMapper.class);
 
 	public DllMsMapperProcessor() {
 		super(mapper);
-	}
-
-	public static class SINGLE {
-		public static DllMsMapperProcessor INSTANCE = new DllMsMapperProcessor();
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Sql Server鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Sql Server鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
 	@Override
@@ -46,131 +40,5 @@
 		return "oracle.jdbc.OracleDiver".equals(url);
 	}
 
-	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
-	 *
-	 * @param attributeVOList 灞炴�х殑绔嬬
-	 * @return sql璇彞
-	 */
-	@Override
-	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
-		StringBuilder sb = new StringBuilder();
-		attributeVOList.forEach(a -> {
-			sb.append(a.getId()).append(SPACE);
-			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
-			if (fieldTypeEnum == null) {
-				throw new VciBaseException("灞炴�ф湁璇�");
-			}
-			switch (fieldTypeEnum) {
-				case VTInteger:
-				case VTLong:
-					sb.append(dealNumberCreateSql(a));
-					break;
-				case VTDouble:
-					sb.append(dealDoubleCreateSql(a));
-					break;
-				case VTBoolean:
-					sb.append(dealBooleanCreateSql(a));
-					break;
-				case VTDate:
-				case VTTime:
-				case VTDateTime:
-					sb.append(dealDateTimeCreateSql(a));
-					break;
-				case VTFilePath:
-					sb.append("VARCHAR").append("(100)").append(SPACE);
-					break;
-				case VTClob:
-					sb.append("varchar(max)").append(SPACE);
-					if(!a.isNullableFlag()){
-						sb.append(SPACE).append("not null").append(SPACE);
-					}
-					break;
-				default:
-					dealStringCreateSql(a);
-					break;
-			}
-			sb.append(",\n\t");
-		});
-		return sb.substring(0,sb.lastIndexOf(","));
-	}
 
-	/**
-	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "INT" + SPACE + dealDefaultAndNull(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
-		Integer length = attributeVO.getPrecisionLength();
-		if(length == null || length == 0){
-			length = 20;
-		}
-		Integer scaleLength = attributeVO.getScaleLength();
-		if(scaleLength == null){
-			scaleLength = 2;
-		}
-		StringBuilder sb = new StringBuilder().append("numeric").append("(").append(String.valueOf(length.intValue()))
-			.append(",").append(String.valueOf(scaleLength.intValue()))
-			.append(")").append(SPACE);
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
-
-
-	/**
-	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "DATETIME" + SPACE + dealNullableSql(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
-		Integer length2 = attributeVO.getAttributeLength();
-		if(length2 == null){
-			length2 = 250;
-		}
-		StringBuilder sb = new StringBuilder().append("VARCHAR").append("(").
-			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
-		if (OID.equalsIgnoreCase(attributeVO.getId())) {
-			sb.append(" primary key ");
-			//寮哄埗璁剧疆OID涓轰富閿�
-		}
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
index 0115dfd..2d548e1 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -1,18 +1,14 @@
 package com.vci.ubcs.ddl.processor.dll;
 
 
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
 import com.vci.ubcs.ddl.mapper.DllMapper;
-import com.vci.ubcs.ddl.mapper.DllOracleMapper;
-import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
-import com.vci.ubcs.starter.exception.VciBaseException;
-<<<<<<< HEAD
+import com.vci.ubcs.ddl.mapper.DllMySqlMapper;
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
-import org.apache.commons.lang3.StringUtils;
-=======
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -21,24 +17,36 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DllMySqlMapperProcessor extends DllMapperProcessor {
 
-	@Resource
-	private DllOracleMapper realMapper;
+	private static final DllMapper MAPPER = VciSpringUtil.getBean(DllMySqlMapper.class);
 
-	private static DllMapper mapper;
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
 
-	@PostConstruct
-	public void init() {
-		mapper = realMapper;
+
+	static {
+		// 闇�瑕侀噸鏂版槧灏勭殑瀛楁绫诲瀷鍦ㄨ繖閲屽啓
+		FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("BIGINT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
 	}
 
 	public DllMySqlMapperProcessor() {
-		super(mapper);
-	}
-
-	public static class SINGLE {
-		public static DllMySqlMapperProcessor INSTANCE = new DllMySqlMapperProcessor();
+		super(MAPPER);
+		System.out.println("-----------------");
+		if (MAPPER != null){
+			System.out.println("[success]::鍔犺浇MySql鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇MySql鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
 	@Override
@@ -46,118 +54,20 @@
 		return "oracle.jdbc.OracleDiver".equals(url);
 	}
 
-	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
-	 *
-	 * @param attributeVOList 灞炴�х殑绔嬬
-	 * @return sql璇彞
-	 */
 	@Override
-	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
-		StringBuilder sb = new StringBuilder();
-		attributeVOList.forEach(a -> {
-			sb.append(a.getId()).append(SPACE);
-			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
-			if (fieldTypeEnum == null) {
-				throw new VciBaseException("灞炴�ф湁璇�");
-			}
-			switch (fieldTypeEnum) {
-				case VTInteger:
-				case VTLong:
-					sb.append(dealNumberCreateSql(a));
-					break;
-				case VTDouble:
-					sb.append(dealDoubleCreateSql(a));
-					break;
-				case VTBoolean:
-					sb.append(dealBooleanCreateSql(a));
-					break;
-				case VTDate:
-				case VTTime:
-				case VTDateTime:
-					sb.append(dealDateTimeCreateSql(a));
-				case VTFilePath:
-					sb.append("VARCHAR").append("(100)").append(SPACE);
-					break;
-				case VTClob:
-					sb.append("LONGTEXT").append(SPACE);
-					if (!a.isNullableFlag()) {
-						sb.append(SPACE).append("not null").append(SPACE);
-					}
-					break;
-				default:
-					sb.append(dealStringCreateSql(a));
-					break;
-			}
-			sb.append(",\n\t");
-		});
-		return sb.substring(0, sb.lastIndexOf(","));
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
 	}
 
 	/**
-	 * 澶勭悊鏁存暟绫诲瀷鐨剆ql杞崲
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
 	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
 	 */
 	@Override
-	public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
-		StringBuilder sb = new StringBuilder();
-		if (VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attributeVO.getAttrDataType())) {
-			sb.append("INT").append(SPACE);
-		} else {
-			sb.append("BIGINT").append(SPACE);
-		}
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
-
-
-	/**
-	 * 澶勭悊娴偣鏁扮被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
-		StringBuilder sb = new StringBuilder();
-		Integer length = attributeVO.getPrecisionLength();
-		if (length == null || length == 0) {
-			length = 20;
-		}
-		Integer scaleLength = attributeVO.getScaleLength();
-		if (scaleLength == null) {
-			scaleLength = 2;
-		}
-		sb.append("DOUBLE").append("(").append(String.valueOf(length.intValue()))
-			.append(",").append(String.valueOf(scaleLength.intValue()))
-			.append(")").append(SPACE);
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
-
-
-	/**
-	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
-		return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
 	}
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
index 9e92da4..d45ed39 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
@@ -1,23 +1,13 @@
 package com.vci.ubcs.ddl.processor.dll;
 
-<<<<<<< HEAD
-=======
-import com.vci.starter.web.enumpck.VciFieldTypeEnum;
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
 import com.vci.ubcs.ddl.mapper.DllMapper;
 import com.vci.ubcs.ddl.mapper.DllOracleMapper;
-import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
-import com.vci.ubcs.starter.exception.VciBaseException;
-<<<<<<< HEAD
+import com.vci.ubcs.starter.util.VciSpringUtil;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.util.CollectionUtils;
-=======
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.util.List;
 
 /**
  * Description:
@@ -25,122 +15,31 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DllOracleMapperProcessor extends DllMapperProcessor {
 
-	@Resource
-	private DllOracleMapper realMapper;
+	private static DllMapper mapper = VciSpringUtil.getBean(DllOracleMapper.class);
 
-	private static DllMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = realMapper;
-	}
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
 
 	public DllOracleMapperProcessor() {
 		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇Oracle鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇Oracle鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
-	public static class SINGLE {
-		public static DllOracleMapperProcessor INSTANCE = new DllOracleMapperProcessor();
+
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
 	}
 
 	@Override
 	public boolean support(String url) {
 		return "oracle.jdbc.OracleDiver".equals(url);
-	}
-
-	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
-	 *
-	 * @param attributeVOList 灞炴�х殑绔嬬
-	 * @return sql璇彞
-	 */
-	@Override
-	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
-		StringBuilder sb = new StringBuilder();
-		attributeVOList.forEach(a -> {
-			sb.append(a.getId()).append(SPACE);
-			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
-			if (fieldTypeEnum == null) {
-				throw new VciBaseException("灞炴�ф湁璇�");
-			}
-			switch (fieldTypeEnum) {
-				case VTInteger:
-				case VTLong:
-					sb.append(dealNumberCreateSql(a));
-					break;
-				case VTDouble:
-					sb.append(dealDoubleCreateSql(a));
-					break;
-				case VTBoolean:
-					sb.append(dealBooleanCreateSql(a));
-					break;
-				case VTDate:
-				case VTDateTime:
-				case VTTime:
-					sb.append(dealDateTimeCreateSql(a));
-					break;
-				case VTFilePath:
-					sb.append(VARCHAR).append("(100)").append(SPACE);
-					break;
-				case VTClob:
-					sb.append("CLOB").append(SPACE);
-					if(!a.isNullableFlag()){
-						sb.append(SPACE).append("not null").append(SPACE);
-					}
-					break;
-				default:
-					sb.append(dealStringCreateSql(a));
-					break;
-			}
-			sb.append(",\n\t");
-		});
-		return sb.substring(0,sb.lastIndexOf(","));
-	}
-
-	/**
-	 * 澶勭悊瀛楃涓茬被鍨嬬殑sql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
-		Integer length2 = attributeVO.getAttributeLength();
-		StringBuilder sb = new StringBuilder();
-		if(length2 == null){
-			length2 = 250;
-		}
-		sb.append(VARCHAR).append("(").
-			append(String.valueOf(length2.intValue())).append(")").append(SPACE);
-		if (OID.equalsIgnoreCase(attributeVO.getId())) {
-			sb.append(" primary key ");
-			//寮哄埗璁剧疆OID涓轰富閿�
-		}
-		sb.append(dealDefaultAndNull(attributeVO));
-		return sb.toString();
-	}
-
-	/**
-	 * 澶勭悊鏃ユ湡鏃堕棿绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
-		return TIMESTAMP + SPACE + dealNullableSql(attributeVO);
-	}
-
-	/**
-	 * 澶勭悊甯冨皵绫诲瀷鐨剆ql杞崲
-	 *
-	 * @param attributeVO 灞炴��
-	 * @return sql
-	 */
-	@Override
-	public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
-		return VARCHAR + "(5)" + SPACE + dealDefaultAndNull(attributeVO);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
index 4abfa2f..0b1fa0a 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
@@ -1,11 +1,13 @@
 package com.vci.ubcs.ddl.processor.dll;
 
+import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
 import com.vci.ubcs.ddl.mapper.DllMapper;
 import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
-import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.starter.util.VciSpringUtil;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import org.apache.commons.collections4.BidiMap;
+import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -14,21 +16,33 @@
  * @author LiHang
  * @date 2023/4/24
  */
+@Component
 public class DllSqlLiteMapperProcessor extends DllMapperProcessor{
+	private static DllMapper mapper = VciSpringUtil.getBean(DllSqlLiteMapper.class);
 
+	private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
 
-	@Resource
-	private DllSqlLiteMapper realMapper;
-
-	private static DllMapper mapper;
-
-	@PostConstruct
-	public void init(){
-		mapper = realMapper;
+	static {
+		 // 闇�瑕侀噸鏂版槧灏勭殑瀛楁绫诲瀷鍦ㄨ繖閲屽啓
+		FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("INT",22,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
+		FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
 	}
-
 	public DllSqlLiteMapperProcessor() {
 		super(mapper);
+		System.out.println("-----------------");
+		if (mapper != null){
+			System.out.println("[success]::鍔犺浇SqlLite鏁版嵁搴揇LL鎿嶄綔鏈嶅姟鎴愬姛");
+		}else {
+			System.out.println("[fail]::鍔犺浇SqlList鏁版嵁搴揇LL鎿嶄綔鏈嶅姟澶辫触");
+		}
 	}
 
 	@Override
@@ -36,14 +50,19 @@
 		return "org.sqlite.JDBC".equals(url);
 	}
 
+	@Override
+	protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
+		return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
+	}
+
 	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 * 鎸夋暟鎹簱瀛楁绫诲瀷鍒椾妇鎵�鏈夌殑VCI瀛楁绫诲瀷
 	 *
-	 * @param attributeVOList 灞炴�х殑绔嬬
-	 * @return sql璇彞
+	 * @param columnStr 鏁版嵁搴撳瓧娈电被鍨�
+	 * @return VCI瀛楁绫诲瀷
 	 */
 	@Override
-	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
-		return null;
+	public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
+		return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
 	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
index f0a3c8f..915dfa5 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -2,8 +2,9 @@
 
 import com.vci.starter.word.bo.WordMergeStartTableDataBO;
 import com.vci.ubcs.ddl.bo.DdlTableBO;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
-import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
@@ -66,6 +67,13 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
 	void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
 
 	/**
 	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
@@ -157,14 +165,16 @@
 	 * @param linkTypeVOList 閾炬帴绫诲瀷瀵硅薄锛屾湁灞炴�ф椂闇�瑕佸寘鍚睘鎬�
 	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
 	 */
-	List<ModifyAttributeInfoDO> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
+	List<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
 
 	/**
 	 * 娓呯悊涓氬姟绫诲瀷涓拰鏁版嵁搴撻噷涓嶄竴鏍风殑
 	 * @param differentAttributeList 涓嶅悓鐨勫睘鎬х殑鍒楄〃
+	 * @param btmTypeVOList 涓氬姟绫诲瀷鏁版嵁
+	 * @param linkTypeVOList 閾炬帴绫诲瀷鏁版嵁
 	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
-	void reflexDifferent(List<ModifyAttributeInfoDO> differentAttributeList) throws VciBaseException;
+	void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList,List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
 
 	/**
 	 * 鑾峰彇鏁版嵁搴撲腑鎵�鏈夌殑琛ㄦ牸
@@ -220,10 +230,10 @@
 
 	/**
 	 * 鏁版嵁搴撴柊澧炴垨淇敼琛�
-	 * @param dto 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param ddlDTO 涓氬姟绫诲瀷浼犺緭瀵硅薄
 	 * @return 鎵ц缁撴灉
 	 */
-	R submitBtmType(BtmTypeDTO dto);
+	R submit(BtmAndLinkTypeDdlDTO ddlDTO);
 
 	/**
 	 * 鎸夎〃鍚嶈幏鍙栬〃淇℃伅
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
index 561ae46..85e886c 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -1,14 +1,12 @@
 package com.vci.ubcs.ddl.service.impl;
 
-<<<<<<< HEAD
-import com.alibaba.nacos.client.naming.NacosNamingService;
 
-=======
-import com.vci.starter.web.util.VciBaseUtil;
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
+import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;
 import com.vci.starter.word.bo.WordMergeStartTableDataBO;
 import com.vci.ubcs.ddl.bo.DdlTableBO;
 import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
+import com.vci.ubcs.ddl.enums.BusinessTypeEnum;
+import com.vci.ubcs.ddl.enums.ModifyTableTaskEnum;
 import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessStrategy;
 import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessor;
 import com.vci.ubcs.ddl.processor.dll.DllMapperProcessor;
@@ -17,15 +15,17 @@
 import com.vci.ubcs.ddl.properties.DdlPropertise;
 import com.vci.ubcs.ddl.service.IDdlService;
 import com.vci.ubcs.omd.cache.BtmTypeCache;
-import com.vci.ubcs.omd.dto.BtmTypeDTO;
-import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
-import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
-import com.vci.ubcs.omd.vo.BtmTypeVO;
-import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
-import com.vci.ubcs.omd.vo.LinkTypeVO;
+import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
+import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.*;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
@@ -34,7 +34,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.validation.constraints.NotNull;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -63,15 +65,61 @@
 	 */
 	private final DdlMapperProcessor ddlMapper = DdlMapperProcessStrategy.getProcessor();
 
+
 	/**
 	 * dll鏁版嵁鎿嶄綔鏈嶅姟
 	 */
 	private final DllMapperProcessor dllMapper = DllMapperProcessorStrategy.getProcessor();
 
-	/**
-	 * 琛ㄥ悕鍓嶇紑
-	 */
-	private final String TABLE_PREFIX = "PL";
+	private static final String YES = "Y";
+
+	private static final String NO = "N";
+
+	private final Map<String, BtmTypeVO> idBtmMap = new ConcurrentHashMap<>();
+
+	private final Map<String, LinkTypeVO> idLinkMap = new ConcurrentHashMap<>();
+
+	private void putBtm(@NotNull BtmTypeVO... voList) throws ServiceException {
+		String collect = Arrays.stream(voList).map(BtmTypeVO::getId).filter(idBtmMap::containsKey).collect(Collectors.joining(","));
+		if (StringUtils.isBlank(collect)) {
+			Arrays.stream(voList).forEach(vo -> {
+				idBtmMap.put(vo.getId(), vo);
+			});
+		} else {
+			throw new ServiceException("涓氬姟绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�");
+		}
+	}
+
+	private void putLink(@NotNull LinkTypeVO... voList) throws ServiceException {
+		String collect = Arrays.stream(voList).map(LinkTypeVO::getId).filter(idLinkMap::containsKey).collect(Collectors.joining(","));
+		if (StringUtils.isBlank(collect)) {
+			Arrays.stream(voList).forEach(vo -> {
+				idLinkMap.put(vo.getId(), vo);
+			});
+		} else {
+			throw new ServiceException("閾炬帴绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�");
+		}
+	}
+
+	private void removeBtm(@NotNull BtmTypeVO... btmTypeVO) throws ServiceException {
+		if (Arrays.stream(btmTypeVO).allMatch(s -> idBtmMap.containsKey(s.getId()))) {
+			for (BtmTypeVO vo : btmTypeVO) {
+				idBtmMap.remove(vo.getId());
+			}
+		} else {
+			throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�");
+		}
+	}
+
+	private void removeLink(@NotNull LinkTypeVO... linkTypeVO) throws ServiceException {
+		if (Arrays.stream(linkTypeVO).allMatch(s -> idLinkMap.containsKey(s.getId()))) {
+			for (LinkTypeVO vo : linkTypeVO) {
+				idLinkMap.remove(vo.getId());
+			}
+		} else {
+			throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�");
+		}
+	}
 
 	/**
 	 * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹�
@@ -165,7 +213,7 @@
 	 */
 	@Override
 	public void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException {
-		VciBaseUtil.alertCollectionNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection);
+		VciBaseUtil.alertNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection);
 		List<BtmTypeVO> btmTypeVOList = BtmTypeCache.listBtmTypeByOidCollection(oidCollection);
 //		List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByOidCollection(oidCollection);
 		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
@@ -194,16 +242,33 @@
 		} else {
 			String tableName = btmTypeVO.getTableName();
 			if (!checkTableExistByTableName(tableName)) {
-				String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes());
+				String attributeSql = getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes());
 				dllMapper.createTableBySql(tableName, attributeSql);
 				if (StringUtils.isNotBlank(btmTypeVO.getName())) {
 					dllMapper.commentTable(tableName, btmTypeVO.getName());
 				}
-				btmTypeVO.getAttributes().stream().forEach(s -> {
+				btmTypeVO.getAttributes().forEach(s -> {
 					dllMapper.commentColumnTable(tableName, s.getId(), s.getName());
 				});
 			}
 		}
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	@Override
+	public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
+		StringBuilder sb = new StringBuilder();
+		attributeVOList.forEach(a -> {
+			sb.append(a.getId()).append(StringPool.SPACE);
+			VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
+			sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, a));
+		});
+		return sb.substring(0, sb.lastIndexOf(","));
 	}
 
 	/**
@@ -238,7 +303,7 @@
 	 */
 	@Override
 	public void changeColumnForBtm(List<BtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException {
-		VciBaseUtil.alertCollectionNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList);
+		VciBaseUtil.alertNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList);
 		Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
 		btmTypeHasAttributeVOMap.forEach((k, v) -> {
 			BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k);
@@ -265,7 +330,7 @@
 	 * @param attributeVOList 瑕佹坊鍔犵殑灞炴�у瓧娈�
 	 */
 	private void changeColumnsForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
-		String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
+		String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList);
 		//鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦�
 		boolean tableExist = false;
 		try {
@@ -289,7 +354,7 @@
 	 */
 	private void commentColumnsForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
 		if (StringUtils.isNotBlank(tableName) && !CollectionUtils.isEmpty(attributeVOList)) {
-			attributeVOList.stream().forEach(s -> {
+			attributeVOList.forEach(s -> {
 				ddlMapper.commentColumnTable(tableName, s.getId(), s.getName());
 			});
 		}
@@ -314,9 +379,9 @@
 	 */
 	@Override
 	public void addColumn2TableForBtm(List<BtmTypeAttributeVO> addAttrDOList) throws VciBaseException {
-		VciBaseUtil.alertCollectionNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList);
-		Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = addAttrDOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
-		btmTypeHasAttributeVOMap.forEach((k, v) -> {
+		VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList);
+		Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeMap = addAttrDOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
+		btmTypeHasAttributeMap.forEach((k, v) -> {
 			BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k);
 			if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) {
 				throw new VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪");
@@ -334,12 +399,8 @@
 	 * @param attributeVOList 灞炴�х殑鏄剧ず瀵硅薄
 	 * @throws VciBaseException 鎵ц鎴栬�呰幏鍙杝ql璇彞鐨勬椂鍊欏嚭鐜伴敊璇細鎶涘嚭寮傚父
 	 */
-<<<<<<< HEAD
-	private void addColumnForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) throws VciBaseException{
-=======
 	private void addColumnForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
->>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
-		String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
+		String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList);
 		//鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦�
 		if (!checkTableExistByTableName(tableName)) {
 			BtmTypeAttributeVO attributeVO = attributeVOList.get(0);
@@ -358,7 +419,11 @@
 	 */
 	@Override
 	public void addColumn2TableForLink(List<LinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException {
+		VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓睘鎬ч泦",addAttrDOListForLinkType);
+		Map<String, List<LinkTypeAttributeVO>> linkTypeHasAttributeVOMap = addAttrDOListForLinkType.stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
+		linkTypeHasAttributeVOMap.forEach((k,v) -> {
 
+		});
 	}
 
 	/**
@@ -458,8 +523,281 @@
 	 * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹�
 	 */
 	@Override
-	public List<ModifyAttributeInfoDO> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
-		return null;
+	public List<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
+		if (CollectionUtils.isEmpty(btmTypeVOList) && CollectionUtils.isEmpty(linkTypeVOList)) {
+			throw new VciBaseException("瑕佹鏌ョ殑涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬩负绌�");
+		}
+		List<ModifyAttributeInfo> modifyAttributeInfoList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			modifyAttributeInfoList.addAll(checkBtmType(btmTypeVOList));
+		}
+		if (!CollectionUtils.isEmpty(linkTypeVOList)) {
+			modifyAttributeInfoList.addAll(checkLinkType(linkTypeVOList));
+		}
+		if (CollectionUtils.isEmpty(modifyAttributeInfoList)) {
+			reflexDifferent(modifyAttributeInfoList, btmTypeVOList, linkTypeVOList);
+		}
+		return modifyAttributeInfoList;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨�
+	 *
+	 * @param btmTypeVOList 涓氬姟绫诲瀷
+	 * @return 妫�鏌ョ粨鏋�
+	 */
+	private List<ModifyAttributeInfo> checkBtmType(List<BtmTypeVO> btmTypeVOList) {
+		List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>();
+		btmTypeVOList.stream().filter(s -> !isCompatibilityTable(s.getId(),null)).forEach(btm -> {
+			ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo();
+			modifyAttributeInfo.setId(btm.getId());
+			modifyAttributeInfo.setName(btm.getName());
+			modifyAttributeInfo.setTableName(btm.getTableName());
+			modifyAttributeInfo.setBusinessType(BusinessTypeEnum.BTM.getValue());
+			// 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶
+			if (btm.isViewFlag() || !checkTableExistByTableName(btm.getTableName())){
+				modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue());
+				modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+			}else {
+				VciBaseUtil.alertNotNull(btm.getAttributes(),"涓氬姟绫诲瀷" + btm.getId() + "鐨勫睘鎬�");
+				List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(btm.getTableName());
+				if (CollectionUtils.isEmpty(columnDataInTable)){
+					modifyAttributeInfo.setAddAttributes(btm.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(",")));
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+				}else {
+					// 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣�
+					// 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬�
+					Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+					Map<String, BtmTypeAttributeVO> attributeMap = btm.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+					List<String> addList = new ArrayList<>();
+					List<String> editList = new ArrayList<>();
+					List<String> deleteList = new ArrayList<>();
+					List<String> beforeList = new ArrayList<>();
+					attributeMap.forEach((k,v) -> {
+						String attributeLowId = k.toLowerCase();
+						if (!checkIsDefaultColumn(attributeLowId)) {
+							if (tableColumMap.containsKey(k)) {
+								//璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀�
+								DdlTableInDataBaseBO columnInDB = tableColumMap.get(k);
+								if (columnInDB.getAttributeLength() == null) {
+									columnInDB.setAttributeLength(0);
+								}
+								boolean needEdit = false;
+								if (!v.getName().equalsIgnoreCase(columnInDB.getName())) {
+									//璇存槑闇�瑕佷慨鏀�
+									needEdit = true;
+								}
+								if (needEdit || checkNeedEditAttr(v, columnInDB)) {
+									editList.add(v.getId());
+									beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag()
+										+ StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName());
+								}
+							} else {
+								addList.add(v.getId());
+							}
+						} else {
+							//閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓�
+							if (!tableColumMap.containsKey(k)) {
+								boolean needAddNewField = false;
+								if (!BtmTypeLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btm.getLifeCycleId()) && BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (StringUtils.isNotBlank(btm.getRevisionRuleId()) && BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (btm.isSecretFlag() && BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId)) {
+									needAddNewField = true;
+								}
+								if (needAddNewField) {
+									addList.add(v.getId());
+								}
+							}
+						}
+					});
+					tableColumMap.forEach((k, v) -> {
+						if (!attributeMap.containsKey(k)) {
+							deleteList.add(k);
+						}
+					});
+					modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount());
+					modifyAttributeInfo.setOrderModifyDate(new Date());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+					modifyAttributeInfo.setAddAttributes(String.join(",", addList));
+					modifyAttributeInfo.setModifyAttributes(String.join(",", editList));
+					modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList));
+					modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList));
+				}
+			}
+		});
+		return modifyAttributeInfoDOList;
+	}
+
+	private boolean checkIsDefaultColumn(String attributeLowId) {
+		return ((BtmTypeFieldConstant.BASIC_FIELD_MAP.containsKey(attributeLowId)
+			&& !VciBaseUtil.inArray(new String[]{"id", "name", "description"}, attributeLowId))
+			|| BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId)
+			|| BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId));
+	}
+
+	/**
+	 * 妫�鏌ラ摼鎺ョ被鍨�
+	 *
+	 * @param linkTypeVOList 閾炬帴绫诲瀷
+	 * @return 妫�鏌ョ粨鏋�
+	 */
+	private List<ModifyAttributeInfo> checkLinkType(List<LinkTypeVO> linkTypeVOList) {
+		List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>();
+		linkTypeVOList.stream().filter(s -> !isCompatibilityTable(null,s.getId())).forEach(link -> {
+				ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo();
+				modifyAttributeInfo.setId(link.getId());
+				modifyAttributeInfo.setName(link.getName());
+				modifyAttributeInfo.setTableName(link.getTableName());
+				modifyAttributeInfo.setBusinessType(BusinessTypeEnum.LINK.getValue());
+				// 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶
+				if (!checkTableExistByTableName(link.getTableName())){
+					modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue());
+					modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+				}else {
+					VciBaseUtil.alertNotNull(link.getAttributes(), "閾炬帴绫诲瀷" + link.getId() + "鐨勫睘鎬�");
+					List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(link.getTableName());
+					if (CollectionUtils.isEmpty(columnDataInTable)) {
+						modifyAttributeInfo.setAddAttributes(link.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(",")));
+						modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue());
+						modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue());
+					} else {
+						// 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣�
+						// 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬�
+						Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+						Map<String, LinkTypeAttributeVO> attributeMap = link.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k));
+						List<String> addList = new ArrayList<>();
+						List<String> editList = new ArrayList<>();
+						List<String> deleteList = new ArrayList<>();
+						List<String> beforeList = new ArrayList<>();
+						attributeMap.forEach((k, v) -> {
+							String attributeLowId = k.toLowerCase();
+							if (!(BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId))) {
+								if (tableColumMap.containsKey(k)) {
+									//璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀�
+									DdlTableInDataBaseBO columnInDB = tableColumMap.get(k);
+									if (columnInDB.getAttributeLength() == null) {
+										columnInDB.setAttributeLength(0);
+									}
+									boolean needEdit = false;
+									if (!v.getName().equalsIgnoreCase(columnInDB.getName())) {
+										//璇存槑闇�瑕佷慨鏀�
+										needEdit = true;
+									}
+									BtmTypeAttributeVO btmTypeAttributeVO = new BtmTypeAttributeVO();
+									BeanUtil.copy(v, btmTypeAttributeVO);
+									if (needEdit || checkNeedEditAttr(btmTypeAttributeVO, columnInDB)) {
+										editList.add(v.getId());
+										beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag()
+											+ StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName());
+									}
+								} else {
+									addList.add(v.getId());
+								}
+							} else {
+								//閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓�
+								if (!tableColumMap.containsKey(k)) {
+									boolean needAddNewField = false;
+									if (BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId)) {
+										//鏄摼鎺ョ被鍨嬬殑灞炴�э紝浠ュ墠娌℃湁灏辨坊鍔犱笂
+										needAddNewField = true;
+									}
+									if (needAddNewField) {
+										addList.add(v.getId());
+									}
+								}
+							}
+						});
+						tableColumMap.forEach((k, v) -> {
+							if (!attributeMap.containsKey(k)) {
+								deleteList.add(k);
+							}
+						});
+						modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount());
+						modifyAttributeInfo.setOrderModifyDate(new Date());
+						modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+						modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue());
+						modifyAttributeInfo.setAddAttributes(String.join(",", addList));
+						modifyAttributeInfo.setModifyAttributes(String.join(",", editList));
+						modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList));
+						modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList));
+					}
+
+				}
+		});
+		return modifyAttributeInfoDOList;
+	}
+
+	/**
+	 * 鍒ゆ柇鏄惁闇�瑕佷慨鏀瑰睘鎬�
+	 *
+	 * @param btmTypeAttributeVO 灞炴�х殑鏄剧ず瀵硅薄
+	 * @param tableInDB          鏁版嵁搴撹〃閲岀殑瀵硅薄
+	 * @return true琛ㄧず闇�瑕佷慨鏀癸紝false琛ㄧず涓嶄慨鏀�
+	 */
+	private boolean checkNeedEditAttr(BtmTypeAttributeVO btmTypeAttributeVO, DdlTableInDataBaseBO tableInDB) {
+		if (tableInDB.getAttributeLength() == null) {
+			tableInDB.setAttributeLength(0);
+		}
+		if (tableInDB.getPrecisionLength() == null) {
+			tableInDB.setPrecisionLength(20);
+		}
+		if (tableInDB.getScaleLength() == null) {
+			tableInDB.setScaleLength(0);
+		}
+		String nullInDb = "";
+		if (YES.equalsIgnoreCase(tableInDB.getNullableFlag())) {
+			nullInDb = BooleanEnum.TRUE.getValue();
+		} else if (NO.equalsIgnoreCase(tableInDB.getNullableFlag())) {
+			nullInDb = BooleanEnum.FASLE.getValue();
+		}
+		if (!(String.valueOf(btmTypeAttributeVO.isNullableFlag()).equalsIgnoreCase(nullInDb))) {
+			return true;
+		}
+		if (StringUtils.isNotBlank(btmTypeAttributeVO.getDefaultValue())) {
+			return true;
+		}
+
+
+		List<VciFieldTypeEnum> fieldTypes = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType());
+		if (CollectionUtils.isEmpty(fieldTypes)) {
+			throw new VciBaseException("娌℃湁鎵惧埌瀵瑰簲鐨勫瓧娈电被鍨�");
+		}
+		Set<String> names = fieldTypes.stream().map(Enum::name).collect(Collectors.toSet());
+		String attributeDataType = btmTypeAttributeVO.getAttrDataType();
+		if (names.size() > 1) {
+			return !names.contains(attributeDataType);
+		} else {
+			VciFieldTypeEnum fieldType = fieldTypes.get(0);
+			if (attributeDataType.equalsIgnoreCase(fieldType.name())) {
+				switch (fieldType) {
+					case VTString:
+						if (btmTypeAttributeVO.getAttributeLength().intValue() != tableInDB.getAttributeLength().intValue()) {
+							return true;
+						}
+						break;
+					case VTDouble:
+						//涓嶈秴杩�128
+						if (btmTypeAttributeVO.getPrecisionLength().intValue() != tableInDB.getPrecisionLength().intValue()) {
+							return true;
+						}
+						if (btmTypeAttributeVO.getScaleLength().intValue() != tableInDB.getScaleLength().intValue()) {
+							return true;
+						}
+						break;
+					default:
+						break;
+				}
+			}
+			return false;
+		}
 	}
 
 	/**
@@ -469,8 +807,138 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public void reflexDifferent(List<ModifyAttributeInfoDO> differentAttributeList) throws VciBaseException {
+	public void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList, List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
+		VciBaseUtil.alertNotNull(differentAttributeList, "瑕佹竻鐞嗙殑鏁版嵁搴撶殑淇℃伅涓虹┖");
+		Map<String, BtmTypeVO> idBtmTypeMap = btmTypeVOList.stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1));
+		Map<String, LinkTypeVO> idLinkTypeMap = linkTypeVOList.stream().collect(Collectors.toMap(LinkTypeVO::getId, t -> t, (o1, o2) -> o1));
+		differentAttributeList.forEach(s -> {
+//			BtmTypeVO btmType = idBtmTypeMap.get(id);
+			if (ModifyTableTaskEnum.CREATE.getValue().equalsIgnoreCase(s.getTaskName())) {
+				//鐩存帴鍒涘缓琛ㄦ牸
+//				createDbTableForBtm(btmType);
+				createDbTablesById(s.getId());
+			} else {
+				String addAttributes = s.getAddAttributes();
+				if (StringUtils.isNotBlank(s.getModifyAttributes()) || StringUtils.isNotBlank(s.getDeleteAttributes())) {
+					//闇�瑕佸幓鍒ゆ柇鏄惁鍙互鏇存敼
+					if (checkTableHasDataByTableName(s.getTableName())) {
+						//鏈夋暟鎹殑璇濓紝寰楅渶瑕佸垽鏂睘鎬ф槸鍚﹀彲浠ヤ慨鏀�
+						if (StringUtils.isNotBlank(s.getDeleteAttributes())) {
+							s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛屼笉鍏佽鍒犻櫎瀛楁");
+							return;
+						}
+						List<DdlTableInDataBaseBO> columnInDbList = selectTableColumnInfo(s.getTableName());
+						Map<String, DdlTableInDataBaseBO> columnInDbMap = new HashMap<>();
+						if (!CollectionUtils.isEmpty(columnInDbList)) {
+							columnInDbMap = columnInDbList.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase(), k -> k));
+						}
+						List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId().toLowerCase(), id))).collect(Collectors.toList());
+						//鏈夊彲鑳戒箣鍓嶅垽鏂殑鏃跺�欐暟鎹簱瀛樺湪锛岃�岀幇鍦ㄤ笉瀛樺湪浜�
+						List<String> unExitInDbIdList = new ArrayList<>();
+						Map<String, DdlTableInDataBaseBO> finalColumnInDbMap = columnInDbMap;
+						List<BtmTypeAttributeVO> needEditAttributeVOList = new ArrayList<>();
+						if (!CollectionUtils.isEmpty(attributeVOList)) {
+							attributeVOList.forEach(t -> {
+								if (finalColumnInDbMap.containsKey(t.getId().toLowerCase().trim())) {
+									needEditAttributeVOList.add(t);
+								} else {
+									unExitInDbIdList.add(t.getId());
+								}
+							});
+						}
+						if (!CollectionUtils.isEmpty(needEditAttributeVOList)) {
+							List<BtmTypeAttributeVO> unModifyAttrVOList = needEditAttributeVOList.stream().filter(t -> !checkNotCanEditAttr(t.getAttrDataType(), finalColumnInDbMap.get(t.getId().trim().toLowerCase()))).collect(Collectors.toList());
+							if (!CollectionUtils.isEmpty(unModifyAttrVOList)) {
+								s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛�" + unModifyAttrVOList.stream().map(BtmTypeAttributeVO::getId).collect(Collectors.joining(",")) + "杩欎簺瀛楁涓嶈兘淇敼");
+								return;
+							}
+							needEditAttributeVOList.stream().forEach(t -> {
+								String attributeLowerId = t.getId().trim().toLowerCase();
+								DdlTableInDataBaseBO columInDb = finalColumnInDbMap.get(attributeLowerId);
+								if (!t.getName().equalsIgnoreCase(columInDb.getName())) {
+									ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName());
+								}
+								if (columInDb.getAttributeLength() != null && t.getAttributeLength() != null
+									&& t.getAttributeLength() < columInDb.getAttributeLength()) {
+									t.setAttributeLength(columInDb.getAttributeLength());
+								}
+								List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>();
 
+								boolean nowNeedNull = false;
+								if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && !t.isNullableFlag()) {
+									//璇存槑浠ュ墠鏄笉鑳戒负绌虹殑,浣嗘槸浠ュ墠涔熸槸涓嶄负绌虹殑锛屼慨鏀逛細鎶ラ敊锛屾墍浠ヨ繖涓皟鏁翠竴涓�
+									t.setNullableFlag(true);
+								} else if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && t.isNullableFlag()) {
+									//浠ュ墠涓嶄负绌猴紝鐜板湪涓虹┖
+									nowNeedNull = true;
+								}
+								attributeVOS.add(t);
+								String attributeSql = getCreateSqlByAttributeForBtm(attributeVOS);
+								if (nowNeedNull) {
+									attributeSql += StringPool.SPACE + "null" + StringPool.SPACE;
+								}
+								ddlMapper.modifyTableBySql(s.getTableName(), attributeSql);
+							});
+						}
+						if (!CollectionUtils.isEmpty(unExitInDbIdList)) {
+							if (StringUtils.isBlank(addAttributes)) {
+								addAttributes = String.join(",", unExitInDbIdList);
+							} else {
+								addAttributes += "," + String.join(",", unExitInDbIdList);
+								;
+							}
+						}
+					} else {
+						//璇存槑娌℃湁鏁版嵁锛岄偅鍙互鎶婁慨鏀圭殑鍒楀拰鍒犻櫎鐨勫垪閮藉垹闄わ紝鐒跺悗閲嶆柊娣诲姞
+						if (StringUtils.isNotBlank(s.getModifyAttributes())) {
+							List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getModifyAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+							if (!CollectionUtils.isEmpty(attributeVOList)) {
+								attributeVOList.forEach(t -> {
+									List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>();
+									attributeVOS.add(t);
+									dropColumnByName(s.getTableName(), t.getId());
+									addColumnForTable(s.getTableName(), attributeVOS);
+									ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName());
+								});
+							}
+						}
+						//闇�瑕佸垹闄ょ殑鍒�
+						if (StringUtils.isNotBlank(s.getDeleteAttributes())) {
+							List<String> attributeIdList = VciBaseUtil.str2List(s.getDeleteAttributes());
+							Optional.ofNullable(attributeIdList).orElseGet(ArrayList::new).forEach(t -> {
+								dropColumnByName(s.getTableName(), t);
+							});
+						}
+					}
+				}
+				if (StringUtils.isNotBlank(addAttributes)) {
+					//鍙槸娣诲姞灞炴�у��
+					if (BusinessTypeEnum.LINK.getValue().equalsIgnoreCase(s.getBusinessType())) {
+						List<LinkTypeAttributeVO> attributeVOList = idLinkTypeMap.getOrDefault(s.getId(), new LinkTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+						//鏄摼鎺ョ被鍨�
+//						List<LinkTypeAttributeVO> attributeVOList = linkTypeService.listAttributeVOByIdsForLink(s.getId(), VciBaseUtil.str2List(s.getAddAttributes()));
+						addColumn2TableForLink(attributeVOList);
+					} else {
+						List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList());
+						addColumn2TableForBtm(attributeVOList);
+					}
+				}
+			}
+		});
+	}
+
+	private boolean checkNotCanEditAttr(String attributeDataType, DdlTableInDataBaseBO tableInDB) {
+		if (tableInDB != null && StringUtils.isNotBlank(attributeDataType)) {
+			List<VciFieldTypeEnum> fieldTypeEnums = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType());
+			Set<String> names = fieldTypeEnums.stream().map(Enum::name).collect(Collectors.toSet());
+			if (names.contains(attributeDataType)) {
+				return true;
+			}
+			return true;
+		} else {
+			//鍥犱负鏁版嵁搴撻噷娌℃湁杩欎釜琛ㄦ牸鏃�
+			return true;
+		}
 	}
 
 	/**
@@ -492,7 +960,7 @@
 	 */
 	@Override
 	public List<DdlTableBO> listTableInfoInDB(Collection<String> tableNamesCollections) throws VciBaseException {
-		VciBaseUtil.alertCollectionNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", tableNamesCollections);
+		VciBaseUtil.alertNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", tableNamesCollections);
 		List<DdlTableBO> tableBOList = new ArrayList<>();
 		tableNamesCollections.stream().forEach(s -> {
 			tableBOList.add(ddlMapper.selectTableComment(s));
@@ -561,49 +1029,30 @@
 	/**
 	 * 涓氬姟绫诲瀷鏁版嵁搴撴柊澧炴垨淇敼琛�
 	 *
-	 * @param dto 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param ddlDTO 涓氬姟绫诲瀷閾炬帴绫诲瀷浼犺緭瀵硅薄
 	 * @return 鎵ц缁撴灉
 	 */
 	@Override
-	public R submitBtmType(BtmTypeDTO dto) {
-		VciBaseUtil.alertNotNull(dto, "涓氬姟绫诲瀷", dto.getAttributesDTOList(), "涓氬姟绫诲瀷灞炴��");
-		BtmTypeVO btmTypeVO = Objects.requireNonNull(BeanUtil.copy(dto, BtmTypeVO.class));
-		if (Func.isNotBlank(dto.getTableName())) {
-			checkModifyOrCreateTable(btmTypeVO);
-		} else {
-			if (checkTableExistById(dto.getId())) {
-				String tableName = getTableNameByBtmTypeId(dto.getId());
-				btmTypeVO.setTableName(tableName);
-				checkModifyOrCreateTable(btmTypeVO);
-			} else {
-				String tableName = TABLE_PREFIX + StringPool.UNDERSCORE + dto.getDomain().toUpperCase(Locale.ROOT) + StringPool.UNDERSCORE + dto.getId().toUpperCase(Locale.ROOT);
-				btmTypeVO.setTableName(tableName);
-				createDbTableForBtm(btmTypeVO);
+	public R<List<ModifyAttributeInfo>> submit(BtmAndLinkTypeDdlDTO ddlDTO) {
+		try {
+			List<ModifyAttributeInfo> changedList = new ArrayList<>();
+			if (!CollectionUtils.isEmpty(ddlDTO.getBtmTypeList())) {
+				List<BtmTypeVO> btmTypeList = ddlDTO.getBtmTypeList();
+				putBtm(btmTypeList.toArray(new BtmTypeVO[0]));
+				changedList.addAll(checkDifferent(btmTypeList, null));
+				removeBtm(btmTypeList.toArray(new BtmTypeVO[0]));
 			}
-		}
-		return R.success("000000");
-	}
-
-	/**
-	 * 妫�鏌ヤ笟鍔$被鍨嬬殑琛ㄦ槸鍚﹀瓨鍦紝濡傛灉瀛樺湪鍒欐瘮杈冨樊鍒繘琛屼慨鏀癸紝涓嶅瓨鍦ㄥ垯鍒涘缓
-	 *
-	 * @param btmTypeVO 涓氬姟绫诲瀷
-	 */
-	private void checkModifyOrCreateTable(BtmTypeVO btmTypeVO) {
-		if (checkTableExistByTableName(btmTypeVO.getTableName())) {
-			// 琛ㄥ凡瀛樺湪锛屾牎楠屽睘鎬�
-			List<BtmTypeVO> vos = new ArrayList<>();
-			vos.add(btmTypeVO);
-			List<ModifyAttributeInfoDO> differentAttributeList = checkDifferent(vos, null);
-			if (CollectionUtils.isEmpty(differentAttributeList)) {
-				// 鍙互鐩存帴鍒犻櫎鍐嶅垱寤�
-				dropTableByName(btmTypeVO.getTableName());
-				createDbTableForBtm(btmTypeVO);
-			} else {
-				// TODO: 淇敼鐨勬殏鏃惰繕娌″仛
+			if (!CollectionUtils.isEmpty(ddlDTO.getLinkTypeList())) {
+				List<LinkTypeVO> linkTypeList = ddlDTO.getLinkTypeList();
+				putLink(linkTypeList.toArray(new LinkTypeVO[0]));
+				changedList.addAll(checkDifferent(null,linkTypeList));
+				removeLink(linkTypeList.toArray(new LinkTypeVO[0]));
 			}
-		} else {
-			createDbTableForBtm(btmTypeVO);
+			R<List<ModifyAttributeInfo>> result = R.success("鏁版嵁搴撴搷浣滄垚鍔�");
+			result.setData(changedList);
+			return result;
+		} catch (ServiceException e) {
+			throw new RuntimeException(e.getMessage());
 		}
 	}
 
@@ -615,7 +1064,7 @@
 	 */
 	@Override
 	public DdlTableBO getTableColumnByTableName(String tableName) {
-		VciBaseUtil.alertNotNull(tableName,"琛ㄥ悕");
+		VciBaseUtil.alertNotNull(tableName, "琛ㄥ悕");
 		DdlTableBO tableBO = getTableInfoByTableName(tableName);
 		List<DdlTableInDataBaseBO> columnInfo = selectTableColumnInfo(tableName);
 		tableBO.setColumns(columnInfo);
@@ -635,10 +1084,11 @@
 
 	/**
 	 * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭�
+	 *
 	 * @param tableName 琛ㄥ悕
 	 * @return 琛ㄤ俊鎭�
 	 */
-	private DdlTableBO getTableInfoByTableName(String tableName){
+	private DdlTableBO getTableInfoByTableName(String tableName) {
 		VciBaseUtil.alertNotNull(tableName, "琛ㄦ牸鍚嶇О");
 		return ddlMapper.selectTableComment(tableName);
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
index 2a88bb7..698a29a 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
@@ -1,11 +1,13 @@
 package com.vci.ubcs.omd.controller;
 
+import com.alibaba.nacos.api.exception.NacosException;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.vci.ubcs.omd.constant.OmdCacheConstant;
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
 import com.vci.ubcs.omd.entity.BtmType;
+import com.vci.ubcs.omd.repeater.DomainRepeater;
 import com.vci.ubcs.omd.service.IBtmTypeService;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
@@ -107,12 +109,12 @@
 	 * @param dto 鍏冩暟鎹〉闈紶杈撳璞�
 	 * @return 鎵ц缁撴灉
 	 */
-	@PostMapping("/submit")
+	@PostMapping("/submit/{auto}")
 	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆鍏冩暟鎹璞�")
-	public R submit(@Valid @RequestBody BtmTypeDTO dto) {
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆涓氬姟绫诲瀷瀵硅薄")
+	public R submit(@Valid @RequestBody BtmTypeDTO dto,@PathVariable(value = "auto") boolean auto) {
 		CacheUtil.clear(OmdCacheConstant.BTM_CACHE);
-		return R.status(btmTypeService.submit(dto));
+		return btmTypeService.submit(dto,auto);
 	}
 
 	/**
@@ -134,4 +136,18 @@
 		}
 		return R.status(btmTypeService.removeBatchByIds(oidList));
 	}
+
+	/**
+	 * 鑾峰彇棰嗗煙鍊�
+	 */
+	@GetMapping("/domain")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鑾峰彇棰嗗煙鍊�")
+	public R<List<String>> getDomain(){
+		try {
+			return R.data(DomainRepeater.getDomain());
+		} catch (NacosException e) {
+			return R.fail(e.getErrMsg());
+		}
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
index 5625897..9cc00c3 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
@@ -54,7 +54,7 @@
 	 * @return 鏌ヨ缁撴灉
 	 */
 	@Override
-	public R<IPage<BtmTypeVO>> getRef(Map<String, Object> condition, Query query, String domain) {
+	public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
 		Func.requireNotNull(domain,"棰嗗煙鍊�");
 		IPage<BtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
 		IPage<BtmTypeVO> pageVO = new Page<>();
@@ -66,6 +66,20 @@
 	}
 
 	/**
+	 * 鍙傜収鍒楄〃鏌ヨ
+	 *
+	 * @param condition 鏌ヨ鏉′欢
+	 * @param domain    棰嗗煙鍊�
+	 * @return 鏌ヨ缁撴灉
+	 */
+	@Override
+	public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
+		Func.requireNotNull(domain,"棰嗗煙鍊�");
+		List<BtmType> list = btmTypeService.list(Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
+		return R.data(BtmTypeWrapper.build().listEntityVO(list));
+	}
+
+	/**
 	 * 鏍规嵁鑻辨枃鍚嶇О鎵归噺鏌ヨ瀵硅薄
 	 *
 	 * @param ids 瀵硅薄鑻辨枃鍚嶇О 浣嗘槸涓嶈兘瓒呰繃1000
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
index 793bec1..867a903 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
@@ -1,13 +1,37 @@
 package com.vci.ubcs.omd.mapper;
 
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.core.mp.mapper.BladeMapper;
 
+import java.util.Collection;
+import java.util.List;
+
 /**
- * Description:
+ * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�х殑mapper
  *
  * @author LiHang
  * @date 2023/4/23
  */
 public interface BtmTypeAttributeMapper extends BladeMapper<BtmTypeAttribute> {
+
+    int batchDelete(List<String> records);
+
+
+	int batchUpdate(List<BtmTypeAttribute> btmTypeAttributeDOList);
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 * @param id 涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(@Param("btmTypeId")String id, @Param("ids") Collection<String> attributeIdCollection);
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIds(@Param("ids") Collection<String> ids);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java
new file mode 100644
index 0000000..d23f570
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public interface ModifyAttributeInfoMapper extends BaseMapper<ModifyAttributeInfo> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
index 2ee2237..24e772c 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
@@ -6,7 +6,10 @@
 import com.alibaba.nacos.api.exception.NacosException;
 import com.alibaba.nacos.api.naming.NamingService;
 import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.omd.vo.LinkTypeVO;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -16,13 +19,13 @@
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.PostConstruct;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Description: 棰嗗煙杞彂鍣�
@@ -30,9 +33,8 @@
  * @author LiHang
  * @date 2023/4/25
  */
+@Component
 public class DomainRepeater {
-	private DomainRepeater() {
-	}
 
 	/**
 	 * 鎺у埗鍣ㄨ矾寰�
@@ -42,63 +44,183 @@
 	/**
 	 * 鏂板鎴栦慨鏀圭殑杞彂璺緞鍚嶇О
 	 */
-	public static final String API_SUBMIT_BTM_TYPE = API_PREFIX + StringPool.SLASH +"submitBtmType";
+	public static final String API_SUBMIT = API_PREFIX + StringPool.SLASH + "submit";
 
 	/**
 	 * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭�
 	 */
-	public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getTableColumnByTableName";
+	public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH + "getTableColumnByTableName";
 
 	/**
 	 * 鑾峰彇鍏ㄩ儴琛ㄤ俊鎭�
 	 */
-	public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getAllTableInfo";
+	public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH + "getAllTableInfo";
+	/**
+	 * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂�
+	 */
+	public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex";
 
+	/**
+	 * 鐢ㄤ簬鏋勫缓闈欐�佹湇鍔$被
+	 */
+	public static DomainRepeater domainRepeater;
 	/**
 	 * Nacos鏈嶅姟鍒楄〃
 	 */
-	private static NamingService namingService = SINGLE.build();
+	private static NamingService namingService;
 
-	private static class SINGLE {
-		@Autowired
-		private NacosServiceManager manager;
-		private static NacosServiceManager nacosServiceManager;
+	@Autowired
+	private NacosServiceManager manager;
 
-		@Autowired
-		private NacosDiscoveryProperties properties;
-		private static NacosDiscoveryProperties nacosDiscoveryProperties;
+	@Autowired
+	private NacosDiscoveryProperties properties;
 
-		@PostConstruct
-		private void init(){
-			nacosServiceManager = manager;
-			nacosDiscoveryProperties = properties;
-		}
-		private static NamingService build(){
-			return nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
-		}
+	@PostConstruct
+	private void init() {
+		domainRepeater = this;
+		namingService = manager.getNamingService(properties.getNacosProperties());
 	}
 
-	public static R submitBtmType (String serviceName, BtmTypeVO btmTypeVO) throws NacosException {
-		Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
+	/**
+	 * 涓�鑷存�ф鏌�
+	 * @param ddlDTO 涓氬姟绫诲瀷銆侀摼鎺ョ被鍨嬩紶杈撳璞�
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+	public static R checkDifferent(BtmAndLinkTypeDdlDTO ddlDTO,String serviceName) throws NacosException {
 		try {
-			String url = "http://" + service.getIp() +StringPool.COLON+ service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + API_SUBMIT_BTM_TYPE;
-			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(btmTypeVO), null);
-			if (responseEntity.getStatusCode().equals(HttpStatus.OK)){
-				return responseEntity.getBody();
+			String url = getUrl(serviceName, API_CHECK_DIFFERENT_REFLEX);
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				R body = Objects.requireNonNull(responseEntity.getBody());
+				return body;
 			}
 			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		}catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}
+		return R.fail("鏈煡閿欒");
 	}
 
-	private static ResponseEntity<R> executePost(String url, String body,Map<String,String> extraHeaders) throws IOException {
+	/**
+	 * 鏍规嵁api鎺ュ彛鎷兼帴url鍦板潃
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @param api 鎺ュ彛鍦板潃
+	 * @return url鍦板潃
+	 * @throws NacosException nacos鏌ヨ鏈嶅姟鍑洪敊鏃舵姏鍑哄紓甯�
+	 */
+
+	public static String getUrl(String serviceName,String api) throws NacosException {
+		Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
+		return "http://" + service.getIp() + StringPool.COLON + service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + api;
+	}
+
+
+	/**
+	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
+	 * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 */
+	public static R submitBtmType(String serviceName, BtmTypeVO vo) {
+		try {
+			String url = getUrl(serviceName, API_SUBMIT);
+			BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+			ddlDTO.setBtmTypeList(new ArrayList<>(Collections.singletonList(vo)));
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				return responseEntity.getBody();
+			}
+			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		} catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		return R.fail("鏈煡閿欒");
+	}
+
+	/**
+	 * 鏂板鎴栦慨鏀归摼鎺ョ被鍨�
+	 * @param vo 涓氬姟绫诲瀷浼犺緭瀵硅薄
+	 * @param serviceName 鏈嶅姟鍚�
+	 * @return 鎵ц缁撴灉锛屾湁淇敼鐨勫氨浼氳繑鍥炪��
+	 */
+	public static R submitLinkType(String serviceName, LinkTypeVO vo) {
+		try {
+			String url = getUrl(serviceName, API_SUBMIT);
+			BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+			ddlDTO.setLinkTypeList(new ArrayList<>(Collections.singletonList(vo)));
+			ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
+			if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
+				return responseEntity.getBody();
+			}
+			return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
+		} catch (HttpClientErrorException e) {
+			if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
+				R fail = R.fail("璋冪敤鏈嶅姟澶辫触");
+				fail.setCode(HttpStatus.NOT_FOUND.value());
+				return fail;
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		return R.fail("鏈煡閿欒");
+	}
+
+	/**
+	 * 鎵цhttpPost鎺ュ彛
+	 *
+	 * @param url          鍦板潃
+	 * @param body         璇锋眰浣�
+	 * @param extraHeaders 璇锋眰澶村弬鏁�
+	 * @return 鎵ц缁撴灉
+	 */
+	private static ResponseEntity<R> executePost(String url, String body, Map<String, String> extraHeaders) {
 		RestTemplate restTemplate = new RestTemplate();
 		HttpHeaders httpHeaders = new HttpHeaders();
-		httpHeaders.add("Content-Type","application/json;charset=UTF-8");
+		httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
 		httpHeaders.add("Blade-Auth", AuthUtil.getHeader());
 		Optional.ofNullable(extraHeaders).orElseGet(HashMap::new).forEach(httpHeaders::add);
-		HttpEntity<String> request = new HttpEntity<>(body,httpHeaders);
+		HttpEntity<String> request = new HttpEntity<>(body, httpHeaders);
 		return restTemplate.postForEntity(url, request, R.class);
 	}
+
+	/**
+	 * 鑾峰彇鎵�鏈夊凡娉ㄥ唽鐨勬湇鍔�
+	 * @return 涓嶅寘鍚粯璁ゆ湇鍔$殑鍏朵粬鏈嶅姟
+	 * @throws NacosException
+	 */
+	public static List<String> getDomain() throws NacosException {
+		List<ServiceInfo> services = namingService.getSubscribeServices();
+		Set<String> serviceNames = new HashSet<>();
+		serviceNames.add(AppConstant.APPLICATION_GATEWAY_NAME);
+		serviceNames.add(AppConstant.APPLICATION_ADMIN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_AUTH_NAME);
+		serviceNames.add(AppConstant.APPLICATION_DESK_NAME);
+		serviceNames.add(AppConstant.APPLICATION_DEVELOP_NAME);
+		serviceNames.add(AppConstant.APPLICATION_FLOW_NAME);
+		serviceNames.add(AppConstant.APPLICATION_FLOWDESIGN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_LOG_NAME);
+		serviceNames.add(AppConstant.APPLICATION_REPORT_NAME);
+		serviceNames.add(AppConstant.APPLICATION_SWAGGER_NAME);
+		serviceNames.add(AppConstant.APPLICATION_SYSTEM_NAME);
+		serviceNames.add(AppConstant.APPLICATION_TURBINE_NAME);
+		serviceNames.add(AppConstant.APPLICATION_USER_NAME);
+		serviceNames.add(AppConstant.APPLICATION_WEBSOCKET_NAME);
+		serviceNames.add(AppConstant.APPLICATION_ZIPKIN_NAME);
+		serviceNames.add(AppConstant.APPLICATION_NAME_OMD);
+		return services.stream().map(ServiceInfo::getName).filter(s -> !serviceNames.contains(s)).collect(Collectors.toList());
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
index dabf1bb..372316a 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
@@ -3,10 +3,10 @@
 import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseService;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * Description:涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟
@@ -22,9 +22,9 @@
 	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
 	 * @param creator 鍒涘缓浜�
 	 * @param now ts鏃堕棿鎴�
-	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 * @return 淇濆瓨鐨勬樉绀哄璞�
 	 */
-	int checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
+	List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
 
 	/**
 	 * 鎵归噺鎻掑叆
@@ -38,4 +38,46 @@
 	 * @return 鏌ヨ缁撴灉
 	 */
     List<BtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid);
+
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws ServiceException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection);
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟鍒犻櫎
+	 * @param records 涓婚敭闆嗗悎
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	int checkAndRemove(List<String> records);
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 * @param btmTypeOid 涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator 鍒涘缓浜�
+	 * @param now ts鏃堕棿鎴�
+	 * @return 淇濆瓨鐨勬樉绀哄璞�
+	 */
+	List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 * @param id 涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,鑻ヤ负绌哄垯鑾峰彇鍏ㄩ儴
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection);
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 * @param idList 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
index 066dbe1..f59367e 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
@@ -4,12 +4,13 @@
 import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
 import com.vci.ubcs.omd.entity.BtmType;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
-import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.vo.LinkTypeVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 
 import java.util.Collection;
 import java.util.Date;
@@ -170,24 +171,6 @@
     boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException;
 
     /**
-     * 娣诲姞涓氬姟绫诲瀷
-     * @param btmTypeDTO 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
-     * @param autoCreateTable 鏄惁鑷姩鍒涘缓琛ㄦ牸
-     * @return 娣诲姞鍚庣殑涓氬姟绫诲瀷
-     * @throws ServiceException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    BtmTypeDTO addSave(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException;
-
-    /**
-     * 淇敼涓氬姟绫诲瀷
-     * @param btmTypeDTO 涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
-     * @param autoEditTable 鏄惁鑷姩鏇存柊琛ㄦ牸
-     * @return 淇敼鍚庣殑涓氬姟绫诲瀷
-     * @throws ServiceException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-     */
-    BtmTypeDTO editSave(BtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException;
-
-    /**
      * 鍒犻櫎涓氬姟绫诲瀷
      * @param btmTypeVO 涓氬姟绫诲瀷鏄剧ず瀵硅薄
      * @param autoDeleteTable 鑷姩鍒犻櫎琛ㄦ牸
@@ -209,82 +192,22 @@
      * @return 涓嶅悓鐨勫睘鎬т俊鎭�
      * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
      */
-    List<ModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException;
+    List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException;
 
     /**
      * 鑾峰彇鏁版嵁搴撹〃锛屾敮鎸佷笟鍔$被鍨嬪拰瑙嗗浘
      * @param id 涓氬姟绫诲瀷鐨勫悕绉�
+	 * @param domain 棰嗗煙鍚嶇О
      * @return 鏁版嵁搴撹〃鐨勫悕绉�
      * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    String getTableName(String id) throws ServiceException;
-
-    /**
-     * 灏嗕笟鍔$被鍨嬩娇鐢ㄧ殑灞炴�х殑浼犺緭瀵硅薄杞崲涓烘暟鎹璞�
-     * @param attributesDTO 灞炴�х殑鏁版嵁浼犺緭瀵硅薄
-     * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿�
-     * @param creator 鍒涘缓浜�
-     * @param now 褰撳墠鏃堕棿
-     * @return 灞炴�х殑鏁版嵁瀵硅薄
-     */
-    BtmTypeAttribute btmTypeAttributeDTO2DO(BtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now);
-
-    /**
-     * 涓氬姟绫诲瀷鐨勫睘鎬ф樉绀哄璞¤浆鎹负鏁版嵁瀵硅薄
-     * @param thisBtmTypeHasAttributeVOList 涓氬姟绫诲瀷灞炴�ф樉绀哄璞�
-     * @return 鏁版嵁瀵硅薄
-     */
-    List<BtmTypeAttribute> btmTypeAttributeVO2DO(List<BtmTypeAttributeVO> thisBtmTypeHasAttributeVOList);
-
-    /**
-     * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param attributeDOList 灞炴�х殑鏁版嵁瀵硅薄鍒楄〃
-     * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
-     */
-    List<BtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<BtmTypeAttribute> attributeDOList);
-
-    /**
-     * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-     * @param attributesDO 灞炴�х殑鏁版嵁瀵硅薄
-     * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
-     */
-    BtmTypeAttributeVO btmTypeAttributeDO2VO(BtmTypeAttribute attributesDO);
-
-    /**
-     * 鑾峰彇涓氬姟绫诲瀷鐨勬寚瀹氬睘鎬�
-     * @param id 閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
-     * @param attributeIdCollection 灞炴�х殑闆嗗悎锛屽鏋滀负绌哄垯鑾峰彇鍏ㄩ儴
-     * @return 灞炴�х殑鏄剧ず瀵硅薄
-     */
-    List<BtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection);
-
-    /**
-     * 鏍规嵁涓氬姟绫诲瀷鐨勭紪鍙疯幏鍙栧睘鎬�
-     * @param id 涓氬姟绫诲瀷鐨勭紪鍙�
-     * @return 灞炴�х殑鏄剧ず瀵硅薄
-     */
-    List<BtmTypeAttributeVO> listAttributeByBtmTypeId(String id);
-
-    /**
-     * 鏍规嵁涓氬姟绫诲瀷鐨勪富閿幏鍙栧睘鎬�
-     * @param oid 涓氬姟绫诲瀷鐨勪富閿�
-     * @return 灞炴�х殑鏄剧ず瀵硅薄
-     */
-    List<BtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid);
-
-    /**
-     * 鎵归噺鏍规嵁涓氬姟绫诲瀷缂栧彿鎴栬�呬富閿幏鍙栧寘鍚殑灞炴��
-     * @param oidsOrIds 涓婚敭鎴栬�呯紪鍙烽泦鍚�
-     * @param queryById 鏄惁浣跨敤缂栧彿鏌ヨ
-     * @return key鏄笟鍔$被鍨嬬殑涓婚敭鎴栬�呯紪鍙凤紝鍊兼槸鍖呭惈鐨勫睘鎬х殑淇℃伅
-     * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
-     */
-     List<BtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException;
+    String getTableName(String id,String domain) throws ServiceException;
 
 	/**
 	 * 鏂板鎴栦慨鏀逛笟鍔$被鍨�
 	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 * @param autoCreateTable 鑷姩鍒涘缓琛�
 	 * @return 鎵ц缁撴灉
 	 */
-	boolean submit(BtmTypeDTO btmTypeDTO);
+	R submit(BtmTypeDTO btmTypeDTO,boolean autoCreateTable);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
new file mode 100644
index 0000000..5ec3afe
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.service;
+
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * Description:闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭湇鍔�
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public interface IModifyAttributeService extends BaseService<ModifyAttributeInfo> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
index c61c7f3..a2deddc 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.omd.service.impl;
 
+import com.alibaba.cloud.commons.lang.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,8 @@
 import com.vci.ubcs.omd.vo.AttributeVO;
 import com.vci.ubcs.omd.wrapper.AttributeWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.log.exception.ServiceException;
@@ -180,6 +183,30 @@
 	 */
 	@Override
 	public boolean checkAttributePass(String id, String attrDataType, Integer attributeLength, String defaultValue) throws VciBaseException {
+		String attributeDataTypeText = VciFieldTypeEnum.getTextByValue(attrDataType);
+		if(StringUtils.isBlank(attributeDataTypeText)){
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑绫诲瀷涓嶇鍚堣姹�",new Object[]{id});
+		}
+		//蹇呴』瑕佽緭鍏ラ暱搴�
+		if( VciBaseUtil.inArray(new String[] {VciFieldTypeEnum.VTString.name()},attrDataType)
+			&& (attributeLength == null ||attributeLength < 1)){
+			throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑涓簕1}绫诲瀷鏃讹紝蹇呴』瑕佽緭鍏ラ暱搴︾殑鍊�",new Object[]{id,attributeDataTypeText});
+		}
+		//鍒ゆ柇榛樿鍊�
+		if(StringUtils.isNotBlank(defaultValue)){
+			if(VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrDataType)
+				&& !defaultValue.matches(OmdRegExpConstant.DOUBLE)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄弻绮惧害绫诲瀷",new Object[]{id});
+			}
+			if(VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(defaultValue)
+				&& !defaultValue.matches(OmdRegExpConstant.INT)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄暣鏁板瀷",new Object[]{id});
+			}
+			if(VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(defaultValue)
+				&& !defaultValue.matches(OmdRegExpConstant.LONG)){
+				throw new VciBaseException("鑻辨枃鍚嶇О涓簕0}鐨勫睘鎬х殑榛樿鍊间笉鏄暱鏁村舰",new Object[]{id});
+			}
+		}
 		return true;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
index 94cbe3d..880efbc 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
@@ -9,16 +9,15 @@
 import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�х殑鏈嶅姟瀹炵幇绫�
@@ -49,7 +48,7 @@
 	 * @return 鍙楀奖鍝嶇殑琛屾暟
 	 */
 	@Override
-	public int checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
+	public List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
 		List<String> attributeIdList = new ArrayList<>();
 		List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
 		if (!CollectionUtils.isEmpty(attributesDTOList)) {
@@ -61,14 +60,62 @@
 			//妫�鏌ュ睘鎬ф槸鍚﹂兘瀛樺湪
 			boolean exists = attributeService.checkAttributeExists(attributeIdList);
 			if (!exists){
-				return -1;
+				return null;
 			}
-			return batchInsert(btmTypeAttributeDOList);
+			batchInsert(btmTypeAttributeDOList);
+			return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
 //            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
 //                btmTypeAttributeDOMapper.insert(s);
 //            });
 		}
-		return 0;
+		return null;
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟鍒犻櫎
+	 *
+	 * @param records 涓婚敭闆嗗悎
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public int checkAndRemove(List<String> records) {
+		if (CollectionUtils.isEmpty(records)){
+			return 0;
+		}
+		return baseMapper.batchDelete(records);
+	}
+
+	/**
+	 * 妫�鏌ュ睘鎬у瓨鍦ㄥ苟娣诲姞
+	 *
+	 * @param btmTypeOid        涓氬姟绫诲瀷涓婚敭
+	 * @param attributesDTOList 椤甸潰浼犺緭瀵硅薄闆嗗悎
+	 * @param creator           鍒涘缓浜�
+	 * @param now               ts鏃堕棿鎴�
+	 * @return 鍙楀奖鍝嶇殑琛屾暟
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
+		List<String> attributeIdList = new ArrayList<>();
+		List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(attributesDTOList)) {
+			attributesDTOList.stream().forEachOrdered(s -> {
+				attributeService.checkAttribute(s);
+				btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
+				attributeIdList.add(s.getId().toLowerCase().trim());
+			});
+			//妫�鏌ュ睘鎬ф槸鍚﹂兘瀛樺湪
+			boolean exists = attributeService.checkAttributeExists(attributeIdList);
+			if (!exists){
+				return null;
+			}
+			baseMapper.batchUpdate(btmTypeAttributeDOList);
+			return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
+//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
+//                btmTypeAttributeDOMapper.insert(s);
+//            });
+		}
+		return null;
 	}
 
 	/**
@@ -95,4 +142,41 @@
 			).orElseGet(ArrayList::new)
 		);
 	}
+
+	/**
+	 * 鏍规嵁涓氬姟绫诲瀷涓婚敭鑾峰彇鍏宠仈鐨勬墍鏈夊睘鎬у璞�
+	 *
+	 * @param oidCollection 涓氬姟绫诲瀷涓婚敭闆嗗悎
+	 * @return 鎵�鏈夌殑灞炴�у璞★紝鍖呮嫭绯荤粺鍐呯疆灞炴�э紝key鏄笟鍔$被鍨嬩富閿紝value鏄寘鍚殑灞炴��
+	 * @throws VciBaseException 涓氬姟绫诲瀷涓嶅瓨鍦紝鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
+	 */
+	@Override
+	public List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oidCollection,"涓氬姟绫诲瀷涓婚敭");
+		List<BtmTypeAttribute> doList = baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection));
+		return BtmTypeAttributeWrapper.build().listEntityVO(doList);
+	}
+
+	/**
+	 * 鑾峰彇涓氬姟绫诲瀷涓殑鎸囧畾灞炴��
+	 *
+	 * @param id                    涓氬姟绫诲瀷鐨勪富閿�
+	 * @param attributeIdCollection 灞炴�х殑id,鑻ヤ负绌哄垯鑾峰彇鍏ㄩ儴
+	 * @return 灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection) {
+		return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection);
+	}
+
+	/**
+	 * 閫氳繃涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栧叧鑱旂殑灞炴��
+	 *
+	 * @param idList 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉伴泦鍚�
+	 * @return 鍖呭惈鐨勫睘鎬�
+	 */
+	@Override
+	public List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList) {
+		return baseMapper.selectByBtmTypeIds(idList);
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
index bd51b5c..994199f 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -4,22 +4,27 @@
 import com.alibaba.nacos.api.exception.NacosException;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.omd.constant.BtmTypeConstant;
+import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
+import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
 import com.vci.ubcs.omd.repeater.DomainRepeater;
 import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
+import com.vci.ubcs.omd.service.IModifyAttributeService;
+import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
 import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
+import com.vci.ubcs.omd.wrapper.ModifyAttributeWrapper;
 import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
 import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
 import com.vci.ubcs.omd.entity.BtmType;
 import com.vci.ubcs.omd.entity.BtmTypeAttribute;
-import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
 import com.vci.ubcs.omd.mapper.BtmTypeMapper;
 import com.vci.ubcs.omd.service.IBtmTypeService;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.omd.vo.LinkTypeVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.starter.web.util.VciDateUtil;
 import org.springblade.core.log.exception.ServiceException;
@@ -27,6 +32,7 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Service;
@@ -37,6 +43,7 @@
 
 import javax.validation.constraints.NotEmpty;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Description: 涓氬姟绫诲瀷鏈嶅姟鐨勫疄鐜扮被
@@ -58,6 +65,17 @@
 	 */
 	@Autowired
 	private IBtmTypeAttributeService btmTypeAttributeService;
+
+	/**
+	 * 瀛楁淇敼淇℃伅鐨勬湇鍔�
+	 */
+	@Autowired
+	private IModifyAttributeService modifyAttributeService;
+
+	/**
+	 * 琛ㄥ悕鍓嶇紑
+	 */
+	public static final String PL = "PL";
 
 	/**
 	 * 璁剧疆骞冲彴鏈韩鐨勪笟鍔$被鍨�
@@ -93,7 +111,10 @@
 	 */
 	@Override
 	public List<BtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException {
-		return null;
+		VciBaseUtil.alertNotNull(pkBtmTypes, "涓氬姟绫诲瀷鐨勪富閿�");
+		List<String> pkList = new ArrayList<>();
+		Collections.addAll(pkList, pkBtmTypes.split(","));
+		return listBtmTypeByOidCollection(pkList);
 	}
 
 	/**
@@ -105,6 +126,12 @@
 	 */
 	@Override
 	public List<BtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException {
+		if (!CollectionUtils.isEmpty(pkBtmTypeCollection)) {
+			List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(pkBtmTypeCollection);
+			if (!CollectionUtils.isEmpty(btmTypeDOList)) {
+				return BtmTypeWrapper.build().listEntityVO(btmTypeDOList);
+			}
+		}
 		return null;
 	}
 
@@ -117,6 +144,11 @@
 	 */
 	@Override
 	public BtmTypeVO getBtmTypeById(String id) throws ServiceException {
+		VciBaseUtil.alertNotNull(id, "涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�");
+		List<BtmTypeVO> btmTypeVOList = listBtmTypeByIds(id);
+		if (!CollectionUtils.isEmpty(btmTypeVOList)) {
+			return btmTypeVOList.get(0);
+		}
 		return null;
 	}
 
@@ -129,7 +161,8 @@
 	 */
 	@Override
 	public List<BtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException {
-		return null;
+		Func.requireNotNull(ids,"鑻辨枃鍚嶇О涓嶈兘涓虹┖");
+		return listBtmTypeByIdCollection(Func.toStrList(",",ids));
 	}
 
 	/**
@@ -141,7 +174,7 @@
 	 */
 	@Override
 	public List<BtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException {
-		return null;
+		return CollectionUtils.isEmpty(idCollection) ?  null : BtmTypeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId,idCollection)));
 	}
 
 	/**
@@ -153,7 +186,7 @@
 	 */
 	@Override
 	public List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
-		return null;
+		return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection));
 	}
 
 	/**
@@ -165,6 +198,9 @@
 	 */
 	@Override
 	public List<BtmType> listBtmTypeDOByOidCollection(Collection<String> oidCollection) throws ServiceException {
+		if (!CollectionUtils.isEmpty(oidCollection)) {
+			return baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getOid, oidCollection));
+		}
 		return null;
 	}
 
@@ -177,7 +213,7 @@
 	 */
 	@Override
 	public String getNameByOid(String oid) throws ServiceException {
-		return null;
+		return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid,oid))).getName();
 	}
 
 	/**
@@ -189,7 +225,7 @@
 	 */
 	@Override
 	public String getNameById(String id) throws ServiceException {
-		return null;
+		return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getId,id))).getName();
 	}
 
 	/**
@@ -213,6 +249,16 @@
 	 */
 	@Override
 	public List<BtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException {
+		VciBaseUtil.alertNotNull(id,"涓氬姟绫诲瀷鑻辨枃鍚嶇О");
+		List<String> ids = Func.toStrList(",", id);
+		Map<String, List<BtmTypeAttributeVO>> attributeMap = batchListHasAttributesByIdCollection(ids);
+		if (!CollectionUtils.isEmpty(attributeMap)) {
+			List<BtmTypeAttributeVO> attributeVOList = new ArrayList<>();
+			attributeMap.forEach((k, v) -> {
+				attributeVOList.addAll(v);
+			});
+			return attributeVOList;
+		}
 		return null;
 	}
 
@@ -225,7 +271,7 @@
 	 */
 	@Override
 	public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException {
-		return null;
+		return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(oidCollection).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
 	}
 
 	/**
@@ -237,7 +283,8 @@
 	 */
 	@Override
 	public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException {
-		return null;
+		List<String> btmTypeOidList = baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection)).stream().map(BtmType::getOid).collect(Collectors.toList());
+		return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(btmTypeOidList).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
 	}
 
 	/**
@@ -261,7 +308,8 @@
 	 */
 	@Override
 	public boolean checkBtmTypeUsed(String pkBtmType) throws ServiceException {
-		return false;
+		VciBaseUtil.alertNotNull(pkBtmType, "涓氬姟绫诲瀷涓婚敭");
+		return checkBtmTypeUseds(VciBaseUtil.str2List(pkBtmType));
 	}
 
 	/**
@@ -273,113 +321,40 @@
 	 */
 	@Override
 	public boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException {
+		VciBaseUtil.alertCollectionNotNull("鏍¢獙鏄惁寮曠敤鐨勪笟鍔$被鍨嬪璞$殑涓婚敭", oidCollection);
+		//妫�鏌ラ摼鎺ョ被鍨�
+		//鍥犱负閾炬帴绫诲瀷涓璮romBtmType鍜宼oBtmType閮芥槸閫楀彿鍒嗛殧鐨勶紝鎵�浠ョ洿鎺ユ煡璇㈡墍鏈夌殑閾炬帴绫诲瀷涓殑浣跨敤鐨勪笟鍔$被鍨嬪悕绉�
+		List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(oidCollection);
+		if (CollectionUtils.isEmpty(btmTypeDOList)) {
+			return false;
+		}
+		/*Set<String> usedBtmTypeSet = linkTypeServiceI.listUsedBtmType();
+		if (btmTypeDOList.stream().anyMatch(s -> usedBtmTypeSet.contains(s.getId().trim().toLowerCase()))) {
+			return true;
+		}*/
 		return false;
 	}
 
 	/**
-	 * 娣诲姞涓氬姟绫诲瀷
-	 *
-	 * @param btmTypeDTO      涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
-	 * @param autoCreateTable 鏄惁鑷姩鍒涘缓琛ㄦ牸
-	 * @return 娣诲姞鍚庣殑涓氬姟绫诲瀷
-	 * @throws ServiceException 娣诲姞鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 * 娣诲姞榛樿鐨勫瓧娈�
+	 * @param attributes 瀛楁闆�
+	 * @param fieldMap 榛樿瀛楁闆�
+	 * @return 娣诲姞鍚庣殑瀛楁闆�
 	 */
-	@Override
-	public BtmTypeDTO addSave(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException {
-		TransactionStatus transaction = null;
-		DefaultTransactionDefinition def = null;
-		if (autoCreateTable) {
-			def = new DefaultTransactionDefinition();
-			def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-			// 浜嬬墿闅旂绾у埆锛屽紑鍚柊浜嬪姟锛岃繖鏍蜂細姣旇緝瀹夊叏浜涖��
-			transaction = dataSourceTransactionManager.getTransaction(def);
-			// 鑾峰緱浜嬪姟鐘舵��
-		}
-		BtmType btmTypeDO = new BtmType();
-		try {
-			VciBaseUtil.alertNotNull(btmTypeDTO, "瑕佹坊鍔犵殑涓氬姟绫诲瀷", btmTypeDTO.getId(), "涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�", btmTypeDTO.getName(), "涓氬姟绫诲瀷涓枃鍚嶇О");
-			if (btmTypeDTO.isViewFlag() && (StringUtils.isBlank(btmTypeDTO.getViewCreateSql())
-				|| StringUtils.isBlank(btmTypeDTO.getTableName()))) {
-				throw new VciBaseException("濡傛灉褰撳墠鏄笟鍔$被鍨嬫槸瑙嗗浘鐨勬椂鍊欙紝璇峰繀椤昏緭鍏ヨ鍥剧殑鍒涘缓璇彞鍜岃鍥惧悕绉�");
+	private List<BtmTypeLinkAttributesDTO> addAttributeByFieldMap(List<BtmTypeLinkAttributesDTO> attributes, Map<String, String> fieldMap) {
+		Map<String, BtmTypeLinkAttributesDTO> existFieldMap = attributes.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
+		fieldMap.forEach((k,v) -> {
+			if (!existFieldMap.containsKey(k)){
+				BtmTypeLinkAttributesDTO attr = new BtmTypeLinkAttributesDTO();
+				attr.setId(k);
+				attr.setAttrDataType(VciFieldTypeEnum.VTString.name());
+				attr.setAttributeLength(50);
+				attr.setNullableFlag(false);
+				attr.setDescription(v);
+				attributes.add(attr);
 			}
-			if (!btmTypeDTO.isViewFlag()) {
-				VciBaseUtil.alertCollectionNotNull("灞炴��", btmTypeDTO.getAttributesDTOList());
-			}
-			if (!btmTypeDTO.getId().matches(OmdRegExpConstant.LETTER)) {
-				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О鍙兘鏄函鑻辨枃锛岀洰鍓嶄负{0}", new Object[]{btmTypeDTO.getId()});
-			}
-			if (btmTypeDTO.getId().length() > 24) {
-				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О涓嶈兘瓒呰繃18锛岀洰鍓嶉暱搴︿负{0}", new Object[]{btmTypeDTO.getId().length()});
-			}
-			List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
-			if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
-				BtmType existBtmType = btmTypeDOList.get(0);
-				throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
-					, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
-			}
-			/*
-			//妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
-			if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
-				if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
-					throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-						new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
-				}
-			}
-			//妫�鏌ヤ娇鐢ㄧ殑鐢熷懡鍛ㄦ湡鏄惁瀛樺湪
-			if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
-				&& !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
-				if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
-					throw new VciBaseException("鐢熷懡鍛ㄦ湡{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-						new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
-				}
-			}
-			if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
-				if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
-					throw new VciBaseException("澶囩敤鐢熷懡鍛ㄦ湡{0}[{1}]涓叾涓湁鏌愪簺鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
-						new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
-				}
-			}
-			*/
-			if (StringUtils.isBlank(btmTypeDTO.getOid())) {
-				btmTypeDTO.setOid(VciBaseUtil.getPk());
-			}
-
-			BeanUtil.copy(btmTypeDTO, btmTypeDO);
-			String creator = AuthUtil.getUserAccount();
-			Date now = new Date();
-			btmTypeDO.setCreator(creator);
-			btmTypeDO.setCreateTime(now);
-			btmTypeDO.setOwner(creator);
-			btmTypeDO.setBtmname(BtmTypeConstant.OMD_BTMTYPE);
-			btmTypeDO.setTs(now);
-			if (StringUtils.isBlank(btmTypeDO.getTableName())) {
-				btmTypeDO.setTableName(getTableName(btmTypeDO.getId()));
-			}
-
-			//澶勭悊灞炴��
-			addAttributeForBtm(btmTypeDTO, creator, now);
-
-			baseMapper.insert(btmTypeDO);
-			if (autoCreateTable) {
-				dataSourceTransactionManager.commit(transaction);
-			}
-		} catch (ServiceException e) {
-			if (autoCreateTable) {
-				dataSourceTransactionManager.rollback(transaction);
-			}
-			throw e;
-		} catch (Throwable e) {
-			if (autoCreateTable) {
-				dataSourceTransactionManager.rollback(transaction);
-			}
-			throw e;
-		}
-		if (autoCreateTable) {
-			BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
-			btmTypeVO.setAttributes(listHasAttributesByOid(btmTypeDO.getOid()));
-			checkTableSame(btmTypeVO);
-		}
-		return btmTypeDTO;
+		});
+		return attributes;
 	}
 
 	/**
@@ -388,43 +363,44 @@
 	 * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞�
 	 */
 	private void checkTableSame(BtmTypeVO btmTypeVO) {
-		/*List<OmdBtmTypeVO> btmTypeVOList = new ArrayList<>();
+		List<BtmTypeVO> btmTypeVOList = new ArrayList<>();
 		btmTypeVOList.add(btmTypeVO);
-		List<OsModifyAttributeInfoDO> modifyAttributeInfoDOList = ddlServiceI.checkDifferent(btmTypeVOList, null);
+		BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
+		ddlDTO.setBtmTypeList(btmTypeVOList);
 		try {
-			modifyAttributeServiceI.batchAddSave(modifyAttributeInfoDOList);
-		} catch (Throwable e) {
-			if (logger.isErrorEnabled()) {
-				logger.error("淇濆瓨銆愪慨鏀瑰睘鎬с�戞暟鎹�", e);
+			// 灏嗕互鍓嶇殑checkDifferent鍜宺eflexDifferent缁撳悎浜�
+			R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getDomain());
+			if (result.isSuccess()){
+				List<ModifyAttributeInfo> infoList = new ArrayList<>();
+				Object data = result.getData();
+				if (data instanceof List){
+					List dataList = (List) data;
+					dataList.forEach(s -> {
+						if (s instanceof ModifyAttributeInfo){
+							ModifyAttributeInfo info = (ModifyAttributeInfo) s;
+							infoList.add(info);
+						}
+					});
+					modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
+				}
 			}
+		} catch (NacosException e) {
+			if (log.isDebugEnabled()) {
+				log.error("淇濆瓨銆愪慨鏀瑰睘鎬с�戞暟鎹�", e);
+			}
+			throw new RuntimeException(e);
 		}
-		ddlServiceI.reflexDifferent(modifyAttributeInfoDOList);
-		modifyAttributeServiceI.finishModify(modifyAttributeInfoDOList);*/
+//		modifyAttributeServiceI.finishModify(modifyAttributeInfoList);
 	}
 
 	/**
 	 * 娣诲姞灞炴�у埌涓氬姟绫诲瀷涓�
 	 *
 	 * @param btmTypeDTO 涓氬姟绫诲瀷鐨勬暟鎹紶杈撳璞�
-	 * @param creator    鍒涘缓浜�
-	 * @param now        褰撳墠鏃堕棿
 	 */
-	private void addAttributeForBtm(BtmTypeDTO btmTypeDTO, String creator, Date now) throws VciBaseException{
-		List<BtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributesDTOList();
-		btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,creator,now);
-	}
-
-	/**
-	 * 淇敼涓氬姟绫诲瀷
-	 *
-	 * @param btmTypeDTO    涓氬姟绫诲瀷鏁版嵁浼犺緭瀵硅薄
-	 * @param autoEditTable 鏄惁鑷姩鏇存柊琛ㄦ牸
-	 * @return 淇敼鍚庣殑涓氬姟绫诲瀷
-	 * @throws ServiceException 淇敼鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
-	 */
-	@Override
-	public BtmTypeDTO editSave(BtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException {
-		return null;
+	private List<BtmTypeAttributeVO> addAttributeForBtm(BtmTypeDTO btmTypeDTO) throws VciBaseException{
+		List<BtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributes();
+		return btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,AuthUtil.getUserAccount(),new Date());
 	}
 
 	/**
@@ -459,7 +435,7 @@
 	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欐椂浼氭姏鍑哄紓甯�
 	 */
 	@Override
-	public List<ModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException {
+	public List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException {
 		return null;
 	}
 
@@ -471,102 +447,14 @@
 	 * @throws ServiceException 鍙傛暟涓虹┖鐨勬椂鍊欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public String getTableName(String id) throws ServiceException {
-		return null;
-	}
-
-	/**
-	 * 灏嗕笟鍔$被鍨嬩娇鐢ㄧ殑灞炴�х殑浼犺緭瀵硅薄杞崲涓烘暟鎹璞�
-	 *
-	 * @param attributesDTO 灞炴�х殑鏁版嵁浼犺緭瀵硅薄
-	 * @param pkBtmType     涓氬姟绫诲瀷鐨勪富閿�
-	 * @param creator       鍒涘缓浜�
-	 * @param now           褰撳墠鏃堕棿
-	 * @return 灞炴�х殑鏁版嵁瀵硅薄
-	 */
-	@Override
-	public BtmTypeAttribute btmTypeAttributeDTO2DO(BtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now) {
-		return null;
-	}
-
-	/**
-	 * 涓氬姟绫诲瀷鐨勫睘鎬ф樉绀哄璞¤浆鎹负鏁版嵁瀵硅薄
-	 *
-	 * @param thisBtmTypeHasAttributeVOList 涓氬姟绫诲瀷灞炴�ф樉绀哄璞�
-	 * @return 鏁版嵁瀵硅薄
-	 */
-	@Override
-	public List<BtmTypeAttribute> btmTypeAttributeVO2DO(List<BtmTypeAttributeVO> thisBtmTypeHasAttributeVOList) {
-		return null;
-	}
-
-	/**
-	 * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-	 *
-	 * @param attributeDOList 灞炴�х殑鏁版嵁瀵硅薄鍒楄〃
-	 * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
-	 */
-	@Override
-	public List<BtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<BtmTypeAttribute> attributeDOList) {
-		return null;
-	}
-
-	/**
-	 * 鎵归噺灏嗕笟鍔$被鍨嬬殑鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-	 *
-	 * @param attributesDO 灞炴�х殑鏁版嵁瀵硅薄
-	 * @return 灞炴�х殑鏄剧ず瀵硅薄鍒楄〃
-	 */
-	@Override
-	public BtmTypeAttributeVO btmTypeAttributeDO2VO(BtmTypeAttribute attributesDO) {
-		return null;
-	}
-
-	/**
-	 * 鑾峰彇涓氬姟绫诲瀷鐨勬寚瀹氬睘鎬�
-	 *
-	 * @param id                    閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉�
-	 * @param attributeIdCollection 灞炴�х殑闆嗗悎锛屽鏋滀负绌哄垯鑾峰彇鍏ㄩ儴
-	 * @return 灞炴�х殑鏄剧ず瀵硅薄
-	 */
-	@Override
-	public List<BtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection) {
-		return null;
-	}
-
-	/**
-	 * 鏍规嵁涓氬姟绫诲瀷鐨勭紪鍙疯幏鍙栧睘鎬�
-	 *
-	 * @param id 涓氬姟绫诲瀷鐨勭紪鍙�
-	 * @return 灞炴�х殑鏄剧ず瀵硅薄
-	 */
-	@Override
-	public List<BtmTypeAttributeVO> listAttributeByBtmTypeId(String id) {
-		return null;
-	}
-
-	/**
-	 * 鏍规嵁涓氬姟绫诲瀷鐨勪富閿幏鍙栧睘鎬�
-	 *
-	 * @param oid 涓氬姟绫诲瀷鐨勪富閿�
-	 * @return 灞炴�х殑鏄剧ず瀵硅薄
-	 */
-	@Override
-	public List<BtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid) {
-		return null;
-	}
-
-	/**
-	 * 鎵归噺鏍规嵁涓氬姟绫诲瀷缂栧彿鎴栬�呬富閿幏鍙栧寘鍚殑灞炴��
-	 *
-	 * @param oidsOrIds 涓婚敭鎴栬�呯紪鍙烽泦鍚�
-	 * @param queryById 鏄惁浣跨敤缂栧彿鏌ヨ
-	 * @return key鏄笟鍔$被鍨嬬殑涓婚敭鎴栬�呯紪鍙凤紝鍊兼槸鍖呭惈鐨勫睘鎬х殑淇℃伅
-	 * @throws ServiceException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欎細鎶涘嚭寮傚父
-	 */
-	@Override
-	public List<BtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException {
-		return null;
+	public String getTableName(String id,String domain) throws ServiceException {
+		VciBaseUtil.alertNotNull(id,"涓氬姟绫诲瀷鑻辨枃鍚嶇О",domain,"棰嗗煙鍚嶇О");
+		if (domain.contains("ubcs-")){
+			domain = domain.split("ubcs-")[1];
+		}else {
+			throw new VciBaseException("棰嗗煙鍚嶇О涓嶇鍚堣鍒�");
+		}
+		return PL + StringPool.UNDERSCORE + domain + StringPool.UNDERSCORE + id;
 	}
 
 	/**
@@ -576,16 +464,154 @@
 	 * @return 鎵ц缁撴灉
 	 */
 	@Override
-	public boolean submit(BtmTypeDTO btmTypeDTO) {
-		addSave(btmTypeDTO,false);
-		try {
-			R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), Objects.requireNonNull(BeanUtil.copy(btmTypeDTO, BtmTypeVO.class)));
-			return result.isSuccess();
-		} catch (NacosException e) {
-			throw new RuntimeException(e);
+	public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) {
+		TransactionStatus transaction = null;
+		DefaultTransactionDefinition def = null;
+		if (autoCreateTable) {
+			def = new DefaultTransactionDefinition();
+			def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+			// 浜嬬墿闅旂绾у埆锛屽紑鍚柊浜嬪姟锛岃繖鏍蜂細姣旇緝瀹夊叏浜涖��
+			transaction = dataSourceTransactionManager.getTransaction(def);
+			// 鑾峰緱浜嬪姟鐘舵��
 		}
+		checkBtmTypeBeforeSave(btmTypeDTO);
+		BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
+		List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
+		List<BtmTypeAttributeVO> afterAttributes;
+		if (StringUtils.isBlank(btmTypeDO.getOid())){
+			btmTypeDO = BtmTypeWrapper.build().entityBeforeInsert(btmTypeDO);
+			if (StringUtils.isBlank(btmTypeDO.getTableName())) {
+				btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getDomain()));
+			}
+			// 娣诲姞灞炴��
+			afterAttributes = addAttributeForBtm(btmTypeDTO);
+			baseMapper.insert(btmTypeDO);
+		}else {
+			BtmTypeVO btmTypeByOid = getBtmTypeByOid(btmTypeDO.getOid());
+			List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
+			// 澶勭悊灞炴�э紝澶氫綑鐨勫垹闄わ紝涓嶅瓨鍦ㄧ殑娣诲姞
+			afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
+		}
+		BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
+		btmTypeVO.setAttributes(afterAttributes);
+		try {
+			if (autoCreateTable) {
+				checkTableSame(btmTypeVO);
+				R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
+				if (result.isSuccess()){
+					List<ModifyAttributeInfo> infoList = new ArrayList<>();
+					Object data = result.getData();
+					if (data instanceof List){
+						List dataList = (List) data;
+						dataList.forEach(s -> {
+							if (s instanceof ModifyAttributeInfo){
+								ModifyAttributeInfo info = (ModifyAttributeInfo) s;
+								infoList.add(info);
+							}
+						});
+						modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
+					}
+					dataSourceTransactionManager.commit(transaction);
+				}else {
+					dataSourceTransactionManager.rollback(transaction);
+				}
+			}
+		} catch (Throwable e) {
+			if (autoCreateTable) {
+				dataSourceTransactionManager.rollback(transaction);
+			}
+		}
+		return R.data(btmTypeVO);
 	}
 
+	/**
+	 * 鏇存柊涓氬姟绫诲瀷鐨勫睘鎬�
+	 * @param oid 閫愭笎
+	 * @param beforeAttr 鏇存柊鍓嶇殑灞炴��
+	 * @param afterAttr 鏇存柊鍚庣殑灞炴��
+	 */
+	private List<BtmTypeAttributeVO> updateAttributeForBtm(String oid, List<BtmTypeAttributeVO> beforeAttr, List<BtmTypeLinkAttributesDTO> afterAttr) {
+		List<BtmTypeAttributeVO> deleteList = beforeAttr.stream().filter(before -> afterAttr.stream().noneMatch(after -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
+		List<BtmTypeLinkAttributesDTO> addList = afterAttr.stream().filter(after -> beforeAttr.stream().noneMatch(before -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
+		List<BtmTypeLinkAttributesDTO> modifyList = new ArrayList<>();
+		Map<String, BtmTypeAttributeVO> beforeAttrMap = beforeAttr.stream().collect(Collectors.toMap(BtmTypeAttributeVO::getId, t -> t, (o1, o2) -> o1));
+		Map<String, BtmTypeLinkAttributesDTO> afterAttrMap = afterAttr.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
+		afterAttrMap.forEach((k,v) -> {
+			if (beforeAttrMap.containsKey(k)){
+				modifyList.add(v);
+			}
+		});
+		btmTypeAttributeService.checkAndRemove(deleteList.stream().map(BtmTypeAttributeVO::getOid).collect(Collectors.toList()));
+		List<BtmTypeAttributeVO> voListAdd = btmTypeAttributeService.checkAndInsert(oid, addList, AuthUtil.getUserAccount(), new Date());
+		List<BtmTypeAttributeVO> voListUpdate = btmTypeAttributeService.checkAndUpdate(oid, modifyList, AuthUtil.getUserAccount(), new Date());
+		List<BtmTypeAttributeVO> returnList = new ArrayList<>();
+		returnList.addAll(Objects.requireNonNull(voListAdd));
+		returnList.addAll(Objects.requireNonNull(voListUpdate));
+		return returnList;
+	}
+
+	/**
+	 * 妫�鏌ヤ笟鍔$被鍨嬬鍚堣鑼�
+	 * @param btmTypeDTO 涓氬姟绫诲瀷椤甸潰浼犺緭瀵硅薄
+	 */
+	private void checkBtmTypeBeforeSave(BtmTypeDTO btmTypeDTO) {
+		VciBaseUtil.alertNotNull(btmTypeDTO, "瑕佹坊鍔犵殑涓氬姟绫诲瀷", btmTypeDTO.getId(), "涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�", btmTypeDTO.getName(), "涓氬姟绫诲瀷涓枃鍚嶇О");
+		if (btmTypeDTO.isViewFlag() && (StringUtils.isBlank(btmTypeDTO.getViewCreateSql())
+			|| StringUtils.isBlank(btmTypeDTO.getTableName()))) {
+			throw new VciBaseException("濡傛灉褰撳墠鏄笟鍔$被鍨嬫槸瑙嗗浘鐨勬椂鍊欙紝璇峰繀椤昏緭鍏ヨ鍥剧殑鍒涘缓璇彞鍜岃鍥惧悕绉�");
+		}
+		if (!btmTypeDTO.isViewFlag()) {
+			VciBaseUtil.alertCollectionNotNull("灞炴��", btmTypeDTO.getAttributes());
+		}
+		if (!btmTypeDTO.getId().matches(OmdRegExpConstant.LETTER)) {
+			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О鍙兘鏄函鑻辨枃锛岀洰鍓嶄负{0}", new Object[]{btmTypeDTO.getId()});
+		}
+		if (btmTypeDTO.getId().length() > 24) {
+			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О涓嶈兘瓒呰繃18锛岀洰鍓嶉暱搴︿负{0}", new Object[]{btmTypeDTO.getId().length()});
+		}
+		List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
+		if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
+			BtmType existBtmType = btmTypeDOList.get(0);
+			throw new VciBaseException("涓氬姟绫诲瀷鑻辨枃鍚嶇О宸茬粡瀛樺湪锛堜笉鍖哄垎澶у皬鍐欙級锛岃繖涓嫳鏂囧悕绉板搴旂殑涓枃鍚嶇О涓簕0},鍒涘缓浜簕1},鍒涘缓鏃堕棿{2}"
+				, new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
+		}
+		if (btmTypeDTO.isRevisionFlag()){
+			// 闇�瑕佹帶鍒剁増鏈�
+			// 妫�鏌ヤ娇鐢ㄧ殑鐗堟湰瑙勫垯鏄惁瀛樺湪
+//				if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
+//					if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
+//						throw new VciBaseException("鐗堟湰瑙勫垯{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+//							new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
+//					}
+//				}
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
+		}
+		if (btmTypeDTO.isLifeCycleFlag()){
+			// 闇�瑕佹帶鍒剁敓鍛藉懆鏈�
+			//妫�鏌ヤ娇鐢ㄧ殑鐢熷懡鍛ㄦ湡鏄惁瀛樺湪
+//				if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
+//					&& !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
+//					if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
+//						throw new VciBaseException("鐢熷懡鍛ㄦ湡{0}[{1}]鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+//							new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
+//					}
+//				}
+//				if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
+//					if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
+//						throw new VciBaseException("澶囩敤鐢熷懡鍛ㄦ湡{0}[{1}]涓叾涓湁鏌愪簺鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇峰厛鏌ヨ瘉",
+//							new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
+//					}
+//				}
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
+		}
+		if (btmTypeDTO.isSecretFlag()){
+			// 闇�瑕佹帶鍒跺瘑绾�
+			btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
+		}
+		if (StringUtils.isBlank(btmTypeDTO.getOid())) {
+			btmTypeDTO.setOid(VciBaseUtil.getPk());
+		}
+	}
 	@Override
 	public boolean deleteLogic(@NotEmpty List<Long> ids) {
 		return false;
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
new file mode 100644
index 0000000..1849cb5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.mapper.ModifyAttributeInfoMapper;
+import com.vci.ubcs.omd.service.IModifyAttributeService;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * Description: 闇�瑕佷慨鏀规暟鎹簱琛ㄤ腑瀛楁鐨勪俊鎭湇鍔″疄鐜扮被
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+@Service
+public class ModifyAtributeServiceImpl extends ServiceImpl<ModifyAttributeInfoMapper, ModifyAttributeInfo> implements IModifyAttributeService {
+	@Override
+	public boolean deleteLogic(@NotEmpty List<Long> ids) {
+		return false;
+	}
+
+	@Override
+	public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
+		return false;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
index b917e31..dfb98cc 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
@@ -59,5 +59,4 @@
 		// 鍦ㄨ繖杩涜閫氱敤瀛楁澶勭悊
 		return entity;
 	}
-
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
index 221bf19..744366a 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
@@ -3,7 +3,10 @@
 import com.vci.ubcs.omd.dto.BtmTypeDTO;
 import com.vci.ubcs.omd.entity.BtmType;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 
 import java.util.Date;
@@ -31,6 +34,12 @@
 	public BtmTypeVO entityVO(BtmType entity) {
 		BtmTypeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, BtmTypeVO.class));
 		// 鍦ㄨ繖閲岃缃灇涓炬樉绀哄��
+		vo.setRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getRevisionFlag()));
+		vo.setSecretFlag(BooleanEnum.TRUE.getValue().equals(entity.getSecretFlag()));
+		vo.setLifeCycleFlag(BooleanEnum.TRUE.getValue().equals(entity.getLifeCycleFlag()));
+		vo.setInputRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getInputRevisionFlag()));
+		vo.setViewFlag(BooleanEnum.TRUE.getValue().equalsIgnoreCase(entity.getViewFlag()));
+		vo.setAbstractFlag(BooleanEnum.TRUE.getValue().equals(entity.getAbstractFlag()));
 		return vo;
 	}
 
@@ -58,4 +67,29 @@
 		return entity;
 	}
 
+	public BtmType entityBeforeInsert(BtmType btmType) {
+		btmType = entityBeforeSave(btmType);
+		String userAccount = AuthUtil.getUserAccount();
+		btmType.setOwner(userAccount);
+		btmType.setCreator(userAccount);
+		Date now = new Date();
+		btmType.setCreateTime(now);
+		return btmType;
+	}
+
+	/**
+	 * 鎻掑叆鍓嶅寘瑁呴粯璁ゅ瓧娈�
+	 * @param btmTypeDO do鏁版嵁
+	 * @return 鍖呰鍚�
+	 */
+	public BtmType entityBeforeSave(BtmType btmTypeDO) {
+		btmTypeDO.setOid(VciBaseUtil.getPk());
+		btmTypeDO.setBtmname("btmType");
+		Date now  = new Date();
+		String userAccount = AuthUtil.getUserAccount();
+		btmTypeDO.setLastModifier(userAccount);
+		btmTypeDO.setLastModifyTime(now);
+		btmTypeDO.setTs(now);
+		return btmTypeDO;
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
new file mode 100644
index 0000000..b024482
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
@@ -0,0 +1,42 @@
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
+import com.vci.ubcs.omd.vo.ModifyAttributeInfoVO;
+import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.secure.utils.AuthUtil;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author LiHang
+ * @date 2023/5/4
+ */
+public class ModifyAttributeWrapper extends BaseEntityWrapper<ModifyAttributeInfo, ModifyAttributeInfoVO> {
+
+	public static ModifyAttributeWrapper build() {
+		return new ModifyAttributeWrapper();
+	}
+
+	@Override
+	public ModifyAttributeInfoVO entityVO(ModifyAttributeInfo entity) {
+		return null;
+	}
+
+	public List<ModifyAttributeInfo> listEntityBeforeSave(List<ModifyAttributeInfo> dataList){
+		dataList.forEach(data -> {
+			data.setOid(VciBaseUtil.getPk());
+			data.setCreateTime(new Date());
+			data.setCreator(AuthUtil.getUserAccount());
+			data.setBtmname("modifyAttributeInfo");
+			data.setHandleDate(new Date());
+			data.setHandleFinishFlag(BooleanEnum.TRUE.getValue());
+			data.setHandleUserName(AuthUtil.getUserAccount());
+		});
+		return dataList;
+	}
+}

--
Gitblit v1.9.3