From 4cd535de8ef099afa96238e5458e6866edccfea7 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 05 五月 2023 20:26:36 +0800
Subject: [PATCH] “代码整合”

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java             |   13 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java         |   22 
 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/resources/mapper/CodeTemplatePhaseMapper.xml                                  |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java  |  133 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java                      |  175 ++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java          |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java                    |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java             |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java                |  103 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java                      |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java                      |   17 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java                       |   45 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java                            |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml                            |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java           |  619 ++++++-
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml                                      |  156 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java                         |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java                        |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java      |  167 ++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java                         |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java          |   62 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java                     |   12 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml                           |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java                              |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java   |  365 ++++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java                  |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java                 |    4 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java                   |   25 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java         |    5 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java       |  284 +++
 Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java                  |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java                        |    5 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java                      |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml                                      |   14 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java                   |   31 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml                                            |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java                    |  102 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java                        |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java                         |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java                   |   18 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java                                   |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java                  |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java   |  137 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java                        |   41 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java                |    5 
 Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java                              |    1 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java                         |    2 
 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/service/impl/CodeBasicSecServiceImpl.java              |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java                       |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java           |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java            |  160 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java             |   72 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml                         |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java            |  335 ++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml                                         |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java              |   17 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java                        |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java                           |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java                       |    1 
 Source/UBCS-WEB/src/views/code/code.vue                                                                                   |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java           |  118 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java                |   22 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java                        |   16 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java    |    3 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java            |   71 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java            |   25 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java           |  357 ++++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java                  |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java              |   44 
 /dev/null                                                                                                                 |  129 -
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java                     |    4 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                  |    7 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java                     |   50 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java |   10 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java                        |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java                         |   14 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java               |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java                       |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java                      |   18 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java                           |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java             |  467 +++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml                                    |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java                     |  121 +
 85 files changed, 4,388 insertions(+), 414 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/code/code.vue b/Source/UBCS-WEB/src/views/code/code.vue
index 5cb66a3..069b97a 100644
--- a/Source/UBCS-WEB/src/views/code/code.vue
+++ b/Source/UBCS-WEB/src/views/code/code.vue
@@ -690,7 +690,7 @@
         
       </el-dialog>
 
-        <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐楃粍浠� -->
+      <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐楃粍浠� -->
       <formula-editor ref="formulaEditor" 
         @updateFormulaContent="updateFormulaContent" 
         :thisSceneTableData="thisSceneTableData"
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 ff73742..fd1b3d6 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,13 +41,14 @@
 	 * nacos dev 鍦板潃
 	 */
 	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "127.0.0.1:8848";
+
+	String NACOS_DEV_ADDR = "192.168.93.184:38848";
 
 	/**
 	 * nacos prod 鍦板潃
 	 */
-	//String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_PROD_ADDR = "127.0.0.1:8848";
+	String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
+	//String NACOS_PROD_ADDR = "127.0.0.1:8848";
 
 	/**
 	 * nacos test 鍦板潃
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
index ea24050..6c41ebc 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowManagerController.java
@@ -63,7 +63,6 @@
 		return R.data(pages);
 	}
 
-
 	/**
 	 * 鍙樻洿娴佺▼鐘舵��
 	 *
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 7508dda..172d3d2 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,6 +16,7 @@
  */
 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 935f785..3ae7b79 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,5 +1,6 @@
 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 2715f72..b793a5a 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,6 +16,7 @@
  */
 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/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java
deleted file mode 100644
index 2a26918..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempbuttonDTO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.dto;
-
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonDTO extends CodeTempbuttonEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java
deleted file mode 100644
index c753d6b..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTempphaseDTO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.dto;
-
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseDTO extends CodeTempphaseEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java
similarity index 98%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java
index 5d4be04..f91f223 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButtonEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeButton.java
@@ -38,7 +38,7 @@
 @TableName("PL_CODE_BUTTON")
 @ApiModel(value = "codebutton瀵硅薄", description = "妯℃澘鎵╁睍姹�")
 //@EqualsAndHashCode(callSuper = false)
-public class CodeButtonEntity  implements Serializable {
+public class CodeButton implements Serializable {
 	@JsonSerialize(
 		using = ToStringSerializer.class
 	)
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java
new file mode 100644
index 0000000..ac240b7
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyProcessTemp.java
@@ -0,0 +1,71 @@
+package com.vci.ubcs.code.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import com.vci.ubcs.starter.web.annotation.VciUseEnum;
+import com.vci.ubcs.starter.web.constant.MdmEnumIdConstant;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Data
+@TableName("PL_CODE_CLSFLOWTEMP")
+@ApiModel(value = "CodeTempphase瀵硅薄", description = "鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�")
+public class CodeClassifyProcessTemp extends BaseModel {
+
+	/**
+	 * 搴忓垪鍖�
+	 */
+	private static final long serialVersionUID = 6606901931032525995L;
+	/**
+	 * 涓婚搴撳垎绫讳富閿�
+	 */
+	//@Column(nullable = false,columnDefinition = "涓婚搴撳垎绫讳富閿�")
+	//@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY)
+	private String codeClassifyOid;
+
+	/**
+	 * 鎵�灞炴ā鏉�
+	 */
+	//@Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+	//@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+	private String classifyTemplateOid;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 */
+	//@Column(columnDefinition = "娴佺▼妯℃澘鐢ㄩ��",nullable = false)
+	@VciUseEnum(value = MdmEnumIdConstant.CODE_CLASSIFY_PROCESS_USE,showTextField = "codeProcessUseText")
+	private String codeProcessUse;
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�旀樉绀哄悕绉�
+	 */
+	//@Transient
+	private String codeProcessUseText;
+
+	/**
+	 * 娴佺▼妯℃澘鐨勭増鏈�
+	 */
+	//@Column(nullable = false)
+	private String processVersion;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬х紪鍙�
+	 */
+	//@Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬�")
+	private String codeTempAttrOidArr;
+
+	/**
+	 * 瀛樺偍鍏宠仈鐨勬ā鏉垮睘鎬у悕绉�
+	 */
+	//@Column(columnDefinition = "鏄剧ず鍦ㄦ祦绋嬩腑鐨勫睘鎬у悕绉�")
+	private String codeTempAttrOidArrName;
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java
new file mode 100644
index 0000000..b33f4a0
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java
@@ -0,0 +1,357 @@
+package com.vci.ubcs.code.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.starter.revision.model.BaseModel;
+import com.vci.ubcs.starter.web.annotation.VciFieldType;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴��
+ * @author ludc
+ * @date 2022-1-17
+ */
+//@VciBtmType(name = MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,text = "涓婚搴撳垎绫荤殑妯℃澘灞炴��",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+@Data
+@TableName("PL_CODE_CLSTEMPATTR")
+@ApiModel(value = "CodeTempphase瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵")
+@EqualsAndHashCode(callSuper = true)
+public class CodeClassifyTemplateAttr extends BaseModel {
+
+    /**
+     * 搴忓垪鍖�
+     */
+    private static final long serialVersionUID = -8685210169495428202L;
+
+    /**
+     * 鎵�灞炴ā鏉�
+     */
+    //@Column(nullable = false,columnDefinition = "鎵�灞炴ā鏉�")
+    //@VciUseRefer(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE)
+    private String classifyTemplateOid;
+
+    /**
+     * 鎵�灞炴ā鏉垮悕绉�
+     */
+    //@Transient(referColumn = "classifyTemplateOid.name")
+    private String classifyTemplateOidName;
+
+    /**
+     * 灞炴�х殑绫诲瀷
+     */
+    //@Column(columnDefinition = "灞炴�х殑绫诲瀷",nullable = false)
+    private String attributeDataType;
+
+    /**
+     * 鏄惁鍏抽敭灞炴��
+     */
+    //@Column(columnDefinition = "鏄惁鍏抽敭灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String keyAttrFlag;
+
+    /**
+     * 鏄惁蹇�熸煡璇㈠睘鎬�
+     */
+    //@Column(columnDefinition = "鏄惁蹇�熸煡璇㈠睘鎬�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String queryAttrFlag;
+
+    /**
+     * 鏄惁楂樼骇鏌ヨ灞炴��
+     */
+    //@Column(columnDefinition = "鏄惁楂樼骇鏌ヨ灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String seniorQueryAttrFlag;
+
+    /**
+     * 鐩镐技鏌ラ噸灞炴��
+     */
+    //@Column(columnDefinition = "鐩镐技鏌ラ噸灞炴��",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sameRepeatAttrFlag;
+
+    /**
+     * 鏄惁鎺掑簭
+     */
+    //@Column(columnDefinition = "鏄惁鎺掑簭",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String sortAttrFlag;
+
+    /**
+     * 鏄惁鐢熸垚浜岀淮鐮�
+     */
+    //@Column(columnDefinition = "鏄惁鐢熸垚浜岀淮鐮�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String qrcodeFlag;
+
+    /**
+     * 鏄惁鐢熸垚鏉″舰鐮�
+     */
+    //@Column(columnDefinition = "鏄惁鐢熸垚涓�缁寸爜",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String barcodeFlag;
+
+
+    /**
+     * 缁勫悎瑙勫垯
+     */
+    //@Column(columnDefinition = "缁勫悎瑙勫垯",length = 4000)
+    private String componentRule;
+
+    /**
+     * 楠岃瘉瑙勫垯
+     */
+    //@Column(columnDefinition = "楠岃瘉瑙勫垯",length = 4000)
+    private String verifyRule;
+
+    /**
+     * 鍒嗙被娉ㄥ叆灞傜骇
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆灞傜骇",defaultValue = "none")
+    private String classifyInvokeLevel;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬�
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�",length = 32)
+    private String classifyInvokeAttr;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�",length = 200)
+    private String classifyInvokeAttrName;
+
+    /**
+     * 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
+     */
+    //@Column(columnDefinition = "鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String classifyInvokeEditFlag;
+
+    /**
+     * 灞炴�ф帓搴忓彿
+     */
+    //@Column(columnDefinition = "灞炴�ф帓搴忓彿")
+    private Integer orderNum;
+
+    /**
+     * 琛ㄥ崟閲屾槸鍚︽樉绀�
+     */
+    //@Column(columnDefinition = "琛ㄥ崟閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String formDisplayFlag;
+
+    /**
+     * 鍒楄〃閲屾槸鍚︽樉绀�
+     */
+    //@Column(columnDefinition = "鍒楄〃閲屾槸鍚︽樉绀�",defaultValue = "true")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String tableDisplayFlag;
+
+    /**
+     * 鎵�灞炲睘鎬у垎缁�
+     */
+    //@Column(columnDefinition = "鎵�灞炲睘鎬у垎缁�")
+    private String attributeGroup;
+
+    /**
+     * 浣跨敤鏋氫妇鑻辨枃缂栧彿
+     */
+    //@Column(columnDefinition = "浣跨敤鏋氫妇鑻辨枃缂栧彿")
+    private String enumId;
+
+    /**
+     * 浣跨敤鏋氫妇涓枃鍚嶇О
+     */
+    //@Column(columnDefinition = "浣跨敤鏋氫妇涓枃鍚嶇О")
+    private String enumName;
+
+    /**
+     * 鏋氫妇鏄惁鍙互缂栬緫
+     */
+    //@Column(columnDefinition = "鏋氫妇鏄惁鍙互缂栬緫")
+    private String enumEditFlag;
+
+    /**
+     * 鍙傜収涓氬姟绫诲瀷
+     */
+    //@Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�")
+    private String referBtmId;
+
+    /**
+     * 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
+     */
+    //@Column(columnDefinition = "鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�")
+    private String referBtmName;
+
+    /**
+     * 鍙傜収鐨勭獥鍙i厤缃�
+     */
+    //@Column(columnDefinition = "鍙傜収绐楀彛閰嶇疆",length = 4000)
+    private String referConfig;
+
+    /**
+     * 鏄惁蹇呰緭
+     */
+    //@Column(columnDefinition = "鏄惁蹇呰緭",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String requireFlag;
+
+    /**
+     * 鏄惁鍙
+     */
+    //@Column(columnDefinition = "鏄惁鍙",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String readOnlyFlag;
+
+    /**
+     * 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
+     */
+    //@Column(columnDefinition = "灞炴�ф帶鍒惰緭鍏ョ殑闀垮害",defaultValue = "254")
+    private Integer controlLength = 254;
+
+    /**
+     * 琛ㄥ崟涓婃樉绀虹殑鏍峰紡
+     */
+    //@Column(length = 1000,columnDefinition = "琛ㄥ崟閲屾樉绀虹殑鏍峰紡")
+    private String formDisplayStyle;
+
+    /**
+     * 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
+     */
+    //@Column(length = 1000,columnDefinition = "琛ㄦ牸閲屾樉绀虹殑鏍峰紡")
+    private String tableDisplayStyle;
+
+    /**
+     * 琛ㄥ崟涓秴閾炬帴
+     */
+    //@Column(columnDefinition = "琛ㄥ崟涓秴閾炬帴鍐呭",length = 1000)
+    private String formHref;
+
+    /**
+     * 琛ㄦ牸涓秴閾炬帴
+     */
+    //@Column(columnDefinition = "琛ㄦ牸涓秴閾炬帴鍐呭",length = 1000)
+    private String tableHref;
+
+    /**
+     * 灏忔暟绮惧害
+     */
+    //@Column(columnDefinition = "灏忔暟绮惧害")
+    private Integer precisionLength;
+
+    /**
+     * 灏忔暟鍒诲害
+     */
+    //@Column(columnDefinition = "灏忔暟鍒诲害")
+    private Integer scaleLength;
+
+    /**
+     * 鍙栧�艰寖鍥�
+     */
+    //@Column(columnDefinition = "鍙栧�艰寖鍥�",length = 1000)
+    private String valueArea;
+
+    /**
+     * 鏃堕棿鏍煎紡
+     */
+    //@Column(columnDefinition = "鏃堕棿鏍煎紡")
+    private String codeDateFormat;
+
+    /**
+     * 琛ㄦ牸涓樉绀虹殑js
+     */
+    //@Column(columnDefinition = "琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js",length = 254)
+    private String tableDisplayJs;
+
+    /**
+     * 鏄惁鏄剧ず澶氳鏂囨湰
+     */
+    //@Column(columnDefinition = "鏄惁鏄剧ず澶氳鏂囨湰",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String textAreaFlag;
+
+    /**
+     * 鏄惁涓哄浘鐗囩瓑鍏冪礌
+     */
+    //@Column(columnDefinition = "棰勮鍥�",defaultValue = "false")
+    @VciFieldType(VciFieldTypeEnum.VTBoolean)
+    private String imageFlag;
+
+    /**
+     * 榛樿鍊�
+     */
+    //@Column(columnDefinition = "榛樿鍊�")
+    private String defaultValue;
+
+    /**
+     * 鍓嶇紑
+     */
+    //@Column(columnDefinition = "鍓嶇紑")
+    private String prefixValue;
+
+    /**
+     * 鍚庣紑
+     */
+    //@Column(columnDefinition = "鍚庣紑")
+    private String suffixValue;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
+     */
+    //@Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��")
+    private String filterSourceAttr;
+
+    /**
+     * 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
+     */
+    //@Column(columnDefinition = "閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�")
+    private String filterSourceAttrName;
+
+    /**
+     * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
+     */
+    //@Column(length = 4000,columnDefinition = "鏋氫妇娉ㄥ叆鐨勫唴瀹�")
+    private String enumString;
+
+    /**
+     * 灞炴�х殑瀹藉害
+     */
+    //@Column(columnDefinition = "灞炴�у垪琛ㄤ腑瀹藉害")
+    private Integer attrTableWidth;
+    /**
+     * 璇存槑
+     */
+    //@Column(columnDefinition = "璇存槑")
+    private String explain;
+
+    /**
+     * 閫夋嫨搴撴爣璇�
+     */
+    //@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
+    private String libraryIdentification;
+
+    /**
+     * 绾ц仈灞炴�х紪鍙�
+     */
+    //@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
+    private String parentCode;
+
+    /**
+     * 绾ц仈灞炴�у悕绉�
+     */
+    //@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
+    private String parentName;
+
+    /**
+     * 绾ц仈鏌ヨ灞炴��
+     */
+    //Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
+    private String parentQueryAttr;
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java
index 465317c..17350ae 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempbuttonEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateButton.java
@@ -33,8 +33,7 @@
 @TableName("PL_CODE_TEMPBUTTON")
 @ApiModel(value = "CodeTempbutton瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍")
 @EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonEntity extends BaseModel {
-
+public class CodeClassifyTemplateButton extends BaseModel {
 
 	/**
 	 *
@@ -55,6 +54,6 @@
 	 *
 	 */
 	@ApiModelProperty(value = "")
-	private Short ordernum;
+	private Integer orderNum;
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
index de38c78..c67f497 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
@@ -9,8 +9,8 @@
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊�
  * 鐩稿綋浜庣骇鑱旂殑涓嬫媺妗�
- * @author weidy
- * @date 2022-1-18
+ * @author ludc
+ * @date 2023/4/5
  */
 @Data
 @TableName("PL_CODE_CLASSIFYVALUE")
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java
similarity index 94%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java
index 7cdeac6..bd9536e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseattrEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodePhaseAttr.java
@@ -33,14 +33,14 @@
 @TableName("PL_CODE_PHASEATTR")
 @ApiModel(value = "CodePhaseattr瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴��")
 @EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrEntity extends BaseModel {
+public class CodePhaseAttr extends BaseModel {
 
 
 	/**
 	 *
 	 */
 	@ApiModelProperty(value = "")
-	private String codephaseoid;
+	private String codePhaseOid;
 	/**
 	 *
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java
similarity index 93%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java
index 185a3e9..cbcaa43 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTempphaseEntity.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeTemplatePhase.java
@@ -33,10 +33,10 @@
 @TableName("PL_CODE_TEMPPHASE")
 @ApiModel(value = "CodeTempphase瀵硅薄", description = "缂栫爜搴撳畾涔�-妯℃澘闃舵")
 @EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseEntity extends BaseModel {
+public class CodeTemplatePhase extends BaseModel {
 	/**
 	 *
 	 */
 	@ApiModelProperty(value = "")
-	private String codeclassifytemplateoid;
+	private String codeClassifyTemplateOid;
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java
deleted file mode 100644
index 0d2121d..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeButtonVO.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.vo;
-
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 妯℃澘鎵╁睍姹� 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-03-29
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeButtonVO extends CodeButtonEntity {
-	private static final long serialVersionUID = 1L;
-
-
-	/**
-	 * 浣嶇疆鍚嶇О
-	 */
-	private String usedpositiontypeName;
-	/**
-	 * 鐘舵�佸悕绉�
-	 */
-	private String lcstatusName;
-
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
index 8fd4fad..6ffc784 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.vo;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import org.springblade.core.tool.node.INode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -29,7 +29,7 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrVO extends CodePhaseattrEntity {
+public class CodePhaseattrVO extends CodePhaseAttr {
 	private static final long serialVersionUID = 1L;
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java
deleted file mode 100644
index 5eb1a67..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempbuttonVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.vo;
-
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import org.springblade.core.tool.node.INode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempbuttonVO extends CodeTempbuttonEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java
deleted file mode 100644
index c1110e2..0000000
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeTempphaseVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.vo;
-
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import org.springblade.core.tool.node.INode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 瑙嗗浘瀹炰綋绫�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodeTempphaseVO extends CodeTempphaseEntity {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
index d9142bc..17a172b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyProcessTempVO.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
 
 import java.util.List;
@@ -10,7 +11,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeClassifyProcessTempVO extends BaseModelVO {
+public class CodeClassifyProcessTempVO extends CodeClassifyProcessTemp {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
index d999e97..4ba81b6 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
@@ -1,6 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
-import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
 
 /**
  * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
@@ -8,7 +8,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeClassifyTemplateButtonVO extends BaseModelVO {
+public class CodeClassifyTemplateButtonVO extends CodeClassifyTemplateButton {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
@@ -62,6 +62,7 @@
 	/**
 	 * 鑾峰彇 鎵�灞炴ā鏉�
 	 */
+	@Override
 	public String getClassifytemplateoid (){
 		return classifytemplateoid;
 	}
@@ -69,6 +70,7 @@
 	/**
 	* 璁剧疆 鎵�灞炴ā鏉�
 	*/
+	@Override
 	public void setClassifytemplateoid (String classifytemplateoid){
 		this.classifytemplateoid = classifytemplateoid;
 	}
@@ -88,6 +90,7 @@
 	/**
 	 * 鑾峰彇 鎸夐挳鐨勪富閿�
 	 */
+	@Override
 	public String getClassifybuttonoid (){
 		return classifybuttonoid;
 	}
@@ -95,6 +98,7 @@
 	/**
 	* 璁剧疆 鎸夐挳鐨勪富閿�
 	*/
+	@Override
 	public void setClassifybuttonoid (String classifybuttonoid){
 		this.classifybuttonoid = classifybuttonoid;
 	}
@@ -114,6 +118,7 @@
 	/**
 	 * 鑾峰彇 鎸夐挳鐢ㄩ��
 	 */
+	@Override
 	public String getButtonuse (){
 		return buttonuse;
 	}
@@ -121,6 +126,7 @@
 	/**
 	* 璁剧疆 鎸夐挳鐢ㄩ��
 	*/
+	@Override
 	public void setButtonuse (String buttonuse){
 		this.buttonuse = buttonuse;
 	}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
index 04ed437..3a3f7c8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
 
 /**
@@ -8,7 +9,7 @@
  * @author weidy
  * @date 2022-01-24
  */
-public class CodeTemplatePhaseVO extends BaseModelVO {
+public class CodeTemplatePhaseVO extends CodeTemplatePhase {
 
 	/**
      * 绂佹淇敼杩欎釜鍊�
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java
new file mode 100644
index 0000000..c26997c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtils.java
@@ -0,0 +1,72 @@
+package com.vci.ubcs.starter.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * in 鍙傛暟鎴彇锛岃繑鍥瀢rapper
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public class MybatisParameterUtils {
+
+	public static <T, F> LambdaQueryWrapper<T> cutInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.in(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().in(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	public static <T, F> LambdaQueryWrapper<T> cutNotInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.notIn(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().notIn(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	public static <F> List<List<F>> splitList(List<F> list, int groupSize) {
+		int length = list.size();
+		// 璁$畻鍙互鍒嗘垚澶氬皯缁�
+		int num = (length + groupSize - 1) / groupSize;
+		List<List<F>> newList = new ArrayList<>(num);
+		for (int i = 0; i < num; i++) {
+			// 寮�濮嬩綅缃�
+			int fromIndex = i * groupSize;
+			// 缁撴潫浣嶇疆
+			int toIndex = Math.min((i + 1) * groupSize, length);
+			newList.add(list.subList(fromIndex, toIndex));
+		}
+		return newList;
+	}
+
+}
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
new file mode 100644
index 0000000..a4cb62e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
@@ -0,0 +1,175 @@
+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;
+		}
+
+		@Override
+		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
new file mode 100644
index 0000000..353cace
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
@@ -0,0 +1,50 @@
+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 4cc6e8d..a3d65cc 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,8 +9,10 @@
 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 com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.CollectionUtils;
@@ -135,6 +137,11 @@
 				return 0.0D;
 			}
 		}
+	}
+
+
+	public static boolean getBoolean(String s) {
+		return BooleanEnum.TRUE.getValue().equals(s);
 	}
 
 	public static String removeComma(String s) {
@@ -829,6 +836,10 @@
 		return allField;
 	}
 
+	public static String getTableName(String btmname) {
+		return (VciQueryWrapperForDO.USER_TABLE_COMPATIBILITY ? "pl_code_" : "vcibt_") + btmname.trim().toLowerCase();
+	}
+
 	public static Field getTsField(Class c) {
 		List<Field> allField = getAllFieldForObj(c);
 		if (allField != null && allField.size() > 0) {
@@ -1199,5 +1210,19 @@
 
 	}
 
+	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-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java
new file mode 100644
index 0000000..c05d1a8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/wrapper/VciQueryWrapperForDO.java
@@ -0,0 +1,284 @@
+package com.vci.ubcs.starter.web.wrapper;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+//package com.vci.starter.web.wrapper;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.annotation.VciFieldType;
+import com.vci.ubcs.starter.web.annotation.VciUseEnum;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.service.VciSecretServiceI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springframework.util.CollectionUtils;
+
+import javax.xml.bind.annotation.XmlType;
+
+public class VciQueryWrapperForDO implements VciSecretServiceI {
+	public static boolean USER_TABLE_COMPATIBILITY = false;
+	public static String DATABASE_PLATFORM;
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_BTM_MAP;
+	public static Map<String, String> USER_TABLE_COMPATIBILITY_FIELD_MAP;
+	public static final String USER_TABLE_COMPATIBILITY_FIELD_SEP = "${vcicomplibitysep}";
+	private Map<String, String> conditionMap;
+	private Map<String, String> customerSqlMap;
+	private String oidFieldName;
+	private static final String SPACE = " ";
+	public static final String QUERY_FIELD_SECRET = "${vciQuerySecret}";
+	public static final String QUERY_FIELD_DATARIGHT = "${vciQueryDataRight}";
+	private Class<?> doClass;
+	private PageHelper pageHelper;
+	private Map<String, String> allFieldNameMap;
+	private List<String> xmlTypeFieldList;
+	private boolean distinct;
+	public static final String OID_FIELD = "oid";
+	public static final String ID_FIELD = "id";
+	public static final String LC_STATUS_FIELD = "lcstatus";
+	public static final String LC_STATUS_FIELD_TEXT = "lcStatus_text";
+	private Map<String, VciFieldTypeEnum> allFieldTypeMap;
+	private Map<String, String> useReferMap;
+	private Map<String, String> enumFieldMap;
+	private String linkTableSql;
+	private String selectFieldSql;
+	private String selectPrefixForPage;
+	private String whereSql;
+	private String orderSql;
+	private String whereSubfixForPage;
+	private Map<String, String> valuesMap;
+	private String tableNick;
+	private Map<String, String> extendFieldMap;
+	private static final String DATETIME_FORMAT = "yyyy-mm-dd hh24:mi:ss";
+	private static final String DATE_FORMAT = "yyyy-mm-dd";
+
+	public void clearPage() {
+		this.pageHelper = null;
+		this.selectPrefixForPage = "";
+		this.whereSubfixForPage = "";
+	}
+
+	public VciQueryWrapperForDO in(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "\\IN");
+		return this;
+	}
+
+	public VciQueryWrapperForDO notIn(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "\\NOTIN");
+		return this;
+	}
+
+	public VciQueryWrapperForDO eq(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value);
+		return this;
+	}
+
+	public VciQueryWrapperForDO neq(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "!=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO less(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "<");
+		return this;
+	}
+
+	public VciQueryWrapperForDO lessThan(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, "<=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO more(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, ">");
+		return this;
+	}
+
+	public VciQueryWrapperForDO moreThan(String key, String value) throws VciBaseException {
+		this.addQueryMap(key, value, ">=");
+		return this;
+	}
+
+	public VciQueryWrapperForDO isNull(String key) throws VciBaseException {
+		this.addQueryMap(key, "_n", "=null");
+		return this;
+	}
+
+	public VciQueryWrapperForDO isNotNull(String key) throws VciBaseException {
+		this.addQueryMap(key, "_n", "!=null");
+		return this;
+	}
+
+	public VciQueryWrapperForDO secret() throws VciBaseException {
+		String secretSql = this.getLessThanUserSecretSql();
+		this.addQueryMap("secretGrade", secretSql, "<=");
+		return this;
+	}
+
+	public void addQueryMap(String key, String value) {
+		this.addQueryMap(key, value, (String)null);
+	}
+
+	public void addQueryMap(String key, String value, String operation) {
+		VciBaseUtil.alertNotNull(new Object[]{key, "鏌ヨ鏉′欢鐨勫悕绉�"});
+		if (StringUtils.isNotBlank(value)) {
+			if (this.conditionMap == null) {
+				this.conditionMap = new HashMap();
+			}
+
+			if (operation == null) {
+				operation = "";
+			}
+
+			this.conditionMap.put(key, operation + value);
+		}
+
+	}
+
+	public void addCustomSql(String key, String sql) {
+		VciBaseUtil.alertNotNull(new Object[]{key, "鑷畾涔塖QL鐨凨EY", sql, "鑷畾涔夌殑SQL璇彞"});
+		if (StringUtils.isNotBlank(sql)) {
+			if (this.customerSqlMap == null) {
+				this.customerSqlMap = new HashMap();
+			}
+
+			this.customerSqlMap.put(key, sql);
+		}
+
+	}
+
+	public void addExtendField(String fieldName) {
+		this.addExtendField(fieldName, fieldName);
+	}
+
+	public void addExtendField(String fieldName, String nickName) {
+		this.extendFieldMap.put(fieldName, nickName);
+	}
+
+	public Map<String, String> getConditionMap() {
+		return this.conditionMap;
+	}
+
+	public void setConditionMap(Map<String, String> conditionMap) {
+		this.conditionMap = conditionMap;
+	}
+
+	public Map<String, String> switchConditionMap() {
+		Map<String, String> queryMap = new HashMap();
+		if (!CollectionUtils.isEmpty(this.conditionMap)) {
+			this.conditionMap.forEach((key, value) -> {
+				queryMap.put(key, value);
+			});
+			this.allFieldNameMap.forEach((dbField, field) -> {
+				if (this.conditionMap.containsKey(field)) {
+					queryMap.put(dbField, this.conditionMap.get(field));
+				}
+
+			});
+		}
+
+		return queryMap;
+	}
+
+	public String getLinkTableSql() {
+		return this.linkTableSql;
+	}
+
+	public void setLinkTableSql(String linkTableSql) {
+		this.linkTableSql = linkTableSql;
+	}
+
+	public void addLinkTableSql(String linkTableSql) {
+		this.linkTableSql = this.linkTableSql + " " + linkTableSql + " ";
+	}
+
+	public void setSelectFieldSql(String selectFieldSql) {
+		this.selectFieldSql = selectFieldSql;
+	}
+
+	public void appendSelectField(String sql) {
+		this.selectFieldSql = this.selectFieldSql + "," + sql;
+	}
+
+	public void appendSelectPagePrefix(String sql) {
+		this.selectPrefixForPage = this.selectPrefixForPage + "," + sql;
+	}
+
+	public String getWhereSql() {
+		if (StringUtils.isBlank(this.whereSql)) {
+			this.whereSql = " 1 = 1 ";
+		}
+
+		return this.pageHelper != null && this.pageHelper.getLimit() > 0 ? this.whereSql + (this.orderSql == null ? "" : this.orderSql) + (this.whereSubfixForPage == null ? "" : this.whereSubfixForPage) : (StringUtils.isNotBlank(this.whereSql) ? this.whereSql : " 1= 1 ") + (this.orderSql == null ? "" : this.orderSql);
+	}
+
+	public void setWhereSql(String whereSql) {
+		this.whereSql = whereSql;
+	}
+
+	public Map<String, String> getValuesMap() {
+		return this.valuesMap;
+	}
+
+	public void setValuesMap(Map<String, String> valuesMap) {
+		this.valuesMap = valuesMap;
+	}
+
+	public String getTableNick() {
+		return this.tableNick;
+	}
+
+	public void setTableNick(String tableNick) {
+		this.tableNick = tableNick;
+	}
+
+	public String getOrderSql() {
+		return this.orderSql;
+	}
+
+	public void setOrderSql(String orderSql) {
+		this.orderSql = orderSql;
+	}
+
+	public String getOidFieldName() {
+		return this.oidFieldName;
+	}
+
+	public void setOidFieldName(String oidFieldName) {
+		this.oidFieldName = oidFieldName;
+	}
+
+	public boolean isDistinct() {
+		return this.distinct;
+	}
+
+	public void setDistinct(boolean distinct) {
+		this.distinct = distinct;
+	}
+
+	public Map<String, String> getCustomerSqlMap() {
+		return this.customerSqlMap;
+	}
+
+	public void setCustomerSqlMap(Map<String, String> customerSqlMap) {
+		this.customerSqlMap = customerSqlMap;
+	}
+
+}
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 3240265..ac7770b 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,7 +16,6 @@
  */
 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;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
index 0686993..bcb31a9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/FrameWorkLangCodeConstant.java
@@ -180,6 +180,11 @@
 	public static final String DATA_LINKED_NOT_DELETE = "dataLinkedNotDelete";
 
 	/**
+	 * ts妫�楠屾湭閫氳繃
+	 */
+	public static final String TS_NOT_PROCESS = "ts test failed";
+
+	/**
 	 * 鏁版嵁鐨勫瓙鑺傜偣涔熻寮曠敤锛屼笉鍏佽鍒犻櫎
 	 */
 	public static final String DATA_CASCADE_LINKED_NOT_DELETE = "dataCascadeLinkedNotDelete";
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
index 634fea2..fc4aee3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmBtmTypeConstant.java
@@ -49,6 +49,10 @@
      * 闃舵鐨勫睘鎬�
      */
     public static final String CODE_PHASE_ATTR = "codephaseattr";
+	/**
+	 * 闃舵鐨勫睘鎬�
+	 */
+	public static final String CODE_PHASE_ATTR_TABLENAME = "code_phaseattr";
 
     /**
      * 涓绘暟鎹垎绫讳娇鐢ㄧ殑娴佺▼妯℃澘
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
index de4180c..c4ec48a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeAllCodeController.java
@@ -43,7 +43,7 @@
  */
 @RestController
 @AllArgsConstructor
-@RequestMapping("blade-code/CodeAllcode")
+@RequestMapping("/CodeAllcode")
 @Api(value = "鍏ㄩ儴鐮佸��", tags = "鍏ㄩ儴鐮佸�兼帴鍙�")
 public class CodeAllCodeController extends BladeController {
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
index 1f47c61..be3cfa6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeButtonController.java
@@ -19,10 +19,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 import com.vci.ubcs.code.wrapper.CodeButtonWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -61,8 +61,8 @@
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆codebutton")
-	public R<CodeButtonVO> detail(CodeButtonEntity codebutton) {
-		CodeButtonEntity detail = codeButtonMapper.selectOne(Condition.getQueryWrapper(codebutton));
+	public R<CodeButtonVO> detail(CodeButton codebutton) {
+		CodeButton detail = codeButtonMapper.selectOne(Condition.getQueryWrapper(codebutton));
 		return R.data(CodeButtonWrapper.build().entityVO(detail));
 	}
 	/**
@@ -71,8 +71,8 @@
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆codebutton")
-	public R<IPage<CodeButtonVO>> list(CodeButtonEntity codebutton, Query query) {
-		IPage<CodeButtonEntity> pages = codeButtonMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codebutton));
+	public R<IPage<CodeButtonVO>> list(CodeButton codebutton, Query query) {
+		IPage<CodeButton> pages = codeButtonMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codebutton));
 		return R.data(CodeButtonWrapper.build().pageVO(pages));
 	}
 
@@ -93,7 +93,7 @@
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "鏂板", notes = "浼犲叆codebutton")
-	public R save(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R save(@Valid @RequestBody CodeButton codebutton) {
 		return R.status(SqlHelper.retBool(codeButtonMapper.insert(codebutton)));
 	}
 
@@ -103,7 +103,7 @@
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "淇敼", notes = "浼犲叆codebutton")
-	public R update(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R update(@Valid @RequestBody CodeButton codebutton) {
 		return R.status(SqlHelper.retBool(codeButtonMapper.updateById(codebutton)));
 	}
 
@@ -113,7 +113,7 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆codebutton")
-	public R submit(@Valid @RequestBody CodeButtonEntity codebutton) {
+	public R submit(@Valid @RequestBody CodeButton codebutton) {
 		if(codebutton.getOid() != null){
 			return R.status(SqlHelper.retBool(codeButtonMapper.updateById(codebutton)));
 		}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
new file mode 100644
index 0000000..b0e3a77
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyProcessTempController.java
@@ -0,0 +1,167 @@
+package com.vci.ubcs.code.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.service.ICodeClassifyProcessTempService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
+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 com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎帶鍒跺櫒
+ *
+ * @author weidy
+ * @date 2022-01-24
+ */
+@RestController
+@RequestMapping("/codeClsProcessTempController")
+@AllArgsConstructor
+@Api(value = "缂栫爜搴撳畾涔�-娴佺▼妯℃澘", tags = "缂栫爜搴撳畾涔�-娴佺▼妯℃澘鎺ュ彛")
+public class CodeClassifyProcessTempController {
+
+    /**
+    * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉� 鏈嶅姟
+    */
+    @Autowired
+    private ICodeClassifyProcessTempService codeClassifyProcessTempService;
+
+    /**
+     * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛�
+     */
+    @GetMapping("/gridCodeClassifyProcessTemp")
+    public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.gridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 澧炲姞 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PostMapping( "/addSave")
+    public R<CodeClassifyProcessTempVO> addSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+         CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.addSave(codeClassifyProcessTempDTO);
+         return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 淇敼 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+     * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+     */
+    @PutMapping("/editSave")
+    public R<CodeClassifyProcessTempVO> editSave(@RequestBody CodeClassifyProcessTempDTO codeClassifyProcessTempDTO){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.editSave(codeClassifyProcessTempDTO);
+        return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+     * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+     */
+    @DeleteMapping( "/deleteData")
+    public R delCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+        return codeClassifyProcessTempService.deleteCodeClassifyProcessTemp(codeClassifyProcessTempDTO);
+    }
+
+    /**
+    * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+    * @param oid 涓婚敭
+    * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+    */
+    @GetMapping("/getObjectByOid")
+    public R<CodeClassifyProcessTempVO> getObjectByOid(String oid){
+        CodeClassifyProcessTempVO codeClassifyProcessTempVO = codeClassifyProcessTempService.getObjectByOid(oid);
+        return R.data(codeClassifyProcessTempVO);
+    }
+
+    /**
+     * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+     */
+    @GetMapping("/listDataByOids")
+    public R<Collection<CodeClassifyProcessTempVO>> listCodeClassifyProcessTempByOids(String oids){
+        Collection<CodeClassifyProcessTempVO> voCollection =  codeClassifyProcessTempService.listCodeClassifyProcessTempByOids(VciBaseUtil.str2List(oids));
+        return R.data(voCollection);
+    }
+
+    /**
+     * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+     * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+     * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+     */
+    @GetMapping("/refDataGrid")
+    public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(BaseQueryObject baseQueryObject){
+        if(baseQueryObject == null){
+            baseQueryObject = new BaseQueryObject();
+        }
+        return codeClassifyProcessTempService.refDataGridCodeClassifyProcessTemp(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listProcessTemplate")
+    public R<List<CodeClassifyProcessTempVO>> listProcessTemplate(String codeTemplateOid,String processUse){
+        List<CodeClassifyProcessTempVO> processTempVOList = codeClassifyProcessTempService.listProcessTemplate(codeTemplateOid,processUse);
+        return R.data(processTempVOList);
+    }
+
+    /**
+     * 浣跨敤妯℃澘鑾峰彇浣跨敤鐨勬祦绋嬫ā鏉�
+     * @param codeTemplateOid 妯℃澘鐨勪富閿�
+     * @param processUse 娴佺▼鐨勭敤閫�
+     * @return 娴佺▼妯℃澘鐨勪俊鎭�
+     */
+    @GetMapping("/listSameProcessTemplate")
+    public R<CodeClassifyProcessTempVO> listSameProcessTemplate(String codeTemplateOid,String processUse){
+        VciBaseUtil.alertNotNull(codeTemplateOid,"鎵�閫夋嫨鐨勬暟鎹ā鏉夸富閿�");
+        /*Map<String,String> conditionMap=new HashMap<>();
+        conditionMap.put("classifyTemplateOid", QueryOptionConstant.IN  + VciBaseUtil.toInSql(codeTemplateOid));
+        conditionMap.put("codeprocessuse",processUse);*/
+		LambdaQueryWrapper<CodeClassifyProcessTemp> LambdaQueryWrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().in(CodeClassifyProcessTemp::getCodeClassifyOid, VciBaseUtil.toInSql(codeTemplateOid))
+			.eq(CodeClassifyProcessTemp::getCodeProcessUse, processUse);
+
+		List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS = codeClassifyProcessTempService.selectByWrapper(LambdaQueryWrapper);
+        //鏍规嵁妯℃澘灏嗘暟鎹暣鍚堝湪涓�璧凤紝鍘绘牎楠�
+        Map<String/**妯℃澘oid**/, List<CodeClassifyProcessTempVO>/**鏁版嵁瀵硅薄**/>  templateProcessTempateVOMap =
+			codeClassifyProcessTempVOS.stream().collect(Collectors.toMap(CodeClassifyProcessTempVO::getId, s->{
+            List<CodeClassifyProcessTempVO> l=new ArrayList<>();
+            l.add(s);
+            return l;
+        },(List<CodeClassifyProcessTempVO> s1,List<CodeClassifyProcessTempVO> s2)->{
+            s1.addAll(s2);
+            return s1;
+        }));
+        if(templateProcessTempateVOMap.size()>1){
+            return R.fail("娴佺▼妯℃澘涓嶇粺涓�锛屼笉鍏佽鍙戣捣娴佺▼");
+        }else {
+            return R.data(codeClassifyProcessTempVOS.get(0));
+        }
+    }
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
new file mode 100644
index 0000000..e05eb2e
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateButtonController.java
@@ -0,0 +1,137 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.service.ICodeTempbuttonService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.code.wrapper.CodeTempbuttonWrapper;
+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;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+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.Collection;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鎺у埗鍣�
+ *
+ * @author ludc
+ * @since 2023-04-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/codeClsTempButtonController")
+@Api(value = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍", tags = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍鎺ュ彛")
+public class CodeClassifyTemplateButtonController extends BladeController {
+
+	/**
+	 * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽� 鏈嶅姟
+	 */
+	private final ICodeTempbuttonService codeClassifyTemplateButtonService;
+
+	/**
+	 * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param codeClassifyTemplateButtonVO 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @param query
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛�
+	 */
+	@GetMapping("/gridCodeClassifyTemplateButton")
+	public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO,Query query){
+		return codeClassifyTemplateButtonService.gridCodeClassifyTemplateButton(codeClassifyTemplateButtonVO,query);
+	}
+
+	/**
+	 * 澧炲姞 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PostMapping( "/addSave")
+	public R addSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+		return R.status(codeClassifyTemplateButtonService.addSave(codeClassifyTemplateButtonDTO));
+	}
+
+	/**
+	 * 淇敼 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PutMapping("/editSave")
+	public R editSave(@RequestBody CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO){
+		return R.status(codeClassifyTemplateButtonService.editSave(codeClassifyTemplateButtonDTO));
+	}
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 */
+	@DeleteMapping( "/deleteData")
+	public R delCodeClassifyTemplateButton( CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) {
+		return codeClassifyTemplateButtonService.deleteCodeClassifyTemplateButton(codeClassifyTemplateButtonDTO);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 */
+	@GetMapping("/getObjectByOid")
+	public R<CodeClassifyTemplateButtonVO> getObjectByOid(String oid){
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = codeClassifyTemplateButtonService.getObjectByOid(oid);
+		return R.data(codeClassifyTemplateButtonVO);
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 */
+	@GetMapping("/listDataByOids")
+	public R<Collection<CodeClassifyTemplateButtonVO>> listCodeClassifyTemplateButtonByOids(String oids){
+		Collection<CodeClassifyTemplateButtonVO> voCollection =  codeClassifyTemplateButtonService.listCodeClassifyTemplateButtonByOids(VciBaseUtil.str2List(oids));
+		return R.data(voCollection);
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 */
+	@GetMapping("/refDataGrid")
+	public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(BaseQueryObject baseQueryObject){
+		if(baseQueryObject == null){
+			baseQueryObject = new BaseQueryObject();
+		}
+		return codeClassifyTemplateButtonService.refDataGridCodeClassifyTemplateButton(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
index 72bf049..99ca7bb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
@@ -19,8 +19,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.vci.ubcs.code.wrapper.CodePhaseattrWrapper;
@@ -51,7 +51,7 @@
 
 	private final ICodePhaseattrService CodePhaseattrService;
 
-	private CodePhaseattrMapper codePhaseattrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
 	/**
 	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 璇︽儏
@@ -59,8 +59,8 @@
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodePhaseattr")
-	public R<CodePhaseattrVO> detail(CodePhaseattrEntity CodePhaseattr) {
-		CodePhaseattrEntity detail = CodePhaseattrService.getOne(Condition.getQueryWrapper(CodePhaseattr));
+	public R<CodePhaseattrVO> detail(CodePhaseAttr CodePhaseattr) {
+		CodePhaseAttr detail = CodePhaseattrService.getOne(Condition.getQueryWrapper(CodePhaseattr));
 		return R.data(CodePhaseattrWrapper.build().entityVO(detail));
 	}
 	/**
@@ -69,8 +69,8 @@
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodePhaseattr")
-	public R<IPage<CodePhaseattrVO>> list(CodePhaseattrEntity CodePhaseattr, Query query) {
-		IPage<CodePhaseattrEntity> pages = CodePhaseattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodePhaseattr));
+	public R<IPage<CodePhaseattrVO>> list(CodePhaseAttr CodePhaseattr, Query query) {
+		IPage<CodePhaseAttr> pages = CodePhaseattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodePhaseattr));
 		return R.data(CodePhaseattrWrapper.build().pageVO(pages));
 	}
 
@@ -91,7 +91,7 @@
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "鏂板", notes = "浼犲叆CodePhaseattr")
-	public R save(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R save(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.save(CodePhaseattr));
 	}
 
@@ -101,7 +101,7 @@
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "淇敼", notes = "浼犲叆CodePhaseattr")
-	public R update(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R update(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.updateById(CodePhaseattr));
 	}
 
@@ -111,7 +111,7 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodePhaseattr")
-	public R submit(@Valid @RequestBody CodePhaseattrEntity CodePhaseattr) {
+	public R submit(@Valid @RequestBody CodePhaseAttr CodePhaseattr) {
 		return R.status(CodePhaseattrService.saveOrUpdate(CodePhaseattr));
 	}
 
@@ -122,7 +122,7 @@
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
 	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codePhaseattrMapper.deleteBatchIds(Func.toLongList(ids))));
+		return R.status(SqlHelper.retBool(codePhaseAttrMapper.deleteBatchIds(Func.toLongList(ids))));
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java
deleted file mode 100644
index 2951532..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempbuttonController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
-import com.vci.ubcs.code.service.ICodeTempbuttonService;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
-import com.vci.ubcs.code.wrapper.CodeTempbuttonWrapper;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鎺у埗鍣�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("ubcs-code/CodeTempbutton")
-@Api(value = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍", tags = "缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍鎺ュ彛")
-public class CodeTempbuttonController extends BladeController {
-
-	private final ICodeTempbuttonService CodeTempbuttonService;
-
-	private CodeTempbuttonMapper codeTempbuttonMapper;
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodeTempbutton")
-	public R<CodeTempbuttonVO> detail(CodeTempbuttonEntity CodeTempbutton) {
-		CodeTempbuttonEntity detail = CodeTempbuttonService.getOne(Condition.getQueryWrapper(CodeTempbutton));
-		return R.data(CodeTempbuttonWrapper.build().entityVO(detail));
-	}
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempbutton")
-	public R<IPage<CodeTempbuttonVO>> list(CodeTempbuttonEntity CodeTempbutton, Query query) {
-		IPage<CodeTempbuttonEntity> pages = CodeTempbuttonService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeTempbutton));
-		return R.data(CodeTempbuttonWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempbutton")
-	public R<IPage<CodeTempbuttonVO>> page(CodeTempbuttonVO CodeTempbutton, Query query) {
-		IPage<CodeTempbuttonVO> pages = CodeTempbuttonService.selectCodeTempbuttonPage(Condition.getPage(query), CodeTempbutton);
-		return R.data(pages);
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆CodeTempbutton")
-	public R save(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.save(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆CodeTempbutton")
-	public R update(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.updateById(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodeTempbutton")
-	public R submit(@Valid @RequestBody CodeTempbuttonEntity CodeTempbutton) {
-		return R.status(CodeTempbuttonService.saveOrUpdate(CodeTempbutton));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codeTempbuttonMapper.deleteBatchIds(Func.toLongList(ids))));
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
new file mode 100644
index 0000000..720281f
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTemplatePhaseController.java
@@ -0,0 +1,160 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.code.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.code.wrapper.CodeTempphaseWrapper;
+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 com.vci.ubcs.starter.web.util.VciBaseUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鎺у埗鍣�
+ *
+ * @author ludc
+ * @since 2023-04-20
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/codeTempPhaseController")
+@Api(value = "缂栫爜搴撳畾涔�-妯℃澘闃舵", tags = "缂栫爜搴撳畾涔�-妯℃澘闃舵鎺ュ彛")
+public class CodeTemplatePhaseController extends BladeController {
+
+	/**
+	 * 妯℃澘闃舵 鏈嶅姟
+	 */
+	private final ICodeTempphaseService codeTemplatePhaseService;
+
+	/**
+	 * 妯℃澘闃舵鍒楄〃
+	 * @param codeTemplatePhaseVO 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @param query
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃
+	 */
+	@GetMapping("/gridCodeTemplatePhase")
+	public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO,Query query){
+		return codeTemplatePhaseService.gridCodeTemplatePhase(codeTemplatePhaseVO,query);
+	}
+
+	/**
+	 * 澧炲姞 妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PostMapping( "/addSave")
+	public R<CodeTemplatePhaseVO> addSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+		return R.data(codeTemplatePhaseService.addSave(codeTemplatePhaseDTO));
+	}
+
+	/**
+	 * 淇敼 妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉锛宻uccess涓簍rue琛ㄧず鎴愬姛锛宮sg鏄け璐ョ殑鎻愮ず淇℃伅锛宱bj鏄坊鍔犲畬鎴愬悗鐨勬樉绀哄璞�
+	 */
+	@PutMapping("/editSave")
+	public R<CodeTemplatePhaseVO> editSave(@RequestBody CodeTemplatePhaseDTO codeTemplatePhaseDTO){
+		CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.editSave(codeTemplatePhaseDTO);
+		return R.data(codeTemplatePhaseVO);
+	}
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 */
+	@DeleteMapping( "/deleteData")
+	public R delCodeTemplatePhase( CodeTemplatePhaseDTO codeTemplatePhaseDTO) {
+		return codeTemplatePhaseService.deleteCodeTemplatePhase(codeTemplatePhaseDTO);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 */
+	@GetMapping("/getObjectByOid")
+	public R<CodeTemplatePhaseVO> getObjectByOid(String oid){
+		CodeTemplatePhaseVO codeTemplatePhaseVO = codeTemplatePhaseService.getObjectByOid(oid);
+		return R.data(codeTemplatePhaseVO);
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oids 涓婚敭锛屽涓互閫楀彿鍒嗛殧锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 */
+	@GetMapping("/listDataByOids")
+	public R<Collection<CodeTemplatePhaseVO>> listCodeTemplatePhaseByOids(String oids){
+		Collection<CodeTemplatePhaseVO> voCollection =  codeTemplatePhaseService.listCodeTemplatePhaseByOids(VciBaseUtil.str2List(oids));
+		return R.data(voCollection);
+	}
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param baseQueryObject 鍩虹鏌ヨ瀵硅薄锛屽寘鍚煡璇㈡潯浠讹紝鍒嗛〉锛屾帓搴忕瓑
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 */
+	@GetMapping("/refDataGrid")
+	public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(BaseQueryObject baseQueryObject){
+		if(baseQueryObject == null){
+			baseQueryObject = new BaseQueryObject();
+		}
+		return codeTemplatePhaseService.refDataGridCodeTemplatePhase(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+	/**
+	 * 鑾峰彇闃舵涓病鏈変娇鐢ㄧ殑妯℃澘灞炴��
+	 * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@GetMapping("/gridUnUsedAttribute")
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(BaseQueryObject baseQueryObject){
+		return codeTemplatePhaseService.gridUnUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+	/**
+	 * 鑾峰彇闃舵涓娇鐢ㄧ殑妯℃澘灞炴��
+	 * @param baseQueryObject 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@GetMapping("/gridUsedAttribute")
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(BaseQueryObject baseQueryObject){
+		return codeTemplatePhaseService.gridUsedAttribute(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java
deleted file mode 100644
index a2dc26e..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeTempphaseController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-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.code.wrapper.CodeTempphaseWrapper;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鎺у埗鍣�
- *
- * @author yuxc
- * @since 2023-04-20
- */
-@RestController
-@AllArgsConstructor
-@RequestMapping("ubcs-code/CodeTempphase")
-@Api(value = "缂栫爜搴撳畾涔�-妯℃澘闃舵", tags = "缂栫爜搴撳畾涔�-妯℃澘闃舵鎺ュ彛")
-public class CodeTempphaseController extends BladeController {
-
-
-	private final ICodeTempphaseService CodeTempphaseService;
-
-	private CodeTempphaseMapper codeTempphaseMapper;
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodeTempphase")
-	public R<CodeTempphaseVO> detail(CodeTempphaseEntity CodeTempphase) {
-		CodeTempphaseEntity detail = CodeTempphaseService.getOne(Condition.getQueryWrapper(CodeTempphase));
-		return R.data(CodeTempphaseWrapper.build().entityVO(detail));
-	}
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鍒嗛〉
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempphase")
-	public R<IPage<CodeTempphaseVO>> list(CodeTempphaseEntity CodeTempphase, Query query) {
-		IPage<CodeTempphaseEntity> pages = CodeTempphaseService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeTempphase));
-		return R.data(CodeTempphaseWrapper.build().pageVO(pages));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鑷畾涔夊垎椤�
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodeTempphase")
-	public R<IPage<CodeTempphaseVO>> page(CodeTempphaseVO CodeTempphase, Query query) {
-		IPage<CodeTempphaseVO> pages = CodeTempphaseService.selectCodeTempphasePage(Condition.getPage(query), CodeTempphase);
-		return R.data(pages);
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏂板
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鏂板", notes = "浼犲叆CodeTempphase")
-	public R save(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.save(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 淇敼
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "淇敼", notes = "浼犲叆CodeTempphase")
-	public R update(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.updateById(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆CodeTempphase")
-	public R submit(@Valid @RequestBody CodeTempphaseEntity CodeTempphase) {
-		return R.status(CodeTempphaseService.saveOrUpdate(CodeTempphase));
-	}
-
-	/**
-	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		return R.status(SqlHelper.retBool(codeTempphaseMapper.deleteBatchIds(Func.toLongList(ids))));
-	}
-
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java
new file mode 100644
index 0000000..6baffd7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/NewAppConstantEnum.java
@@ -0,0 +1,45 @@
+package com.vci.ubcs.code.enumpack;
+
+import org.springblade.core.launch.constant.AppConstant;
+
+public enum NewAppConstantEnum {
+
+	/**
+	 * 缂栫爜瑙勫垯锛屾湇鍔″惎鍔ㄥ悕
+	 */
+	APPLICATION_NAME_CODE(AppConstant.APPLICATION_NAME_CODE,"缂栫爜瑙勫垯鏈嶅姟"),
+	;
+
+	/**
+	 * 鏋氫妇鐨刵ame
+	 */
+	private String name;
+
+	/**
+	 * 鏋氫妇鏄剧ず鏂囨湰
+	 */
+	private String text;
+
+	NewAppConstantEnum(String name, String text) {
+		this.name = name;
+		this.text = text;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
index 9170f02..0f6ddc8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeButtonClient.java
@@ -18,7 +18,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.entity.CodeKeyattrrepeatEntity;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
@@ -48,13 +48,13 @@
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeButtonEntity> top(Integer current, Integer size) {
+    public BladePage<CodeButton> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
 //		IPage<CodeKeyattrrepeatEntity> page = codeKeyattrrepeatMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
-        IPage<CodeButtonEntity> page = codeButtonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeButton> page = codeButtonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 //		IPage<CodeKeyattrrepeatEntity> page = codebuttonService.page(Condition.getPage(query));
 //        return null;
         return BladePage.of(page);
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
index a36576b..d89b166 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
@@ -18,12 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -40,15 +40,15 @@
 @AllArgsConstructor
 public class CodePhaseattrClient implements ICodePhaseattrClient {
 
-    private final CodePhaseattrMapper codePhaseattrMapper;
+    private final CodePhaseAttrMapper codePhaseAttrMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodePhaseattrEntity> top(Integer current, Integer size) {
+    public BladePage<CodePhaseAttr> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodePhaseattrEntity> page = codePhaseattrMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodePhaseAttr> page = codePhaseAttrMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 		return BladePage.of(page);
     }
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
index 7945cdd..981f26f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempbuttonClient.java
@@ -18,12 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
 import com.vci.ubcs.code.service.ICodeTempbuttonService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -41,15 +41,15 @@
 public class CodeTempbuttonClient implements ICodeTempbuttonClient {
 
 
-    private final CodeTempbuttonMapper codeTempbuttonMapper;
+    private final CodeClassifyTemplateButtonMapper codeTempbuttonMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeTempbuttonEntity> top(Integer current, Integer size) {
+    public BladePage<CodeClassifyTemplateButton> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodeTempbuttonEntity> page = codeTempbuttonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeClassifyTemplateButton> page = codeTempbuttonMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
 		return BladePage.of(page);
     }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
index 24ff7cd..03b4fd3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeTempphaseClient.java
@@ -18,13 +18,12 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.service.ICodeTempphaseService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
@@ -40,15 +39,15 @@
 @AllArgsConstructor
 public class CodeTempphaseClient implements ICodeTempphaseClient {
 
-    private final CodeTempphaseMapper codeTempphaseMapper;
+    private final CodeTemplatePhaseMapper codeTempphaseMapper;
 
     @Override
     @GetMapping(TOP)
-    public BladePage<CodeTempphaseEntity> top(Integer current, Integer size) {
+    public BladePage<CodeTemplatePhase> top(Integer current, Integer size) {
         Query query = new Query();
         query.setCurrent(current);
         query.setSize(size);
-        IPage<CodeTempphaseEntity> page = codeTempphaseMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
+        IPage<CodeTemplatePhase> page = codeTempphaseMapper.selectPage(Condition.getPage(query), Wrappers.emptyWrapper());
 
 		return BladePage.of(page);
     }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
index 7166837..fe08afd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeButtonClient.java
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.feign;
 
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import org.springblade.core.mp.support.BladePage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeButtonEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeButton> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
index 969bb62..fb43ec3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodePhaseattrClient.java
@@ -16,8 +16,9 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +45,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodePhaseattrEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodePhaseAttr> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
index b102e4a..cd6943b 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempbuttonClient.java
@@ -16,8 +16,8 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeTempbuttonEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeClassifyTemplateButton> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
index 0b007f3..19b4b37 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/ICodeTempphaseClient.java
@@ -16,8 +16,8 @@
  */
 package com.vci.ubcs.code.feign;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import org.springblade.core.mp.support.BladePage;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +44,6 @@
      * @return BladePage
      */
     @GetMapping(TOP)
-    BladePage<CodeTempphaseEntity> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+    BladePage<CodeTemplatePhase> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
index 4e1a71d..3b51c7e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeButtonMapper.java
@@ -18,8 +18,8 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 
 import java.util.List;
 
@@ -29,7 +29,7 @@
  * @author yuxc
  * @since 2023-03-29
  */
-public interface CodeButtonMapper extends BaseMapper<CodeButtonEntity> {
+public interface CodeButtonMapper extends BaseMapper<CodeButton> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
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 a363528..ce03874 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,6 +81,9 @@
 	@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/CodeClassifyProcessTempMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java
new file mode 100644
index 0000000..4176631
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyProcessTempMapper.java
@@ -0,0 +1,17 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹搷浣滃眰
+ *
+ * @author ludc
+ * @since 2023-05-05
+ */
+public interface CodeClassifyProcessTempMapper extends BaseMapper<CodeClassifyProcessTemp> {
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
new file mode 100644
index 0000000..c686357
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateAttrMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.code.entity.CodeClassify;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+
+public interface CodeClassifyTemplateAttrMapper extends BaseMapper<CodeClassifyTemplateAttr> {
+
+
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java
similarity index 77%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java
index aaad9cc..df8b888 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyTemplateButtonMapper.java
@@ -16,10 +16,11 @@
  */
 package com.vci.ubcs.code.mapper;
 
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+
 import java.util.List;
 
 /**
@@ -28,7 +29,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodeTempbuttonMapper extends BaseMapper<CodeTempbuttonEntity> {
+public interface CodeClassifyTemplateButtonMapper extends BaseMapper<CodeClassifyTemplateButton> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -37,7 +38,7 @@
 	 * @param CodeTempbutton
 	 * @return
 	 */
-	List<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage page, CodeTempbuttonVO CodeTempbutton);
+	List<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage page, CodeClassifyTemplateButtonVO CodeTempbutton);
 
 
 }
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 5e87d10..10196de 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,9 +20,11 @@
 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 鎺ュ彛
@@ -57,5 +59,17 @@
 	 */
 	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/CodeTempbuttonMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
similarity index 67%
copy from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
copy to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
index aaad9cc..187b185 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempbuttonMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
@@ -16,28 +16,32 @@
  */
 package com.vci.ubcs.code.mapper;
 
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 Mapper 鎺ュ彛
+ * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� Mapper 鎺ュ彛
  *
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodeTempbuttonMapper extends BaseMapper<CodeTempbuttonEntity> {
+public interface CodePhaseAttrMapper extends BaseMapper<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
 	 *
 	 * @param page
-	 * @param CodeTempbutton
+	 * @param CodePhaseattr
 	 * @return
 	 */
-	List<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage page, CodeTempbuttonVO CodeTempbutton);
+	List<CodePhaseattrVO> selectCodePhaseattrPage(IPage page, CodePhaseattrVO CodePhaseattr);
 
+	List<CodePhaseAttr> selectByPhasea(String oid);
 
+	List<CodePhaseAttr> selectByPhaseaIds(String oids);
+
+	List<CodePhaseAttr> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
 }
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 7765694..187b185 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
@@ -16,7 +16,7 @@
  */
 package com.vci.ubcs.code.mapper;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,7 +28,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodePhaseattrMapper extends BaseMapper<CodePhaseattrEntity> {
+public interface CodePhaseAttrMapper extends BaseMapper<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -39,6 +39,9 @@
 	 */
 	List<CodePhaseattrVO> selectCodePhaseattrPage(IPage page, CodePhaseattrVO CodePhaseattr);
 
+	List<CodePhaseAttr> selectByPhasea(String oid);
 
-	List<CodePhaseattrEntity> selectByPhasea(String oid);
+	List<CodePhaseAttr> selectByPhaseaIds(String oids);
+
+	List<CodePhaseAttr> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java
similarity index 80%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java
index c1587f3..fe88200 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTempphaseMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeTemplatePhaseMapper.java
@@ -16,10 +16,11 @@
  */
 package com.vci.ubcs.code.mapper;
 
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+
 import java.util.List;
 
 /**
@@ -28,7 +29,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodeTempphaseMapper extends BaseMapper<CodeTempphaseEntity> {
+public interface CodeTemplatePhaseMapper extends BaseMapper<CodeTemplatePhase> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -37,7 +38,7 @@
 	 * @param CodeTempphase
 	 * @return
 	 */
-	List<CodeTempphaseVO> selectCodeTempphasePage(IPage page, CodeTempphaseVO CodeTempphase);
+	List<CodeTemplatePhaseVO> selectCodeTempphasePage(IPage page, CodeTemplatePhaseVO CodeTempphase);
 
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
index 1b80ffd..0162239 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -3,6 +3,7 @@
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,6 +17,6 @@
 	@MapKey("count")
 	Map<String,String> selectByCount(@Param("tableName") String tableName,@Param("oid") String oid,@Param("btm") String btm);
 
-
+	List<String> selectById(@Param("inSql") String inSql);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
index ea53f0a..2daf4a6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeButtonService.java
@@ -17,8 +17,13 @@
 package com.vci.ubcs.code.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
 import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 妯℃澘鎵╁睍姹� 鏈嶅姟绫�
@@ -38,6 +43,37 @@
 	IPage<CodeButtonVO> selectcodebuttonPage(IPage<CodeButtonVO> page, CodeButtonVO codebutton);
 
 	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButton>  codeButtonDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeButtonVO codeButtonDO2VO(CodeButton codeButtonDO) throws VciBaseException;
+
+	/**
+	 * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
+	 * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
+	 * @return 涓氬姟瀵硅薄
+	 */
+	List<CodeButton> selectByPrimaryKeyCollection(Collection<String> oids);
+
+	/**
 	 * 鍚敤
 	 * @param oid 鏁版嵁浼犺緭
 	 * @return 鎵ц缁撴灉
@@ -55,5 +91,6 @@
 	 * @param ids 涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-//	R deleteCodeButton(String ids);
+	//	R deleteCodeButton(String ids);
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java
new file mode 100644
index 0000000..9e514b6
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyProcessTempService.java
@@ -0,0 +1,118 @@
+package com.vci.ubcs.code.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import org.springblade.core.tool.api.R;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public interface ICodeClassifyProcessTempService extends IService<CodeClassifyProcessTemp> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTemp> codeClassifyProcessTempDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTemp codeClassifyProcessTempDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oid 涓婚敭
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+	 * @param codeTemplateOid 妯℃澘鐨勪富閿�
+	 * @param processUse 鐢ㄩ��
+	 * @return 妯℃澘鐨勪俊鎭�
+	 */
+	List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse);
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	List<CodeClassifyProcessTempVO> selectByWrapper(LambdaQueryWrapper<CodeClassifyProcessTemp> queryWrapper);
+
+}
+
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 a9fc3a5..9cd5583 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
@@ -89,9 +89,9 @@
 	 * @param lcStatus 鐘舵��
 	 * @return 鎵ц缁撴灉
 	 */
-    R updateLcStatus(String oid, String lcStatus);
+	R updateLcStatus(String oid, String lcStatus);
 
-    /**
+	/**
 	 * 鏍规嵁涓婚敭鎵归噺鏌ヨ瀵硅薄
 	 * @param oids 瀵硅薄涓婚敭,浣跨敤閫楀彿鍒嗛殧锛屼絾鏄笉鑳借秴杩�1000
 	 * @return 涓氬姟瀵硅薄
@@ -198,4 +198,18 @@
 	 * @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/ICodeClassifyTemplateAttrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java
new file mode 100644
index 0000000..0defd89
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java
@@ -0,0 +1,62 @@
+package com.vci.ubcs.code.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+
+import java.sql.Wrapper;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+public interface ICodeClassifyTemplateAttrService extends IService<CodeClassifyTemplateAttr> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param lambdaQueryWrapper 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(LambdaQueryWrapper<CodeClassifyTemplateAttr> lambdaQueryWrapper , PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttr codeClassifyTemplateAttrDO) throws VciBaseException;
+
+	/**
+	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, Object> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
index 6350c98..35148e8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
@@ -5,16 +5,20 @@
 
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
 
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import org.springblade.core.tool.api.R;
 
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
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 71898f2..e2c7fc4 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,11 +22,14 @@
 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;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 鏈嶅姟绫�
@@ -50,7 +53,7 @@
 	 * @param treeQueryObject 鏍戞煡璇㈠璞�
 	 * @return 鍒嗙被妯℃澘瀵硅薄 鏄剧ず鏍�
 	 */
-    List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject);
+	List<Tree> treeCodeClassifyTemplate(TreeQueryObject treeQueryObject);
 
 	/**
 	 * 鏍规嵁鏍戝舰鏌ヨ瀵硅薄鏉ユ煡璇㈡暟鎹璞�
@@ -154,4 +157,30 @@
 	 * 鍗囩増
 	 */
 	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/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
index bfe5e4f..167d9b6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
@@ -18,7 +18,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 
 /**
@@ -27,7 +27,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodePhaseattrService extends IService<CodePhaseattrEntity> {
+public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
index 024db8d..73221fe 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempbuttonService.java
@@ -18,8 +18,18 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+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;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏈嶅姟绫�
@@ -27,7 +37,90 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodeTempbuttonService extends IService<CodeTempbuttonEntity> {
+public interface ICodeTempbuttonService extends IService<CodeClassifyTemplateButton> {
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO, Query query) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs) throws VciBaseException;
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButton codeClassifyTemplateButtonDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	boolean editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -36,8 +129,7 @@
 	 * @param CodeTempbutton
 	 * @return
 	 */
-	IPage<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage<CodeTempbuttonVO> page, CodeTempbuttonVO CodeTempbutton);
-
+	IPage<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage<CodeClassifyTemplateButtonVO> page, CodeClassifyTemplateButtonVO CodeTempbutton);
 
 	/**
 	 * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
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 2ee891a..9653220 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
@@ -16,10 +16,21 @@
  */
 package com.vci.ubcs.code.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.entity.CodeClstempattrEntity;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+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;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏈嶅姟绫�
@@ -27,17 +38,16 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodeTempphaseService extends IService<CodeTempphaseEntity> {
+public interface ICodeTempphaseService extends IService<CodeTemplatePhase> {
 
 	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param CodeTempphase
-	 * @return
+	 * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+	 * @param codeTemplatePhaseVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
-	IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase);
-
+	DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO, Query query) throws VciBaseException;
 
 	/**
 	 * 妯℃澘鍒犻櫎鐨勬椂鍊欒Е鍙�
@@ -45,4 +55,93 @@
 	 * @return 鍙楀奖鍝嶇殑鏁版嵁
 	 */
 	int codeTemplateDeleteTrigger(String classifyTemplateOid);
+
+	/**
+	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
+	 * @param codeClassifyTemplateAttrDOInsert 灞炴�х殑鏁版嵁瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑鏁版嵁
+	 */
+	List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert);
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhase> codeTemplatePhaseDOs) throws VciBaseException;
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhase codeTemplatePhaseDO) throws VciBaseException;
+
+	/**
+	 * 澧炲姞妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 淇敼妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	R deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException;
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException;
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 闃舵涓嶅寘鍚殑灞炴��
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @param pageHelper 鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
+	/**
+	 * 闃舵鍖呭惈鐨勫睘鎬�
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @param pageHelper 鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
+
 }
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 6237099..d6584b6 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
@@ -8,7 +8,6 @@
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
 import com.vci.ubcs.code.entity.CodeBasicSec;
-import com.vci.ubcs.code.entity.CodeClassify;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
 import com.vci.ubcs.code.entity.CodeFixedValue;
 import com.vci.ubcs.code.enumpack.*;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
index 06ef202..08abbfc 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeButtonServiceImpl.java
@@ -18,14 +18,23 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
-import com.vci.ubcs.code.entity.CodeButtonEntity;
+import com.vci.ubcs.code.entity.CodeButton;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
 import com.vci.ubcs.code.mapper.CodeButtonMapper;
 import com.vci.ubcs.code.service.ICodeButtonService;
-import com.vci.ubcs.code.vo.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 妯℃澘鎵╁睍姹� 鏈嶅姟瀹炵幇绫�
@@ -36,7 +45,7 @@
 @Service
 public class CodeButtonServiceImpl implements ICodeButtonService {
 
-	@Autowired
+	@Resource
 	CodeButtonMapper codeButtonMapper;
 
 	@Override
@@ -44,11 +53,89 @@
 		return page.setRecords(codeButtonMapper.selectcodebuttonPage(page, codebutton));
 	}
 
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓绘暟鎹腑鐨勬寜閽墿灞�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓绘暟鎹腑鐨勬寜閽墿灞曟樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeButtonVO> listCodeButtonByOids(Collection<String> oidCollections) throws VciBaseException {
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeButton> codeButtonDOList = listCodeButtonDOByOidCollections(oidCollections);
+		return codeButtonDO2VOs(codeButtonDOList);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeButtonVO> codeButtonDO2VOs(Collection<CodeButton>  codeButtonDOs) throws VciBaseException{
+		List<CodeButtonVO> voList = new ArrayList<CodeButtonVO>();
+		if(!CollectionUtils.isEmpty(codeButtonDOs)){
+			for(CodeButton s: codeButtonDOs){
+				CodeButtonVO vo =  codeButtonDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeButtonVO codeButtonDO2VO(CodeButton codeButtonDO) throws VciBaseException{
+		CodeButtonVO vo = new CodeButtonVO();
+		if(codeButtonDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeButtonDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
+
+		}
+		return vo;
+	}
+
+	@Override
+	public List<CodeButton> selectByPrimaryKeyCollection(Collection<String> oids) {
+		VciBaseUtil.alertNotNull(oids,"涓婚敭闆嗗悎");
+		return codeButtonMapper.selectBatchIds(oids);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeButton> listCodeButtonDOByOidCollections(Collection<String> oidCollections){
+		List<CodeButton> codeButtonDOList = new ArrayList<CodeButton>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeButton> tempDOList =  codeButtonMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeButtonDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeButtonDOList;
+	}
+
+
 	@Override
     public R enableCodeButton(String id) {
-		CodeButtonEntity codebutton = codeButtonMapper.selectById(id);
+		CodeButton codebutton = codeButtonMapper.selectById(id);
 		return changeLcStatus(codebutton,true);
     }
+
 	/**
 	 * 鍋滅敤
 	 *
@@ -57,11 +144,11 @@
 	 */
 	@Override
 	public R disableOrgDuty(String oid) {
-		CodeButtonEntity codebutton = codeButtonMapper.selectById(oid);
+		CodeButton codebutton = codeButtonMapper.selectById(oid);
 		return changeLcStatus(codebutton,false);
 	}
 
-//	@Override
+	//	@Override
 //	public R deleteCodeButton(String ids) {
 ////		VciBaseUtil.alertNotNull(codeButtonDTO,"涓绘暟鎹腑鐨勬寜閽墿灞曟暟鎹璞�",codeButtonDTO.getOid(),"涓绘暟鎹腑鐨勬寜閽墿灞曠殑涓婚敭");
 //		if(StringUtils.isEmpty(ids)){
@@ -86,7 +173,7 @@
 	 * @param disable 鏄惁涓哄仠鐢�
 	 * @return 鎵ц鐨勭粨鏋�
 	 */
-	private R changeLcStatus(CodeButtonEntity buttonDTO, boolean disable){
+	private R changeLcStatus(CodeButton buttonDTO, boolean disable){
 //		VciBaseUtil.alertNotNull(buttonDTO,"鏁版嵁瀵硅薄",buttonDTO.getOid(),"涓婚敭");
 		if(disable){
 			buttonDTO.setLcstatus(FrameworkDataLCStatus.ENABLED.getValue());
@@ -97,7 +184,7 @@
 			R.success(FrameworkDataLCStatus.ENABLED.getValue()):R.fail(FrameworkDataLCStatus.DISABLED.getValue());
 	}
 
-//	/**
+	//	/**
 //	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
 //	 * @param codeButtonDTO 鏁版嵁浼犺緭瀵硅薄
 //	 * @param codeButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
new file mode 100644
index 0000000..b1a1ecd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
@@ -0,0 +1,365 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.dto.CodeClassifyProcessTempDTO;
+import com.vci.ubcs.code.entity.CodeClassify;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
+import com.vci.ubcs.code.mapper.CodeClassifyMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyProcessTempMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
+import com.vci.ubcs.code.service.ICodeClassifyProcessTempService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyProcessTempVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+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.sql.Wrapper;
+import java.util.*;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+
+/**
+ * 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎湇鍔℃帴鍙�
+ *
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Service
+public class CodeClassifyProcessTempServiceImpl extends ServiceImpl<CodeClassifyProcessTempMapper, CodeClassifyProcessTemp> implements ICodeClassifyProcessTempService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Resource
+	private CodeClassifyProcessTempMapper codeClassifyProcessTempMapper;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired
+	private RevisionModelUtil revisionModelUtil;
+
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyProcessTempVO> gridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		Query query = new Query();
+		if (pageHelper == null) {
+			pageHelper = new PageHelper(-1);
+			query.setSize(-1);
+		}else {
+			query.setSize(pageHelper.getLimit());
+			query.setCurrent(pageHelper.getPage());
+		}
+		query.setDescs("createTime");
+		CodeClassifyProcessTemp codeClassifyProcessTemp = new CodeClassifyProcessTemp();
+		BeanMap beanMap = BeanMap.create(codeClassifyProcessTemp);
+		beanMap.putAll(conditionMap);
+
+		IPage<CodeClassifyProcessTemp> doList = codeClassifyProcessTempMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClassifyProcessTemp));
+		DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeClassifyProcessTempDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyProcessTempMapper.selectCount(Condition.getQueryWrapper(codeClassifyProcessTemp)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyProcessTempDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> codeClassifyProcessTempDO2VOs(Collection<CodeClassifyProcessTemp> codeClassifyProcessTempDOs) throws VciBaseException{
+		List<CodeClassifyProcessTempVO> voList = new ArrayList<CodeClassifyProcessTempVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOs)){
+			codeClassifyProcessTempDOs.forEach(temp -> {
+				CodeClassifyProcessTempVO tempVO = codeClassifyProcessTempDO2VO(temp);
+				BeanUtilForVCI.copyPropertiesIgnoreCase(temp,tempVO);
+				voList.add(tempVO);
+			});
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyProcessTempDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public CodeClassifyProcessTempVO codeClassifyProcessTempDO2VO(CodeClassifyProcessTemp codeClassifyProcessTempDO) throws VciBaseException{
+		CodeClassifyProcessTempVO vo = new CodeClassifyProcessTempVO();
+		if(codeClassifyProcessTempDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			//澶勭悊鍏宠仈鐨勬ā鏉垮睘鎬�
+
+		}
+		return vo;
+	}
+
+	/**
+	 * 澧炲姞鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeClassifyProcessTempVO addSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getCodeprocessuse(),"妯℃澘娴佺▼鐨勭敤閫�");
+		if (StringUtils.isBlank(codeClassifyProcessTempDTO.getCodeprocessuse())){
+			throw new VciBaseException("妯℃澘娴佺▼鐢ㄩ�斾笉鑳戒负绌�");
+		}
+		Long count = countProcessTemplate(codeClassifyProcessTempDTO);
+		if(count > 0){
+			throw new VciBaseException("宸插瓨鍦ㄧ浉鍚岀殑娴佺▼妯℃澘");
+		}
+		//灏咲TO杞崲涓篋O
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = new CodeClassifyProcessTemp();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		codeClassifyProcessTempMapper.insert(codeClassifyProcessTempDO);
+		//鍥犱负涓氬姟绫诲瀷鏈韩娌℃湁鎺у埗鐗堟湰锛屾墍鏈夊己鍒剁粰鐗堟湰revisionValue璁剧疆鍊硷紝骞冲彴涔熶細鍙樻垚绌恒�傘�傘�傘��
+		//鐗堟湰鍙蜂笉鑳戒娇鐢ㄩ粯璁ょ殑灞炴��
+		return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+	}
+
+	/**
+	 * 淇敼鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeClassifyProcessTempVO editSave(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鏁版嵁瀵硅薄",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉夸富閿�",codeClassifyProcessTempDTO.getProcessVersion(),"娴佺▼妯℃澘鐨勭増鏈彿",codeClassifyProcessTempDTO.getName(),"娴佺▼妯℃澘鐨勫悕绉�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		codeClassifyProcessTempMapper.updateById(codeClassifyProcessTempDO);
+		return codeClassifyProcessTempDO2VO(codeClassifyProcessTempDO);
+	}
+
+	/**
+	 * 鍒犻櫎鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param codeClassifyProcessTempDTO 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeClassifyProcessTemp(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyProcessTempDTO,"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎暟鎹璞�",codeClassifyProcessTempDTO.getOid(),"鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉跨殑涓婚敭");
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = selectByOid(codeClassifyProcessTempDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeClassifyProcessTempDTO,codeClassifyProcessTempDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		boolean batchCBO = codeClassifyProcessTempMapper.deleteById(codeClassifyProcessTempDO.getOid()) > 0;
+		return batchCBO?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oid 涓婚敭
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyProcessTempVO getObjectByOid(String oid) throws VciBaseException{
+		return codeClassifyProcessTempDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeClassifyProcessTempVO> listCodeClassifyProcessTempByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList = listCodeClassifyProcessTempDOByOidCollections(oidCollections);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+	}
+
+	/**
+	 * 鍙傜収鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉垮垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鍒嗙被浣跨敤鐨勬祦绋嬫ā鏉挎樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyProcessTempVO> refDataGridCodeClassifyProcessTemp(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		return gridCodeClassifyProcessTemp(conditionMap,pageHelper);
+
+	}
+
+	/**
+	 * 鑾峰彇娴佺▼鐨勬ā鏉跨殑淇℃伅
+	 *
+	 * @param codeTemplateOid 妯℃澘鐨勪富閿�
+	 * @param processUse      鐢ㄩ��
+	 * @return 妯℃澘鐨勪俊鎭�
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> listProcessTemplate(String codeTemplateOid, String processUse) {
+		if(StringUtils.isBlank(codeTemplateOid) || StringUtils.isBlank(processUse)){
+			return new ArrayList<>();
+		}
+		Map<String,String> conditionMap =new HashMap<>();
+		conditionMap.put("classifyTemplateOid",codeTemplateOid);
+		conditionMap.put("codeprocessuse",processUse);
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getClassifyTemplateOid, codeTemplateOid)
+			.eq(CodeClassifyProcessTemp::getCodeProcessUse, processUse);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempMapper.selectList(wrapper));
+	}
+
+	/**
+	 * 浣跨敤鏌ヨ灏佽鍣ㄦ潵鏌ヨ
+	 * @param queryWrapper 鏌ヨ灏佽鍣�
+	 * @return 鏁版嵁瀵硅薄
+	 */
+	@Override
+	public List<CodeClassifyProcessTempVO> selectByWrapper(LambdaQueryWrapper<CodeClassifyProcessTemp> queryWrapper) {
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList= codeClassifyProcessTempMapper.selectList(queryWrapper);
+		return codeClassifyProcessTempDO2VOs(codeClassifyProcessTempDOList);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeClassifyProcessTemp> listCodeClassifyProcessTempDOByOidCollections(Collection<String> oidCollections){
+		List<CodeClassifyProcessTemp> codeClassifyProcessTempDOList = new ArrayList<CodeClassifyProcessTemp>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				//List<CodeClassifyProcessTemp> tempDOList =  codeClassifyProcessTempMapper.selectByPrimaryKeyCollection(oids);
+				List<CodeClassifyProcessTemp> tempDOList =  codeClassifyProcessTempMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeClassifyProcessTempDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeClassifyProcessTempDOList;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeClassifyProcessTempDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO, CodeClassifyProcessTemp codeClassifyProcessTempDO) {
+		CodeClassifyProcessTemp tempDO = new CodeClassifyProcessTemp();
+		BeanUtil.convert(codeClassifyProcessTempDTO,tempDO);
+		if (!checkTs(tempDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeClassifyProcessTempDO.getOid())) {
+			return R.success("success");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyProcessTemp tempDO){
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getOid,tempDO.getOid()).select(CodeClassifyProcessTemp::getTs);
+		long dbTs = codeClassifyProcessTempMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeClassifyProcessTemp selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyProcessTemp codeClassifyProcessTempDO = codeClassifyProcessTempMapper.selectById(oid.trim());
+		if(codeClassifyProcessTempDO == null || StringUtils.isBlank(codeClassifyProcessTempDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeClassifyProcessTempDO;
+	}
+
+	/**
+	 * 鑾峰彇娴佺▼妯℃澘鏄惁宸茬粡瀛樺湪浜�
+	 * @param codeClassifyProcessTempDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @return 涓暟
+	 */
+	private Long countProcessTemplate(CodeClassifyProcessTempDTO codeClassifyProcessTempDTO) {
+		String templateName = codeClassifyProcessTempDTO.getName();
+		if (StringUtils.isBlank(templateName)){
+			throw new VciBaseException("妯℃澘娴佺▼鍚嶇О涓嶈兘涓虹┖");
+		}
+		LambdaQueryWrapper<CodeClassifyProcessTemp> wrapper = Wrappers.<CodeClassifyProcessTemp>query()
+			.lambda().eq(CodeClassifyProcessTemp::getCodeProcessUse, codeClassifyProcessTempDTO.getCodeprocessuse())
+			.eq(CodeClassifyProcessTemp::getClassifyTemplateOid, codeClassifyProcessTempDTO.getClassifyTemplateOid())
+			.eq(CodeClassifyProcessTemp::getId, codeClassifyProcessTempDTO.getId());
+		Long count = codeClassifyProcessTempMapper.selectCount(wrapper);
+		return count;
+	}
+
+}
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 6547785..702a980 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,8 +5,6 @@
 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;
@@ -25,13 +23,14 @@
 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.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,11 +39,11 @@
 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;
 import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -985,4 +984,41 @@
 		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/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
new file mode 100644
index 0000000..0a05198
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -0,0 +1,133 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
+import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+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.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.sql.Wrapper;
+import java.util.*;
+
+/**
+ * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
+ * @author ludc
+ * @date 2023/5/5
+ */
+@Service
+public class CodeClassifyTemplateAttrServiceImpl extends ServiceImpl<CodeClassifyTemplateAttrMapper, CodeClassifyTemplateAttr> implements ICodeClassifyTemplateAttrService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Resource
+	private CodeClassifyTemplateAttrMapper codeClassifyTemplateAttrMapper;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param lambdaQueryWrapper 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(LambdaQueryWrapper<CodeClassifyTemplateAttr> lambdaQueryWrapper , PageHelper pageHelper) throws VciBaseException {
+		DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<>();
+		//娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
+		if(lambdaQueryWrapper == null){
+			dataGrid.setData(new ArrayList<>());
+			dataGrid.setTotal(0);
+			return dataGrid;
+		}
+		Query query = new Query();
+		if (pageHelper == null) {
+			pageHelper = new PageHelper(-1);
+			query.setSize(-1);
+		}else {
+			query.setCurrent(pageHelper.getPage());
+			query.setSize(pageHelper.getLimit());
+		}
+		//pageHelper.addDefaultAsc("ordernum");
+		query.setAscs("ordernum");
+
+		IPage<CodeClassifyTemplateAttr> doList = codeClassifyTemplateAttrMapper.selectPage(Condition.getPage(query), lambdaQueryWrapper);
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateAttrMapper.selectCount(lambdaQueryWrapper))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, Object> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, Object>();
+		}
+		return gridCodeClassifyTemplateAttr(Condition.getQueryWrapper(conditionMap,CodeClassifyTemplateAttr.class).lambda(),pageHelper);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOs) throws VciBaseException{
+		List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
+			for(CodeClassifyTemplateAttr s: codeClassifyTemplateAttrDOs){
+				CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttr codeClassifyTemplateAttrDO) throws VciBaseException{
+		CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
+		if(codeClassifyTemplateAttrDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+			vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
+		}
+		return vo;
+	}
+
+}
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 e9749c9..4db19dd 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
@@ -30,8 +30,7 @@
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_CASCADE_LINKED_NOT_DELETE;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 @Service
 public class CodeClassifyValueServiceImpl  extends ServiceImpl<CodeClassifyValueMapper, CodeClassifyValue> implements ICodeClassifyValueService {
@@ -138,7 +137,9 @@
 	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
 	 */
 	private R checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValue codeClassifyValueDO) {
-		//boService.checkTs(codeClassifyValueDTO);
+		if (!checkTs(codeClassifyValueDTO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClassifyValueDO.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
@@ -339,5 +340,20 @@
 		return codeClassifyValueMapper.selectList(wrapper);
 	}
 
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyValueDTO tempDO){
+		LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
+			.lambda().eq(CodeClassifyValue::getOid,tempDO.getOid()).select(CodeClassifyValue::getTs);
+		long dbTs = codeClassifyValueMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
 
 }
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 c2f8b5e..ab690db 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,36 +20,37 @@
 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.CodeClstempattrEntity;
-import com.vci.ubcs.code.entity.CodeClstemplateEntity;
+import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.CodeClassifyTemplateLC;
 import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
-import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
-import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
+import com.vci.ubcs.code.mapper.*;
+import com.vci.ubcs.code.service.ICodeClassifyService;
 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.FRAMEWORK_RELEASE_RELEASED;
-import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
+import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.*;
 import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 import static com.vci.ubcs.code.service.impl.CodeClassifyServiceImpl.PARENT_FIELD_NAME;
 
@@ -83,6 +84,23 @@
 	private CodeTempbuttonServiceImpl codeTempbuttonServiceImpl;
 	@Autowired(required = false)
 	private CodeClsflowtempServiceImpl codeClsflowtempServiceImpl;
+	@Autowired(required = false)
+	private CodeClsflowtempMapper codeClsflowtempMapper;
+	@Autowired(required = false)
+	private CodeTemplatePhaseMapper codeTempphaseMapper;
+	@Autowired(required = false)
+	private CodeClassifyTemplateButtonMapper 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));
@@ -119,8 +137,12 @@
 //		VciParentQueryOption parentQueryOption = new VciParentQueryOption();
 //		parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
 //		queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
-		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
-		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
+//		CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
+//		codeClstemplateEntity.set
+		return baseMapper.selectCodeClassifyTemplateDOByTree(
+			treeQueryObject.getConditionMap().get("codeclassifyoid"),
+			treeQueryObject.getConditionMap().get("lcStatus"));
+//		return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
 //		return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
 	}
 
@@ -210,19 +232,20 @@
 		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
-			.selectOne(Condition.getQueryWrapper(condition,CodeClstemplateEntity.class));
-		if(detail == null){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+			.selectById(codeClstemplateDTO.getOid());
+
+		if(!detail.getTs().toString().equals(codeClstemplateDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
 			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
 		}
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClstemplateEntity.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
 		}
-		return R.status(checkHasChild(codeClstemplateEntity.getOid()));
+		return R.success(String.valueOf(checkHasChild(codeClstemplateEntity.getOid())));
 	}
 
 	/**
@@ -273,6 +296,7 @@
 	 * @param codeClstemplateDTO 鍒嗙被妯℃澘瀵硅薄鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
 	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
+	@Transactional
 	@Override
 	public R deleteCodeClassifyTemplate(CodeClstemplateDTO codeClstemplateDTO) {
 		checkIsCanDelete(codeClstemplateDTO);
@@ -362,8 +386,8 @@
 	 * 鍙傜収鏍� 鍒嗙被妯℃澘瀵硅薄
 	 * @param treeQueryObject 鏍戝舰鏌ヨ瀵硅薄
 	 * @return 鍒嗙被妯℃澘瀵硅薄鏄剧ず鏍�
-	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
+	@Transactional
 	@Override
 	public List<Tree> referTree(TreeQueryObject treeQueryObject) {
 		if(treeQueryObject == null){
@@ -418,6 +442,7 @@
 	 * @param lcStatus
 	 * @return
 	 */
+	@Transactional
 	@Override
 	public R updateLcStatus( String oid, String lcStatus){
 		CodeClstemplateEntity codeClassifyTemplateDO = baseMapper.selectById(oid);
@@ -440,6 +465,7 @@
 	 * 鍗囩増
 	 * @param codeClassifyDTO
 	 */
+	@Transactional
 	@Override
 	public R Upgrade(CodeClstemplateDTO codeClassifyDTO) {
 
@@ -454,93 +480,95 @@
 		//闇�瑕佹柊澧炵殑鍗囩骇妯℃澘
 //		ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
 		CodeClstemplateEntity codeCls_template = baseMapper.selectById(templateOldOid);
-		CodeClstemplateEntity codeCls_template_insert = null;
+		CodeClstemplateEntity codeCls_template_insert = new CodeClstemplateEntity();
 //			ClientBusinessObject clientBusinessObject_template_insert = null;
 //		try {
-////			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());
+//			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());
 //			VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
-//			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());
+		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());
 //		}catch (VCIError e){
 //			e.printStackTrace();
 //			logger.error("===============>鍒嗙被妯℃澘-鍗囩増澶嶅埗鍑洪敊oid锛� "+templateOldOid+",mes"+e.error_message);
 //			return BaseResult.error("鍗囩増鍑洪敊");
 //		}
-//
-//
-//		CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
+		int insertCount = baseMapper.insert(codeCls_template_insert);
+//		CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
 //		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 = codeClassifyTemplateDO.getOid();
-//
-//		//闇�瑕佸鍒剁殑妯℃澘灞炴��
-//		//鏌ヨ鑰佹ā鏉夸笅杈圭殑鎵�鏈夊睘鎬э紝璧嬪�兼柊妯℃澘oid
+		//鍗囩増杩囧悗鐨勬ā鏉縪id
+		String templateNewOid = codeCls_template_insert.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 (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
+		for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
 //			String attrOid = VciBaseUtil.getPk();
-//			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);
-//
-//		//涓�璧蜂繚瀛樻暟鎹�
+			codeClassifyTemplateAttrDO.setOid(null);
+			codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
+			codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
+		}
+
+		//澶嶅埗妯℃澘娴佺▼
+		List<CodeClsflowtempEntity>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
+		//澶嶅埗妯℃澘闃舵锛岄樁娈靛睘鎬�
+		Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
+
+		List<CodeTemplatePhase> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhase>)phase_attrMap.get("phase");//妯℃澘闃舵
+		List<CodePhaseAttr> codePhaseAttrDOList = (ArrayList<CodePhaseAttr>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+		//澶嶅埗妯℃澘鎸夐挳
+		List<CodeClassifyTemplateButton> 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);
@@ -572,8 +600,433 @@
 //		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<CodeTemplatePhase> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhase>)phase_attrMap.get("phase");//妯℃澘闃舵
+		List<CodePhaseAttr> codePhaseAttrDOList = (ArrayList<CodePhaseAttr>)phase_attrMap.get("phaseAttr");//闃舵灞炴��
+
+		//澶嶅埗妯℃澘鎸夐挳
+		List<CodeClassifyTemplateButton> 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<CodeTemplatePhase> 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 (CodeTemplatePhase codeTemplatePhaseDO:codeTempphaseEntities){
+			String oldoid = codeTemplatePhaseDO.getOid();
+			String newOid = VciBaseUtil.getPk();
+			codeTemplatePhaseDO.setOid(newOid);
+			codeTemplatePhaseDO.setCodeClassifyTemplateOid(templateNewOid);
+			phaseKeyMap.put(oldoid,newOid);
+			phaseOidList.add(oldoid);
+		}
+
+		//妯℃澘闃舵鐨勫睘鎬�
+		List<CodePhaseAttr> codePhaseAttrDOList = new ArrayList<CodePhaseAttr>();
+
+		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 (CodePhaseAttr 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<CodeClassifyTemplateButton> 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<CodeClassifyTemplateButton> codeTempbuttonEntities = codeTempbuttonMapper.selectByMap(condition);
+//		List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
+		for (CodeClassifyTemplateButton 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/CodeFixedValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
index 3660668..5c7939a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
@@ -1,11 +1,13 @@
 package com.vci.ubcs.code.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.CodeFixedValueDTO;
+import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
 import com.vci.ubcs.code.entity.CodeFixedValue;
 import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
 import com.vci.ubcs.code.service.ICodeFixedValueService;
@@ -31,8 +33,7 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_LINKED_NOT_DELETE;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
@@ -129,7 +130,9 @@
 	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
 	 */
 	private R checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValue codeFixedValueDO) {
-		//boService.checkTs(codeFixedValueDTO);
+		if (checkTs(codeFixedValueDTO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
 		if(!checkIsLinked(codeFixedValueDO.getOid())) {
 			return R.status(true);
 		}else{
@@ -138,6 +141,22 @@
 	}
 
 	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeFixedValueDTO tempDO){
+		LambdaQueryWrapper<CodeFixedValue> wrapper = Wrappers.<CodeFixedValue>query()
+			.lambda().eq(CodeFixedValue::getOid,tempDO.getOid()).select(CodeFixedValue::getTs);
+		long dbTs = codeFixedValueMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
 	 * 鏍¢獙鏄惁琚紩鐢�
 	 * @param oid 涓婚敭
 	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
index 742dc51..06962aa 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
@@ -18,8 +18,8 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import com.vci.ubcs.code.service.ICodePhaseattrService;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import org.springframework.stereotype.Service;
@@ -31,7 +31,7 @@
  * @since 2023-04-20
  */
 @Service
-public class CodePhaseattrServiceImpl extends ServiceImpl<CodePhaseattrMapper, CodePhaseattrEntity> implements ICodePhaseattrService {
+public class CodePhaseattrServiceImpl extends ServiceImpl<CodePhaseAttrMapper, CodePhaseAttr> implements ICodePhaseattrService {
 
 	@Override
 	public IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
index c8577ed..258e9a9 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
@@ -17,19 +17,44 @@
 package com.vci.ubcs.code.service.impl;
 
 import com.alibaba.nacos.common.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.mapper.CodeTempbuttonMapper;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateButtonDTO;
+import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.entity.CodeClassifyValue;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper;
+import com.vci.ubcs.code.service.ICodeButtonService;
 import com.vci.ubcs.code.service.ICodeTempbuttonService;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+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 java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.lang.reflect.Field;
+import java.util.*;
 import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘鎸夐挳鎵╁睍 鏈嶅姟瀹炵幇绫�
@@ -38,11 +63,301 @@
  * @since 2023-04-20
  */
 @Service
-public class CodeTempbuttonServiceImpl extends ServiceImpl<CodeTempbuttonMapper, CodeTempbuttonEntity> implements ICodeTempbuttonService {
+public class CodeTempbuttonServiceImpl extends ServiceImpl<CodeClassifyTemplateButtonMapper, CodeClassifyTemplateButton> implements ICodeTempbuttonService {
+
+	/**
+	 * 鏁版嵁鎿嶄綔灞�
+	 */
+	@Autowired
+	private CodeClassifyTemplateButtonMapper codeClassifyTemplateButtonMapper;
+
+	/**
+	 * 鎸夐挳鐨勬湇鍔�
+	 */
+	@Autowired
+	private ICodeButtonService buttonService;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateButtonVO> gridCodeClassifyTemplateButton(CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO, Query query) throws VciBaseException {
+		query.setDescs("createTime");
+
+		if(StringUtils.isBlank(codeClassifyTemplateButtonVO.getClassifytemplateoid())){
+			return null;
+		}
+		IPage<CodeClassifyTemplateButton> doList = codeClassifyTemplateButtonMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(codeClassifyTemplateButtonVO));
+		DataGrid<CodeClassifyTemplateButtonVO> dataGrid=new DataGrid<CodeClassifyTemplateButtonVO>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeClassifyTemplateButtonDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClassifyTemplateButtonMapper.selectCount(Condition.getQueryWrapper(codeClassifyTemplateButtonVO)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs) throws VciBaseException{
+		return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOs,false);
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeClassifyTemplateButtonDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @param hasButtonVO 鏄惁鍖呭惈鎸夐挳鐨勪俊鎭�
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeClassifyTemplateButtonVO> codeClassifyTemplateButtonDO2VOs(Collection<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOs, boolean hasButtonVO) throws VciBaseException{
+		List<CodeClassifyTemplateButtonVO> voList = new ArrayList<CodeClassifyTemplateButtonVO>();
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOs)){
+			for(CodeClassifyTemplateButton s: codeClassifyTemplateButtonDOs){
+				CodeClassifyTemplateButtonVO vo =  codeClassifyTemplateButtonDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		if(hasButtonVO && !CollectionUtils.isEmpty(voList)){
+			//鑾峰彇鎸夐挳鐨勬樉绀哄璞�
+			List<CodeButtonVO> buttonVOList = new ArrayList<>();
+			VciBaseUtil.switchCollectionForOracleIn(voList.stream().map(CodeClassifyTemplateButtonVO::getClassifybuttonoid).collect(Collectors.toList())).stream().forEach(buttonOids->{
+				buttonVOList.addAll(buttonService.listCodeButtonByOids(buttonOids));
+			});
+			Map<String, CodeButtonVO> buttonVOMap = Optional.ofNullable(buttonVOList).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+			voList.stream().forEach(vo->{
+				vo.setButtonVO(buttonVOMap.getOrDefault(vo.getClassifybuttonoid(),null));
+			});
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeClassifyTemplateButtonDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateButtonVO codeClassifyTemplateButtonDO2VO(CodeClassifyTemplateButton codeClassifyTemplateButtonDO) throws VciBaseException{
+		CodeClassifyTemplateButtonVO vo = new CodeClassifyTemplateButtonVO();
+		if(codeClassifyTemplateButtonDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+
+		}
+		return vo;
+	}
 
 	@Override
-	public IPage<CodeTempbuttonVO> selectCodeTempbuttonPage(IPage<CodeTempbuttonVO> page, CodeTempbuttonVO CodeTempbutton) {
+	public IPage<CodeClassifyTemplateButtonVO> selectCodeTempbuttonPage(IPage<CodeClassifyTemplateButtonVO> page, CodeClassifyTemplateButtonVO CodeTempbutton) {
 		return page.setRecords(baseMapper.selectCodeTempbuttonPage(page, CodeTempbutton));
+	}
+
+	/**
+	 * 澧炲姞涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean addSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getClassifytemplateoid(),"妯℃澘鐨勪富閿�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = new CodeClassifyTemplateButton();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		if(codeClassifyTemplateButtonDO.getOrderNum()== null){
+			//鏌ヨ鍏ㄩ儴
+			Long count = codeClassifyTemplateButtonMapper.selectCount(Wrappers.<CodeClassifyTemplateButton>query()
+				.lambda().eq(CodeClassifyTemplateButton::getClassifytemplateoid,codeClassifyTemplateButtonDTO.getClassifytemplateoid())
+			);
+			if(count == null){
+				count = 0L;
+			}
+			codeClassifyTemplateButtonDO.setOrderNum(Long.valueOf(count + 1L).intValue());
+		}
+		return codeClassifyTemplateButtonMapper.insert(codeClassifyTemplateButtonDO)>0;
+	}
+
+	/**
+	 * 淇敼涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean editSave(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽富閿�");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		return codeClassifyTemplateButtonMapper.updateById(codeClassifyTemplateButtonDO)>0;
+	}
+
+	/**
+	 * 鍒犻櫎涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param codeClassifyTemplateButtonDTO 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeClassifyTemplateButton(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateButtonDTO,"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹璞�",codeClassifyTemplateButtonDTO.getOid(),"涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽殑涓婚敭");
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = selectByOid(codeClassifyTemplateButtonDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeClassifyTemplateButtonDTO,codeClassifyTemplateButtonDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		boolean b = codeClassifyTemplateButtonMapper.deleteById(codeClassifyTemplateButtonDO.getOid()) > 0;
+		return R.status(b);
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeClassifyTemplateButtonDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeClassifyTemplateButtonDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeClassifyTemplateButtonDTO codeClassifyTemplateButtonDTO, CodeClassifyTemplateButton codeClassifyTemplateButtonDO) {
+		CodeClassifyTemplateButton tsDO = new CodeClassifyTemplateButton();
+		BeanUtil.convert(codeClassifyTemplateButtonDTO,tsDO);
+		if (checkTs(tsDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeClassifyTemplateButtonDO.getOid())) {
+			return R.success("success");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeClassifyTemplateButton tempDO){
+		LambdaQueryWrapper<CodeClassifyTemplateButton> wrapper = Wrappers.<CodeClassifyTemplateButton>query()
+			.lambda().eq(CodeClassifyTemplateButton::getOid,tempDO.getOid()).select(CodeClassifyTemplateButton::getTs);
+		long dbTs = codeClassifyTemplateButtonMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateButtonVO getObjectByOid(String oid) throws VciBaseException{
+		return codeClassifyTemplateButtonDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽�
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeClassifyTemplateButtonVO> listCodeClassifyTemplateButtonByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = listCodeClassifyTemplateButtonDOByOidCollections(oidCollections);
+		return codeClassifyTemplateButtonDO2VOs(codeClassifyTemplateButtonDOList);
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateButtonVO> refDataGridCodeClassifyTemplateButton(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = new CodeClassifyTemplateButtonVO();
+		BeanMap beanMap = BeanMap.create(codeClassifyTemplateButtonVO);
+		beanMap.putAll(conditionMap);
+		Query query = new Query();
+		query.setSize(pageHelper.getLimit());
+		query.setCurrent(pageHelper.getPage());
+
+		return gridCodeClassifyTemplateButton(codeClassifyTemplateButtonVO,query);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeClassifyTemplateButton> listCodeClassifyTemplateButtonDOByOidCollections(Collection<String> oidCollections){
+		List<CodeClassifyTemplateButton> codeClassifyTemplateButtonDOList = new ArrayList<CodeClassifyTemplateButton>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeClassifyTemplateButton> tempDOList =  codeClassifyTemplateButtonMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeClassifyTemplateButtonDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeClassifyTemplateButtonDOList;
+	}
+
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeClassifyTemplateButton selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateButton codeClassifyTemplateButtonDO = codeClassifyTemplateButtonMapper.selectById(oid.trim());
+		if(codeClassifyTemplateButtonDO == null || StringUtils.isBlank(codeClassifyTemplateButtonDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeClassifyTemplateButtonDO;
 	}
 
 	/**
@@ -57,10 +372,10 @@
 		if(StringUtils.isNotBlank(classifyTemplateOid)){
 			Map<String,Object> conditionMap = new HashMap<>();
 			conditionMap.put("classifyTemplateOid",classifyTemplateOid);
-			List<CodeTempbuttonEntity> codeTempbuttonEntities = baseMapper.selectByMap(conditionMap);
+			List<CodeClassifyTemplateButton> codeTempbuttonEntities = baseMapper.selectByMap(conditionMap);
 			if(!CollectionUtils.isEmpty(codeTempbuttonEntities)){
 				updateCount += baseMapper.deleteBatchIds(codeTempbuttonEntities.stream()
-					.map(CodeTempbuttonEntity::getOid).collect(Collectors.toList()));
+					.map(CodeClassifyTemplateButton::getOid).collect(Collectors.toList()));
 			}
 		}
 		return updateCount;
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 07bd3f5..9cdaaf5 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
@@ -16,22 +16,48 @@
  */
 package com.vci.ubcs.code.service.impl;
 
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-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.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
+import com.vci.ubcs.code.entity.*;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
+import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
+import com.vci.ubcs.code.mapper.CommonsMapper;
+import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
+import com.vci.ubcs.code.service.ICodePhaseattrService;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.MybatisParameterUtils;
+import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
+import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.WebUtil;
+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 java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵 鏈嶅姟瀹炵幇绫�
@@ -40,15 +66,88 @@
  * @since 2023-04-20
  */
 @Service
-public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTempphaseMapper, CodeTempphaseEntity> implements ICodeTempphaseService {
-
+public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTemplatePhaseMapper, CodeTemplatePhase> implements ICodeTempphaseService {
 
 	@Autowired(required = false)
-	private CodePhaseattrMapper codePhaseattrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
+	@Autowired(required = false)
+	private CodeTemplatePhaseMapper codeTemplatePhaseMapper;
+
+	@Autowired(required = false)
+	private CommonsMapper commonsMapper;
+
+	@Autowired(required = false)
+	private ICodePhaseattrService codePhaseattrService;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired(required = false)
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 妯℃澘灞炴�х殑鏈嶅姟
+	 */
+	@Autowired
+	private ICodeClassifyTemplateAttrService tempAttrService;
+
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑妯℃澘闃舵
+	 * @param codeTemplatePhaseVO 鏌ヨ鏉′欢
+	 * @param query 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
 	@Override
-	public IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase) {
-		return page.setRecords(baseMapper.selectCodeTempphasePage(page, CodeTempphase));
+	public DataGrid<CodeTemplatePhaseVO> gridCodeTemplatePhase(CodeTemplatePhaseVO codeTemplatePhaseVO, Query query) throws VciBaseException {
+		query.setDescs("createTime");
+		query.setSize(-1);
+
+		IPage<CodeTemplatePhase> doList = codeTemplatePhaseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeTemplatePhaseVO));
+		DataGrid<CodeTemplatePhaseVO> dataGrid=new DataGrid<CodeTemplatePhaseVO>();
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+			dataGrid.setData(codeTemplatePhaseDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.selectCount(Condition.getQueryWrapper(codeTemplatePhaseVO)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param codeTemplatePhaseDOs 鏁版嵁瀵硅薄鍒楄〃
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呬笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhase> codeTemplatePhaseDOs) throws VciBaseException{
+		List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
+		if(!CollectionUtils.isEmpty(codeTemplatePhaseDOs)){
+			for(CodeTemplatePhase s: codeTemplatePhaseDOs){
+				CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
+				if(vo != null){
+					voList.add(vo);
+				}
+			}
+		}
+		return voList;
+	}
+
+	/**
+	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+	 * @param  codeTemplatePhaseDO 鏁版嵁瀵硅薄
+	 * @return 鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鎷疯礉灞炴�у嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhase codeTemplatePhaseDO) throws VciBaseException{
+		CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
+		if(codeTemplatePhaseDO != null){
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDO,vo);
+			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+		}
+		return vo;
 	}
 
 	/**
@@ -61,18 +160,350 @@
 	public int codeTemplateDeleteTrigger(String templateOid) {
 		int updateCount = 0;
 		Map<String,Object> condition = new HashMap<>(1);
-		condition.put("classifyTemplateOid",templateOid);
-		List<CodeTempphaseEntity> codeTempphaseEntities = baseMapper.selectByMap(condition);
+		condition.put("codeclassifytemplateoid",templateOid);
+		List<CodeTemplatePhase> codeTempphaseEntities = baseMapper.selectByMap(condition);
 		if(!CollectionUtils.isEmpty(codeTempphaseEntities)) {
-			updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTempphaseEntity::getOid).collect(Collectors.toList()));
+			updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTemplatePhase::getOid).collect(Collectors.toList()));
 //			batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
 //			conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
-			List<CodePhaseattrEntity> phaseAttrDOS = codePhaseattrMapper.selectByPhasea(templateOid);
+			List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(templateOid);
 			if(!CollectionUtils.isEmpty(phaseAttrDOS)){
-				updateCount += codePhaseattrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseattrEntity::getOid).collect(Collectors.toList()));
+				updateCount += codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
 			}
 		}
 		return updateCount;
 	}
 
+	/**
+	 * 妯℃澘淇敼瑙﹀彂鍔熻兘
+	 * @param attrDOList 灞炴�х殑鏁版嵁瀵硅薄
+	 * @return 鍙楀奖鍝嶇殑鏁版嵁
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> attrDOList){
+		//灞炴�т慨鏀圭殑鏃跺�欙紝闇�瑕佸悓姝ヤ慨鏀瑰搴斿睘鎬х殑鍚嶇О
+//		BatchCBO batchCBO = new BatchCBO();
+		List<CodePhaseAttr> 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.
+			codePhaseattrService.saveBatch(phaseAttrDOS);
+//			BatchCBO updateCBO =
+//			codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
+//			batchCBO.copyFromOther(updateCBO);
+		}
+		return attrDOList;
+	}
+
+	/**
+	 * 澧炲姞妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+		//灏咲TO杞崲涓篋O
+		CodeTemplatePhase codeTemplatePhaseDO = new CodeTemplatePhase();
+		codeTemplatePhaseDO.setOid(VciBaseUtil.getPk());
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		//WebUtil.setPersistence(false);
+		boolean resBoolean = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO) > 0;
+		List<CodePhaseAttr> attrDOList = new ArrayList<>();
+		codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+			CodePhaseAttr attrDO = new CodePhaseAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+			attrDO.setOid(VciBaseUtil.getPk());
+			attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+			attrDOList.add(attrDO);
+		});
+		codePhaseattrService.saveBatch(attrDOList);
+		//WebUtil.setPersistence(true);
+		return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+	}
+
+	/**
+	 * 淇敼妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵涓婚敭",codeTemplatePhaseDTO.getAttributes(),"鍖呭惈鐨勫睘鎬�");
+		//灏咲TO杞崲涓篋O
+		CodeTemplatePhase codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		//WebUtil.setPersistence(false);
+		codeTemplatePhaseMapper.updateById(codeTemplatePhaseDO);
+		//鎶婁互鍓嶇殑鍒犻櫎
+		List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+		if(!CollectionUtils.isEmpty(phaseAttrDOS)){
+			codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
+		}
+		List<CodePhaseAttr> attrDOList = new ArrayList<>();
+		codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
+			CodePhaseAttr attrDO = new CodePhaseAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
+			attrDO.setOid(VciBaseUtil.getPk());
+			attrDO.setCodePhaseOid(codeTemplatePhaseDO.getOid());
+			attrDOList.add(attrDO);
+		});
+		codePhaseattrService.saveBatch(attrDOList);
+		//WebUtil.setPersistence(true);
+		return codeTemplatePhaseDO2VO(codeTemplatePhaseDO);
+	}
+
+	/**
+	 * 鍒犻櫎妯℃澘闃舵
+	 * @param codeTemplatePhaseDTO 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄锛宱id鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"妯℃澘闃舵鏁版嵁瀵硅薄",codeTemplatePhaseDTO.getOid(),"妯℃澘闃舵鐨勪富閿�");
+		CodeTemplatePhase codeTemplatePhaseDO = selectByOid(codeTemplatePhaseDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO,codeTemplatePhaseDO);
+		if(!baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		//WebUtil.setPersistence(false);
+		boolean batchCBO = codeTemplatePhaseMapper.deleteById(codeTemplatePhaseDO.getOid())>0;
+		//闇�瑕佸垹闄ゅ睘鎬�
+		List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseDO.getOid());
+		boolean deleteCBO = false;
+		if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
+			deleteCBO = codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()))>0;
+		}
+		//WebUtil.setPersistence(true);
+		return (batchCBO || deleteCBO)?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇妯℃澘闃舵
+	 * @param oid 涓婚敭
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
+		return codeTemplatePhaseDO2VO(selectByOid(oid));
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇妯℃澘闃舵
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeTemplatePhase> codeTemplatePhaseDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
+		return codeTemplatePhaseDO2VOs(codeTemplatePhaseDOList);
+	}
+
+	/**
+	 * 鍙傜収妯℃澘闃舵鍒楄〃
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 妯℃澘闃舵鏄剧ず瀵硅薄鍒楄〃锛岀敓鏁堢殑鍐呭
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	@Override
+	public DataGrid<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		CodeTemplatePhaseVO codeTemplatePhaseVO = new CodeTemplatePhaseVO();
+		BeanMap beanMap = BeanMap.create(codeTemplatePhaseVO);
+		beanMap.putAll(conditionMap);
+		Query query = new Query();
+		query.setSize(pageHelper.getLimit());
+		query.setCurrent(pageHelper.getPage());
+
+		return gridCodeTemplatePhase(codeTemplatePhaseVO,query);
+	}
+
+	/**
+	 * 闃舵涓嶅寘鍚殑灞炴��
+	 *
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏鏈夋ā鏉跨殑涓婚敭锛坈lassifyTemplateOid锛夛紝鍚﹀垯涓嶈兘纭畾灞炴��
+	 * @param pageHelper   鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		if(!conditionMap.containsKey("classifyTemplateOid")){
+			return new DataGrid<>("娌℃湁妯℃澘鐨勪富閿�");
+		}
+		//闇�瑕佸垽鏂樁娈电殑涓婚敭鏄惁瀛樺湪
+		String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+		LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
+		if(StringUtils.isNotBlank(codePhaseOid)){
+			//鎺掗櫎闃舵涓婁娇鐢ㄧ殑
+			conditionMap.remove("codePhaseOid");
+			List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" + codePhaseOid + "')");
+			if(ids.size()<=1000){
+				queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().notIn(CodeClassifyTemplateAttr::getId, ids);
+			}else {
+				queryWrapper = MybatisParameterUtils.cutNotInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
+			}
+			//conditionMap.put("id", QueryOptionConstant.NOTIN + ids);
+		}
+		return tempAttrService.gridCodeClassifyTemplateAttr(queryWrapper,pageHelper);
+	}
+
+	/**
+	 * 闃舵鍖呭惈鐨勫睘鎬�
+	 *
+	 * @param conditionMap 鏌ヨ瀵硅薄锛屽繀椤昏闃舵鐨勪富閿�(codePhaseOid)
+	 * @param pageHelper   鍒嗛〉瀵硅薄
+	 * @return 灞炴�х殑淇℃伅
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
+		if(conditionMap == null){
+			conditionMap = new HashMap<String, String>();
+		}
+		String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
+		if(StringUtils.isBlank(codePhaseOid)){
+			return new DataGrid<>();
+		}
+		conditionMap.remove("codePhaseOid");
+		CodeTemplatePhase phaseDO = selectByOid(codePhaseOid);
+		List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
+		LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
+		//			Wrappers.<CodeClassifyTemplateAttrVO>query()
+		//			.in("id", ids)
+		if(ids.size()<=1000){
+			queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().in(CodeClassifyTemplateAttr::getId, ids);
+		}else {
+			queryWrapper = MybatisParameterUtils.cutInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
+		}
+		queryWrapper.eq(CodeClassifyTemplateAttr::getClassifyTemplateOid,phaseDO.getCodeClassifyTemplateOid());
+		return tempAttrService.gridCodeClassifyTemplateAttr(queryWrapper,pageHelper);
+	}
+
+	/**
+	 * 闃舵灞炴�х殑琛ㄥ悕
+	 * @return 琛ㄥ悕
+	 */
+	private String getPhaseAttrTable(){
+		return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR_TABLENAME);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeTemplatePhase> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
+		List<CodeTemplatePhase> codeTemplatePhaseDOList = new ArrayList<CodeTemplatePhase>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeTemplatePhase> tempDOList =  codeTemplatePhaseMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeTemplatePhaseDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeTemplatePhaseDOList;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeTemplatePhaseDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeTemplatePhaseDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhase codeTemplatePhaseDO) {
+		CodeTemplatePhase tsDO = new CodeTemplatePhase();
+		BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
+		if (checkTs(tsDO)) {
+			return R.fail(TS_NOT_PROCESS);
+		}
+		if(!checkIsLinked(codeTemplatePhaseDO.getOid())) {
+			return R.success("succcess");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 妫�鏌s
+	 * @param tempDO
+	 * @return
+	 */
+	private boolean checkTs(CodeTemplatePhase tempDO){
+		LambdaQueryWrapper<CodeTemplatePhase> wrapper = Wrappers.<CodeTemplatePhase>query()
+			.lambda().eq(CodeTemplatePhase::getOid,tempDO.getOid()).select(CodeTemplatePhase::getTs);
+		long dbTs = codePhaseAttrMapper.selectById(wrapper).getTs().getTime();
+		long currentTs = tempDO.getTs().getTime();
+		if(dbTs == currentTs){
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 浣跨敤闃舵涓婚敭鑾峰彇鍖呭惈鐨勫睘鎬�
+	 * @param codePhaseOid 闃舵鐨勪富閿�
+	 * @return 鍖呭惈灞炴�х殑鏁版嵁瀵硅薄
+	 */
+	private List<CodePhaseAttr> listPhaseAttrDOByPhaseOid(String codePhaseOid){
+		if(StringUtils.isBlank(codePhaseOid)||StringUtils.isEmpty(codePhaseOid)){
+			return null;
+		}
+		List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(codePhaseOid);
+		return phaseAttrDOS;
+	}
+
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeTemplatePhase selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeTemplatePhase codeTemplatePhaseDO = codeTemplatePhaseMapper.selectById(oid.trim());
+		if(codeTemplatePhaseDO == null || StringUtils.isBlank(codeTemplatePhaseDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeTemplatePhaseDO;
+	}
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
index c703da7..9864da5 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeBasicSecWrapper.java
@@ -19,7 +19,6 @@
 
 import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.enumpack.*;
-import com.vci.ubcs.code.lifecycle.CodeRuleLC;
 import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
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 08d3bb8..a516a4d 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
@@ -16,11 +16,9 @@
  */
 package com.vci.ubcs.code.wrapper;
 
-import com.vci.ubcs.code.entity.CodeButtonEntity;
-import com.vci.ubcs.code.vo.CodeButtonVO;
-import com.vci.ubcs.system.cache.DictBizCache;
 import com.vci.ubcs.system.cache.DictCache;
-import com.vci.ubcs.system.enums.DictEnum;
+import com.vci.ubcs.code.entity.CodeButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeButtonVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -36,17 +34,17 @@
  * @author yuxc
  * @since 2023-03-29
  */
-public class CodeButtonWrapper extends BaseEntityWrapper<CodeButtonEntity, CodeButtonVO> {
+public class CodeButtonWrapper extends BaseEntityWrapper<CodeButton, CodeButtonVO> {
 
 	public static CodeButtonWrapper build() {
 		return new CodeButtonWrapper();
  	}
 
 	@Override
-	public CodeButtonVO entityVO(CodeButtonEntity codebutton) {
+	public CodeButtonVO entityVO(CodeButton codebutton) {
 		CodeButtonVO codebuttonVO = Objects.requireNonNull(BeanUtil.copy(codebutton, CodeButtonVO.class));
-		codebuttonVO.setUsedpositiontypeName(DictBizCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
-		codebuttonVO.setLcstatusName(DictBizCache.getValue("codeLcstatus", codebutton.getLcstatus()));
+		codebuttonVO.setUsedpositiontypeText(DictCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
+		codebuttonVO.setLcStatusText(DictCache.getValue("codeLcstatus", codebutton.getLcstatus()));
 		return codebuttonVO;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
index bb71c95..ec3fb90 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
@@ -16,9 +16,9 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodePhaseAttr;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
 import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import java.util.Objects;
 
@@ -28,14 +28,14 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodePhaseattrWrapper extends BaseEntityWrapper<CodePhaseattrEntity, CodePhaseattrVO>  {
+public class CodePhaseattrWrapper extends BaseEntityWrapper<CodePhaseAttr, CodePhaseattrVO>  {
 
 	public static CodePhaseattrWrapper build() {
 		return new CodePhaseattrWrapper();
  	}
 
 	@Override
-	public CodePhaseattrVO entityVO(CodePhaseattrEntity CodePhaseattr) {
+	public CodePhaseattrVO entityVO(CodePhaseAttr CodePhaseattr) {
 		CodePhaseattrVO CodePhaseattrVO = Objects.requireNonNull(BeanUtil.copy(CodePhaseattr, CodePhaseattrVO.class));
 
 		//User createUser = UserCache.getUser(CodePhaseattr.getCreateUser());
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
index 6b524eb..2543ef7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempbuttonWrapper.java
@@ -16,10 +16,10 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateButtonVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodeTempbuttonEntity;
-import com.vci.ubcs.code.vo.CodeTempbuttonVO;
 import java.util.Objects;
 
 /**
@@ -28,22 +28,22 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodeTempbuttonWrapper extends BaseEntityWrapper<CodeTempbuttonEntity, CodeTempbuttonVO>  {
+public class CodeTempbuttonWrapper extends BaseEntityWrapper<CodeClassifyTemplateButton, CodeClassifyTemplateButtonVO>  {
 
 	public static CodeTempbuttonWrapper build() {
 		return new CodeTempbuttonWrapper();
  	}
 
 	@Override
-	public CodeTempbuttonVO entityVO(CodeTempbuttonEntity CodeTempbutton) {
-		CodeTempbuttonVO CodeTempbuttonVO = Objects.requireNonNull(BeanUtil.copy(CodeTempbutton, CodeTempbuttonVO.class));
+	public CodeClassifyTemplateButtonVO entityVO(CodeClassifyTemplateButton CodeTempbutton) {
+		CodeClassifyTemplateButtonVO codeClassifyTemplateButtonVO = Objects.requireNonNull(BeanUtil.copy(CodeTempbutton, CodeClassifyTemplateButtonVO.class));
 
 		//User createUser = UserCache.getUser(CodeTempbutton.getCreateUser());
 		//User updateUser = UserCache.getUser(CodeTempbutton.getUpdateUser());
 		//CodeTempbuttonVO.setCreateUserName(createUser.getName());
 		//CodeTempbuttonVO.setUpdateUserName(updateUser.getName());
 
-		return CodeTempbuttonVO;
+		return codeClassifyTemplateButtonVO;
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
index 665c33d..cad28fa 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeTempphaseWrapper.java
@@ -16,10 +16,11 @@
  */
 package com.vci.ubcs.code.wrapper;
 
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.entity.CodeTempphaseEntity;
-import com.vci.ubcs.code.vo.CodeTempphaseVO;
+
 import java.util.Objects;
 
 /**
@@ -28,22 +29,22 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodeTempphaseWrapper extends BaseEntityWrapper<CodeTempphaseEntity, CodeTempphaseVO>  {
+public class CodeTempphaseWrapper extends BaseEntityWrapper<CodeTemplatePhase, CodeTemplatePhaseVO>  {
 
 	public static CodeTempphaseWrapper build() {
 		return new CodeTempphaseWrapper();
  	}
 
 	@Override
-	public CodeTempphaseVO entityVO(CodeTempphaseEntity CodeTempphase) {
-		CodeTempphaseVO CodeTempphaseVO = Objects.requireNonNull(BeanUtil.copy(CodeTempphase, CodeTempphaseVO.class));
+	public CodeTemplatePhaseVO entityVO(CodeTemplatePhase CodeTempphase) {
+		CodeTemplatePhaseVO CodeTemplatePhaseVO = Objects.requireNonNull(BeanUtil.copy(CodeTempphase, CodeTemplatePhaseVO.class));
 
 		//User createUser = UserCache.getUser(CodeTempphase.getCreateUser());
 		//User updateUser = UserCache.getUser(CodeTempphase.getUpdateUser());
-		//CodeTempphaseVO.setCreateUserName(createUser.getName());
-		//CodeTempphaseVO.setUpdateUserName(updateUser.getName());
+		//CodeTemplatePhaseVO.setCreateUserName(createUser.getName());
+		//CodeTemplatePhaseVO.setUpdateUserName(updateUser.getName());
 
-		return CodeTempphaseVO;
+		return CodeTemplatePhaseVO;
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
index 3a5ebf2..94cafa2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeButtonMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.vci.ubcs.code.mapper.CodeButtonMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="codebuttonResultMap" type="com.vci.ubcs.code.entity.CodeButtonEntity">
+    <resultMap id="codebuttonResultMap" type="com.vci.ubcs.code.entity.CodeButton">
         <result column="OID" property="oid"/>
         <result column="REVISIONOID" property="revisionoid"/>
         <result column="NAMEOID" property="nameoid"/>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml
new file mode 100644
index 0000000..4f2bef5
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyProcessTempMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyProcessTempMapper">
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
new file mode 100644
index 0000000..2b4c352
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateAttrMapper.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper">
+
+
+
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml
similarity index 94%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml
index 4dd2253..ab7df9a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempbuttonMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateButtonMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodeTempbuttonMapper">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeClassifyTemplateButtonMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodeTempbuttonResultMap" type="com.vci.ubcs.code.entity.CodeTempbuttonEntity">
+    <resultMap id="CodeTempbuttonResultMap" type="com.vci.ubcs.code.entity.CodeClassifyTemplateButton">
         <result column="OID" property="oid"/>
         <result column="REVISIONOID" property="revisionOid"/>
         <result column="NAMEOID" property="nameOid"/>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
index d5e83b0..a29bde1 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClstemplateMapper.xml
@@ -98,4 +98,6 @@
           AND (codeclstemplate0.lastr = '1' AND codeclstemplate0.lastv = '1')
     </select>
 
+
+
 </mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
new file mode 100644
index 0000000..b9945a7
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseAttrMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseAttr">
+        <result column="OID" property="oid"/>
+        <result column="REVISIONOID" property="revisionOid"/>
+        <result column="NAMEOID" property="nameOid"/>
+        <result column="BTMNAME" property="btmname"/>
+        <result column="LASTR" property="lastR"/>
+        <result column="FIRSTR" property="firstR"/>
+        <result column="LASTV" property="lastV"/>
+        <result column="FIRSTV" property="firstV"/>
+        <result column="CREATOR" property="creator"/>
+        <result column="CREATETIME" property="createTime"/>
+        <result column="LASTMODIFIER" property="lastModifier"/>
+        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
+        <result column="REVISIONRULE" property="revisionRule"/>
+        <result column="VERSIONRULE" property="versionRule"/>
+        <result column="REVISIONSEQ" property="revisionSeq"/>
+        <result column="REVISIONVALUE" property="revisionValue"/>
+        <result column="VERSIONSEQ" property="versionSeq"/>
+        <result column="VERSIONVALUE" property="versionValue"/>
+        <result column="LCTID" property="lctid"/>
+        <result column="LCSTATUS" property="lcStatus"/>
+        <result column="TS" property="ts"/>
+        <result column="ID" property="id"/>
+        <result column="NAME" property="name"/>
+        <result column="DESCRIPTION" property="description"/>
+        <result column="OWNER" property="owner"/>
+        <result column="COPYFROMVERSION" property="copyFromVersion"/>
+        <result column="CODEPHASEOID" property="codePhaseOid"/>
+        <result column="ATTRIBUTEGROUP" property="attributegroup"/>
+    </resultMap>
+
+    <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
+        select * from PL_CODE_PHASEATTR where is_deleted = 0
+    </select>
+
+    <select id="selectByPhasea" resultMap="CodePhaseattrResultMap">
+        select lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq,
+               checkinby,
+               revisionrule,
+               lctid,
+               id,
+               owner,
+               checkoutby,
+               creator,
+               createtime,
+               isfirstv,
+               attributegroup,
+               revisionoid,
+               btmname,
+               checkouttime,
+               revisionvalue,
+               versionrule,
+               name,
+               islastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus,
+               islastv,
+               checkintime,
+               codephaseoid,
+               isfirstr
+        from PL_CODE_PHASEATTR
+        where codephaseoid in
+              (select oid
+               from PL_CODE_TEMPPHASE
+               where codeClassifyTemplateOid = #{oid})
+    </select>
+
+    <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
+        select lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq,
+               checkinby,
+               revisionrule,
+               lctid,
+               id,
+               owner,
+               checkoutby,
+               creator,
+               createtime,
+               isfirstv,
+               attributegroup,
+               revisionoid,
+               btmname,
+               checkouttime,
+               revisionvalue,
+               versionrule,
+               name,
+               islastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus,
+               islastv,
+               checkintime,
+               codephaseoid,
+               isfirstr
+        from PL_CODE_PHASEATTR
+        where codephaseoid in
+              (#{oids})
+    </select>
+
+    <select id="listLinkAttrDOByTemplateAttrDOS" resultMap="CodePhaseattrResultMap">
+
+        SELECT lastmodifier,
+               revisionseq,
+               versionvalue,
+               description,
+               oid,
+               versionseq, /*checkinby,*/
+               revisionrule,
+               lctid,
+               id,
+               owner, /*checkoutby, */
+               creator,
+               createtime, /*is*/
+               firstv,
+               attributegroup,
+               revisionoid,
+               btmname, /*checkouttime,*/
+               revisionvalue,
+               versionrule,
+               name, /*is*/
+               lastr,
+               lastmodifytime,
+               copyfromversion,
+               nameoid,
+               lcstatus, /*is*/
+               lastv, /*checkintime,*/
+               codephaseoid,
+            /*is*/
+               firstr,
+               ts
+        FROM PL_CODE_PHASEATTR
+            where ID IN (#{id})
+          AND codephaseoid in
+              (select oid
+               from PL_CODE_TEMPPHASE
+               where codeClassifyTemplateOid =#{codeClassifyTemplateOid})
+    </select>
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
index d69dd21..b9945a7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseattrMapper">
+<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseAttrMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseAttr">
         <result column="OID" property="oid"/>
         <result column="REVISIONOID" property="revisionOid"/>
         <result column="NAMEOID" property="nameOid"/>
@@ -30,15 +30,15 @@
         <result column="DESCRIPTION" property="description"/>
         <result column="OWNER" property="owner"/>
         <result column="COPYFROMVERSION" property="copyFromVersion"/>
-        <result column="CODEPHASEOID" property="codephaseoid"/>
+        <result column="CODEPHASEOID" property="codePhaseOid"/>
         <result column="ATTRIBUTEGROUP" property="attributegroup"/>
     </resultMap>
-
 
     <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
         select * from PL_CODE_PHASEATTR where is_deleted = 0
     </select>
-    <select id="selectByPhasea" resultType="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+
+    <select id="selectByPhasea" resultMap="CodePhaseattrResultMap">
         select lastmodifier,
                revisionseq,
                versionvalue,
@@ -77,7 +77,7 @@
                where codeClassifyTemplateOid = #{oid})
     </select>
 
-    <select id="selectByPhaseaIds" resultType="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+    <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
         select lastmodifier,
                revisionseq,
                versionvalue,
@@ -114,7 +114,7 @@
               (#{oids})
     </select>
 
-    <select id="listLinkAttrDOByTemplateAttrDOS" resultType="com.vci.ubcs.code.entity.CodePhaseattrEntity">
+    <select id="listLinkAttrDOByTemplateAttrDOS" resultMap="CodePhaseattrResultMap">
 
         SELECT lastmodifier,
                revisionseq,
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml
similarity index 94%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml
index f6efd1c..db3eb12 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTempphaseMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeTemplatePhaseMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodeTempphaseMapper">
+<mapper namespace="com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodeTempphaseResultMap" type="com.vci.ubcs.code.entity.CodeTempphaseEntity">
+    <resultMap id="CodeTempphaseResultMap" type="com.vci.ubcs.code.entity.CodeTemplatePhase">
         <result column="CREATETIME" property="createTime"/>
         <result column="LASTMODIFIER" property="lastModifier"/>
         <result column="LASTMODIFYTIME" property="lastModifyTime"/>
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index 736ff64..8f62d59 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -14,4 +14,9 @@
     </select>
 
 
+    <select id="selectById" resultType="java.lang.String">
+        ${inSql}
+    </select>
+
+
 </mapper>

--
Gitblit v1.9.3