From b7a96fdc87ba86a100cd8fddbd03080f72703089 Mon Sep 17 00:00:00 2001
From: ludc <pUXmgxCf6A>
Date: 星期三, 17 五月 2023 21:56:15 +0800
Subject: [PATCH] 以及发布webservice接口功能搭建,将通通用接口移植过来

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java               |  254 +-
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/DockingLogeMapper.java               |   14 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java    |  534 +++++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSyncUniversalController.java |   49 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingLogeService.java            |   27 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java      | 3341 ++++++++++++++++++++++-----------------------
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/DockingLogeWrapper.java             |   16 
 Source/UBCS/ubcs-service/ubcs-code/pom.xml                                                                     |   11 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java            |   52 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java                 |   46 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java         |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingLogeServiceImpl.java    |   18 
 12 files changed, 2,550 insertions(+), 1,813 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/pom.xml b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
index f618fed..0f0edc2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/pom.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -25,6 +25,11 @@
         </dependency>
         <dependency>
             <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-webservice</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
             <artifactId>ubcs-ddl</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
@@ -50,6 +55,12 @@
             <artifactId>mybatis-plus-join-boot-starter</artifactId>
             <version>${mybatisplus.join.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-webservice</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSyncUniversalController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSyncUniversalController.java
index e69de29..ea037a8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSyncUniversalController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSyncUniversalController.java
@@ -0,0 +1,49 @@
+package com.vci.ubcs.code.controller;
+
+import com.vci.ubcs.code.service.UniversalInterfaceI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 涓婚搴撳垎绫绘帶鍒跺櫒
+ *
+ * @author xiejun
+ * @date 2022-01-20
+ */
+@RestController
+@RequestMapping("/codeSyncUniversalController")
+public class CodeSyncUniversalController {
+	/**
+	 * 鏃ュ織
+	 */
+	private Logger logger = LoggerFactory.getLogger(getClass());
+	/**
+	 * 鎺ュ彛闆嗘垚鏈嶅姟
+	 */
+	@Autowired
+	private UniversalInterfaceI universalInterfaceI;
+	/****
+	 * 鐢宠鎺ュ彛
+	 * @param dataString 灞炴�т俊鎭�
+	 * @param dataType 鏁版嵁鏍煎紡绫诲瀷
+	 * @return
+	 * @throws Throwable
+	 */
+	@PostMapping("/applyCode")
+	public String applyCode(@RequestParam("dataString")String dataString, @RequestParam("dataType")String dataType)  {
+		String result="";
+		try {
+			result = universalInterfaceI.applyCode(dataString, dataType);
+		}catch (Throwable e){
+			e.printStackTrace();
+			logger.error("applyCode->"+e.getMessage());
+		}
+		return result;
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
index 9ceecf8..26f7d67 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -6,7 +6,6 @@
 import com.vci.ubcs.code.dto.CodeOrderDTO;
 import com.vci.ubcs.code.dto.CodeOrderSecDTO;
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
-import com.vci.ubcs.code.service.MdmEngineService;
 import com.vci.ubcs.code.service.MdmIOService;
 import com.vci.ubcs.code.vo.pagemodel.CodeImProtRusultVO;
 import com.vci.ubcs.code.vo.pagemodel.MdmUIInfoVO;
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/DockingLogeMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/DockingLogeMapper.java
index e69de29..e4660f7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/DockingLogeMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/DockingLogeMapper.java
@@ -0,0 +1,14 @@
+package com.vci.ubcs.code.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.code.entity.CodeWupinEntity;
+import com.vci.ubcs.code.entity.DockingLog;
+import com.vci.ubcs.code.vo.pagemodel.DockingLogeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.Objects;
+
+public interface DockingLogeMapper extends BaseMapper<DockingLog> {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingLogeService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingLogeService.java
index e69de29..64f0f50 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingLogeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IDockingLogeService.java
@@ -0,0 +1,27 @@
+package com.vci.ubcs.code.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.kotlin.KtUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.code.entity.CodeWupinEntity;
+import com.vci.ubcs.code.entity.DockingLog;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * 涓绘暟鎹紩鎿庢湇鍔�
+ * @author xiej
+ * @date 2023-05-17
+ */
+public interface IDockingLogeService extends IService<DockingLog> {
+	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
index 3b27cc4..76250db 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -1,126 +1,136 @@
-package com.vci.ubcs.code.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeAllCode;
-
-/**
- * 涓绘暟鎹紩鎿庢湇鍔�
- * @author weidy
- * @date 2022-2-21
- */
-public interface MdmEngineService extends IService<CodeAllCode> {
-//	/**
-//	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
-//	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-//	 * @return 妯℃澘鐨勬樉绀哄璞�
-//	 */
-//	CodeClstemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid);
+//package com.vci.ubcs.code.service;
 //
-//	/**
-//	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
-//	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
-//	 * @param hasAttr 鍖呭惈灞炴��
-//	 * @return 妯℃澘鐨勬樉绀哄璞�
-//	 */
-//	CodeClstemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid, boolean hasAttr);
 //
-//	/**
-//	 * 鑾峰彇鏋氫妇鐨勪笅鎷夐�夐」
-//	 * @param attrVO 妯℃澘灞炴�х殑瀵硅薄
-//	 * @return 涓嬫媺閫夐」
-//	 */
-//	List<KeyValue> listComboboxItems(CodeClassifyTemplateAttrVO attrVO);
+//import com.baomidou.mybatisplus.extension.service.IService;
+//import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+//import com.vci.ubcs.code.dto.CodeOrderDTO;
+//import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
+//import com.vci.ubcs.code.entity.CodeAllCode;
+//import com.vci.ubcs.code.vo.CodeClstemplateVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+//import com.vci.ubcs.starter.web.pagemodel.KeyValue;
 //
-//	/**
-//	 * 淇敼鐘舵��
-//	 * @param baseModelDTO 鏁版嵁浼犺緭瀵硅薄
-//	 */
-//	void changeStatus(BaseModelDTO baseModelDTO);
+//import java.util.List;
 //
-//	/**
-//	 * 鐢宠鍗曚竴缂栫爜
-//	 * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
-//	 * @return 杩斿洖缂栫爜鐨勫唴瀹�
-//	 */
-//	String addSaveCode(CodeOrderDTO orderDTO);
-//
-//	/**
-//	 * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
-//	 * @param ruleVO 瑙勫垯鐨勬樉绀哄璞�
-//	 * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
-//	 */
-//	void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO);
-//
-//	/**
-//	 * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
-//	 *
-//	 * @param value        褰撳墠鐨勫��
-//	 * @param keyRuleVO    鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
-//	 * @param attrId       灞炴�х殑缂栧彿
-//	 * @param trim         鏄惁鍘婚櫎绌烘牸
-//	 * @param ignoreCase   鏄惁涓嶅尯鍒嗗ぇ灏忓啓
-//	 * @param ignoreWidth  鏄惁蹇界暐鍏ㄥ崐瑙�
-//	 * @param trimAll      鏄惁蹇界暐鍏ㄩ儴绌烘牸
-//	 * @param conditionMap 鏌ヨ鏉′欢
-//	 */
-//	void wrapperKeyAttrConditionMap(String value, CodeKeyattrrepeatVO keyRuleVO, String attrId,
-//							   boolean trim, boolean ignoreCase, boolean ignoreWidth,
-//							   boolean trimAll, Map<String, String> conditionMap);
-//	/**
-//	 * 鍒濆鍖栦笟鍔$被鍨�
-//	 * --鍒涘缓浜洪粯璁や负褰撳墠鐢ㄦ埛锛屽鏋滈渶瑕佷慨鏀癸紝鍙互鍦ㄨ幏鍙栧悗鑷澶勭悊
-//	 * @param btmName 涓氬姟绫诲瀷鐨勫悕绉帮紝浼氳嚜鍔ㄥ彉鎴愬皬鍐�
-//	 * @return CodeWupinEntity
-//	 * @throws VciBaseException 鍒濆鍖栧嚭閿欑殑鏄細鎶涘嚭寮傚父
-//	 */
-//	CodeWupinEntity createCBOByBtmName(String btmName);
-//
-//	/**
-//	 * 淇濆瓨鍙緭鍙�夌殑淇℃伅
-//	 *
-//	 * @param templateVO 妯℃澘鐨勫璞�
-//	 * @param cboList    鏁版嵁鐨勫唴瀹�
-//	 */
-//	void batchSaveSelectChar(CodeClstemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
-//							 List<String> cboList);
-//
-//	/**
-//	 * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
-//	 * @param templateOid 妯℃澘鐨勪富閿�
-//	 * @param codeClassifyOid 浣跨敤妯℃澘鐨勫垎绫荤殑涓婚敭
-//	 * @return ui鐩稿叧鐨勫唴瀹�
-//	 */
-//    MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid);
-//
-//	/**
-//	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
-//	 *
-//	 * @param attrVO  妯℃澘灞炴��
-//	 * @param btmType 涓氬姟绫诲瀷
-//	 * @return 琛ㄥ崟鐨勫瓧娈�
-//	 */
-//	UIFormItemVO templateAttr2FormField(CodeClstempattrVO attrVO, String btmType) ;
-//
-//	/**
-//	 * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸鏄剧ず鐨勯厤缃�
-//	 *
-//	 * @param attrVO 妯℃澘灞炴��
-//	 * @param forEdit 鏄惁鏄紪杈戞墍闇�
-//	 * @return 琛ㄦ牸鐨勫瓧娈�
-//	 */
-//	UITableFieldVO templateAttr2TableField(CodeClstempattrVO attrVO, boolean forEdit);
-//
-//	/**
-//	 * 鐩镐技椤规煡璇�
-//	 * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
-//	 * @return 鏁版嵁鍒楄〃
-//	 */
-//	DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO);
-//
-//	/**
-//	 * 淇敼涓婚搴撴暟鎹�
-//	 * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
-//	 */
-//	void editSaveCode(CodeOrderDTO orderDTO);
-}
+///**
+// * 涓绘暟鎹紩鎿庢湇鍔�
+// * @author weidy
+// * @date 2022-2-21
+// */
+//public interface MdmEngineService extends IService<CodeAllCode> {
+////	/**
+////	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+////	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+////	 * @return 妯℃澘鐨勬樉绀哄璞�
+////	 */
+////	CodeClstemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid);
+////
+////	/**
+////	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
+////	 * @param codeClassifyOid 鍒嗙被鐨勪富閿�
+////	 * @param hasAttr 鍖呭惈灞炴��
+////	 * @return 妯℃澘鐨勬樉绀哄璞�
+////	 */
+////	CodeClstemplateVO getUsedTemplateByClassifyOid(String codeClassifyOid, boolean hasAttr);
+////
+////	/**
+////	 * 鑾峰彇鏋氫妇鐨勪笅鎷夐�夐」
+////	 * @param attrVO 妯℃澘灞炴�х殑瀵硅薄
+////	 * @return 涓嬫媺閫夐」
+////	 */
+////	List<KeyValue> listComboboxItems(CodeClassifyTemplateAttrVO attrVO);
+////
+////	/**
+////	 * 淇敼鐘舵��
+////	 * @param baseModelDTO 鏁版嵁浼犺緭瀵硅薄
+////	 */
+////	void changeStatus(BaseModelDTO baseModelDTO);
+////
+////	/**
+////	 * 鐢宠鍗曚竴缂栫爜
+////	 * @param orderDTO 鐢宠鐨勪俊鎭紝闇�瑕佸寘鍚睘鎬х殑鍐呭鍜岀爜娈电浉鍏崇殑鍐呭
+////	 * @return 杩斿洖缂栫爜鐨勫唴瀹�
+////	 */
+////	String addSaveCode(CodeOrderDTO orderDTO);
+////
+////	/**
+////	 * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
+////	 * @param ruleVO 瑙勫垯鐨勬樉绀哄璞�
+////	 * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
+////	 */
+////	void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO);
+////
+////	/**
+////	 * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
+////	 *
+////	 * @param value        褰撳墠鐨勫��
+////	 * @param keyRuleVO    鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
+////	 * @param attrId       灞炴�х殑缂栧彿
+////	 * @param trim         鏄惁鍘婚櫎绌烘牸
+////	 * @param ignoreCase   鏄惁涓嶅尯鍒嗗ぇ灏忓啓
+////	 * @param ignoreWidth  鏄惁蹇界暐鍏ㄥ崐瑙�
+////	 * @param trimAll      鏄惁蹇界暐鍏ㄩ儴绌烘牸
+////	 * @param conditionMap 鏌ヨ鏉′欢
+////	 */
+////	void wrapperKeyAttrConditionMap(String value, CodeKeyattrrepeatVO keyRuleVO, String attrId,
+////							   boolean trim, boolean ignoreCase, boolean ignoreWidth,
+////							   boolean trimAll, Map<String, String> conditionMap);
+////	/**
+////	 * 鍒濆鍖栦笟鍔$被鍨�
+////	 * --鍒涘缓浜洪粯璁や负褰撳墠鐢ㄦ埛锛屽鏋滈渶瑕佷慨鏀癸紝鍙互鍦ㄨ幏鍙栧悗鑷澶勭悊
+////	 * @param btmName 涓氬姟绫诲瀷鐨勫悕绉帮紝浼氳嚜鍔ㄥ彉鎴愬皬鍐�
+////	 * @return CodeWupinEntity
+////	 * @throws VciBaseException 鍒濆鍖栧嚭閿欑殑鏄細鎶涘嚭寮傚父
+////	 */
+////	CodeWupinEntity createCBOByBtmName(String btmName);
+////
+////	/**
+////	 * 淇濆瓨鍙緭鍙�夌殑淇℃伅
+////	 *
+////	 * @param templateVO 妯℃澘鐨勫璞�
+////	 * @param cboList    鏁版嵁鐨勫唴瀹�
+////	 */
+////	void batchSaveSelectChar(CodeClstemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
+////							 List<String> cboList);
+////
+////	/**
+////	 * 浣跨敤妯℃澘鐨勪富閿幏鍙栬〃鍗曠殑淇℃伅
+////	 * @param templateOid 妯℃澘鐨勪富閿�
+////	 * @param codeClassifyOid 浣跨敤妯℃澘鐨勫垎绫荤殑涓婚敭
+////	 * @return ui鐩稿叧鐨勫唴瀹�
+////	 */
+////    MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid);
+////
+////	/**
+////	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
+////	 *
+////	 * @param attrVO  妯℃澘灞炴��
+////	 * @param btmType 涓氬姟绫诲瀷
+////	 * @return 琛ㄥ崟鐨勫瓧娈�
+////	 */
+////	UIFormItemVO templateAttr2FormField(CodeClstempattrVO attrVO, String btmType) ;
+////
+////	/**
+////	 * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸鏄剧ず鐨勯厤缃�
+////	 *
+////	 * @param attrVO 妯℃澘灞炴��
+////	 * @param forEdit 鏄惁鏄紪杈戞墍闇�
+////	 * @return 琛ㄦ牸鐨勫瓧娈�
+////	 */
+////	UITableFieldVO templateAttr2TableField(CodeClstempattrVO attrVO, boolean forEdit);
+////
+////	/**
+////	 * 鐩镐技椤规煡璇�
+////	 * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
+////	 * @return 鏁版嵁鍒楄〃
+////	 */
+////	DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO);
+////
+////	/**
+////	 * 淇敼涓婚搴撴暟鎹�
+////	 * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
+////	 */
+////	void editSaveCode(CodeOrderDTO orderDTO);
+//}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java
index e69de29..40cd5f1 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/UniversalInterfaceI.java
@@ -0,0 +1,52 @@
+package com.vci.ubcs.code.service;
+import javax.jws.WebService;
+
+/**
+ * 缁熶竴鎺ュ彛
+ *
+ * @author xiejun
+ * @date 2022-11-27
+ */
+
+@WebService(targetNamespace = "http://code.ubcs.vci.com/",name = "universalInterface")
+public interface UniversalInterfaceI {
+    /**
+     *缁熶竴鐢宠缂栫爜鎺ュ彛
+     * @param data 浼犻�掔殑鏁版嵁鍙傛暟
+     * @param dataType 鏍囪瘑data鏄痻ml鏍煎紡杩樻槸json鏍煎紡锛屾帴鍙h繑鍥炴暟鎹篃鏄寜鐓ц繖涓牸寮忥紝浠ヤ笅鎺ュ彛绫诲悓
+     * @return xml鏍煎紡/json鏍煎紡
+     * @throws Throwable
+     */
+    public String applyCode(String data,String dataType)throws Throwable;
+
+    /***
+     * 缁熶竴鏇存柊鎺ュ彛
+     * @param data
+     * @param dataType
+     * @return
+     * @throws Throwable
+     */
+    public String syncEditData(String data,String dataType)throws Throwable;
+
+    /***
+     * 鏌ヨ鍒嗙被鍙�
+     * @param data
+     * @param dataType
+     * @throws Throwable
+     */
+    public String  queryClassify(String data,String dataType)throws Throwable;
+
+    /***
+     * 鏌ヨ鏁版嵁
+     * @param data
+     * @param dataType
+     * @throws Throwable
+     */
+    public String  queryData(String data,String dataType)throws Throwable;
+
+	/***
+	 * 杩斿洖缂栫爜瑙勫垯鎺ュ彛
+	 */
+	public String queryClassifyRule(String data,String datatype)throws Throwable;
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingLogeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingLogeServiceImpl.java
index e69de29..fdfd4ea 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingLogeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingLogeServiceImpl.java
@@ -0,0 +1,18 @@
+package com.vci.ubcs.code.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.entity.DockingLog;
+import com.vci.ubcs.code.mapper.DockingLogeMapper;
+import com.vci.ubcs.code.service.IDockingLogeService;
+import org.springframework.stereotype.Service;
+
+
+/**
+	* 缂栫爜淇℃伅 鏈嶅姟瀹炵幇绫�
+	*
+	* @author xiej
+	* @since 2023-05-17
+	*/
+@Service
+public class DockingLogeServiceImpl extends ServiceImpl<DockingLogeMapper, DockingLog> implements IDockingLogeService {
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index 83a94ca..e63b287 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -1,57 +1,61 @@
-package com.vci.ubcs.code.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vci.ubcs.code.entity.CodeAllCode;
-import com.vci.ubcs.code.mapper.CodeAllCodeMapper;
-import com.vci.ubcs.code.service.*;
-import org.springframework.stereotype.Service;
-
-/**
- * 涓绘暟鎹紩鎿庢湇鍔�
- *
- * @author weidy
- * @date 2022-2-22
- */
-@Service
-public class MdmEngineServiceImpl extends ServiceImpl<CodeAllCodeMapper, CodeAllCode> implements MdmEngineService {
-
-
-//	/**
-//	 * 妯℃澘鐨勬湇鍔�
-//	 */
-//	@Resource
-//	private CodeClstemplateServiceImpl templateService;
-//	/**
-//	 * 妯℃澘鐨勬湇鍔�
-//	 */
-//	@Resource
-//	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
-//	/**
-//	 * 鐢熸垚缂栫爜鐨勬湇鍔�
-//	 */
-//	@Resource
-//	private MdmProductCodeService productCodeService;
-//	/**
-//	 * 瀛楀吀鐨勬湇鍔�
-//	 */
-//	@Resource
-//	IDictBizClient iDictBizClient;
-//	/**
-//	 * 鍏紡鐨勬湇鍔�
-//	 */
-//	@Autowired
-//	private FormulaServiceImpl formulaService;
+//package com.vci.ubcs.code.service.impl;
 //
-//	/**
-//	 * 閫氱敤鏌ヨ
-//	 */
-//	@Resource
-//	CommonsMapper commonsMapper;
-//	/**
-//	 * 缂栫爜瑙勫垯鐨勬湇鍔�
-//	 */
-//	@Autowired
-//	private ICodeRuleService ruleService;
+//import com.alibaba.fastjson.JSONObject;
+//import com.alibaba.nacos.common.utils.StringUtils;
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+//import com.baomidou.mybatisplus.extension.service.IService;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.sun.corba.se.impl.orbutil.ObjectUtility;
+//import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+//import com.vci.ubcs.code.dto.CodeOrderDTO;
+//import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
+//import com.vci.ubcs.code.entity.CodeAllCode;
+//import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
+//import com.vci.ubcs.code.entity.CodeRule;
+//import com.vci.ubcs.code.entity.CodeWupinEntity;
+//import com.vci.ubcs.code.enumpack.CodeDefaultLC;
+//import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
+//import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+//import com.vci.ubcs.code.mapper.CodeAllCodeMapper;
+//import com.vci.ubcs.code.mapper.CodeOsbtmtypeMapper;
+//import com.vci.ubcs.code.mapper.CodeRuleMapper;
+//import com.vci.ubcs.code.service.*;
+//import com.vci.ubcs.code.vo.CodeClstemplateVO;
+//import com.vci.ubcs.code.vo.CodeKeyattrrepeatVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
+//import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
+//import com.vci.ubcs.omd.entity.Dict;
+//import com.vci.ubcs.starter.exception.VciBaseException;
+//import com.vci.ubcs.starter.revision.model.BaseModel;
+//import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
+//import com.vci.ubcs.starter.web.pagemodel.KeyValue;
+//import com.vci.ubcs.starter.web.toolmodel.DateConverter;
+//import com.vci.ubcs.starter.web.util.VciBaseUtil;
+//import com.vci.ubcs.starter.web.util.VciDateUtil;
+//import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO;
+//import com.vci.ubcs.starter.web.util.WebUtil;
+//import com.vci.ubcs.system.entity.DictBiz;
+//import com.vci.ubcs.system.feign.IDictBizClient;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//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.stereotype.Service;
+//
+///**
+// * 涓绘暟鎹紩鎿庢湇鍔�
+// *
+// * @author weidy
+// * @date 2022-2-22
+// */
+//@Service
+//public class MdmEngineServiceImpl extends ServiceImpl<CodeAllCodeMapper, CodeAllCode> implements MdmEngineService {
+//
 //
 //	/**
 //	 * 鍒嗙被鐨勬湇鍔�
@@ -69,50 +73,8 @@
 //	 */
 //	private Logger logger = LoggerFactory.getLogger(getClass());
 //
-//	/**
-//	 * 绌烘牸
-//	 */
-//	public static final String SPACE = " ";
-//
-//	/**
-//	 * 瀵嗙骇鐨勫瓧娈�
-//	 */
-//	public static final String SECRET_FILED = "secretgrade";
-//	/**
-//	 * 鐢ㄦ埛鏂板鏁版嵁鐨勬椂鍊欏彲浠ユ煡鐪嬬殑瀵嗙骇
-//	 */
-//	public static final String MY_DATA_SECRET = "myDataSecret";
-//	/**
-//	 * 鎷疯礉鐨勭増鏈�
-//	 */
-//	public static final String COPY_FROM_VERSION = "copyfromversion";
-//	/**
-//	 * 鍙槸sql
-//	 */
-//	public static final String ONLY = "${vcionly}";
-//
-//	/**
-//	 * 榛樿鐨勬椂闂存牸寮�
-//	 */
-//	private static final String DATETIME_FORMAT = "yyyy-mm-dd hh24:mi:ss";
-//
-//	/**
-//	 * 鏃ユ湡鏍煎紡
-//	 */
-//	private static final String DATE_FORMAT = "yyyy-mm-dd";
-//
-//	/**
-//	 * 蹇呰緭
-//	 */
-//	public static final String REQUIRED_CHAR = "*";
-//	/**
-//	 * 鏇挎崲瀛楃
-//	 */
-//	public static final String SPECIAL_CHAR  = "VCI";
-////	@Autowired
-////	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
-//
-//
+//	//	@Autowired
+//	//	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
 //
 //	/**
 //	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栧彲浠ヤ娇鐢ㄧ殑妯℃澘瀵硅薄
@@ -190,14 +152,14 @@
 //		List<CodeAllCode> codeCbos = baseMapper.selectList(allCodeWrapper);
 ////		List<ClientBusinessObject> codeCbos = boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap);
 //		// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
-//		if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
-////			BatchCBO batchCBO = new BatchCBO();
-////			batchCBO.getDeleteCbos().addAll(cboList);
-//			codeOsbtmtypeMapper.deleteBatchIds(cboList);
-////			boService.persistenceBatch(batchCBO);
-//		} else {
+////		if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
+//////			BatchCBO batchCBO = new BatchCBO();
+//////			batchCBO.getDeleteCbos().addAll(cboList);
+////			codeOsbtmtypeMapper.deleteBatchIds(cboList);
+//////			boService.persistenceBatch(batchCBO);
+////		} else {
 ////			lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
-//		}
+////		}
 ////		lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
 //	}
 //
@@ -233,1598 +195,1597 @@
 //		switchDateAttrOnOrder(templateVO, orderDTO);
 //		//9.鐢熸垚缂栫爜鐨勪俊鎭�
 ////		ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
-//		CodeWupinEntity cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
-////		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
-////		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
-//		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
-////		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
-//		cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
-////		//end -- modify by lihang @20220407
-//		List<CodeWupinEntity> cboList = new ArrayList<>();
-//
-//		//澶囨敞
-//		cbo.setDescription(orderDTO.getDescription());
-//		cboList.add(cbo);
+////		CodeWupinEntity cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+//////		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
+//////		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
+////		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
+//////		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
+////		cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
+//////		//end -- modify by lihang @20220407
+////		List<CodeWupinEntity> cboList = new ArrayList<>();
+////
+////		//澶囨敞
+////		cbo.setDescription(orderDTO.getDescription());
 ////
 ////		cboList.add(cbo);
-//		List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
-//
-//
-//		List<String> charList = new ArrayList<>();
-//		for (CodeWupinEntity wupinEntity : cboList) {
-//			charList.add(wupinEntity.getId());
-//		}
-//		batchSaveSelectChar(templateVO, charList);
-//		return codeList.size() > 0 ? codeList.get(0) : "";
-////		return null;
-//	}
-//
-//	/**
-//	 * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭�
-//	 *
-//	 * @param templateVO         妯℃澘鐨勬樉绀哄璞★紝蹇呴』瑕佸悗妯℃澘鐨勫睘鎬�
-//	 * @param classifyFullInfoBO 鍒嗙被鐨勫叏璺緞
-//	 * @param orderDTO           缂栫爜鐢宠鐨勪俊鎭�
-//	 */
-//	private void switchClassifyLevelOnOrder(CodeClstemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO) {
-//		Map<String,CodeClstempattrVO> classifyAttrVOMap = templateVO.getAttributes().stream().filter(
-//			s -> StringUtils.isNotBlank(s.getClassifyinvokeattr()) && StringUtils.isNotBlank(s.getClassifyinvokelevel())
-//		).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (classifyFullInfoBO.getTopClassifyVO() == null) {
-//			//闇�瑕侀噸鏂版煡璇竴涓嬶紝鍥犱负杩欎釜鏄寚瀹氱殑鍒嗙被杩涙潵鐨�
-//
-//		}
-//		if (!CollectionUtils.isEmpty(classifyAttrVOMap)) {
-//			classifyAttrVOMap.forEach((attrId, attrVO) -> {
-//				//鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝
-//				//灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰
-//				CodeClassifyVO classifyVO = null;
-//				if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyinvokelevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyinvokelevel())) {
-//					//鎸囧畾浜嗗眰绾х殑
-//					//娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊�
-//					List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
-//					int level = VciBaseUtil.getInt(attrVO.getClassifyinvokelevel());
-//					if (classifyVOS.size() >= level && level > 0) {
-//						classifyVO = classifyVOS.get(level - 1);
-//					}
-//				} else {
-//					//褰撳墠鐨勫垎绫�
-//					classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
-//				}
-//				if (classifyVO == null) {
-//					//璇存槑灞傜骇鏈夎
-//					orderDTO.getData().put(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
-//					// classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
-//				} else {
-//					Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
-//					String value = classifyDataMap.getOrDefault(attrVO.getClassifyinvokeattr(), "");
-//					orderDTO.getData().put(attrId, value);
-//				}
-//			});
-//		}
-//	}
-//
-//
-//	/**
-//	 * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
-//	 *
-//	 * @param ruleVO   瑙勫垯鐨勬樉绀哄璞�
-//	 * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
-//	 */
-//	@Override
-//	public void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO) {
-//		List<String> unSerialSecOidList = ruleVO.getSecVOList().stream().filter(
-//			s -> !(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(s.getSecType())
-//				|| CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(s.getSecType())
-//				|| CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(s.getSecType())
-//				|| CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(s.getSecType())
-//				|| VciBaseUtil.getBoolean(s.getNullableFlag()))
-//		).map(CodeBasicSecVO::getOid).collect(Collectors.toList());
-//		if (!CollectionUtils.isEmpty(unSerialSecOidList)) {
-//			if (CollectionUtils.isEmpty(orderDTO.getSecDTOList())) {
-//				throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
-//			}
-//			if (orderDTO.getSecDTOList().stream().anyMatch(s -> !unSerialSecOidList.contains(s.getSecOid())
-//				&& StringUtils.isBlank(s.getSecValue()))) {
-//				throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭
-//	 *
-//	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
-//	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
-//	 */
-//	private void checkRequiredAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		Map<String, CodeClstempattrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(
-//				s -> VciBaseUtil.getBoolean(s.getRequireflag()) && StringUtils.isBlank(s.getComponentrule())
-//					&& StringUtils.isBlank(s.getClassifyinvokeattr()))
-//			.collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (!CollectionUtils.isEmpty(requiredAttrMap)) {
-//			requiredAttrMap.forEach((attrId, attrVO) -> {
-//				//鍙湁浼佷笟缂栫爜锛岀姸鎬侊紝澶囨敞锛屾ā鏉夸富閿紝鍒嗙被涓婚敭杩欏嚑涓槸鍥哄畾鐨勶紝鍏朵綑閮芥槸鑷閰嶇疆鐨�
-//				if (StringUtils.isBlank(getValueFromOrderDTO(orderDTO, attrId))) {
-//					throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()});
-//				}
-//			});
-//		}
-//	}
-//
-//	/**
-//	 * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
-//	 *
-//	 * @param orderDTO 缂栫爜鐢宠瀵硅薄
-//	 * @param attrId   灞炴�х殑缂栧彿
-//	 * @return 鍊�
-//	 */
-//	private String getValueFromOrderDTO(CodeOrderDTO orderDTO, String attrId) {
-//		attrId = attrId.toLowerCase(Locale.ROOT);
-//		String value = null;
-//		if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
-//			value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
-//		} else {
-//			//璇存槑鏄嚜琛岄厤缃殑
-//			//鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴��
-//			value = orderDTO.getData().getOrDefault(attrId, "");
-//		}
-//		return value;
-//	}
-//
-//	/**
-//	 * 杞崲缁勫悎瑙勫垯鐨勫��
-//	 *
-//	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
-//	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
-//	 */
-//	private void switchComponentAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		Map<String, CodeClstempattrVO> compAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getComponentrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (!CollectionUtils.isEmpty(compAttrVOMap)) {
-//			Map<String, String> dataMap = WebUtil.objectToMapString(orderDTO);
-//
-//			Map<String, String> dataLowMap = new HashMap<>();
-//			if (!CollectionUtils.isEmpty(dataMap)) {
-//				dataMap.forEach((key, value) -> {
-//					dataLowMap.put(key.toLowerCase(Locale.ROOT), value);
-//				});
-//			}
-//			dataLowMap.putAll(orderDTO.getData());
-//			compAttrVOMap.forEach((attrId, attrVO) -> {
-//				dataLowMap.put(attrId, formulaService.getValueByFormula(dataLowMap, attrVO.getComponentrule()));
-//			});
-//			dataLowMap.forEach((key, value) -> {
-//				setValueToOrderDTO(orderDTO, key, value);
-//			});
-//		}
-//	}
-//
-//
-//	/**
-//	 * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓�
-//	 *
-//	 * @param orderDTO 缂栫爜鐢宠瀵硅薄
-//	 * @param attrId   灞炴�х殑缂栧彿
-//	 * @param value    鍊�
-//	 */
-//	private void setValueToOrderDTO(CodeOrderDTO orderDTO, String attrId, String value) {
-//		attrId = attrId.toLowerCase(Locale.ROOT);
-//		if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
-//			WebUtil.setValueToField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO, value);
-//		} else {
-//			orderDTO.getData().put(attrId, value);
-//		}
-//	}
-//
-//	/**
-//	 * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭�
-//	 *
-//	 * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭
-//	 * @param orderDTO   缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
-//	 */
-//	private void checkVerifyOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		Map<String, CodeClstempattrVO> verifyAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getVerifyrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (!CollectionUtils.isEmpty(verifyAttrVOMap)) {
-//			verifyAttrVOMap.forEach((attrId, attrVO) -> {
-//				String value = getValueFromOrderDTO(orderDTO, attrId);
-//				if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyrule())) {
-//					//鏍¢獙姝e垯琛ㄨ揪寮�
-//					throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()});
-//				}
-//			});
-//		}
-//	}
-//
-//	/**
-//	 * 鏍¢獙鍏抽敭灞炴��
-//	 *
-//	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
-//	 * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
-//	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
-//	 */
-//	private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
-//		CodeKeyattrrepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
-//		//娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
-//		//鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
-//		Map<String, CodeClstempattrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyattrflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		Map<String, String> conditionMap = new HashMap<>();
-//		boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
-//		//鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
-//		boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
-//		boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
-//		boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
-//		ketAttrMap.forEach((attrId, attrVO) -> {
-//			String value = getValueFromOrderDTO(orderDTO, attrId);
-//			if (value == null) {
-//				value = "";
-//			}
-//			wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
-//		});
-//
-//		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
-//
-//		if (!CollectionUtils.isEmpty(conditionMap)) {
-//			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
-//			conditionMap.forEach((key, value) -> {
-//				sql[0] += " and " + key + " = " + value;
-//			});
-//			if (StringUtils.isNotBlank(orderDTO.getOid())) {
-//				//淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
-//				sql[0] += " and oid != '" + orderDTO.getOid() + "'";
-//			} else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
-//				sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
-//			}
-//			sql[0] += " and islastR = '1' and islastV = '1' ";
-////			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
-//			if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
-//				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
-//				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
-//				throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
-//	 *
-//	 * @param value        褰撳墠鐨勫��
-//	 * @param keyRuleVO    鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
-//	 * @param attrId       灞炴�х殑缂栧彿
-//	 * @param trim         鏄惁鍘婚櫎绌烘牸
-//	 * @param ignoreCase   鏄惁涓嶅尯鍒嗗ぇ灏忓啓
-//	 * @param ignoreWidth  鏄惁蹇界暐鍏ㄥ崐瑙�
-//	 * @param trimAll      鏄惁蹇界暐鍏ㄩ儴绌烘牸
-//	 * @param conditionMap 鏌ヨ鏉′欢
-//	 */
-//	@Override
-//	public void wrapperKeyAttrConditionMap(String value, CodeKeyattrrepeatVO keyRuleVO, String attrId,
-//										   boolean trim, boolean ignoreCase, boolean ignoreWidth,
-//										   boolean trimAll, Map<String, String> conditionMap) {
-//		boolean ignoreSpace = trim || trimAll;
-//		if (StringUtils.isBlank(value)) {
-//			//涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜�
-//			conditionMap.put("t."+attrId, "null");
-//		} else {
-//			if (keyRuleVO != null) {
-//				String queryKey = "";
-//				String queryValue = "";
-//
-//				String temp = "";
-//				if (ignoreCase && ignoreSpace && ignoreWidth) {
-//					//蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
-//					temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte(%s)) " + (trimAll ? ",' ','')" : ")");
-//				} else if (ignoreCase && ignoreSpace && !ignoreWidth) {
-//					//蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
-//					temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
-//				} else if (ignoreCase && !ignoreSpace && ignoreWidth) {
-//					//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
-//					temp = "UPPER(to_single_byte(%s))";
-//				} else if (!ignoreCase && ignoreSpace && ignoreWidth) {
-//					//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
-//					temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte(%s) " + (trimAll ? ",' ','')" : ")");
-//				} else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
-//					//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
-//					temp = "UPPER(%s)";
-//				} else if (!ignoreCase && !ignoreCase && ignoreWidth) {
-//					//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
-//					temp = "to_single_byte(%s)";
-//				} else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
-//					//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
-//					temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
-//				} else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
-//					//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
-//					temp = "%s";
-//				}
-//				queryKey = String.format(temp, "t."+attrId);
-//				queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
-//				conditionMap.put(queryKey, queryValue);
-//			} else {
-//				//涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
-//				conditionMap.put("t."+attrId, value);
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * 鏍¢獙鏋氫妇鐨勫唴瀹�
-//	 *
-//	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
-//	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
-//	 */
-//	private void checkEnumOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		//濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
-//
-//		Map<String, CodeClstempattrVO> enumAttrVOMap = templateVO.getAttributes().stream().filter(s -> (StringUtils.isNotBlank(s.getEnumstring()) || StringUtils.isNotBlank(s.getEnumid())) && !VciBaseUtil.getBoolean(s.getEnumeditflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (!CollectionUtils.isEmpty(enumAttrVOMap)) {
-//			enumAttrVOMap.forEach((attrId, attrVO) -> {
-//				String value = getValueFromOrderDTO(orderDTO, attrId);
-//				if (StringUtils.isNotBlank(value)) {
-//					CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = new CodeClassifyTemplateAttrVO();
-//					BeanUtils.copyProperties(attrVO,codeClassifyTemplateAttrVO);
-//					//鏈夊�兼墠鑳芥牎楠�
-//					List<KeyValue> comboboxKVs = listComboboxItems(codeClassifyTemplateAttrVO);
-//					if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) {
-//						throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()});
-//					}
-//				}
-//			});
-//		}
-//	}
-//
-//	/**
-//	 * 杞崲鏃堕棿鐨勬牸寮�
-//	 *
-//	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
-//	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
-//	 */
-//	private void switchDateAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
-//		Map<String, CodeClstempattrVO> dateAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getCodedateformat())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
-//			dateAttrVOMap.forEach((attrId, attrVO) -> {
-//				String value = getValueFromOrderDTO(orderDTO, attrId);
-//				if (StringUtils.isNotBlank(value)) {
-//					DateConverter dateConverter = new DateConverter();
-//					dateConverter.setAsText(value);
-//					value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat);
-//					setValueToOrderDTO(orderDTO, attrId, value);
-//				}
-//			});
-//		}
-//	}
-//
-//	/**
-//	 * 鎷疯礉鏁版嵁鍒癱bo瀵硅薄涓�
-//	 *
-//	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
-//	 * @param cbo              涓氬姟鏁版嵁
-//	 * @param orderDTO         缂栫爜鐢宠鐨勪俊鎭�
-//	 * @param templateVO       妯℃澘鐨勬樉绀哄璞�
-//	 * @param edit             鏄惁涓轰慨鏀�
-//	 */
-//	private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, CodeWupinEntity cbo,
-//								CodeOrderDTO orderDTO, CodeClstemplateVO templateVO,
-//								boolean edit) {
-//		String fullPath = "";
-//		if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) {
-//			fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel())))
-//				.map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
-//		} else {
-//			fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
-//		}
-//
-////		BeanUtils.
-//		BeanUtils.copyProperties(orderDTO.getData(),cbo);
-//		cbo.setMaterialtype(Short.valueOf("1001"));
-////		orderDTO.getData().forEach((key, value) -> {
-////			if (!edit || (!checkUnAttrUnEdit(key) &&
-////				!VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
-////				try {
-////					cbo.setAttributeValue(key, value);
-////				} catch (Exception e) {
-////					logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
-////				}
-////			}
-////		});
-//		try {
-//
-//			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
-//			cbo.setCodetemplateoid(templateVO.getOid());
-//			cbo.setCodeclsfpath(fullPath);
-////			cbo.setMaterialclassify("model_type");
-////			cbo.setMaterialname(orderDTO.getData().get("materialname"));
-////			cbo.setShifoupihaoguanli("true");
-////			cbo.setKucunwl("true");
-////			cbo.setXiaoshouwl("false");
-//			if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
-//				//鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝鎻掍釜鐐癸紝鐪嬬敓鍛藉懆鏈熸槸鍚﹂渶瑕佸垱寤�
-//				if (StringUtils.isNotBlank(cbo.getLctid())) {
-////					OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctid());
-////					if (lifeCycleVO != null) {
-////						cbo.setLcStatus("Editing");
-//////						cbo.setLcStatus(lifeCycleVO.getStartStatus());
-////					} else {
-//						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+////		List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
+////
+////
+////		List<String> charList = new ArrayList<>();
+////		for (CodeWupinEntity wupinEntity : cboList) {
+////			charList.add(wupinEntity.getId());
+////		}
+////		batchSaveSelectChar(templateVO, charList);
+////		return codeList.size() > 0 ? codeList.get(0) : "";
+//////		return null;
+////	}
+////
+////	/**
+////	 * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭�
+////	 *
+////	 * @param templateVO         妯℃澘鐨勬樉绀哄璞★紝蹇呴』瑕佸悗妯℃澘鐨勫睘鎬�
+////	 * @param classifyFullInfoBO 鍒嗙被鐨勫叏璺緞
+////	 * @param orderDTO           缂栫爜鐢宠鐨勪俊鎭�
+////	 */
+////	private void switchClassifyLevelOnOrder(CodeClstemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO) {
+////		Map<String,CodeClstempattrVO> classifyAttrVOMap = templateVO.getAttributes().stream().filter(
+////			s -> StringUtils.isNotBlank(s.getClassifyinvokeattr()) && StringUtils.isNotBlank(s.getClassifyinvokelevel())
+////		).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (classifyFullInfoBO.getTopClassifyVO() == null) {
+////			//闇�瑕侀噸鏂版煡璇竴涓嬶紝鍥犱负杩欎釜鏄寚瀹氱殑鍒嗙被杩涙潵鐨�
+////
+////		}
+////		if (!CollectionUtils.isEmpty(classifyAttrVOMap)) {
+////			classifyAttrVOMap.forEach((attrId, attrVO) -> {
+////				//鍒嗙被娉ㄥ叆鐨勭紪鍙锋垨鑰呭悕绉帮紝
+////				//灞傜骇鍖呭惈鎸囧畾灞傚拰鏈�灏忓眰
+////				CodeClassifyVO classifyVO = null;
+////				if (!CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(attrVO.getClassifyinvokelevel()) && !"min".equalsIgnoreCase(attrVO.getClassifyinvokelevel())) {
+////					//鎸囧畾浜嗗眰绾х殑
+////					//娉ㄦ剰锛屽洜涓烘煡璇笂绾у垎绫诲嚭鏉ョ殑灞傜骇鏄�掑簭鐨勶紝鍗抽《灞傝妭鐐规槸鏈�澶х殑鍊�
+////					List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
+////					int level = VciBaseUtil.getInt(attrVO.getClassifyinvokelevel());
+////					if (classifyVOS.size() >= level && level > 0) {
+////						classifyVO = classifyVOS.get(level - 1);
 ////					}
-//				} else {
-//					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
-//				}
-//
-//			}
-//
-//			int secret = VciBaseUtil.getInt(cbo.getSecretGrade().toString());
-//			//鎻掍釜鐐癸紝鍚庣画鐪嬪瘑绾ф湇鍔℃槸鍚﹀彲鐢�
-////			if (secret == 0 || !secretService.checkDataSecret(secret)) {
-//			if (secret == 0 ) {
-//				Integer userSecret = VciBaseUtil.getCurrentUserSecret();
-////				cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
-//				cbo.setSecretGrade(userSecret == null || userSecret == 0 ? UserSecretEnum.NONE.getValue() : userSecret);
-//			}
-//		} catch (Throwable e) {
-//			logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
-//		}
-//	}
-//
-//
-//	/**
-//	 * 鍒濆鍖栦笟鍔$被鍨�
-//	 * --鍒涘缓浜洪粯璁や负褰撳墠鐢ㄦ埛锛屽鏋滈渶瑕佷慨鏀癸紝鍙互鍦ㄨ幏鍙栧悗鑷澶勭悊
-//	 * @param btmName 涓氬姟绫诲瀷鐨勫悕绉帮紝浼氳嚜鍔ㄥ彉鎴愬皬鍐�
-//	 * @return CodeWupinEntity
-//	 * @throws VciBaseException 鍒濆鍖栧嚭閿欑殑鏄細鎶涘嚭寮傚父
-//	 */
-//	@Override
-//	public CodeWupinEntity createCBOByBtmName(String btmName)
-//		throws VciBaseException {
-//		if(btmName!=null){
-//			btmName = btmName.trim().toLowerCase();
-//		}
-//		String userid = AuthUtil.getUser().getUserName();
-////		if(!hasCreatedCbos.containsKey(btmName)){
-////			if(StringUtils.isEmpty(userid)){
-////				throw new VciBaseException(msgCodePrefix +"noHasUserid");
+////				} else {
+////					//褰撳墠鐨勫垎绫�
+////					classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+////				}
+////				if (classifyVO == null) {
+////					//璇存槑灞傜骇鏈夎
+////					orderDTO.getData().put(attrId, "鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyinvokelevel() + "]");
+////					// classifyVO = classifyFullInfoBO.getCurrentClassifyVO();
+////				} else {
+////					Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
+////					String value = classifyDataMap.getOrDefault(attrVO.getClassifyinvokeattr(), "");
+////					orderDTO.getData().put(attrId, value);
+////				}
+////			});
+////		}
+////	}
+////
+////
+////	/**
+////	 * 鍒ゆ柇缂栫爜鐨勭爜娈垫槸鍚﹁緭鍏ユ垨鑰呴�夋嫨浜嗙爜鍊�
+////	 *
+////	 * @param ruleVO   瑙勫垯鐨勬樉绀哄璞�
+////	 * @param orderDTO 缂栫爜鐢宠鐨勫唴瀹�
+////	 */
+////	@Override
+////	public void checkSecValueOnOrder(CodeRuleVO ruleVO, CodeOrderDTO orderDTO) {
+////		List<String> unSerialSecOidList = ruleVO.getSecVOList().stream().filter(
+////			s -> !(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue().equalsIgnoreCase(s.getSecType())
+////				|| CodeSecTypeEnum.CODE_ATTR_SEC.getValue().equalsIgnoreCase(s.getSecType())
+////				|| CodeSecTypeEnum.CODE_DATE_SEC.getValue().equalsIgnoreCase(s.getSecType())
+////				|| CodeSecTypeEnum.CODE_LEVEL_SEC.getValue().equalsIgnoreCase(s.getSecType())
+////				|| VciBaseUtil.getBoolean(s.getNullableFlag()))
+////		).map(CodeBasicSecVO::getOid).collect(Collectors.toList());
+////		if (!CollectionUtils.isEmpty(unSerialSecOidList)) {
+////			if (CollectionUtils.isEmpty(orderDTO.getSecDTOList())) {
+////				throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
 ////			}
-////			try {
-////				hasCreatedCbos.put(btmName, createBusinessObject(btmName));
-////			} catch (Exception e) {
-////				logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄",e);
-////				throw new VciBaseException(msgCodePrefix + "initBoError",new String[]{btmName});
+////			if (orderDTO.getSecDTOList().stream().anyMatch(s -> !unSerialSecOidList.contains(s.getSecOid())
+////				&& StringUtils.isBlank(s.getSecValue()))) {
+////				throw new VciBaseException("闈炴祦姘寸爜娈�(鎴栬�呭繀杈撶爜娈碉級蹇呴』瑕佽緭鍏�(鎴栭�夋嫨)鐮佸��");
 ////			}
 ////		}
-////		ClientBusinessObject cbo = cloneClientBusinessObject(hasCreatedCbos.get(btmName));
-//
-//		QueryWrapper<CodeOsbtmtypeEntity> btmWrapper = new QueryWrapper<>();
-//		btmWrapper.eq("ID",btmName);
-//		CodeOsbtmtypeEntity btmTypeVO = codeOsbtmtypeMapper.selectOne(btmWrapper);
-////		OsBtmTypeVO btmTypeVO = btmService.getBtmById(boName);
-//		String userName = AuthUtil.getUser().getUserName();
-//		CodeWupinEntity wupinEntity = new CodeWupinEntity();
-//		wupinEntity.setOid(null);
-////		bo.setRevisionid((new ObjectUtility()).getNewObjectID36());
-////		bo.setNameoid((new ObjectUtility()).getNewObjectID36());
-//		wupinEntity.setBtmname(btmName);
-//		wupinEntity.setLastR(String.valueOf(1));
-//		wupinEntity.setFirstR(String.valueOf(1));
-//		wupinEntity.setFirstV(String.valueOf(1));
-//		wupinEntity.setLastV(String.valueOf(1));
-//		wupinEntity.setCreator(userName);
-//		wupinEntity.setCreateTime(new Date());
-//		wupinEntity.setLastModifier(userName);
-//		wupinEntity.setLastModifyTime(new Date());
-//		wupinEntity.setRevisionRule(btmTypeVO.getRevisionruleid());
-//		wupinEntity.setVersionRule(String.valueOf(btmTypeVO.getVersionRule()));
-//		if(StringUtils.isNotBlank(btmTypeVO.getRevisionruleid())){
-//			//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
-////			OsRevisionRuleVO revisionRuleVO = revisionRuleService.getRevisionRuleById(btmTypeVO.getRevisionruleid());
-//			wupinEntity.setRevisionValue("1");
-//		}
-//
-//		wupinEntity.setRevisionSeq(1);
-//		wupinEntity.setVersionSeq(1);
-//		//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
-//		wupinEntity.setVersionValue("1");
-//		wupinEntity.setLctid("wupinLC");
-//		wupinEntity.setLcStatus("Editing");
-//		wupinEntity.setId("");
-//		wupinEntity.setName("");
-//		wupinEntity.setDescription("");
-//		wupinEntity.setOwner(userName);
-//		wupinEntity.setCheckinby(userName);
-//		wupinEntity.setCopyFromVersion("");
-//		wupinEntity.setMaterialtype((short) 1001);
-//		wupinEntity.setCaigouwl("true");
-//		wupinEntity.setShifoupihaoguanli("true");
-//		wupinEntity.setKucunwl("true");
-//		wupinEntity.setXiaoshouwl("false");
-//		wupinEntity.setPassing("true");
-//
-////		this.initTypeAttributeValue(wupinEntity,btmTypeVO);
-//		return wupinEntity;
-//
-//
-////		return cbo;
-//	}
-//
-//	/**
-//	 * 鏄惁涓轰慨鏀瑰拷鐣ョ殑灞炴��
-//	 * @param attrName 灞炴�х殑鍚嶅瓧
-//	 * @return true 琛ㄧず搴旇蹇界暐
-//	 */
-//	boolean checkUnAttrUnEdit(String attrName){
-//		return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
-//			||"ts".equalsIgnoreCase(attrName)
-//			|| "lastmodifier".equalsIgnoreCase(attrName)
-//			|| "lastmodifytime".equalsIgnoreCase(attrName)
-//			|| "createtime".equalsIgnoreCase(attrName)
-//			|| "checkintime".equalsIgnoreCase(attrName)
-//			||"checkouttime".equalsIgnoreCase(attrName));
-//	}
-//
-//	/**
-//	 * 淇濆瓨鍙緭鍙�夌殑淇℃伅
-//	 *
-//	 * @param templateVO 妯℃澘鐨勫璞�
-//	 * @param cboList    鏁版嵁鐨勫唴瀹�
-//	 */
-//	@Override
-//	public void batchSaveSelectChar(CodeClstemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
-//									List<String> cboList) {
-//		if (templateVO != null && !CollectionUtils.isEmpty(cboList)) {
-//			//鏄紓姝ョ殑锛屾墍浠ョ洿鎺ュ惊鐜�
-//			List<CodeClstempattrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryidentification())).collect(Collectors.toList());
-//
-//			if (!CollectionUtils.isEmpty(selectAttrVOs)) {
-////				SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-//				selectAttrVOs.parallelStream().forEach(attrVO -> {
-//					List<String> valuesList = cboList;
-////					cboList.parallelStream().forEach(cbo -> {
-////						String value = cbo.get.getAttributeValue(attrVO.getId());
-////						if (StringUtils.isNotBlank(value)) {
-////							valuesList.add(value);
-////						}
-////					});
-//					if (!CollectionUtils.isEmpty(valuesList)) {
-//						for (String s : valuesList) {
-//							DictBiz dictBiz = new DictBiz();
-//							dictBiz.setCode(templateVO.getBtmTypeId());
-//							dictBiz.setDictKey(s);
-//							dictBiz.setDictValue(s);
-//							//浠庡師鏉ョ殑charService锛堝彲杈撳彲閫夛級鏇存敼涓鸿皟鐢╫md涓殑鎺ュ彛鏉ュ疄鐜�
-//							iDictBizClient.getCheck(dictBiz);
-//						}
-////						charService.saveBySameNamespaceAndFlag(templateVO.getBtmTypeId(), attrVO.getLibraryIdentification(), valuesList, sessionInfo);
-//					}
-//				});
-//			}
-//		}
-//	}
-//
-//    @Override
-//    public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
-//		CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
-//		MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
-//		uiInfoVO.setTemplateVO(templateVO);
-//		uiInfoVO.setFormDefineVO(wrapperFormDefineByTemplate(templateVO, codeClassifyOid));
-//		wrapperResemble(templateVO, uiInfoVO);
-//		return uiInfoVO;
-//    }
-//
-//
-//	/**
-//	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟瀹氫箟鐨勪俊鎭�
-//	 *
-//	 * @param templateVO      妯℃澘鐨勬樉绀哄璞�
-//	 * @param codeClassifyOid 鍒嗙被鐨勪富閿紝涓虹┖鐨勬椂鍊欙紝鑾峰彇妯℃澘鎵�灞炵殑鍒嗙被涓婚敭.鐢ㄤ簬浜х敓鍒嗙被娉ㄥ叆
-//	 * @return 琛ㄦ牸鐨勪俊鎭�
-//	 */
-//	private UIFormDefineVO wrapperFormDefineByTemplate(CodeClstemplateVO templateVO, String codeClassifyOid) {
-//		UIFormDefineVO formDefineVO = new UIFormDefineVO();
-//		formDefineVO.setOid(templateVO.getOid());
-//		formDefineVO.setBtmType(templateVO.getBtmTypeId());
-//		if (StringUtils.isBlank(codeClassifyOid)) {
-//			codeClassifyOid = templateVO.getCodeClassifyOid();
-//		}
-//		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
-//
-//		List<UIFormItemVO> itemVOS = new ArrayList<>();
-//		Map<String, List<CodeClstempattrVO>> attrGroupMap = templateVO.getAttributes().stream().
-//			filter(s -> StringUtils.isNotBlank(s.getAttributegroup())).collect(Collectors.groupingBy(s -> s.getAttributegroup()));
-//
-//		templateVO.getAttributes().forEach(attrVO -> {
-//			UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId());
-//			itemVOS.add(formItemVO);
-//		});
-//		//澶勭悊灞炴�у垎缁�
-//		if (!CollectionUtils.isEmpty(attrGroupMap)) {
-//			//鎸夌収鍒嗙粍鐨勫睘鎬ф帓鍒楋紝鎵惧埌姣忎竴涓垎缁勭殑绗竴涓睘鎬�
-//			for (String key : attrGroupMap.keySet()) {
-//				List<CodeClstempattrVO> value = attrGroupMap.get(key);
-//				//鎵惧埌杩欎釜鍒嗙粍鐨勫睘鎬х殑绗竴涓�
-//				CodeClstempattrVO attrVO = value.stream().sorted(((o1, o2) -> o1.getOrdernum().compareTo(o2.getOrdernum()))).findFirst().get();
-//				//鎴戜滑鎵惧埌杩欎釜灞炴�у湪鏈�缁堢殑itemVOs閲岀殑浣嶇疆
-//				UIFormItemVO lineVO = new UIFormItemVO();
-//				lineVO.setField(attrVO.getId() + "_line");
-//				lineVO.setType("line");
-//				lineVO.setText(key);
-//				//鎵句綅缃�
-//				for (int i = 0; i < itemVOS.size(); i++) {
-//					UIFormItemVO record = itemVOS.get(i);
-//					if (record.getField().equalsIgnoreCase(attrVO.getId())) {
-//						itemVOS.add(i, lineVO);
-//						break;
-//					}
-//				}
-//			}
-//		}
-//
-//		CodeOrderDTO orderDTO = new CodeOrderDTO();
-//		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
-//		if (!CollectionUtils.isEmpty(orderDTO.getData())) {
-//			orderDTO.getData().forEach((key, value) -> {
-//				for (int i = 0; i < itemVOS.size(); i++) {
-//					UIFormItemVO itemVO = itemVOS.get(i);
-//					if (itemVO.getField().equalsIgnoreCase(key)) {
-//						itemVO.setDefaultValue(value);
-//						break;
-//					}
-//				}
-//			});
-//		}
-//		formDefineVO.setItems(itemVOS);
-//		//鏌ヨ鏄惁鏈夊垎绫绘敞鍏ョ殑
-//		return formDefineVO;
-//	}
-//	/**
-//	 * 灞炴�х被鍨嬩笌js涓殑瀛楁绫诲瀷鐨勬槧灏�
-//	 */
-//	private static Map<String, String> vciFieldTypeMap = new HashMap<String, String>() {{
-//		put(VciFieldTypeEnum.VTString.name(), "text");
-//		put(VciFieldTypeEnum.VTInteger.name(), "text");
-//		put(VciFieldTypeEnum.VTLong.name(), "text");
-//		put(VciFieldTypeEnum.VTDouble.name(), "text");
-//		put(VciFieldTypeEnum.VTClob.name(), "text");
-//		put(VciFieldTypeEnum.VTBoolean.name(), "truefalse");
-//		put(VciFieldTypeEnum.VTDateTime.name(), "datetime");
-//		put(VciFieldTypeEnum.VTDate.name(), "datetime");
-//		put(VciFieldTypeEnum.VTTime.name(), "datetime");
-//		put(VciFieldTypeEnum.VTFilePath.name(), "file");
-//	}};
-//
-//	/**
-//	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
-//	 *
-//	 * @param attrVO  妯℃澘灞炴��
-//	 * @param btmType 涓氬姟绫诲瀷
-//	 * @return 琛ㄥ崟鐨勫瓧娈�
-//	 */
-//	@Override
-//	public UIFormItemVO templateAttr2FormField(CodeClstempattrVO attrVO, String btmType) {
-//
-//		UIFormItemVO itemVO = new UIFormItemVO();
-//		if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
-////			attrVO.setEnumid(OsEnumServiceImpl.MY_DATA_SECRET);
-//			attrVO.setEnumid(MY_DATA_SECRET);
-//		}
-//		itemVO.setField(attrVO.getId());
-//		itemVO.setText(attrVO.getName());
-//		itemVO.setType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
-//		if (VciBaseUtil.getBoolean(attrVO.getTextareaflag())) {
-//			itemVO.setType("textarea");
-//		}
-//		if (VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(attrVO.getAttributedatatype())
-//			|| VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attrVO.getAttributedatatype())
-//			|| VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
-//			itemVO.setVerify("number");
-//		}
-//		itemVO.setReadOnly(VciBaseUtil.getBoolean(attrVO.getReadonlyflag()));
-//		itemVO.setKeyAttr(VciBaseUtil.getBoolean(attrVO.getKeyattrflag()));
-//		itemVO.setRequired(VciBaseUtil.getBoolean(attrVO.getRequireflag()));
-//		itemVO.setDefaultValue(attrVO.getDefaultvalue());
-//		itemVO.setDateFormate(attrVO.getCodedateformat());
-//		itemVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
-//		itemVO.setVerify(attrVO.getVerifyrule());
-//		itemVO.setPrefix(attrVO.getPrefixvalue());
-//		itemVO.setSuffix(attrVO.getSuffixvalue());
-//		itemVO.setTooltips(attrVO.getExplain());
-//		itemVO.setSelectLibFlag(attrVO.getLibraryidentification());
-//		//鐪嬬湅鏄惁鏈夋灇涓�
-//		if ((StringUtils.isNotBlank(attrVO.getEnumstring())
-//			&& !"[]".equalsIgnoreCase(attrVO.getEnumstring())) ||
-//			StringUtils.isNotBlank(attrVO.getEnumid())) {
-//			itemVO.setType("combox");
-//			itemVO.setComboxKey(attrVO.getEnumid());
-//			if (StringUtils.isNotBlank(attrVO.getEnumstring())) {
-//				//鎸囧畾鐨勪笅鎷夋鍐呭
-//				itemVO.setData(JSONObject.parseArray(attrVO.getEnumstring(), KeyValue.class));
-//				if (StringUtils.isBlank(attrVO.getEnumid())) {
-//					itemVO.setComboxKey(itemVO.getField() + "_data");
-//				}
-//			}
-//		}
-//		//鐪嬫槸鍚︽湁鍙傜収
-//		if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferconfig())) {
-//			itemVO.setType("refer");
-//			itemVO.setShowField(itemVO.getField() + "name");
-//			if (StringUtils.isNotBlank(attrVO.getReferconfig())) {
-//				//閰嶇疆鐨勫唴瀹�
-//				itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferconfig(), UIFormReferVO.class));
-//			} else {
-//				UIFormReferVO formReferVO = new UIFormReferVO();
-//				formReferVO.setType("default");
-//				formReferVO.setReferType(attrVO.getReferbtmid());
-//				itemVO.setReferConfig(formReferVO);
-//			}
-//		}
-//
-//		//濡傛灉鏄粍鍚堣鍒欙紝鍒嗙被娉ㄥ叆鐨勶紝鏄剧ず涓哄彧璇�
-//		if (StringUtils.isNotBlank(attrVO.getComponentrule())) {
-//			itemVO.setReadOnly(true);
-//			itemVO.setTooltips("鏈睘鎬т负缁勫悎瑙勫垯");
-//			itemVO.setRequired(false);
-//		}
-//		if (StringUtils.isNotBlank(attrVO.getClassifyinvokeattr())) {
-//			itemVO.setReadOnly(!VciBaseUtil.getBoolean(attrVO.getClassifyinvokeeditflag()));
-//			itemVO.setTooltips("鏈睘鎬ф槸鍒嗙被娉ㄥ叆");
-//			itemVO.setRequired(false);
-//		}
-//
-//		if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(itemVO.getField())) {
-//			//鏄敓鍛藉懆鏈熺姸鎬�
-//			itemVO.setType("combox");
-//			itemVO.setComboxKey(btmType + LC_STATUS_SUBFIX);
-//		}
-//		return itemVO;
-//	}
-//
-//
-//	/**
-//	 * 灏佽鐩镐技椤规煡璇㈢殑鍒楄〃
-//	 *
-//	 * @param templateVO 妯℃澘鐨勬樉绀哄璞�
-//	 * @param uiInfoVO   椤甸潰鐨勪俊鎭�
-//	 */
-//	private void wrapperResemble(CodeClstemplateVO templateVO, MdmUIInfoVO uiInfoVO) {
-//		List<CodeClstempattrVO> resembleAttrList = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())
-//			|| VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).collect(Collectors.toList());
-//		if (!CollectionUtils.isEmpty(resembleAttrList) && resembleAttrList.size() > 1) {
-//			UITableDefineVO resembleTable = new UITableDefineVO();
-//			resembleTable.setOid(templateVO.getOid());
-//			resembleTable.setBtmType(templateVO.getBtmTypeId());
-//			resembleTable.setDisplayQueryArea(false);
-//			resembleTable.setPageVO(new UITablePageVO());
-//			//澶勭悊鎵�鏈夌殑鍒楋紝杩欎釜妯℃澘娌℃湁鍚堝苟鐨勮〃澶寸殑鎯呭喌
-//			List<UITableFieldVO> fieldVOList = new ArrayList<>();
-//			resembleAttrList.forEach(attrVO -> {
-//				UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO,false);
-//				tableFieldVO.setHidden(false);
-//				fieldVOList.add(tableFieldVO);
-//			});
-//			List<List<UITableFieldVO>> cols = new ArrayList<>();
-//			cols.add(fieldVOList);
-//			resembleTable.setCols(cols);
-//			uiInfoVO.setResembleTableVO(resembleTable);
-//		}
-//	}
-//
-//
-//	/**
-//	 * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸鏄剧ず鐨勯厤缃�
-//	 *
-//	 * @param attrVO 妯℃澘灞炴��
-//	 * @param forEdit 鏄惁鏄紪杈戞墍闇�
-//	 * @return 琛ㄦ牸鐨勫瓧娈�
-//	 */
-//	@Override
-//	public UITableFieldVO templateAttr2TableField(CodeClstempattrVO attrVO,boolean forEdit) {
-//		UITableFieldVO fieldVO = new UITableFieldVO();
-//		if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
-//			attrVO.setEnumid(MY_DATA_SECRET);
-//		}
-//		fieldVO.setField(attrVO.getId());
-//		fieldVO.setTitle(attrVO.getName());
-//		fieldVO.setFieldType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
-//		fieldVO.setSort(true);
-//		fieldVO.setSortField(fieldVO.getField());
-//		fieldVO.setQueryField(fieldVO.getField());
-//		if (forEdit){
-//			fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
-//		}else {
-//			fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getTabledisplayflag()));
-//		}
-//		if (attrVO.getAttrtablewidth() != null && attrVO.getAttrtablewidth() > 0) {
-//			fieldVO.setMinWidth(Integer.valueOf(attrVO.getAttrtablewidth()));
-//			fieldVO.setWidth(Integer.valueOf(attrVO.getAttrtablewidth()));
-//		}
-//		//鐪嬬湅鏄惁鏈夋灇涓�
-//		if ((StringUtils.isNotBlank(attrVO.getEnumstring())
-//			&& !"[]".equalsIgnoreCase(attrVO.getEnumstring())) ||
-//			StringUtils.isNotBlank(attrVO.getEnumid())) {
-//			fieldVO.setFieldType("combox");
-//			fieldVO.setField(fieldVO.getField() + "Text");
-//			fieldVO.setComboxKey(attrVO.getEnumid());
-//			if (StringUtils.isNotBlank(attrVO.getEnumstring())) {
-//				//鎸囧畾鐨勪笅鎷夋鍐呭
-//				fieldVO.setData(JSONObject.parseArray(attrVO.getEnumstring(), KeyValue.class));
-//				if (StringUtils.isBlank(attrVO.getEnumid())) {
-//					fieldVO.setComboxKey(fieldVO.getField() + "_data");
-//				}
-//			}else {
-//				List<KeyValue> osEnumItemVOList= enumService.getEnum(attrVO.getEnumid());
-//				fieldVO.setData(osEnumItemVOList);
-//			}
-//		}
-//		//鐪嬫槸鍚︽湁鍙傜収
-//		if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferconfig())) {
-//			fieldVO.setFieldType("refer");
-//			fieldVO.setQueryField(fieldVO.getField());
-//			fieldVO.setField(fieldVO.getField() + "name");
-//			fieldVO.setShowField(fieldVO.getField());
-//			if (StringUtils.isNotBlank(attrVO.getReferconfig())) {
-//				//閰嶇疆鐨勫唴瀹�
-//				fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferconfig(), UIFormReferVO.class));
-//			} else {
-//				UIFormReferVO formReferVO = new UIFormReferVO();
-//				formReferVO.setType("default");
-//				formReferVO.setReferType(attrVO.getReferbtmid());
-//				fieldVO.setReferConfig(formReferVO);
-//			}
-//		}
-//		if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(fieldVO.getSortField())) {
-//			fieldVO.setField("lcstatus_text");
-//		}
-//		Map<String, String> eventJsMap = new HashMap<>();
-//		//瓒呴摼鎺ヤ笌妯℃澘鏄簰鏂�
-//		if (StringUtils.isNotBlank(attrVO.getTablehref())) {
-//			String event = fieldVO.getSortField() + "_href";
-//			eventJsMap.put(event, attrVO.getTablehref());
-//			fieldVO.setTemplet("function(d){ return '<a class=\"layui-btn layui-btn-intable \" lay-event=\"" + event + "\">d." + fieldVO.getField() + "</a>';}");
-//		}
-//		if (StringUtils.isNotBlank(attrVO.getTabledisplayjs())) {
-//			//鐩存帴鍐檉unction(d){ return xxxxx;}
-//			fieldVO.setTemplet(attrVO.getTabledisplayjs());
-//		}
-//		if (StringUtils.isBlank(fieldVO.getTemplet()) && VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
-//			fieldVO.setTemplet("function(d){return $webUtil.formateBoolean(d." + fieldVO.getField() + ");}");
-//		}
-//		fieldVO.setOptionJsMap(eventJsMap);
-//		fieldVO.setStyle(attrVO.getTabledisplaystyle());
-//		//鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫
-//		fieldVO.setDateFormate(attrVO.getCodedateformat());
-//		return fieldVO;
-//	}
-//
-//
-//	/**
-//	 * 鐩镐技椤规煡璇�
-//	 *
-//	 * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
-//	 * @return 鏁版嵁鍒楄〃
-//	 */
-//	@Override
-//	public DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO) {
-//		VciBaseUtil.alertNotNull(orderDTO, "鐢宠鐨勪俊鎭�", orderDTO.getCodeClassifyOid(), "鍒嗙被涓婚敭", orderDTO.getTemplateOid(), "妯℃澘涓婚敭");
-//		CodeClassifyFullInfoBO fullInfoBO = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
-//		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-//		switchClassifyLevelOnOrder(templateVO, fullInfoBO, orderDTO);
-//		switchDateAttrOnOrder(templateVO, orderDTO);
-//		switchComponentAttrOnOrder(templateVO, orderDTO);
-//		//闇�瑕佽幏鍙栨槸鍚︽湁鐩镐技鏌ヨ灞炴��
-//		Map<String, CodeClassifyTemplateAttrVO> attrVOs = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())).collect(Collectors.toMap(s -> s.getId(), t -> t));
-//		if (CollectionUtils.isEmpty(attrVOs)) {
-//			//閮芥病鏈夊睘鎬э紝鑲畾涓嶈兘鏌ヨ浜�
-//			return new DataGrid<>();
-//		}
-//		Map<String, String> conditionMap = new HashMap<>();
-//		//鎴戜滑棣栧厛鑾峰彇鏈夋病鏈夋煡璇㈣鍒�
-//		CodeResembleRuleVO resembleRuleVO = Optional.ofNullable(getUseResembleRule(fullInfoBO, fullInfoBO.getCurrentClassifyVO())).orElseGet(() -> new CodeResembleRuleVO());
-//		attrVOs.forEach((attrId, attrVO) -> {
-//			String value = getValueFromOrderDTO(orderDTO, attrId);
-//			if (value == null) {
-//				value = "";
-//			}
-//			wrapperResembleConditionMap(value, resembleRuleVO, attrId, conditionMap);
-//		});
-//
-//		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
-//		if (!CollectionUtils.isEmpty(conditionMap)) {
-//			Map<String, String> andConditionMap = new HashMap<>();
-//			andConditionMap.put("islastr", "1");
-//			andConditionMap.put("islastv", "1");
-//			if (StringUtils.isNotBlank(orderDTO.getOid())) {
-//				andConditionMap.put("oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
-//			}
-//			conditionMap.putAll(andConditionMap);
-//			PageHelper pageHelper = new PageHelper(-1);
-//			pageHelper.addDefaultDesc("id");
-//			return queryGrid(fullInfoBO.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, pageHelper);
-//		}
-//		return new DataGrid<>();
-//	}
-//
-//	/**
-//	 * 鑾峰彇浣跨敤鐨勭浉浼兼煡璇㈣鍒�
-//	 *
-//	 * @param fullInfoBO        绫诲叏閮ㄤ俊鎭�
-//	 * @param currentClassifyVO 褰撳墠鐨勫垎绫�
-//	 * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥濶ull
-//	 */
-//	@Override
-//	public CodeResembleRuleVO getUseResembleRule(CodeClassifyFullInfoBO fullInfoBO, CodeClassifyVO currentClassifyVO) {
-//		if (currentClassifyVO == null) {
-//			return null;
-//		}
-//		if (currentClassifyVO != null && StringUtils.isNotBlank(currentClassifyVO.getCodeResembleRuleOid())) {
-//			//璇存槑宸茬粡瀛樺湪
-//			return resembleRuleService.getObjectByOid(currentClassifyVO.getCodeResembleRuleOid());
-//		}
-//		if (StringUtils.isBlank(currentClassifyVO.getParentcodeclassifyoid())) {
-//			return null;
-//		}
-//		Map<String, CodeClassifyVO> classifyVOMap = fullInfoBO.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
-//		return getUseResembleRule(fullInfoBO, classifyVOMap.getOrDefault(currentClassifyVO.getParentcodeclassifyoid(), null));
-//	}
-//
-//	/**
-//	 * 灏佽鐩镐技椤规煡璇㈢殑鏌ヨ鏉′欢鐨勬槧灏�
-//	 *
-//	 * @param value          鍊�
-//	 * @param resembleRuleVO 鐩镐技椤硅鍒�
-//	 * @param attrId         灞炴�х殑缂栧彿
-//	 * @param conditionMap   鏌ヨ鏉′欢
-//	 */
-//	@Override
-//	public void wrapperResembleConditionMap(String value, CodeResembleRuleVO resembleRuleVO, String attrId, Map<String, String> conditionMap) {
-//		boolean ignoreSpace = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorespaceflag()) || VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
-//		if (StringUtils.isBlank(value)) {
-//			//涓虹┖鐨勬椂鍊欏氨涓嶆煡璇㈠畠灏辨槸
-//		} else {
-//			String queryKey = "";
-//			String queryValue = "";
-//			boolean ignoreCase = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorecaseflag());
-//			boolean ignoreWidth = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorewidthflag());
-//			boolean trimAll = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
-//			boolean trim = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
-//			String temp = "";
-//			if (ignoreCase && ignoreSpace && ignoreWidth) {
-//				//蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
-//				temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte('%s')) " + (trimAll ? ",' ','')" : ")");
-//			} else if (ignoreCase && ignoreSpace && !ignoreWidth) {
-//				//蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
-//				temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
-//			} else if (ignoreCase && !ignoreSpace && ignoreWidth) {
-//				//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
-//				temp = "UPPER(to_single_byte('%s'))";
-//			} else if (!ignoreCase && ignoreSpace && ignoreWidth) {
-//				//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
-//				temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte('%s') " + (trimAll ? ",' ','')" : ")");
-//			} else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
-//				//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
-//				temp = "UPPER(%s)";
-//			} else if (!ignoreCase && !ignoreCase && ignoreWidth) {
-//				//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
-//				temp = "to_single_byte('%s')";
-//			} else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
-//				//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
-//				temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
-//			} else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
-//				//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
-//				temp = "%s";
-//			}
-//			if (StringUtils.isNotBlank(resembleRuleVO.getLinkCharacter())) {
-//				List<String> chars = VciBaseUtil.str2List(resembleRuleVO.getLinkCharacter());
-//				for (int i = 0; i < chars.size(); i++) {
-//					String s = chars.get(i);
-//					temp = "replace(" + temp + ",'" + s + "','')";
-//				}
-//			}
-//			queryValue = String.format(temp, (trim ? value.trim() : value));
-//			temp = temp.replace("to_single_byte('%s')","to_single_byte(%s)");
-//			queryKey = String.format(temp, "t."+attrId);
-//			conditionMap.put(queryKey, QueryOptionConstant.OR + queryValue);
-//		}
-//	}
-//
-//
-//	/**
-//	 * 鏌ヨ缂栫爜鏁版嵁鐨勫垪琛�
-//	 *
-//	 * @param btmType      涓氬姟绫诲瀷
-//	 * @param templateVO   妯℃澘鐨勫璞★紝闇�瑕佸寘鍚ā鏉跨殑灞炴��
-//	 * @param conditionMap 鏌ヨ鏉′欢
-//	 * @param pageHelper   鍒嗛〉瀵硅薄
-//	 * @return 鏁版嵁鍒楄〃
-//	 */
-//	@Override
-//	public DataGrid<Map<String, String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
-//		CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmType, templateVO, conditionMap, pageHelper);
-////		List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
-//		List<Map> maps = commonsMapper.selectBySql(sqlBO.getSqlHasPage());
-//		DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
-//		List<Map<String, String>> dataList = new ArrayList<>();
-//		if (!CollectionUtils.isEmpty(maps)) {
-//			maps.stream().forEach(map -> {
-//				Map<String, String> data = new HashMap<>();
-//				map.forEach((key, value) -> {
-//					data.put(((String) key).toLowerCase(Locale.ROOT), (String) value);
-//				});
-//				dataList.add(data);
-//			});
-//		}
-//		dataGrid.setData(dataList);
-//		if (!CollectionUtils.isEmpty(dataList)) {
-//			wrapperData(dataGrid.getData(), templateVO, sqlBO.getSelectFieldList(), false);
-//			dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString()););
-//		}
-//		return dataGrid;
-//	}
-//
-//
-//	/**
-//	 * 灏佽鏌ヨ鍑烘潵鐨勬暟鎹�
-//	 *
-//	 * @param dataMap              鏁版嵁鐨勬槧灏�
-//	 * @param templateVO           妯℃澘鐨勫睘鎬�
-//	 * @param onlySelectAttrIdList 浠呬粎鏌ヨ鐨勫睘鎬у瓧娈�
-//	 * @param form 琛ㄥ崟閲屼娇鐢�
-//	 */
-//	@Override
-//	public void wrapperData(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO,
-//							Collection<String> onlySelectAttrIdList, boolean form) {
-//		if (onlySelectAttrIdList == null) {
-//			onlySelectAttrIdList = new ArrayList<>();
-//		}
-//		//鍏堣浆鎹竴涓嬫椂闂存牸寮�
-//		List<String> finalOnlySelectAttrIdList = onlySelectAttrIdList.stream().collect(Collectors.toList());
-//		List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
-//			s -> StringUtils.isNotBlank(s.getCodeDateFormat()) &&
-//				(finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
-//		).collect(Collectors.toList());
-//		//鏋氫妇鐨勫唴瀹�
-//		List<CodeClassifyTemplateAttrVO> enumAttrVOs = templateVO.getAttributes().stream().filter(
-//			s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString()))
-//				&&
-//				(finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
-//		).collect(Collectors.toList());
-//
-//		List<String> userIds = new ArrayList<>();
-//		dataMap.stream().forEach(data -> {
-//			//澶勭悊鏃堕棿
-//			if (!form) {
-//				//琛ㄥ崟鐨勬椂鍊欏彧鑳界敤缁熶竴鐨勬椂闂存牸寮�
-//				wrapperDateFormat(dateFormatAttrVOs, data);
-//			}
-//			//澶勭悊鏋氫妇
-//			wrapperEnum(enumAttrVOs, data);
-//			String lcstatus = data.get(VciQueryWrapperForDO.LC_STATUS_FIELD);
-//			String copyFromVersion = data.getOrDefault(COPY_FROM_VERSION,"");
-//			if ((CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus) || CodeDefaultLC.AUDITING.getValue().equalsIgnoreCase(lcstatus))
-//				&& StringUtils.isBlank(copyFromVersion)
-//			) {
-//				data.put(VciQueryWrapperForDO.ID_FIELD, "******");
-//			}
-//			data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), CodeDefaultLC.getTextByValue(lcstatus));
-//			if(CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus)
-//				&& StringUtils.isNotBlank(copyFromVersion)){
-//				data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), "淇敼涓�");
-//			}
-//			if (data.containsKey("creator")) {
-//				userIds.add(data.get("creator"));
-//			}
-//			if (data.containsKey("lastmodifier")) {
-//				userIds.add(data.get("lastmodifier"));
-//			}
-//		});
-//		if (!CollectionUtils.isEmpty(userIds)) {
-//			Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//			dataMap.stream().forEach(data -> {
-//				String creator = data.getOrDefault("creator", null);
-//				if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) {
-//					data.put("creator", creator + "(" + userVOMap.get(creator.toLowerCase(Locale.ROOT)).getName() + ")");
-//				}
-//				String lastmodifier = data.getOrDefault("lastmodifier", null);
-//				if (StringUtils.isNotBlank(lastmodifier) && userVOMap.containsKey(lastmodifier.toLowerCase(Locale.ROOT))) {
-//					data.put("lastmodifier", lastmodifier + "(" + userVOMap.get(lastmodifier.toLowerCase(Locale.ROOT)).getName() + ")");
-//				}
-//			});
-//		}
-//	}
-//
-//
-//	/**
-//	 * 澶勭悊鏃堕棿鏍煎紡
-//	 *
-//	 * @param dateFormatAttrVOs 鏃堕棿鏍煎紡鐨勫睘鎬�
-//	 * @param data              褰撳墠琛屾暟鎹�
-//	 */
-//	private void wrapperDateFormat(Collection<CodeClassifyTemplateAttrVO> dateFormatAttrVOs, Map<String, String> data) {
-//		if (!CollectionUtils.isEmpty(dateFormatAttrVOs)) {
-//			dateFormatAttrVOs.stream().forEach(dateFormatAttrVO -> {
-//				String attrId = dateFormatAttrVO.getId().toLowerCase(Locale.ROOT);
-//				String oldValue = data.getOrDefault(attrId, null);
-//				if (StringUtils.isNotBlank(oldValue)) {
-//					DateConverter dateConverter = new DateConverter();
-//					try {
-//						dateConverter.setAsText(oldValue);
-//						Date value = dateConverter.getValue();
-//						if (value != null) {
-//							data.put(attrId, VciDateUtil.date2Str(value, dateFormatAttrVO.getCodeDateFormat()));
-//						}
-//					} catch (Throwable e) {
-//						//杞崲鍙兘鏈夐棶棰橈紝杩欏氨浣跨敤鍘熸湰瀛樺偍鐨勫��
-//					}
-//				}
-//			});
-//		}
-//	}
-//
-//
-//	/**
-//	 * 澶勭悊鏋氫妇鐨勫唴瀹癸紝濡傛灉涓嶅湪鏋氫妇涓紝浼氳繑鍥炲師鏈殑鍊�
-//	 *
-//	 * @param enumAttrVOs 鏋氫妇灞炴��
-//	 * @param data        褰撳墠琛屾暟鎹�
-//	 */
-//	private void wrapperEnum(Collection<CodeClassifyTemplateAttrVO> enumAttrVOs, Map<String, String> data) {
-//		//澶勭悊鏋氫妇鐨勫唴瀹癸紝涓轰簡鍏煎浠ュ墠鐨勬暟鎹�,濡傛灉鏁版嵁涓嶈兘浣跨敤鏋氫妇杞崲鐨勮瘽锛岄偅杩樻槸鏄剧ず浠ュ墠鐨勫��
-//		if (!CollectionUtils.isEmpty(enumAttrVOs)) {
-//			enumAttrVOs.stream().forEach(enumAttrVO -> {
-//				String attrId = enumAttrVO.getId().toLowerCase(Locale.ROOT);
-//				String oldValue = data.getOrDefault(attrId, null);
-//				if (StringUtils.isNotBlank(oldValue)) {
-//					List<KeyValue> comboxKVs = listComboboxItems(enumAttrVO);
-//					String newValue = oldValue;
-//					KeyValue keyValue = Optional.ofNullable(comboxKVs).orElseGet(() -> new ArrayList<>()).stream().filter(s -> s.getKey().equalsIgnoreCase(oldValue)).findFirst().orElseGet(() -> null);
-//					if (keyValue != null) {
-//						newValue = keyValue.getValue();
-//					}
-//					data.put(attrId + "Text", newValue);
-//				}
-//			});
-//		}
-//	}
-//
-//
-//	/**
-//	 * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
-//	 *
-//	 * @param btmType      涓氬姟绫诲瀷
-//	 * @param templateVO   妯℃澘鏄剧ず瀵硅薄锛屽繀椤诲寘鍚睘鎬�
-//	 * @param conditionMap 鏌ヨ鏉′欢
-//	 * @param pageHelper   鍒嗛〉鍜屾帓搴忓璞�
-//	 * @return sql鐨勭浉鍏充俊鎭�
-//	 */
-//	@Override
-//	public CodeTemplateAttrSqlBO getSqlByTemplateVO(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
-//		//鍥犱负鍙傜収涓嶄竴瀹氭槸鍦ㄥ钩鍙扮殑灞炴�ф睜閲岄潰璁剧疆锛屾墍浠ユ垜浠緱闇�瑕佽嚜琛屽鐞�
-//		//鍙傝�僔ciQueryWrapper鏉ュ鐞�
-//		//1. 鎵惧埌鎵�鏈夌殑瀛楁锛�
-//		Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
-//		List<String> selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList());
-//
-//		//鎵�鏈夌殑鍙傜収鐨勫瓧娈�
-//		Map<String/**灞炴�у瓧娈�**/, String> joinTableList = new ConcurrentHashMap<>();
-//		List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
-//			s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())
-//		).collect(Collectors.toList());
-//		Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫瓧娈�**/> referFieldMap = new HashMap<>();
-//		if (!CollectionUtils.isEmpty(referAttrVOs)) {
-//			referAttrVOs.parallelStream().forEach(attrVO -> {
-//				UIFormReferVO referVO = null;
-//				if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
-//					referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class);
-//				} else {
-//					referVO = new UIFormReferVO();
-//					referVO.setReferType(attrVO.getReferBtmId());
-//					referVO.setValueField(VciQueryWrapperForDO.OID_FIELD);
-//					referVO.setTextField("name");
-//				}
-//
-//				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
-//				String referTableNick = attrVO.getId() + "0";
-//				String left = " left join " + referTable + " " + referTableNick + " on " + referTableNick + "." + referVO.getValueField() + " =  t." + attrVO.getId();
-//				joinTableList.put(attrVO.getId(), left);
-//				String referShowField = attrVO.getId() + "Name";
-//				List<String> textFields = VciBaseUtil.str2List(referVO.getTextField());
-//				String showFieldInSource = "";
-//				if (textFields.contains("name")) {
-//					showFieldInSource = "name";
-//				} else {
-//					showFieldInSource = textFields.get(0);
-//				}
-//				referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource);
-//				selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
-//			});
-//		}
-//		Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
-//			if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
-//				selectFieldList.add(attrId);
-//			}
-//		});
-//		if (!selectFieldList.contains(CODE_FIELD)) {
-//			selectFieldList.add(CODE_FIELD);
-//		}
-//		if (!selectFieldList.contains(CODE_CLASSIFY_OID_FIELD)) {
-//			selectFieldList.add(CODE_CLASSIFY_OID_FIELD);
-//		}
-//		if (!selectFieldList.contains(CODE_TEMPLATE_OID_FIELD)) {
-//			selectFieldList.add(CODE_TEMPLATE_OID_FIELD);
-//		}
-//		if (!selectFieldList.contains(CODE_FULL_PATH_FILED)) {
-//			selectFieldList.add(CODE_FULL_PATH_FILED);
-//		}
-//
-//		//澶勭悊鏌ヨ鏉′欢
-//		//TODO 楠岃瘉sql娉ㄥ叆
-//		List<String> andSql = new ArrayList<>();
-//		List<String> orSql = new ArrayList<>();
-//		if (!CollectionUtils.isEmpty(conditionMap)) {
-//			Map<String, String> orConditionMap = new HashMap<>();
-//			Map<String, String> andCondtionMap = new HashMap<>();
-//			//鍏堝垎绂籵r鐨勬煡璇㈡潯浠讹紝鍙﹀褰撴煡璇㈡潯浠舵槸绌虹殑鏃跺�欎篃涓嶆煡璇�
-//			conditionMap.forEach((k, v) -> {
-//				if (StringUtils.isNotBlank(v)) {
-//					if (v.startsWith(QueryOptionConstant.OR)) {
-//						orConditionMap.put(k, v.substring(QueryOptionConstant.OR.length()));
-//					} else {
-//						andCondtionMap.put(k, v);
-//					}
-//				}
-//			});
-//
-//			andCondtionMap.forEach((k, v) -> {
-//				andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
-//			});
-//			orConditionMap.forEach((k, v) -> {
-//				orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
-//			});
-//		}
-//		//缁勫悎璧锋潵
-//		StringBuilder andSb = new StringBuilder();
-//		andSql.stream().forEach(s -> {
-//			andSb.append(s).append(SPACE).append(QueryOptionConstant.AND).append(SPACE);
-//		});
-//
-//		String andString = andSb.toString().trim();
-//		String endWithSql = QueryOptionConstant.AND;
-//		if (andString.endsWith(endWithSql)) {
-//			andString = andString.substring(0, andString.length() - endWithSql.length());
-//		}
-//
-//		String orString = orSql.stream().collect(Collectors.joining(" or "));
-//		String whereSql = "";
-//		if (StringUtils.isNotBlank(orString)) {
-//			if (StringUtils.isBlank(andString)) {
-//				andString = " 1 = 1 ";
-//			}
-//			whereSql = SPACE + "(" + SPACE + andString + SPACE + ") and (" + SPACE + orString + SPACE + ")" + SPACE;
-//		} else {
-//			whereSql = andString + SPACE;
-//		}
-//		if (attrVOMap.keySet().contains("secretgrade")) {
-//			Integer userSecret = VciBaseUtil.getCurrentUserSecret();
-//			if (userSecret == null || userSecret == 0) {
-//				userSecret = secretService.getMinUserSecret();
-//			}
-//			whereSql += " and ( t.secretGrade <= " + userSecret + ") ";
-//		}
-//		String tableName = VciBaseUtil.getTableName(btmType);
-//		String sql = "select " + selectFieldList.stream().map(s -> (s.contains(".") ? s : ("t." + s))).collect(Collectors.joining(","))
-//			+ " from " + tableName + SPACE + "t" + SPACE
-//			+ joinTableList.values().stream().collect(Collectors.joining(SPACE))
-//			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
-//		if (pageHelper == null) {
-//			pageHelper = new PageHelper(-1);
-//		}
-//		//鐪嬬湅鎺掑簭
-//		String orderSql = pageHelper.getOrderSql("t");
-//		sql += (orderSql == null ? "" : orderSql);
-//		String whereSubfixForPage = " ) A where rownum < " + (pageHelper.getLimit() * pageHelper.getPage() + 1) + ") where RN >= "
-//			+ (pageHelper.getLimit() * (pageHelper.getPage() - 1) + 1);
-//		String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
-//		String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
-//			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
-//		CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
-//		sqlBO.setTableName(tableName);
-//		sqlBO.setJoinTable(joinTableList);
-//		sqlBO.setNickName("t");
-////		sqlBO.setPageHelper(pageHelper);
-//		sqlBO.setSqlHasPage(sqlHasPage);
-//		sqlBO.setSqlCount(sqlCount);
-//		sqlBO.setSqlUnPage(sql);
-//		return sqlBO;
-//	}
-//
-//
-//	/**
-//	 * 缁勫悎鏌ヨ鏉′欢鐨剆ql
-//	 *
-//	 * @param key           瀛楁
-//	 * @param value         鍚嶅瓧
-//	 * @param referFieldMap 鍙傜収鐨勫瓧娈�
-//	 * @param attrVOMap     灞炴�х殑鏄犲皠
-//	 * @return Sql璇彞
-//	 */
-//	private String getConditionSql(String key, String value, Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫睘鎬�**/> referFieldMap, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
-//		if (key.endsWith("_begin")) {
-//			//璇存槑鏄�>=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
-//			String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
-//			if (referFieldMap.containsKey(field)) {
-//				//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
-//				return referFieldMap.get(field) + SPACE + " >= '" + value + "'" + SPACE;
-//			} else {
-//				return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap);
-//			}
-//		} else if (key.endsWith("_end")) {
-//			//璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
-//			String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
-//			if (referFieldMap.containsKey(field)) {
-//				//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
-//				return referFieldMap.get(field) + SPACE + " <= '" + value + "'" + SPACE;
-//			} else {
-//				return (field.contains(".") ? "" : "t.") + field + SPACE + " <= " + getStringValueInWhere(field, value, attrVOMap);
-//			}
-//		} else {
-//			if (referFieldMap.containsKey(key)) {
-//				//璇存槑鏄弬鐓х殑锛屾垜浠弬鐓х殑鏌ヨ閮借涓烘槸瀛楃涓诧紝濡傛灉鏄椂闂存牸寮忕殑鏌ヨ鑲畾鏈夐棶棰橈紝
-//				String selectKey = referFieldMap.get(key);
-//				return getSqlByValue(selectKey, value, null);
-//			} else {
-//				return getSqlByValue(key, value, attrVOMap);
-//			}
-//		}
-//
-//	}
-//
-//	/**
-//	 * 鑾峰彇鏌ヨ鏉′欢涓殑鍊肩殑锛屽鐞嗕笉鍚岀殑绫诲瀷
-//	 *
-//	 * @param value 鍊�
-//	 * @param field 瀛楁鍚嶇О
-//	 * @return 鏃ユ湡鎴栬�呮椂闂存牸寮忎細鍖呮嫭to_date锛屽瓧绗︿覆浼氬姞'
-//	 */
-//	private String getStringValueInWhere(String field, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
-//		if ((field.contains(".") && !field.toLowerCase(Locale.ROOT).startsWith("t.")) || attrVOMap == null
-//			|| !field.replace("t.", "").matches(RegExpConstant.LETTER) || value.startsWith(ONLY)) {
-//			//璇存槑鍙兘鏄寚瀹氱殑鏌愪釜鏉′欢锛岀洿鎺ヨ繑鍥�
-//			if (value.startsWith(ONLY)) {
-//				value = value.replace(ONLY, "");
-//			}
-//			if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
-//				return value;
-//			}
-//			if (field.contains(".") && attrVOMap != null && attrVOMap.containsKey(field.split("\\.")[0].toLowerCase(Locale.ROOT))) {
-//				//鏄弬鐓�
-//				return "'" + value + "'";
-//			} else {
-//				return value;
-//			}
-//		} else {
-//			//鐪嬬湅鏄笉鏄繖涓璞¢噷鐨勫睘鎬�
-//			if (attrVOMap.containsKey(field)) {
-//				VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.valueOf(attrVOMap.get(field).getAttributeDataType());
-//				if ("ts".equalsIgnoreCase(field)) {
-//					return "to_timestamp('" + value + "', '" + DATETIME_FORMAT + ".ff')";
-//				}
-//				DateConverter dateConverter = new DateConverter();
-//				if (VciFieldTypeEnum.VTDateTime.equals(fieldTypeEnum)) {
-//					//瀹為檯涓婏紝鏁版嵁搴撻兘鏄痶imestamp鐨勭被鍨�.
-//					dateConverter.setAsText(value);
-//					return "to_date('" + dateConverter.getAsText(VciDateUtil.DateTimeFormat) + "','" + DATETIME_FORMAT + "')";
-//				} else if (VciFieldTypeEnum.VTDate.equals(fieldTypeEnum)) {
-//					dateConverter.setAsText(value);
-//					return "to_date('" + dateConverter.getAsText(VciDateUtil.DateFormat) + "','" + DATE_FORMAT + "')";
-//				} else if (VciFieldTypeEnum.VTDouble.equals(fieldTypeEnum)
-//					|| VciFieldTypeEnum.VTLong.equals(fieldTypeEnum)
-//					|| VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) {
-//					return value;
-//				} else {
-//					return "'" + value + "'";
-//				}
-//			} else {
-//				if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
-//					return value;
-//				}
-//				return "'" + value + "'";
-//			}
-//		}
-//
-//	}
-//
-//	/**
-//	 * 灏佽鏈�缁堢殑sql璇彞涓殑鍊奸儴鍒�
-//	 *
-//	 * @param selectKey 鏌ヨ鐨勫瓧娈�
-//	 * @param value     鍊�
-//	 * @param attrVOMap 灞炴�х殑鏄剧ず瀵硅薄鏄犲皠
-//	 * @return sql閲岀殑鍊�
-//	 */
-//	private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
-//		StringBuilder sql = new StringBuilder();
-//		if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
-//			sql.append("t.");
-//		}
-//		if (value.startsWith(QueryOptionConstant.IN)) {
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append("in")
-//				.append(SPACE)
-//				.append("(")
-//				.append(value.replace(QueryOptionConstant.IN, ""))
-//				.append(")");
-//		} else if (value.startsWith(QueryOptionConstant.NOTIN)) {
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append("not in")
-//				.append(SPACE)
-//				.append("(")
-//				.append(value.replace(QueryOptionConstant.NOTIN, ""))
-//				.append(")");
-//		} else if (value.startsWith(QueryOptionConstant.NOTEQUAL)) {
-//			value = value.replace(QueryOptionConstant.NOTEQUAL, "");
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.NOTEQUAL)
-//				.append(SPACE)
-//				.append(value);
-//		} else if (value.startsWith(QueryOptionConstant.MORETHAN)) {
-//			value = value.replace(QueryOptionConstant.MORETHAN, "");
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.MORETHAN)
-//				.append(SPACE)
-//				.append(value);
-//		} else if (value.startsWith(QueryOptionConstant.MORE)) {
-//			value = value.replace(QueryOptionConstant.MORE, "");
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.MORE)
-//				.append(SPACE)
-//				.append(value);
-//		} else if (value.startsWith(QueryOptionConstant.LESSTHAN)) {
-//			value = value.replace(QueryOptionConstant.LESSTHAN, "");
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.LESSTHAN)
-//				.append(SPACE)
-//				.append(value);
-//		} else if (value.startsWith(QueryOptionConstant.LESS)) {
-//			value = value.replace(QueryOptionConstant.LESS, "");
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.LESS)
-//				.append(SPACE)
-//				.append(value);
-//		} else if (value.startsWith(QueryOptionConstant.ISNOTNULL)) {
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(" is not null");
-//		} else if (value.startsWith(QueryOptionConstant.ISNULL)) {
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(" is null");
-//		} else if (value.contains("*")) {
-//			//璇存槑鏄痩ike锛屾垨鑰卨efe like ,right like
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append("like")
-//				.append(SPACE)
-//				//   .append("'")
-//				.append(value.replace("*", "%"))
-//				//  .append("'")
-//				.append(SPACE);
-//		} else {
-//			value= value.replace(SPECIAL_CHAR,REQUIRED_CHAR);
-//			value = getStringValueInWhere(selectKey, value, attrVOMap);
-//
-//			sql.append(selectKey)
-//				.append(SPACE)
-//				.append(QueryOptionConstant.EQUAL)
-//				.append(SPACE)
-//				.append(value);
-//		}
-//		sql.append(SPACE);
-//		return sql.toString();
-//	}
-//
-//	/**
-//	 * 淇敼涓婚搴撴暟鎹�
-//	 *
-//	 * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
-//	 */
-//	@Override
-//	public void editSaveCode(CodeOrderDTO orderDTO) {
-//		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬х殑鍐呭閮戒负绌�", orderDTO.getOid(), "鏁版嵁涓婚敭",
-//			orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
-////		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
-//		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
-//		//鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
-////		List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getOid()));
-//
-//		QueryWrapper<CodeOsbtmtypeEntity> btmWrapper = new QueryWrapper<>();
-//		btmWrapper.eq("OID",orderDTO.getOid());
-//		CodeWupinEntity cbo = codeOsbtmtypeMapper.selectOne(btmWrapper);
-//
-////		CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-////		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
-//
-//		if (cbo != null) {
-//			throw new VciBaseException(DATA_OID_NOT_EXIST);
-//		}
-////		ClientBusinessObject cbo = cbos.get(0);
-//		if (!cbo.getTs().toString().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
-//			throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
-//		}
-//		if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
-//			throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
-//		}
-//
-//		//娉ㄦ剰妯℃澘涓嶈兘浣跨敤鏁版嵁瀛樺偍鐨勬椂鍊欑殑妯℃澘锛屽洜涓哄彲鑳戒細鍙樺寲
-//
-//		//1. 鍒ゆ柇蹇呰緭椤�
-//		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-//		checkRequiredAttrOnOrder(templateVO, orderDTO);
-//		//2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
-//		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
-//		//3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
-//		switchComponentAttrOnOrder(templateVO, orderDTO);
-//		//4.鏍¢獙瑙勫垯
-//		checkVerifyOnOrder(templateVO, orderDTO);
-//		//5.鍒ゆ柇鍏抽敭灞炴��
-//		checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
-//		//6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
-//		checkEnumOnOrder(templateVO, orderDTO);
-//		//7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
-//		switchDateAttrOnOrder(templateVO, orderDTO);
-//		//榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
-//		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
-//		//浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
-//		cbo.setDescription(orderDTO.getDescription());
-//		cbo.setName(orderDTO.getName());
-//		try {
-//			cbo.setDescription(orderDTO.getDescription());
-//			cbo.setName(orderDTO.getName());
-//////			cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
-////			cbo.setAttributeValue("name", orderDTO.getName());
-//		} catch (Exception e) {
-//			e.printStackTrace();
-//		}
-//
-//
-//		List<CodeWupinEntity> cboList = new ArrayList<>();
-//
-//		//澶囨敞
-//		cbo.setDescription(orderDTO.getDescription());
-//		cboList.add(cbo);
+////	}
 ////
+////	/**
+////	 * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭
+////	 *
+////	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+////	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+////	 */
+////	private void checkRequiredAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		Map<String, CodeClstempattrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(
+////				s -> VciBaseUtil.getBoolean(s.getRequireflag()) && StringUtils.isBlank(s.getComponentrule())
+////					&& StringUtils.isBlank(s.getClassifyinvokeattr()))
+////			.collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (!CollectionUtils.isEmpty(requiredAttrMap)) {
+////			requiredAttrMap.forEach((attrId, attrVO) -> {
+////				//鍙湁浼佷笟缂栫爜锛岀姸鎬侊紝澶囨敞锛屾ā鏉夸富閿紝鍒嗙被涓婚敭杩欏嚑涓槸鍥哄畾鐨勶紝鍏朵綑閮芥槸鑷閰嶇疆鐨�
+////				if (StringUtils.isBlank(getValueFromOrderDTO(orderDTO, attrId))) {
+////					throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()});
+////				}
+////			});
+////		}
+////	}
+////
+////	/**
+////	 * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
+////	 *
+////	 * @param orderDTO 缂栫爜鐢宠瀵硅薄
+////	 * @param attrId   灞炴�х殑缂栧彿
+////	 * @return 鍊�
+////	 */
+////	private String getValueFromOrderDTO(CodeOrderDTO orderDTO, String attrId) {
+////		attrId = attrId.toLowerCase(Locale.ROOT);
+////		String value = null;
+////		if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+////			value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
+////		} else {
+////			//璇存槑鏄嚜琛岄厤缃殑
+////			//鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴��
+////			value = orderDTO.getData().getOrDefault(attrId, "");
+////		}
+////		return value;
+////	}
+////
+////	/**
+////	 * 杞崲缁勫悎瑙勫垯鐨勫��
+////	 *
+////	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+////	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+////	 */
+////	private void switchComponentAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		Map<String, CodeClstempattrVO> compAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getComponentrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (!CollectionUtils.isEmpty(compAttrVOMap)) {
+////			Map<String, String> dataMap = WebUtil.objectToMapString(orderDTO);
+////
+////			Map<String, String> dataLowMap = new HashMap<>();
+////			if (!CollectionUtils.isEmpty(dataMap)) {
+////				dataMap.forEach((key, value) -> {
+////					dataLowMap.put(key.toLowerCase(Locale.ROOT), value);
+////				});
+////			}
+////			dataLowMap.putAll(orderDTO.getData());
+////			compAttrVOMap.forEach((attrId, attrVO) -> {
+////				dataLowMap.put(attrId, formulaService.getValueByFormula(dataLowMap, attrVO.getComponentrule()));
+////			});
+////			dataLowMap.forEach((key, value) -> {
+////				setValueToOrderDTO(orderDTO, key, value);
+////			});
+////		}
+////	}
+////
+////
+////	/**
+////	 * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓�
+////	 *
+////	 * @param orderDTO 缂栫爜鐢宠瀵硅薄
+////	 * @param attrId   灞炴�х殑缂栧彿
+////	 * @param value    鍊�
+////	 */
+////	private void setValueToOrderDTO(CodeOrderDTO orderDTO, String attrId, String value) {
+////		attrId = attrId.toLowerCase(Locale.ROOT);
+////		if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
+////			WebUtil.setValueToField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO, value);
+////		} else {
+////			orderDTO.getData().put(attrId, value);
+////		}
+////	}
+////
+////	/**
+////	 * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭�
+////	 *
+////	 * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭
+////	 * @param orderDTO   缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+////	 */
+////	private void checkVerifyOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		Map<String, CodeClstempattrVO> verifyAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getVerifyrule())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (!CollectionUtils.isEmpty(verifyAttrVOMap)) {
+////			verifyAttrVOMap.forEach((attrId, attrVO) -> {
+////				String value = getValueFromOrderDTO(orderDTO, attrId);
+////				if (StringUtils.isNotBlank(value) && !value.matches(attrVO.getVerifyrule())) {
+////					//鏍¢獙姝e垯琛ㄨ揪寮�
+////					throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()});
+////				}
+////			});
+////		}
+////	}
+////
+////	/**
+////	 * 鏍¢獙鍏抽敭灞炴��
+////	 *
+////	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+////	 * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+////	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+////	 */
+////	private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+////		CodeKeyattrrepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+////		//娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+////		//鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+////		Map<String, CodeClstempattrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyattrflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		Map<String, String> conditionMap = new HashMap<>();
+////		boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
+////		//鍏ㄩ儴鍘荤┖鐨勪紭鍏堢骇澶т簬鍘荤┖
+////		boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
+////		boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
+////		boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
+////		ketAttrMap.forEach((attrId, attrVO) -> {
+////			String value = getValueFromOrderDTO(orderDTO, attrId);
+////			if (value == null) {
+////				value = "";
+////			}
+////			wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+////		});
+////
+////		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+////
+////		if (!CollectionUtils.isEmpty(conditionMap)) {
+////			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
+////			conditionMap.forEach((key, value) -> {
+////				sql[0] += " and " + key + " = " + value;
+////			});
+////			if (StringUtils.isNotBlank(orderDTO.getOid())) {
+////				//淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
+////				sql[0] += " and oid != '" + orderDTO.getOid() + "'";
+////			} else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
+////				sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
+////			}
+////			sql[0] += " and islastR = '1' and islastV = '1' ";
+//////			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
+////			if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
+////				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+////				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+////				throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+////			}
+////		}
+////	}
+////
+////	/**
+////	 * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
+////	 *
+////	 * @param value        褰撳墠鐨勫��
+////	 * @param keyRuleVO    鍏抽敭灞炴�х殑鎺у埗瑙勫垯锛屽彲浠ヤ负绌�
+////	 * @param attrId       灞炴�х殑缂栧彿
+////	 * @param trim         鏄惁鍘婚櫎绌烘牸
+////	 * @param ignoreCase   鏄惁涓嶅尯鍒嗗ぇ灏忓啓
+////	 * @param ignoreWidth  鏄惁蹇界暐鍏ㄥ崐瑙�
+////	 * @param trimAll      鏄惁蹇界暐鍏ㄩ儴绌烘牸
+////	 * @param conditionMap 鏌ヨ鏉′欢
+////	 */
+////	@Override
+////	public void wrapperKeyAttrConditionMap(String value, CodeKeyattrrepeatVO keyRuleVO, String attrId,
+////										   boolean trim, boolean ignoreCase, boolean ignoreWidth,
+////										   boolean trimAll, Map<String, String> conditionMap) {
+////		boolean ignoreSpace = trim || trimAll;
+////		if (StringUtils.isBlank(value)) {
+////			//涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜�
+////			conditionMap.put("t."+attrId, "null");
+////		} else {
+////			if (keyRuleVO != null) {
+////				String queryKey = "";
+////				String queryValue = "";
+////
+////				String temp = "";
+////				if (ignoreCase && ignoreSpace && ignoreWidth) {
+////					//蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
+////					temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte(%s)) " + (trimAll ? ",' ','')" : ")");
+////				} else if (ignoreCase && ignoreSpace && !ignoreWidth) {
+////					//蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+////					temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
+////				} else if (ignoreCase && !ignoreSpace && ignoreWidth) {
+////					//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+////					temp = "UPPER(to_single_byte(%s))";
+////				} else if (!ignoreCase && ignoreSpace && ignoreWidth) {
+////					//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
+////					temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte(%s) " + (trimAll ? ",' ','')" : ")");
+////				} else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
+////					//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+////					temp = "UPPER(%s)";
+////				} else if (!ignoreCase && !ignoreCase && ignoreWidth) {
+////					//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+////					temp = "to_single_byte(%s)";
+////				} else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
+////					//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+////					temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
+////				} else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
+////					//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+////					temp = "%s";
+////				}
+////				queryKey = String.format(temp, "t."+attrId);
+////				queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
+////				conditionMap.put(queryKey, queryValue);
+////			} else {
+////				//涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
+////				conditionMap.put("t."+attrId, value);
+////			}
+////		}
+////	}
+////
+////	/**
+////	 * 鏍¢獙鏋氫妇鐨勫唴瀹�
+////	 *
+////	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+////	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+////	 */
+////	private void checkEnumOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		//濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
+////
+////		Map<String, CodeClstempattrVO> enumAttrVOMap = templateVO.getAttributes().stream().filter(s -> (StringUtils.isNotBlank(s.getEnumstring()) || StringUtils.isNotBlank(s.getEnumid())) && !VciBaseUtil.getBoolean(s.getEnumeditflag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (!CollectionUtils.isEmpty(enumAttrVOMap)) {
+////			enumAttrVOMap.forEach((attrId, attrVO) -> {
+////				String value = getValueFromOrderDTO(orderDTO, attrId);
+////				if (StringUtils.isNotBlank(value)) {
+////					CodeClassifyTemplateAttrVO codeClassifyTemplateAttrVO = new CodeClassifyTemplateAttrVO();
+////					BeanUtils.copyProperties(attrVO,codeClassifyTemplateAttrVO);
+////					//鏈夊�兼墠鑳芥牎楠�
+////					List<KeyValue> comboboxKVs = listComboboxItems(codeClassifyTemplateAttrVO);
+////					if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) {
+////						throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()});
+////					}
+////				}
+////			});
+////		}
+////	}
+////
+////	/**
+////	 * 杞崲鏃堕棿鐨勬牸寮�
+////	 *
+////	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+////	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+////	 */
+////	private void switchDateAttrOnOrder(CodeClstemplateVO templateVO, CodeOrderDTO orderDTO) {
+////		Map<String, CodeClstempattrVO> dateAttrVOMap = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getCodedateformat())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		if (!CollectionUtils.isEmpty(dateAttrVOMap)) {
+////			dateAttrVOMap.forEach((attrId, attrVO) -> {
+////				String value = getValueFromOrderDTO(orderDTO, attrId);
+////				if (StringUtils.isNotBlank(value)) {
+////					DateConverter dateConverter = new DateConverter();
+////					dateConverter.setAsText(value);
+////					value = VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat);
+////					setValueToOrderDTO(orderDTO, attrId, value);
+////				}
+////			});
+////		}
+////	}
+////
+////	/**
+////	 * 鎷疯礉鏁版嵁鍒癱bo瀵硅薄涓�
+////	 *
+////	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+////	 * @param cbo              涓氬姟鏁版嵁
+////	 * @param orderDTO         缂栫爜鐢宠鐨勪俊鎭�
+////	 * @param templateVO       妯℃澘鐨勬樉绀哄璞�
+////	 * @param edit             鏄惁涓轰慨鏀�
+////	 */
+////	private void copyValueToCBO(CodeClassifyFullInfoBO classifyFullInfo, CodeWupinEntity cbo,
+////								CodeOrderDTO orderDTO, CodeClstemplateVO templateVO,
+////								boolean edit) {
+////		String fullPath = "";
+////		if (!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())) {
+////			fullPath = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel())))
+////				.map(CodeClassifyVO::getOid).collect(Collectors.joining("##"));
+////		} else {
+////			fullPath = classifyFullInfo.getCurrentClassifyVO().getOid();
+////		}
+////
+//////		BeanUtils.
+////		BeanUtils.copyProperties(orderDTO.getData(),cbo);
+////		cbo.setMaterialtype(Short.valueOf("1001"));
+//////		orderDTO.getData().forEach((key, value) -> {
+//////			if (!edit || (!checkUnAttrUnEdit(key) &&
+//////				!VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
+//////				try {
+//////					cbo.setAttributeValue(key, value);
+//////				} catch (Exception e) {
+//////					logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+//////				}
+//////			}
+//////		});
+////		try {
+////
+////			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
+////			cbo.setCodetemplateoid(templateVO.getOid());
+////			cbo.setCodeclsfpath(fullPath);
+//////			cbo.setMaterialclassify("model_type");
+//////			cbo.setMaterialname(orderDTO.getData().get("materialname"));
+//////			cbo.setShifoupihaoguanli("true");
+//////			cbo.setKucunwl("true");
+//////			cbo.setXiaoshouwl("false");
+////			if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
+////				//鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝鎻掍釜鐐癸紝鐪嬬敓鍛藉懆鏈熸槸鍚﹂渶瑕佸垱寤�
+////				if (StringUtils.isNotBlank(cbo.getLctid())) {
+//////					OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctid());
+//////					if (lifeCycleVO != null) {
+//////						cbo.setLcStatus("Editing");
+////////						cbo.setLcStatus(lifeCycleVO.getStartStatus());
+//////					} else {
+////						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+//////					}
+////				} else {
+////					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+////				}
+////
+////			}
+////
+////			int secret = VciBaseUtil.getInt(cbo.getSecretGrade().toString());
+////			//鎻掍釜鐐癸紝鍚庣画鐪嬪瘑绾ф湇鍔℃槸鍚﹀彲鐢�
+//////			if (secret == 0 || !secretService.checkDataSecret(secret)) {
+////			if (secret == 0 ) {
+////				Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+//////				cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
+////				cbo.setSecretGrade(userSecret == null || userSecret == 0 ? UserSecretEnum.NONE.getValue() : userSecret);
+////			}
+////		} catch (Throwable e) {
+////			logger.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
+////		}
+////	}
+////
+////
+////	/**
+////	 * 鍒濆鍖栦笟鍔$被鍨�
+////	 * --鍒涘缓浜洪粯璁や负褰撳墠鐢ㄦ埛锛屽鏋滈渶瑕佷慨鏀癸紝鍙互鍦ㄨ幏鍙栧悗鑷澶勭悊
+////	 * @param btmName 涓氬姟绫诲瀷鐨勫悕绉帮紝浼氳嚜鍔ㄥ彉鎴愬皬鍐�
+////	 * @return CodeWupinEntity
+////	 * @throws VciBaseException 鍒濆鍖栧嚭閿欑殑鏄細鎶涘嚭寮傚父
+////	 */
+////	@Override
+////	public CodeWupinEntity createCBOByBtmName(String btmName)
+////		throws VciBaseException {
+////		if(btmName!=null){
+////			btmName = btmName.trim().toLowerCase();
+////		}
+////		String userid = AuthUtil.getUser().getUserName();
+//////		if(!hasCreatedCbos.containsKey(btmName)){
+//////			if(StringUtils.isEmpty(userid)){
+//////				throw new VciBaseException(msgCodePrefix +"noHasUserid");
+//////			}
+//////			try {
+//////				hasCreatedCbos.put(btmName, createBusinessObject(btmName));
+//////			} catch (Exception e) {
+//////				logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄",e);
+//////				throw new VciBaseException(msgCodePrefix + "initBoError",new String[]{btmName});
+//////			}
+//////		}
+//////		ClientBusinessObject cbo = cloneClientBusinessObject(hasCreatedCbos.get(btmName));
+////
+////		QueryWrapper<CodeOsbtmtypeEntity> btmWrapper = new QueryWrapper<>();
+////		btmWrapper.eq("ID",btmName);
+////		CodeOsbtmtypeEntity btmTypeVO = codeOsbtmtypeMapper.selectOne(btmWrapper);
+//////		OsBtmTypeVO btmTypeVO = btmService.getBtmById(boName);
+////		String userName = AuthUtil.getUser().getUserName();
+////		CodeWupinEntity wupinEntity = new CodeWupinEntity();
+////		wupinEntity.setOid(null);
+//////		bo.setRevisionid((new ObjectUtility()).getNewObjectID36());
+//////		bo.setNameoid((new ObjectUtility()).getNewObjectID36());
+////		wupinEntity.setBtmname(btmName);
+////		wupinEntity.setLastR(String.valueOf(1));
+////		wupinEntity.setFirstR(String.valueOf(1));
+////		wupinEntity.setFirstV(String.valueOf(1));
+////		wupinEntity.setLastV(String.valueOf(1));
+////		wupinEntity.setCreator(userName);
+////		wupinEntity.setCreateTime(new Date());
+////		wupinEntity.setLastModifier(userName);
+////		wupinEntity.setLastModifyTime(new Date());
+////		wupinEntity.setRevisionRule(btmTypeVO.getRevisionruleid());
+////		wupinEntity.setVersionRule(String.valueOf(btmTypeVO.getVersionRule()));
+////		if(StringUtils.isNotBlank(btmTypeVO.getRevisionruleid())){
+////			//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
+//////			OsRevisionRuleVO revisionRuleVO = revisionRuleService.getRevisionRuleById(btmTypeVO.getRevisionruleid());
+////			wupinEntity.setRevisionValue("1");
+////		}
+////
+////		wupinEntity.setRevisionSeq(1);
+////		wupinEntity.setVersionSeq(1);
+////		//鎻掍釜鐐癸紝闇�瑕侀棶鍕囧摜鐗堟湰闂锛屽睍绀洪粯璁や负1
+////		wupinEntity.setVersionValue("1");
+////		wupinEntity.setLctid("wupinLC");
+////		wupinEntity.setLcStatus("Editing");
+////		wupinEntity.setId("");
+////		wupinEntity.setName("");
+////		wupinEntity.setDescription("");
+////		wupinEntity.setOwner(userName);
+////		wupinEntity.setCheckinby(userName);
+////		wupinEntity.setCopyFromVersion("");
+////		wupinEntity.setMaterialtype((short) 1001);
+////		wupinEntity.setCaigouwl("true");
+////		wupinEntity.setShifoupihaoguanli("true");
+////		wupinEntity.setKucunwl("true");
+////		wupinEntity.setXiaoshouwl("false");
+////		wupinEntity.setPassing("true");
+////
+//////		this.initTypeAttributeValue(wupinEntity,btmTypeVO);
+////		return wupinEntity;
+////
+////
+//////		return cbo;
+////	}
+////
+////	/**
+////	 * 鏄惁涓轰慨鏀瑰拷鐣ョ殑灞炴��
+////	 * @param attrName 灞炴�х殑鍚嶅瓧
+////	 * @return true 琛ㄧず搴旇蹇界暐
+////	 */
+////	boolean checkUnAttrUnEdit(String attrName){
+////		return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
+////			||"ts".equalsIgnoreCase(attrName)
+////			|| "lastmodifier".equalsIgnoreCase(attrName)
+////			|| "lastmodifytime".equalsIgnoreCase(attrName)
+////			|| "createtime".equalsIgnoreCase(attrName)
+////			|| "checkintime".equalsIgnoreCase(attrName)
+////			||"checkouttime".equalsIgnoreCase(attrName));
+////	}
+////
+////	/**
+////	 * 淇濆瓨鍙緭鍙�夌殑淇℃伅
+////	 *
+////	 * @param templateVO 妯℃澘鐨勫璞�
+////	 * @param cboList    鏁版嵁鐨勫唴瀹�
+////	 */
+////	@Override
+////	public void batchSaveSelectChar(CodeClstemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
+////									List<String> cboList) {
+////		if (templateVO != null && !CollectionUtils.isEmpty(cboList)) {
+////			//鏄紓姝ョ殑锛屾墍浠ョ洿鎺ュ惊鐜�
+////			List<CodeClstempattrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryidentification())).collect(Collectors.toList());
+////
+////			if (!CollectionUtils.isEmpty(selectAttrVOs)) {
+//////				SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+////				selectAttrVOs.parallelStream().forEach(attrVO -> {
+////					List<String> valuesList = cboList;
+//////					cboList.parallelStream().forEach(cbo -> {
+//////						String value = cbo.get.getAttributeValue(attrVO.getId());
+//////						if (StringUtils.isNotBlank(value)) {
+//////							valuesList.add(value);
+//////						}
+//////					});
+////					if (!CollectionUtils.isEmpty(valuesList)) {
+////						for (String s : valuesList) {
+////							DictBiz dictBiz = new DictBiz();
+////							dictBiz.setCode(templateVO.getBtmTypeId());
+////							dictBiz.setDictKey(s);
+////							dictBiz.setDictValue(s);
+////							//浠庡師鏉ョ殑charService锛堝彲杈撳彲閫夛級鏇存敼涓鸿皟鐢╫md涓殑鎺ュ彛鏉ュ疄鐜�
+////							iDictBizClient.getCheck(dictBiz);
+////						}
+//////						charService.saveBySameNamespaceAndFlag(templateVO.getBtmTypeId(), attrVO.getLibraryIdentification(), valuesList, sessionInfo);
+////					}
+////				});
+////			}
+////		}
+////	}
+////
+////    @Override
+////    public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
+////		CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
+////		MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+////		uiInfoVO.setTemplateVO(templateVO);
+////		uiInfoVO.setFormDefineVO(wrapperFormDefineByTemplate(templateVO, codeClassifyOid));
+////		wrapperResemble(templateVO, uiInfoVO);
+////		return uiInfoVO;
+////    }
+////
+////
+////	/**
+////	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟瀹氫箟鐨勪俊鎭�
+////	 *
+////	 * @param templateVO      妯℃澘鐨勬樉绀哄璞�
+////	 * @param codeClassifyOid 鍒嗙被鐨勪富閿紝涓虹┖鐨勬椂鍊欙紝鑾峰彇妯℃澘鎵�灞炵殑鍒嗙被涓婚敭.鐢ㄤ簬浜х敓鍒嗙被娉ㄥ叆
+////	 * @return 琛ㄦ牸鐨勪俊鎭�
+////	 */
+////	private UIFormDefineVO wrapperFormDefineByTemplate(CodeClstemplateVO templateVO, String codeClassifyOid) {
+////		UIFormDefineVO formDefineVO = new UIFormDefineVO();
+////		formDefineVO.setOid(templateVO.getOid());
+////		formDefineVO.setBtmType(templateVO.getBtmTypeId());
+////		if (StringUtils.isBlank(codeClassifyOid)) {
+////			codeClassifyOid = templateVO.getCodeClassifyOid();
+////		}
+////		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
+////
+////		List<UIFormItemVO> itemVOS = new ArrayList<>();
+////		Map<String, List<CodeClstempattrVO>> attrGroupMap = templateVO.getAttributes().stream().
+////			filter(s -> StringUtils.isNotBlank(s.getAttributegroup())).collect(Collectors.groupingBy(s -> s.getAttributegroup()));
+////
+////		templateVO.getAttributes().forEach(attrVO -> {
+////			UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId());
+////			itemVOS.add(formItemVO);
+////		});
+////		//澶勭悊灞炴�у垎缁�
+////		if (!CollectionUtils.isEmpty(attrGroupMap)) {
+////			//鎸夌収鍒嗙粍鐨勫睘鎬ф帓鍒楋紝鎵惧埌姣忎竴涓垎缁勭殑绗竴涓睘鎬�
+////			for (String key : attrGroupMap.keySet()) {
+////				List<CodeClstempattrVO> value = attrGroupMap.get(key);
+////				//鎵惧埌杩欎釜鍒嗙粍鐨勫睘鎬х殑绗竴涓�
+////				CodeClstempattrVO attrVO = value.stream().sorted(((o1, o2) -> o1.getOrdernum().compareTo(o2.getOrdernum()))).findFirst().get();
+////				//鎴戜滑鎵惧埌杩欎釜灞炴�у湪鏈�缁堢殑itemVOs閲岀殑浣嶇疆
+////				UIFormItemVO lineVO = new UIFormItemVO();
+////				lineVO.setField(attrVO.getId() + "_line");
+////				lineVO.setType("line");
+////				lineVO.setText(key);
+////				//鎵句綅缃�
+////				for (int i = 0; i < itemVOS.size(); i++) {
+////					UIFormItemVO record = itemVOS.get(i);
+////					if (record.getField().equalsIgnoreCase(attrVO.getId())) {
+////						itemVOS.add(i, lineVO);
+////						break;
+////					}
+////				}
+////			}
+////		}
+////
+////		CodeOrderDTO orderDTO = new CodeOrderDTO();
+////		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+////		if (!CollectionUtils.isEmpty(orderDTO.getData())) {
+////			orderDTO.getData().forEach((key, value) -> {
+////				for (int i = 0; i < itemVOS.size(); i++) {
+////					UIFormItemVO itemVO = itemVOS.get(i);
+////					if (itemVO.getField().equalsIgnoreCase(key)) {
+////						itemVO.setDefaultValue(value);
+////						break;
+////					}
+////				}
+////			});
+////		}
+////		formDefineVO.setItems(itemVOS);
+////		//鏌ヨ鏄惁鏈夊垎绫绘敞鍏ョ殑
+////		return formDefineVO;
+////	}
+////	/**
+////	 * 灞炴�х被鍨嬩笌js涓殑瀛楁绫诲瀷鐨勬槧灏�
+////	 */
+////	private static Map<String, String> vciFieldTypeMap = new HashMap<String, String>() {{
+////		put(VciFieldTypeEnum.VTString.name(), "text");
+////		put(VciFieldTypeEnum.VTInteger.name(), "text");
+////		put(VciFieldTypeEnum.VTLong.name(), "text");
+////		put(VciFieldTypeEnum.VTDouble.name(), "text");
+////		put(VciFieldTypeEnum.VTClob.name(), "text");
+////		put(VciFieldTypeEnum.VTBoolean.name(), "truefalse");
+////		put(VciFieldTypeEnum.VTDateTime.name(), "datetime");
+////		put(VciFieldTypeEnum.VTDate.name(), "datetime");
+////		put(VciFieldTypeEnum.VTTime.name(), "datetime");
+////		put(VciFieldTypeEnum.VTFilePath.name(), "file");
+////	}};
+////
+////	/**
+////	 * 妯℃澘灞炴�ц浆鎹负琛ㄥ崟鐨勫瓧娈�
+////	 *
+////	 * @param attrVO  妯℃澘灞炴��
+////	 * @param btmType 涓氬姟绫诲瀷
+////	 * @return 琛ㄥ崟鐨勫瓧娈�
+////	 */
+////	@Override
+////	public UIFormItemVO templateAttr2FormField(CodeClstempattrVO attrVO, String btmType) {
+////
+////		UIFormItemVO itemVO = new UIFormItemVO();
+////		if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
+//////			attrVO.setEnumid(OsEnumServiceImpl.MY_DATA_SECRET);
+////			attrVO.setEnumid(MY_DATA_SECRET);
+////		}
+////		itemVO.setField(attrVO.getId());
+////		itemVO.setText(attrVO.getName());
+////		itemVO.setType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
+////		if (VciBaseUtil.getBoolean(attrVO.getTextareaflag())) {
+////			itemVO.setType("textarea");
+////		}
+////		if (VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+////			|| VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attrVO.getAttributedatatype())
+////			|| VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
+////			itemVO.setVerify("number");
+////		}
+////		itemVO.setReadOnly(VciBaseUtil.getBoolean(attrVO.getReadonlyflag()));
+////		itemVO.setKeyAttr(VciBaseUtil.getBoolean(attrVO.getKeyattrflag()));
+////		itemVO.setRequired(VciBaseUtil.getBoolean(attrVO.getRequireflag()));
+////		itemVO.setDefaultValue(attrVO.getDefaultvalue());
+////		itemVO.setDateFormate(attrVO.getCodedateformat());
+////		itemVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
+////		itemVO.setVerify(attrVO.getVerifyrule());
+////		itemVO.setPrefix(attrVO.getPrefixvalue());
+////		itemVO.setSuffix(attrVO.getSuffixvalue());
+////		itemVO.setTooltips(attrVO.getExplain());
+////		itemVO.setSelectLibFlag(attrVO.getLibraryidentification());
+////		//鐪嬬湅鏄惁鏈夋灇涓�
+////		if ((StringUtils.isNotBlank(attrVO.getEnumstring())
+////			&& !"[]".equalsIgnoreCase(attrVO.getEnumstring())) ||
+////			StringUtils.isNotBlank(attrVO.getEnumid())) {
+////			itemVO.setType("combox");
+////			itemVO.setComboxKey(attrVO.getEnumid());
+////			if (StringUtils.isNotBlank(attrVO.getEnumstring())) {
+////				//鎸囧畾鐨勪笅鎷夋鍐呭
+////				itemVO.setData(JSONObject.parseArray(attrVO.getEnumstring(), KeyValue.class));
+////				if (StringUtils.isBlank(attrVO.getEnumid())) {
+////					itemVO.setComboxKey(itemVO.getField() + "_data");
+////				}
+////			}
+////		}
+////		//鐪嬫槸鍚︽湁鍙傜収
+////		if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferconfig())) {
+////			itemVO.setType("refer");
+////			itemVO.setShowField(itemVO.getField() + "name");
+////			if (StringUtils.isNotBlank(attrVO.getReferconfig())) {
+////				//閰嶇疆鐨勫唴瀹�
+////				itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferconfig(), UIFormReferVO.class));
+////			} else {
+////				UIFormReferVO formReferVO = new UIFormReferVO();
+////				formReferVO.setType("default");
+////				formReferVO.setReferType(attrVO.getReferbtmid());
+////				itemVO.setReferConfig(formReferVO);
+////			}
+////		}
+////
+////		//濡傛灉鏄粍鍚堣鍒欙紝鍒嗙被娉ㄥ叆鐨勶紝鏄剧ず涓哄彧璇�
+////		if (StringUtils.isNotBlank(attrVO.getComponentrule())) {
+////			itemVO.setReadOnly(true);
+////			itemVO.setTooltips("鏈睘鎬т负缁勫悎瑙勫垯");
+////			itemVO.setRequired(false);
+////		}
+////		if (StringUtils.isNotBlank(attrVO.getClassifyinvokeattr())) {
+////			itemVO.setReadOnly(!VciBaseUtil.getBoolean(attrVO.getClassifyinvokeeditflag()));
+////			itemVO.setTooltips("鏈睘鎬ф槸鍒嗙被娉ㄥ叆");
+////			itemVO.setRequired(false);
+////		}
+////
+////		if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(itemVO.getField())) {
+////			//鏄敓鍛藉懆鏈熺姸鎬�
+////			itemVO.setType("combox");
+////			itemVO.setComboxKey(btmType + LC_STATUS_SUBFIX);
+////		}
+////		return itemVO;
+////	}
+////
+////
+////	/**
+////	 * 灏佽鐩镐技椤规煡璇㈢殑鍒楄〃
+////	 *
+////	 * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+////	 * @param uiInfoVO   椤甸潰鐨勪俊鎭�
+////	 */
+////	private void wrapperResemble(CodeClstemplateVO templateVO, MdmUIInfoVO uiInfoVO) {
+////		List<CodeClstempattrVO> resembleAttrList = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())
+////			|| VciQueryWrapperForDO.ID_FIELD.equalsIgnoreCase(s.getId())).collect(Collectors.toList());
+////		if (!CollectionUtils.isEmpty(resembleAttrList) && resembleAttrList.size() > 1) {
+////			UITableDefineVO resembleTable = new UITableDefineVO();
+////			resembleTable.setOid(templateVO.getOid());
+////			resembleTable.setBtmType(templateVO.getBtmTypeId());
+////			resembleTable.setDisplayQueryArea(false);
+////			resembleTable.setPageVO(new UITablePageVO());
+////			//澶勭悊鎵�鏈夌殑鍒楋紝杩欎釜妯℃澘娌℃湁鍚堝苟鐨勮〃澶寸殑鎯呭喌
+////			List<UITableFieldVO> fieldVOList = new ArrayList<>();
+////			resembleAttrList.forEach(attrVO -> {
+////				UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO,false);
+////				tableFieldVO.setHidden(false);
+////				fieldVOList.add(tableFieldVO);
+////			});
+////			List<List<UITableFieldVO>> cols = new ArrayList<>();
+////			cols.add(fieldVOList);
+////			resembleTable.setCols(cols);
+////			uiInfoVO.setResembleTableVO(resembleTable);
+////		}
+////	}
+////
+////
+////	/**
+////	 * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸鏄剧ず鐨勯厤缃�
+////	 *
+////	 * @param attrVO 妯℃澘灞炴��
+////	 * @param forEdit 鏄惁鏄紪杈戞墍闇�
+////	 * @return 琛ㄦ牸鐨勫瓧娈�
+////	 */
+////	@Override
+////	public UITableFieldVO templateAttr2TableField(CodeClstempattrVO attrVO,boolean forEdit) {
+////		UITableFieldVO fieldVO = new UITableFieldVO();
+////		if (SECRET_FILED.equalsIgnoreCase(attrVO.getId())) {
+////			attrVO.setEnumid(MY_DATA_SECRET);
+////		}
+////		fieldVO.setField(attrVO.getId());
+////		fieldVO.setTitle(attrVO.getName());
+////		fieldVO.setFieldType(vciFieldTypeMap.getOrDefault(attrVO.getAttributedatatype(), "text"));
+////		fieldVO.setSort(true);
+////		fieldVO.setSortField(fieldVO.getField());
+////		fieldVO.setQueryField(fieldVO.getField());
+////		if (forEdit){
+////			fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getFormdisplayflag()));
+////		}else {
+////			fieldVO.setHidden(!VciBaseUtil.getBoolean(attrVO.getTabledisplayflag()));
+////		}
+////		if (attrVO.getAttrtablewidth() != null && attrVO.getAttrtablewidth() > 0) {
+////			fieldVO.setMinWidth(Integer.valueOf(attrVO.getAttrtablewidth()));
+////			fieldVO.setWidth(Integer.valueOf(attrVO.getAttrtablewidth()));
+////		}
+////		//鐪嬬湅鏄惁鏈夋灇涓�
+////		if ((StringUtils.isNotBlank(attrVO.getEnumstring())
+////			&& !"[]".equalsIgnoreCase(attrVO.getEnumstring())) ||
+////			StringUtils.isNotBlank(attrVO.getEnumid())) {
+////			fieldVO.setFieldType("combox");
+////			fieldVO.setField(fieldVO.getField() + "Text");
+////			fieldVO.setComboxKey(attrVO.getEnumid());
+////			if (StringUtils.isNotBlank(attrVO.getEnumstring())) {
+////				//鎸囧畾鐨勪笅鎷夋鍐呭
+////				fieldVO.setData(JSONObject.parseArray(attrVO.getEnumstring(), KeyValue.class));
+////				if (StringUtils.isBlank(attrVO.getEnumid())) {
+////					fieldVO.setComboxKey(fieldVO.getField() + "_data");
+////				}
+////			}else {
+////				List<KeyValue> osEnumItemVOList= enumService.getEnum(attrVO.getEnumid());
+////				fieldVO.setData(osEnumItemVOList);
+////			}
+////		}
+////		//鐪嬫槸鍚︽湁鍙傜収
+////		if (StringUtils.isNotBlank(attrVO.getReferbtmid()) || StringUtils.isNotBlank(attrVO.getReferconfig())) {
+////			fieldVO.setFieldType("refer");
+////			fieldVO.setQueryField(fieldVO.getField());
+////			fieldVO.setField(fieldVO.getField() + "name");
+////			fieldVO.setShowField(fieldVO.getField());
+////			if (StringUtils.isNotBlank(attrVO.getReferconfig())) {
+////				//閰嶇疆鐨勫唴瀹�
+////				fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferconfig(), UIFormReferVO.class));
+////			} else {
+////				UIFormReferVO formReferVO = new UIFormReferVO();
+////				formReferVO.setType("default");
+////				formReferVO.setReferType(attrVO.getReferbtmid());
+////				fieldVO.setReferConfig(formReferVO);
+////			}
+////		}
+////		if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(fieldVO.getSortField())) {
+////			fieldVO.setField("lcstatus_text");
+////		}
+////		Map<String, String> eventJsMap = new HashMap<>();
+////		//瓒呴摼鎺ヤ笌妯℃澘鏄簰鏂�
+////		if (StringUtils.isNotBlank(attrVO.getTablehref())) {
+////			String event = fieldVO.getSortField() + "_href";
+////			eventJsMap.put(event, attrVO.getTablehref());
+////			fieldVO.setTemplet("function(d){ return '<a class=\"layui-btn layui-btn-intable \" lay-event=\"" + event + "\">d." + fieldVO.getField() + "</a>';}");
+////		}
+////		if (StringUtils.isNotBlank(attrVO.getTabledisplayjs())) {
+////			//鐩存帴鍐檉unction(d){ return xxxxx;}
+////			fieldVO.setTemplet(attrVO.getTabledisplayjs());
+////		}
+////		if (StringUtils.isBlank(fieldVO.getTemplet()) && VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributedatatype())) {
+////			fieldVO.setTemplet("function(d){return $webUtil.formateBoolean(d." + fieldVO.getField() + ");}");
+////		}
+////		fieldVO.setOptionJsMap(eventJsMap);
+////		fieldVO.setStyle(attrVO.getTabledisplaystyle());
+////		//鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫
+////		fieldVO.setDateFormate(attrVO.getCodedateformat());
+////		return fieldVO;
+////	}
+////
+////
+////	/**
+////	 * 鐩镐技椤规煡璇�
+////	 *
+////	 * @param orderDTO 缂栫爜鐨勭浉鍏充俊鎭�
+////	 * @return 鏁版嵁鍒楄〃
+////	 */
+////	@Override
+////	public DataGrid<Map<String, String>> resembleQuery(CodeOrderDTO orderDTO) {
+////		VciBaseUtil.alertNotNull(orderDTO, "鐢宠鐨勪俊鎭�", orderDTO.getCodeClassifyOid(), "鍒嗙被涓婚敭", orderDTO.getTemplateOid(), "妯℃澘涓婚敭");
+////		CodeClassifyFullInfoBO fullInfoBO = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+////		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+////		switchClassifyLevelOnOrder(templateVO, fullInfoBO, orderDTO);
+////		switchDateAttrOnOrder(templateVO, orderDTO);
+////		switchComponentAttrOnOrder(templateVO, orderDTO);
+////		//闇�瑕佽幏鍙栨槸鍚︽湁鐩镐技鏌ヨ灞炴��
+////		Map<String, CodeClassifyTemplateAttrVO> attrVOs = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getSamerepeatattrflag())).collect(Collectors.toMap(s -> s.getId(), t -> t));
+////		if (CollectionUtils.isEmpty(attrVOs)) {
+////			//閮芥病鏈夊睘鎬э紝鑲畾涓嶈兘鏌ヨ浜�
+////			return new DataGrid<>();
+////		}
+////		Map<String, String> conditionMap = new HashMap<>();
+////		//鎴戜滑棣栧厛鑾峰彇鏈夋病鏈夋煡璇㈣鍒�
+////		CodeResembleRuleVO resembleRuleVO = Optional.ofNullable(getUseResembleRule(fullInfoBO, fullInfoBO.getCurrentClassifyVO())).orElseGet(() -> new CodeResembleRuleVO());
+////		attrVOs.forEach((attrId, attrVO) -> {
+////			String value = getValueFromOrderDTO(orderDTO, attrId);
+////			if (value == null) {
+////				value = "";
+////			}
+////			wrapperResembleConditionMap(value, resembleRuleVO, attrId, conditionMap);
+////		});
+////
+////		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+////		if (!CollectionUtils.isEmpty(conditionMap)) {
+////			Map<String, String> andConditionMap = new HashMap<>();
+////			andConditionMap.put("islastr", "1");
+////			andConditionMap.put("islastv", "1");
+////			if (StringUtils.isNotBlank(orderDTO.getOid())) {
+////				andConditionMap.put("oid", QueryOptionConstant.NOTEQUAL + orderDTO.getOid());
+////			}
+////			conditionMap.putAll(andConditionMap);
+////			PageHelper pageHelper = new PageHelper(-1);
+////			pageHelper.addDefaultDesc("id");
+////			return queryGrid(fullInfoBO.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, pageHelper);
+////		}
+////		return new DataGrid<>();
+////	}
+////
+////	/**
+////	 * 鑾峰彇浣跨敤鐨勭浉浼兼煡璇㈣鍒�
+////	 *
+////	 * @param fullInfoBO        绫诲叏閮ㄤ俊鎭�
+////	 * @param currentClassifyVO 褰撳墠鐨勫垎绫�
+////	 * @return 瑙勫垯锛屽鏋滀笉瀛樺湪浼氳繑鍥濶ull
+////	 */
+////	@Override
+////	public CodeResembleRuleVO getUseResembleRule(CodeClassifyFullInfoBO fullInfoBO, CodeClassifyVO currentClassifyVO) {
+////		if (currentClassifyVO == null) {
+////			return null;
+////		}
+////		if (currentClassifyVO != null && StringUtils.isNotBlank(currentClassifyVO.getCodeResembleRuleOid())) {
+////			//璇存槑宸茬粡瀛樺湪
+////			return resembleRuleService.getObjectByOid(currentClassifyVO.getCodeResembleRuleOid());
+////		}
+////		if (StringUtils.isBlank(currentClassifyVO.getParentcodeclassifyoid())) {
+////			return null;
+////		}
+////		Map<String, CodeClassifyVO> classifyVOMap = fullInfoBO.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+////		return getUseResembleRule(fullInfoBO, classifyVOMap.getOrDefault(currentClassifyVO.getParentcodeclassifyoid(), null));
+////	}
+////
+////	/**
+////	 * 灏佽鐩镐技椤规煡璇㈢殑鏌ヨ鏉′欢鐨勬槧灏�
+////	 *
+////	 * @param value          鍊�
+////	 * @param resembleRuleVO 鐩镐技椤硅鍒�
+////	 * @param attrId         灞炴�х殑缂栧彿
+////	 * @param conditionMap   鏌ヨ鏉′欢
+////	 */
+////	@Override
+////	public void wrapperResembleConditionMap(String value, CodeResembleRuleVO resembleRuleVO, String attrId, Map<String, String> conditionMap) {
+////		boolean ignoreSpace = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorespaceflag()) || VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+////		if (StringUtils.isBlank(value)) {
+////			//涓虹┖鐨勬椂鍊欏氨涓嶆煡璇㈠畠灏辨槸
+////		} else {
+////			String queryKey = "";
+////			String queryValue = "";
+////			boolean ignoreCase = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorecaseflag());
+////			boolean ignoreWidth = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorewidthflag());
+////			boolean trimAll = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+////			boolean trim = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
+////			String temp = "";
+////			if (ignoreCase && ignoreSpace && ignoreWidth) {
+////				//蹇界暐澶у皬鍐欙紝涓斿幓绌猴紝蹇界暐鍏ㄥ崐瑙�
+////				temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(to_single_byte('%s')) " + (trimAll ? ",' ','')" : ")");
+////			} else if (ignoreCase && ignoreSpace && !ignoreWidth) {
+////				//蹇界暐澶у皬鍐欍�佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+////				temp = (trimAll ? "REPLACE" : "TRIM") + "(UPPER(%s) " + (trimAll ? ",' ','')" : ")");
+////			} else if (ignoreCase && !ignoreSpace && ignoreWidth) {
+////				//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+////				temp = "UPPER(to_single_byte('%s'))";
+////			} else if (!ignoreCase && ignoreSpace && ignoreWidth) {
+////				//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佸拷鐣ュ叏鍗婅
+////				temp = (trimAll ? "REPLACE" : "TRIM") + "(to_single_byte('%s') " + (trimAll ? ",' ','')" : ")");
+////			} else if (ignoreCase && !ignoreSpace && !ignoreWidth) {
+////				//蹇界暐澶у皬鍐欍�佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+////				temp = "UPPER(%s)";
+////			} else if (!ignoreCase && !ignoreCase && ignoreWidth) {
+////				//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佸拷鐣ュ叏鍗婅
+////				temp = "to_single_byte('%s')";
+////			} else if (!ignoreCase && ignoreSpace && !ignoreWidth) {
+////				//涓嶅拷鐣ュぇ灏忓啓銆佸幓绌恒�佷笉蹇界暐鍏ㄥ崐瑙�
+////				temp = (trimAll ? "REPLACE" : "TRIM") + "(%s " + (trimAll ? ",' ','')" : ")");
+////			} else if (!ignoreCase && !ignoreSpace && !ignoreWidth) {
+////				//涓嶅拷鐣ュぇ灏忓啓銆佷笉鍘荤┖銆佷笉蹇界暐鍏ㄥ崐瑙�
+////				temp = "%s";
+////			}
+////			if (StringUtils.isNotBlank(resembleRuleVO.getLinkCharacter())) {
+////				List<String> chars = VciBaseUtil.str2List(resembleRuleVO.getLinkCharacter());
+////				for (int i = 0; i < chars.size(); i++) {
+////					String s = chars.get(i);
+////					temp = "replace(" + temp + ",'" + s + "','')";
+////				}
+////			}
+////			queryValue = String.format(temp, (trim ? value.trim() : value));
+////			temp = temp.replace("to_single_byte('%s')","to_single_byte(%s)");
+////			queryKey = String.format(temp, "t."+attrId);
+////			conditionMap.put(queryKey, QueryOptionConstant.OR + queryValue);
+////		}
+////	}
+////
+////
+////	/**
+////	 * 鏌ヨ缂栫爜鏁版嵁鐨勫垪琛�
+////	 *
+////	 * @param btmType      涓氬姟绫诲瀷
+////	 * @param templateVO   妯℃澘鐨勫璞★紝闇�瑕佸寘鍚ā鏉跨殑灞炴��
+////	 * @param conditionMap 鏌ヨ鏉′欢
+////	 * @param pageHelper   鍒嗛〉瀵硅薄
+////	 * @return 鏁版嵁鍒楄〃
+////	 */
+////	@Override
+////	public DataGrid<Map<String, String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
+////		CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmType, templateVO, conditionMap, pageHelper);
+//////		List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+////		List<Map> maps = commonsMapper.selectBySql(sqlBO.getSqlHasPage());
+////		DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
+////		List<Map<String, String>> dataList = new ArrayList<>();
+////		if (!CollectionUtils.isEmpty(maps)) {
+////			maps.stream().forEach(map -> {
+////				Map<String, String> data = new HashMap<>();
+////				map.forEach((key, value) -> {
+////					data.put(((String) key).toLowerCase(Locale.ROOT), (String) value);
+////				});
+////				dataList.add(data);
+////			});
+////		}
+////		dataGrid.setData(dataList);
+////		if (!CollectionUtils.isEmpty(dataList)) {
+////			wrapperData(dataGrid.getData(), templateVO, sqlBO.getSelectFieldList(), false);
+////			dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString()););
+////		}
+////		return dataGrid;
+////	}
+////
+////
+////	/**
+////	 * 灏佽鏌ヨ鍑烘潵鐨勬暟鎹�
+////	 *
+////	 * @param dataMap              鏁版嵁鐨勬槧灏�
+////	 * @param templateVO           妯℃澘鐨勫睘鎬�
+////	 * @param onlySelectAttrIdList 浠呬粎鏌ヨ鐨勫睘鎬у瓧娈�
+////	 * @param form 琛ㄥ崟閲屼娇鐢�
+////	 */
+////	@Override
+////	public void wrapperData(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO,
+////							Collection<String> onlySelectAttrIdList, boolean form) {
+////		if (onlySelectAttrIdList == null) {
+////			onlySelectAttrIdList = new ArrayList<>();
+////		}
+////		//鍏堣浆鎹竴涓嬫椂闂存牸寮�
+////		List<String> finalOnlySelectAttrIdList = onlySelectAttrIdList.stream().collect(Collectors.toList());
+////		List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
+////			s -> StringUtils.isNotBlank(s.getCodeDateFormat()) &&
+////				(finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
+////		).collect(Collectors.toList());
+////		//鏋氫妇鐨勫唴瀹�
+////		List<CodeClassifyTemplateAttrVO> enumAttrVOs = templateVO.getAttributes().stream().filter(
+////			s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString()))
+////				&&
+////				(finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
+////		).collect(Collectors.toList());
+////
+////		List<String> userIds = new ArrayList<>();
+////		dataMap.stream().forEach(data -> {
+////			//澶勭悊鏃堕棿
+////			if (!form) {
+////				//琛ㄥ崟鐨勬椂鍊欏彧鑳界敤缁熶竴鐨勬椂闂存牸寮�
+////				wrapperDateFormat(dateFormatAttrVOs, data);
+////			}
+////			//澶勭悊鏋氫妇
+////			wrapperEnum(enumAttrVOs, data);
+////			String lcstatus = data.get(VciQueryWrapperForDO.LC_STATUS_FIELD);
+////			String copyFromVersion = data.getOrDefault(COPY_FROM_VERSION,"");
+////			if ((CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus) || CodeDefaultLC.AUDITING.getValue().equalsIgnoreCase(lcstatus))
+////				&& StringUtils.isBlank(copyFromVersion)
+////			) {
+////				data.put(VciQueryWrapperForDO.ID_FIELD, "******");
+////			}
+////			data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), CodeDefaultLC.getTextByValue(lcstatus));
+////			if(CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus)
+////				&& StringUtils.isNotBlank(copyFromVersion)){
+////				data.put(VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT), "淇敼涓�");
+////			}
+////			if (data.containsKey("creator")) {
+////				userIds.add(data.get("creator"));
+////			}
+////			if (data.containsKey("lastmodifier")) {
+////				userIds.add(data.get("lastmodifier"));
+////			}
+////		});
+////		if (!CollectionUtils.isEmpty(userIds)) {
+////			Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////			dataMap.stream().forEach(data -> {
+////				String creator = data.getOrDefault("creator", null);
+////				if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) {
+////					data.put("creator", creator + "(" + userVOMap.get(creator.toLowerCase(Locale.ROOT)).getName() + ")");
+////				}
+////				String lastmodifier = data.getOrDefault("lastmodifier", null);
+////				if (StringUtils.isNotBlank(lastmodifier) && userVOMap.containsKey(lastmodifier.toLowerCase(Locale.ROOT))) {
+////					data.put("lastmodifier", lastmodifier + "(" + userVOMap.get(lastmodifier.toLowerCase(Locale.ROOT)).getName() + ")");
+////				}
+////			});
+////		}
+////	}
+////
+////
+////	/**
+////	 * 澶勭悊鏃堕棿鏍煎紡
+////	 *
+////	 * @param dateFormatAttrVOs 鏃堕棿鏍煎紡鐨勫睘鎬�
+////	 * @param data              褰撳墠琛屾暟鎹�
+////	 */
+////	private void wrapperDateFormat(Collection<CodeClassifyTemplateAttrVO> dateFormatAttrVOs, Map<String, String> data) {
+////		if (!CollectionUtils.isEmpty(dateFormatAttrVOs)) {
+////			dateFormatAttrVOs.stream().forEach(dateFormatAttrVO -> {
+////				String attrId = dateFormatAttrVO.getId().toLowerCase(Locale.ROOT);
+////				String oldValue = data.getOrDefault(attrId, null);
+////				if (StringUtils.isNotBlank(oldValue)) {
+////					DateConverter dateConverter = new DateConverter();
+////					try {
+////						dateConverter.setAsText(oldValue);
+////						Date value = dateConverter.getValue();
+////						if (value != null) {
+////							data.put(attrId, VciDateUtil.date2Str(value, dateFormatAttrVO.getCodeDateFormat()));
+////						}
+////					} catch (Throwable e) {
+////						//杞崲鍙兘鏈夐棶棰橈紝杩欏氨浣跨敤鍘熸湰瀛樺偍鐨勫��
+////					}
+////				}
+////			});
+////		}
+////	}
+////
+////
+////	/**
+////	 * 澶勭悊鏋氫妇鐨勫唴瀹癸紝濡傛灉涓嶅湪鏋氫妇涓紝浼氳繑鍥炲師鏈殑鍊�
+////	 *
+////	 * @param enumAttrVOs 鏋氫妇灞炴��
+////	 * @param data        褰撳墠琛屾暟鎹�
+////	 */
+////	private void wrapperEnum(Collection<CodeClassifyTemplateAttrVO> enumAttrVOs, Map<String, String> data) {
+////		//澶勭悊鏋氫妇鐨勫唴瀹癸紝涓轰簡鍏煎浠ュ墠鐨勬暟鎹�,濡傛灉鏁版嵁涓嶈兘浣跨敤鏋氫妇杞崲鐨勮瘽锛岄偅杩樻槸鏄剧ず浠ュ墠鐨勫��
+////		if (!CollectionUtils.isEmpty(enumAttrVOs)) {
+////			enumAttrVOs.stream().forEach(enumAttrVO -> {
+////				String attrId = enumAttrVO.getId().toLowerCase(Locale.ROOT);
+////				String oldValue = data.getOrDefault(attrId, null);
+////				if (StringUtils.isNotBlank(oldValue)) {
+////					List<KeyValue> comboxKVs = listComboboxItems(enumAttrVO);
+////					String newValue = oldValue;
+////					KeyValue keyValue = Optional.ofNullable(comboxKVs).orElseGet(() -> new ArrayList<>()).stream().filter(s -> s.getKey().equalsIgnoreCase(oldValue)).findFirst().orElseGet(() -> null);
+////					if (keyValue != null) {
+////						newValue = keyValue.getValue();
+////					}
+////					data.put(attrId + "Text", newValue);
+////				}
+////			});
+////		}
+////	}
+////
+////
+////	/**
+////	 * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
+////	 *
+////	 * @param btmType      涓氬姟绫诲瀷
+////	 * @param templateVO   妯℃澘鏄剧ず瀵硅薄锛屽繀椤诲寘鍚睘鎬�
+////	 * @param conditionMap 鏌ヨ鏉′欢
+////	 * @param pageHelper   鍒嗛〉鍜屾帓搴忓璞�
+////	 * @return sql鐨勭浉鍏充俊鎭�
+////	 */
+////	@Override
+////	public CodeTemplateAttrSqlBO getSqlByTemplateVO(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) {
+////		//鍥犱负鍙傜収涓嶄竴瀹氭槸鍦ㄥ钩鍙扮殑灞炴�ф睜閲岄潰璁剧疆锛屾墍浠ユ垜浠緱闇�瑕佽嚜琛屽鐞�
+////		//鍙傝�僔ciQueryWrapper鏉ュ鐞�
+////		//1. 鎵惧埌鎵�鏈夌殑瀛楁锛�
+////		Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+////		List<String> selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList());
+////
+////		//鎵�鏈夌殑鍙傜収鐨勫瓧娈�
+////		Map<String/**灞炴�у瓧娈�**/, String> joinTableList = new ConcurrentHashMap<>();
+////		List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
+////			s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())
+////		).collect(Collectors.toList());
+////		Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫瓧娈�**/> referFieldMap = new HashMap<>();
+////		if (!CollectionUtils.isEmpty(referAttrVOs)) {
+////			referAttrVOs.parallelStream().forEach(attrVO -> {
+////				UIFormReferVO referVO = null;
+////				if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
+////					referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class);
+////				} else {
+////					referVO = new UIFormReferVO();
+////					referVO.setReferType(attrVO.getReferBtmId());
+////					referVO.setValueField(VciQueryWrapperForDO.OID_FIELD);
+////					referVO.setTextField("name");
+////				}
+////
+////				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+////				String referTableNick = attrVO.getId() + "0";
+////				String left = " left join " + referTable + " " + referTableNick + " on " + referTableNick + "." + referVO.getValueField() + " =  t." + attrVO.getId();
+////				joinTableList.put(attrVO.getId(), left);
+////				String referShowField = attrVO.getId() + "Name";
+////				List<String> textFields = VciBaseUtil.str2List(referVO.getTextField());
+////				String showFieldInSource = "";
+////				if (textFields.contains("name")) {
+////					showFieldInSource = "name";
+////				} else {
+////					showFieldInSource = textFields.get(0);
+////				}
+////				referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource);
+////				selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
+////			});
+////		}
+////		Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
+////			if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
+////				selectFieldList.add(attrId);
+////			}
+////		});
+////		if (!selectFieldList.contains(CODE_FIELD)) {
+////			selectFieldList.add(CODE_FIELD);
+////		}
+////		if (!selectFieldList.contains(CODE_CLASSIFY_OID_FIELD)) {
+////			selectFieldList.add(CODE_CLASSIFY_OID_FIELD);
+////		}
+////		if (!selectFieldList.contains(CODE_TEMPLATE_OID_FIELD)) {
+////			selectFieldList.add(CODE_TEMPLATE_OID_FIELD);
+////		}
+////		if (!selectFieldList.contains(CODE_FULL_PATH_FILED)) {
+////			selectFieldList.add(CODE_FULL_PATH_FILED);
+////		}
+////
+////		//澶勭悊鏌ヨ鏉′欢
+////		//TODO 楠岃瘉sql娉ㄥ叆
+////		List<String> andSql = new ArrayList<>();
+////		List<String> orSql = new ArrayList<>();
+////		if (!CollectionUtils.isEmpty(conditionMap)) {
+////			Map<String, String> orConditionMap = new HashMap<>();
+////			Map<String, String> andCondtionMap = new HashMap<>();
+////			//鍏堝垎绂籵r鐨勬煡璇㈡潯浠讹紝鍙﹀褰撴煡璇㈡潯浠舵槸绌虹殑鏃跺�欎篃涓嶆煡璇�
+////			conditionMap.forEach((k, v) -> {
+////				if (StringUtils.isNotBlank(v)) {
+////					if (v.startsWith(QueryOptionConstant.OR)) {
+////						orConditionMap.put(k, v.substring(QueryOptionConstant.OR.length()));
+////					} else {
+////						andCondtionMap.put(k, v);
+////					}
+////				}
+////			});
+////
+////			andCondtionMap.forEach((k, v) -> {
+////				andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+////			});
+////			orConditionMap.forEach((k, v) -> {
+////				orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap));
+////			});
+////		}
+////		//缁勫悎璧锋潵
+////		StringBuilder andSb = new StringBuilder();
+////		andSql.stream().forEach(s -> {
+////			andSb.append(s).append(SPACE).append(QueryOptionConstant.AND).append(SPACE);
+////		});
+////
+////		String andString = andSb.toString().trim();
+////		String endWithSql = QueryOptionConstant.AND;
+////		if (andString.endsWith(endWithSql)) {
+////			andString = andString.substring(0, andString.length() - endWithSql.length());
+////		}
+////
+////		String orString = orSql.stream().collect(Collectors.joining(" or "));
+////		String whereSql = "";
+////		if (StringUtils.isNotBlank(orString)) {
+////			if (StringUtils.isBlank(andString)) {
+////				andString = " 1 = 1 ";
+////			}
+////			whereSql = SPACE + "(" + SPACE + andString + SPACE + ") and (" + SPACE + orString + SPACE + ")" + SPACE;
+////		} else {
+////			whereSql = andString + SPACE;
+////		}
+////		if (attrVOMap.keySet().contains("secretgrade")) {
+////			Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+////			if (userSecret == null || userSecret == 0) {
+////				userSecret = secretService.getMinUserSecret();
+////			}
+////			whereSql += " and ( t.secretGrade <= " + userSecret + ") ";
+////		}
+////		String tableName = VciBaseUtil.getTableName(btmType);
+////		String sql = "select " + selectFieldList.stream().map(s -> (s.contains(".") ? s : ("t." + s))).collect(Collectors.joining(","))
+////			+ " from " + tableName + SPACE + "t" + SPACE
+////			+ joinTableList.values().stream().collect(Collectors.joining(SPACE))
+////			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+////		if (pageHelper == null) {
+////			pageHelper = new PageHelper(-1);
+////		}
+////		//鐪嬬湅鎺掑簭
+////		String orderSql = pageHelper.getOrderSql("t");
+////		sql += (orderSql == null ? "" : orderSql);
+////		String whereSubfixForPage = " ) A where rownum < " + (pageHelper.getLimit() * pageHelper.getPage() + 1) + ") where RN >= "
+////			+ (pageHelper.getLimit() * (pageHelper.getPage() - 1) + 1);
+////		String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
+////		String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
+////			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+////		CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
+////		sqlBO.setTableName(tableName);
+////		sqlBO.setJoinTable(joinTableList);
+////		sqlBO.setNickName("t");
+//////		sqlBO.setPageHelper(pageHelper);
+////		sqlBO.setSqlHasPage(sqlHasPage);
+////		sqlBO.setSqlCount(sqlCount);
+////		sqlBO.setSqlUnPage(sql);
+////		return sqlBO;
+////	}
+////
+////
+////	/**
+////	 * 缁勫悎鏌ヨ鏉′欢鐨剆ql
+////	 *
+////	 * @param key           瀛楁
+////	 * @param value         鍚嶅瓧
+////	 * @param referFieldMap 鍙傜収鐨勫瓧娈�
+////	 * @param attrVOMap     灞炴�х殑鏄犲皠
+////	 * @return Sql璇彞
+////	 */
+////	private String getConditionSql(String key, String value, Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫睘鎬�**/> referFieldMap, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+////		if (key.endsWith("_begin")) {
+////			//璇存槑鏄�>=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
+////			String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
+////			if (referFieldMap.containsKey(field)) {
+////				//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+////				return referFieldMap.get(field) + SPACE + " >= '" + value + "'" + SPACE;
+////			} else {
+////				return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap);
+////			}
+////		} else if (key.endsWith("_end")) {
+////			//璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
+////			String field = (key.substring(0, key.length() - 6).toLowerCase().trim());
+////			if (referFieldMap.containsKey(field)) {
+////				//璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
+////				return referFieldMap.get(field) + SPACE + " <= '" + value + "'" + SPACE;
+////			} else {
+////				return (field.contains(".") ? "" : "t.") + field + SPACE + " <= " + getStringValueInWhere(field, value, attrVOMap);
+////			}
+////		} else {
+////			if (referFieldMap.containsKey(key)) {
+////				//璇存槑鏄弬鐓х殑锛屾垜浠弬鐓х殑鏌ヨ閮借涓烘槸瀛楃涓诧紝濡傛灉鏄椂闂存牸寮忕殑鏌ヨ鑲畾鏈夐棶棰橈紝
+////				String selectKey = referFieldMap.get(key);
+////				return getSqlByValue(selectKey, value, null);
+////			} else {
+////				return getSqlByValue(key, value, attrVOMap);
+////			}
+////		}
+////
+////	}
+////
+////	/**
+////	 * 鑾峰彇鏌ヨ鏉′欢涓殑鍊肩殑锛屽鐞嗕笉鍚岀殑绫诲瀷
+////	 *
+////	 * @param value 鍊�
+////	 * @param field 瀛楁鍚嶇О
+////	 * @return 鏃ユ湡鎴栬�呮椂闂存牸寮忎細鍖呮嫭to_date锛屽瓧绗︿覆浼氬姞'
+////	 */
+////	private String getStringValueInWhere(String field, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+////		if ((field.contains(".") && !field.toLowerCase(Locale.ROOT).startsWith("t.")) || attrVOMap == null
+////			|| !field.replace("t.", "").matches(RegExpConstant.LETTER) || value.startsWith(ONLY)) {
+////			//璇存槑鍙兘鏄寚瀹氱殑鏌愪釜鏉′欢锛岀洿鎺ヨ繑鍥�
+////			if (value.startsWith(ONLY)) {
+////				value = value.replace(ONLY, "");
+////			}
+////			if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
+////				return value;
+////			}
+////			if (field.contains(".") && attrVOMap != null && attrVOMap.containsKey(field.split("\\.")[0].toLowerCase(Locale.ROOT))) {
+////				//鏄弬鐓�
+////				return "'" + value + "'";
+////			} else {
+////				return value;
+////			}
+////		} else {
+////			//鐪嬬湅鏄笉鏄繖涓璞¢噷鐨勫睘鎬�
+////			if (attrVOMap.containsKey(field)) {
+////				VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.valueOf(attrVOMap.get(field).getAttributeDataType());
+////				if ("ts".equalsIgnoreCase(field)) {
+////					return "to_timestamp('" + value + "', '" + DATETIME_FORMAT + ".ff')";
+////				}
+////				DateConverter dateConverter = new DateConverter();
+////				if (VciFieldTypeEnum.VTDateTime.equals(fieldTypeEnum)) {
+////					//瀹為檯涓婏紝鏁版嵁搴撻兘鏄痶imestamp鐨勭被鍨�.
+////					dateConverter.setAsText(value);
+////					return "to_date('" + dateConverter.getAsText(VciDateUtil.DateTimeFormat) + "','" + DATETIME_FORMAT + "')";
+////				} else if (VciFieldTypeEnum.VTDate.equals(fieldTypeEnum)) {
+////					dateConverter.setAsText(value);
+////					return "to_date('" + dateConverter.getAsText(VciDateUtil.DateFormat) + "','" + DATE_FORMAT + "')";
+////				} else if (VciFieldTypeEnum.VTDouble.equals(fieldTypeEnum)
+////					|| VciFieldTypeEnum.VTLong.equals(fieldTypeEnum)
+////					|| VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) {
+////					return value;
+////				} else {
+////					return "'" + value + "'";
+////				}
+////			} else {
+////				if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
+////					return value;
+////				}
+////				return "'" + value + "'";
+////			}
+////		}
+////
+////	}
+////
+////	/**
+////	 * 灏佽鏈�缁堢殑sql璇彞涓殑鍊奸儴鍒�
+////	 *
+////	 * @param selectKey 鏌ヨ鐨勫瓧娈�
+////	 * @param value     鍊�
+////	 * @param attrVOMap 灞炴�х殑鏄剧ず瀵硅薄鏄犲皠
+////	 * @return sql閲岀殑鍊�
+////	 */
+////	private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
+////		StringBuilder sql = new StringBuilder();
+////		if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
+////			sql.append("t.");
+////		}
+////		if (value.startsWith(QueryOptionConstant.IN)) {
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append("in")
+////				.append(SPACE)
+////				.append("(")
+////				.append(value.replace(QueryOptionConstant.IN, ""))
+////				.append(")");
+////		} else if (value.startsWith(QueryOptionConstant.NOTIN)) {
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append("not in")
+////				.append(SPACE)
+////				.append("(")
+////				.append(value.replace(QueryOptionConstant.NOTIN, ""))
+////				.append(")");
+////		} else if (value.startsWith(QueryOptionConstant.NOTEQUAL)) {
+////			value = value.replace(QueryOptionConstant.NOTEQUAL, "");
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.NOTEQUAL)
+////				.append(SPACE)
+////				.append(value);
+////		} else if (value.startsWith(QueryOptionConstant.MORETHAN)) {
+////			value = value.replace(QueryOptionConstant.MORETHAN, "");
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.MORETHAN)
+////				.append(SPACE)
+////				.append(value);
+////		} else if (value.startsWith(QueryOptionConstant.MORE)) {
+////			value = value.replace(QueryOptionConstant.MORE, "");
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.MORE)
+////				.append(SPACE)
+////				.append(value);
+////		} else if (value.startsWith(QueryOptionConstant.LESSTHAN)) {
+////			value = value.replace(QueryOptionConstant.LESSTHAN, "");
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.LESSTHAN)
+////				.append(SPACE)
+////				.append(value);
+////		} else if (value.startsWith(QueryOptionConstant.LESS)) {
+////			value = value.replace(QueryOptionConstant.LESS, "");
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.LESS)
+////				.append(SPACE)
+////				.append(value);
+////		} else if (value.startsWith(QueryOptionConstant.ISNOTNULL)) {
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(" is not null");
+////		} else if (value.startsWith(QueryOptionConstant.ISNULL)) {
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(" is null");
+////		} else if (value.contains("*")) {
+////			//璇存槑鏄痩ike锛屾垨鑰卨efe like ,right like
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append("like")
+////				.append(SPACE)
+////				//   .append("'")
+////				.append(value.replace("*", "%"))
+////				//  .append("'")
+////				.append(SPACE);
+////		} else {
+////			value= value.replace(SPECIAL_CHAR,REQUIRED_CHAR);
+////			value = getStringValueInWhere(selectKey, value, attrVOMap);
+////
+////			sql.append(selectKey)
+////				.append(SPACE)
+////				.append(QueryOptionConstant.EQUAL)
+////				.append(SPACE)
+////				.append(value);
+////		}
+////		sql.append(SPACE);
+////		return sql.toString();
+////	}
+////
+////	/**
+////	 * 淇敼涓婚搴撴暟鎹�
+////	 *
+////	 * @param orderDTO 鏁版嵁鐨勫唴瀹癸紝涓嶇敤鍖呭惈鐮佹鐨勫唴瀹逛簡
+////	 */
+////	@Override
+////	public void editSaveCode(CodeOrderDTO orderDTO) {
+////		VciBaseUtil.alertNotNull(orderDTO, "缂栫爜鐢宠鐩稿叧鐨勫睘鎬х殑鍐呭閮戒负绌�", orderDTO.getOid(), "鏁版嵁涓婚敭",
+////			orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
+//////		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+////		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+////		//鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
+//////		List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getOid()));
+////
+////		QueryWrapper<CodeOsbtmtypeEntity> btmWrapper = new QueryWrapper<>();
+////		btmWrapper.eq("OID",orderDTO.getOid());
+////		CodeWupinEntity cbo = codeOsbtmtypeMapper.selectOne(btmWrapper);
+////
+//////		CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+//////		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
+////
+////		if (cbo != null) {
+////			throw new VciBaseException(DATA_OID_NOT_EXIST);
+////		}
+//////		ClientBusinessObject cbo = cbos.get(0);
+////		if (!cbo.getTs().toString().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
+////			throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+////		}
+////		if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
+////			throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
+////		}
+////
+////		//娉ㄦ剰妯℃澘涓嶈兘浣跨敤鏁版嵁瀛樺偍鐨勬椂鍊欑殑妯℃澘锛屽洜涓哄彲鑳戒細鍙樺寲
+////
+////		//1. 鍒ゆ柇蹇呰緭椤�
+////		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+////		checkRequiredAttrOnOrder(templateVO, orderDTO);
+////		//2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+////		switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
+////		//3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+////		switchComponentAttrOnOrder(templateVO, orderDTO);
+////		//4.鏍¢獙瑙勫垯
+////		checkVerifyOnOrder(templateVO, orderDTO);
+////		//5.鍒ゆ柇鍏抽敭灞炴��
+////		checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
+////		//6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+////		checkEnumOnOrder(templateVO, orderDTO);
+////		//7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+////		switchDateAttrOnOrder(templateVO, orderDTO);
+////		//榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+////		copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
+////		//浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+////		cbo.setDescription(orderDTO.getDescription());
+////		cbo.setName(orderDTO.getName());
+////		try {
+////			cbo.setDescription(orderDTO.getDescription());
+////			cbo.setName(orderDTO.getName());
+////////			cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+//////			cbo.setAttributeValue("name", orderDTO.getName());
+////		} catch (Exception e) {
+////			e.printStackTrace();
+////		}
+////
+////
+////		List<CodeWupinEntity> cboList = new ArrayList<>();
+////
+////		//澶囨敞
+////		cbo.setDescription(orderDTO.getDescription());
 ////		cboList.add(cbo);
-//		List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
+//////
+//////		cboList.add(cbo);
+////		List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
+////
+////
+////		List<String> charList = new ArrayList<>();
+////		for (CodeWupinEntity wupinEntity : cboList) {
+////			charList.add(wupinEntity.getId());
+////		}
+////		batchSaveSelectChar(templateVO, charList);
+////		return codeList.size() > 0 ? codeList.get(0) : "";
+////
+////
+////
+////
+////		//淇敼鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
+//////		BatchCBO batchCBO = new BatchCBO();
+//////		batchCBO.getUpdateCbos().add(cbo);
+//////		List<ClientBusinessObject> cboList = new ArrayList<>();
+//////		cboList.add(cbo);
+//////		boService.persistenceBatch(batchCBO);
+////		batchSaveSelectChar(templateVO, cboList);
+////	}
 //
-//
-//		List<String> charList = new ArrayList<>();
-//		for (CodeWupinEntity wupinEntity : cboList) {
-//			charList.add(wupinEntity.getId());
-//		}
-//		batchSaveSelectChar(templateVO, charList);
-//		return codeList.size() > 0 ? codeList.get(0) : "";
-//
-//
-//
-//
-//		//淇敼鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
-////		BatchCBO batchCBO = new BatchCBO();
-////		batchCBO.getUpdateCbos().add(cbo);
-////		List<ClientBusinessObject> cboList = new ArrayList<>();
-////		cboList.add(cbo);
-////		boService.persistenceBatch(batchCBO);
-//		batchSaveSelectChar(templateVO, cboList);
-//	}
-
-}
+//}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
index e69de29..402f6bb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -0,0 +1,534 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
+import com.vci.ubcs.code.dto.CodeOrderDTO;
+import com.vci.ubcs.code.dto.CodeOrderSecDTO;
+import com.vci.ubcs.code.entity.CodeBasicSec;
+import com.vci.ubcs.code.entity.CodeClassify;
+import com.vci.ubcs.code.entity.DockingLog;
+import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
+import com.vci.ubcs.code.service.*;
+import com.vci.ubcs.code.util.gennerAttrMapUtil;
+import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.code.vo.webserviceModel.apply.*;
+import com.vci.ubcs.code.vo.webserviceModel.attrmap.*;
+import com.vci.ubcs.code.vo.webserviceModel.result.json.*;
+import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultClassfyVO;
+import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO;
+import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultSystemVO;
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.webservice.annotation.VciWebservice;
+import com.vci.ubcs.webservice.config.AttributeMapConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import javax.jws.WebService;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
+
+/***
+ * 缁熶竴鎺ュ彛
+ */
+@Service
+@Slf4j
+@VciWebservice(path = "/universalInterface")
+public class UniversalInterfaceImpl<IDockingLogeServiceing> implements UniversalInterfaceI {
+
+	/**
+	 * 鏃ュ織
+	 */
+	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	@Autowired(required = false)
+	private AttributeMapConfig attributeMapConfig;
+	/**
+	 * 缂撳瓨鏈嶅姟
+	 */
+	//@Autowired
+	//private RedisService redisService;
+	/**
+	 * 涓婚搴撳垎绫荤殑鏈嶅姟
+	 */
+	@Autowired(required = false)
+	private ICodeClassifyService classifyService;
+	/**
+	 * 涓绘暟鎹紩鎿庣殑鏈嶅姟
+	 */
+	//@Resource
+	//private MdmEngineService engineService;
+
+	/**
+	 * 瀵嗙骇鐨勬湇鍔�
+	 */
+
+	@Resource
+	private MdmIOService mdmIOService;
+	/***
+	 * 闆嗘垚鎺ュ彛鏃ュ織鏈嶅姟鐨勯厤缃�
+	 */
+	@Resource
+	private IDockingLogeService dockingLogeService;
+
+	private  static String separator="##VCI##";
+	private  String errorid="0";
+	private String msg="鎴愬姛";
+	private  String objerrorCode="0";
+	private String objerrorMsg="鎴愬姛";
+	/***
+	 * 鐢宠缂栫爜鎺ュ彛
+	 * @param data 浼犻�掔殑鏁版嵁鍙傛暟
+	 * @param dataType 鏍囪瘑data鏄痻ml鏍煎紡杩樻槸json鏍煎紡锛屾帴鍙h繑鍥炴暟鎹篃鏄寜鐓ц繖涓牸寮忥紝浠ヤ笅鎺ュ彛绫诲悓
+	 * @return
+	 * @throws Throwable
+	 */
+	@Override
+	public String applyCode(String data, String dataType) throws Throwable {
+		{
+//			String resultStr = "";
+//			String errorid="0";
+//			msg="鎴愬姛";
+//			objerrorCode="0";
+//			objerrorMsg="鎴愬姛";
+//			logger.info("鐢宠缂栫爜鐨勬暟鎹弬鏁�:->"+data);
+//			logger.info("鐢宠缂栫爜鐨勬暟鎹被鍨�:->"+dataType);
+//			String systemId="";
+//			List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
+//			try {
+//				if(StringUtils.isBlank(data)) {
+//					errorid="101";
+//					throw new Throwable("鎺ュ彛鍙傛暟锛氫紶閫掍负绌�");
+//				}
+//				InterParameterVO interParameterVO  =new InterParameterVO();
+//				//濡傛灉dataType鏄痻ml鍒欙紝閫氳繃xml搴忓垪鍖栨垚瀵硅薄褰㈠紡锛屽鏋滄槸json鍒欓�氳繃json杞崲鎴愬璞℃牸寮�
+//				try {
+//					if ("xml".equals(dataType)) {
+//						XStream xStream = new XStream(new DomDriver());
+//						xStream.processAnnotations(RootDataVO.class);
+//						xStream.autodetectAnnotations(true);
+//						RootDataVO rootDataVO = (RootDataVO) xStream.fromXML(data);
+//						interParameterVO.setData(rootDataVO);
+//					} else {
+//						interParameterVO = JSONObject.toJavaObject(JSONObject.parseObject(data), InterParameterVO.class);
+//					}
+//				}catch (Throwable e){
+//					errorid="101";
+//					throw new Throwable("鎺ュ彛鍙傛暟锛氫紶鍏ユ暟鎹弬鏁拌В鏋愬け璐�");
+//				}
+//				ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
+//				systemId = interParameterVO.getData().getSystemId();
+//				UserVO userVo = interParameterVO.getData().getUser();
+//				List<ClassfyVO> classVOList = classfysVO.getClassify();
+//				InterParameterVO finalInterParameterVO = interParameterVO;
+//
+//				//杩欐槸璐﹀彿淇℃伅
+//				SessionInfo sessionInfo = new SessionInfo();
+//				sessionInfo.setUserId(userVo.getUserName());
+//				sessionInfo.setUserName(userVo.getTrueName());
+//				sessionInfo.setIp(userVo.getIp());
+//				VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+//
+//				String finalSystemId = systemId;
+//				classVOList.stream().forEach(classVO -> {
+//					logger.info("鍙傛暟锛氬垎绫籆Ode:" + classVO.getClassCode());
+//					LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
+//					//鑾峰彇鍒嗙被淇℃伅
+//					try {
+//						String libray = classVO.getLibrary();
+//						CodeClassifyVO codeClassifyVO = getClassfy(classVO);
+//						logger.info("end锛氬垎绫绘煡璇㈠畬姣�");
+//						//鑾峰彇鍒嗙被妯℃澘淇℃伅
+//						if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
+//							objerrorCode="100";
+//							throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧埌鍒嗙被淇℃伅");
+//						}
+//						CodeClstemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+//						if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
+//							objerrorCode="1";
+//							throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙朚DM绯荤粺涓搴旀ā鏉�");
+//						}
+//						logger.info("end锛氭ā鏉挎煡璇㈠畬姣�");
+//						ApplyDatasVO applyDatasVO = classVO.getObjects();
+//						DataObjectVO dataObjectVO = new DataObjectVO();
+//						List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
+//						).collect(Collectors.toList());
+//						this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
+//						logger.info("end锛氭暟鎹粍缁囧畬姣�");
+//						//瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
+//						CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
+//						if(classifyFullInfo==null ||classifyFullInfo.getCurrentClassifyVO()==null || StringUtils.isBlank(classifyFullInfo.getCurrentClassifyVO().getOid())){
+//							objerrorCode="1";
+//							logger.info("classifyFullInfo:"+"鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧垎绫荤浉鍏充俊鎭�");
+//							throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙栧垎绫荤浉鍏充俊鎭�");
+//						}
+//						CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
+//						if(ruleVO==null|| StringUtils.isBlank(ruleVO.getOid())){
+//							objerrorCode="102";
+//							throw  new  Throwable ("鏍规嵁浼犺緭鐨勫垎绫伙紝鏈幏鍙朚DM绯荤粺涓搴旇鍒�");
+//						}
+//						logger.info("end锛氳鍒欒幏鍙栧畬姣�");
+//						List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(classVO.getSections().getSection(), ruleVO);
+//						logger.info("end锛氱爜娈佃幏鍙栧畬姣�");
+//						CodeOrderDTO orderDTO = new CodeOrderDTO();
+//						orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
+//						orderDTO.setSecDTOList(codeOrderSecDTOList);//鍒嗙被鐮佹
+//						mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs);
+//						logger.info("end锛氱敵璇疯幏鍙栧畬姣�");
+//					} catch (Throwable e) {
+//						XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+//						xmlResultDataObjectDetailDO.setCode("");
+//						xmlResultDataObjectDetailDO.setId("");
+//						xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
+//						xmlResultDataObjectDetailDO.setMsg("缂栫爜鐢宠澶辫触:"+e.getMessage());
+//						resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+//						e.printStackTrace();
+//					}finally {
+//						XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
+//						resultClassfyVO.setClassCode(classVO.getClassCode());
+//						resultClassfyVO.setLibrary(classVO.getLibrary());
+//						resultClassfyVO.setFullclsfNamePath(classVO.getFullclsfNamePath());
+//						resultClassfyVO.setObjects(resultDataObjectDetailDOs);
+//						resultClassfyVOList.add(resultClassfyVO);
+//					}
+//				});
+//				XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
+//				xmlResultSystemVO.setClassifys(resultClassfyVOList);
+//				xmlResultSystemVO.setMsg(msg);
+//				xmlResultSystemVO.setErrorid(errorid);
+//				resultStr= transferResultXMl(xmlResultSystemVO,dataType);
+//			}catch (Throwable e){
+//				e.printStackTrace();;
+//				msg="鐢宠缂栫爜澶辫触:"+e.getMessage();
+//			}finally {
+//				XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
+//				xmlResultSystemVO.setClassifys(resultClassfyVOList);
+//				xmlResultSystemVO.setMsg(msg);
+//				xmlResultSystemVO.setErrorid(errorid);
+//				resultStr= transferResultXMl(xmlResultSystemVO,dataType);
+//				final boolean[] issucess = {true};
+//				if(!errorid.equals("0")) {
+//					issucess[0] = false;
+//				}else {
+//					if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
+//						resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> {
+//							xMLResultClassfyVO.getObjects().stream().forEach(objec -> {
+//								if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) {
+//									issucess[0] = false;
+//									msg=objec.getMsg();
+//								}
+//							});
+//						});
+//					}
+//
+//				}
+//				try {
+//					//璁板綍鏃ュ織
+//					this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCode");
+//				}catch (Throwable e){
+//					e.printStackTrace();
+//				}
+//			}
+//			logger.info("杩斿洖鍙傛暟:"+resultStr);
+
+			return "";
+		}
+	}
+
+	/***
+	 * 缁熶竴鏇存柊鎺ュ彛锛堟洿鏀圭姸鎬侊紝鏇存敼灞炴�т俊鎭級鎺ュ彛
+	 * @param data
+	 * @param dataType
+	 * @return
+	 * @throws Throwable
+	 */
+	@Override
+	public String syncEditData(String data, String dataType) throws Throwable {
+
+		return null;
+	}
+
+	/***
+	 * 鍒嗙被鏌ヨ
+	 * @param data
+	 * @param dataType
+	 * @return
+	 * @throws Throwable
+	 */
+	@Override
+	public String queryClassify(String data, String dataType) throws Throwable {
+		return null;
+	}
+
+	/***
+	 * 鏁版嵁鏌ヨ
+	 * @param data
+	 * @param dataType
+	 * @return
+	 * @throws Throwable
+	 */
+	@Override
+	public String queryData(String data, String dataType) throws Throwable {
+		return null;
+	}
+
+	@Override
+	public String queryClassifyRule(String data, String datatype) throws Throwable {
+		return null;
+	}
+
+	/***
+	 * 鏌ヨ鏍¢獙鍒嗙被淇℃伅
+	 * @param classfyVO
+	 */
+	private  CodeClassifyVO getClassfy(ClassfyVO classfyVO) throws Throwable{
+		CodeClassifyVO classifyVO = new CodeClassifyVO();
+		try {
+			String classCode = classfyVO.getClassCode();
+			String className = classfyVO.getFullclsfNamePath();
+			//鏍规嵁鍒嗙被浠e彿鏌ヨ鍒嗙被淇℃伅
+			if (StringUtils.isNotBlank(classfyVO.getClassCode())) {
+				Map<String, String> conditionMap = new HashMap<>();
+				List<CodeClassify> codeClassifyList = classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getId, classCode));
+				if (!CollectionUtils.isEmpty(codeClassifyList)) {
+					CodeClassify classifyDO = codeClassifyList.get(0);
+					//灏咲TO杞崲涓篋O
+					classifyVO = new CodeClassifyVO();
+					BeanUtilForVCI.copyPropertiesIgnoreCase(classifyDO, classifyVO);
+					if(StringUtils.isBlank(classifyVO.getOid())){
+						throw new  Throwable("鏍规嵁鍒嗙被浠e彿鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+					}
+				}else{
+					throw new  Throwable("鏍规嵁鍒嗙被浠e彿鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+				}
+			} else {
+				//classifyVO = classifyService.getObjectByClsfNamePath(className.replace(separator, "/"));
+				//if(StringUtils.isBlank(classifyVO.getOid())){
+				//	throw new  Throwable("鏍规嵁鍒嗙被鍚嶇О璺緞鏈煡璇㈠埌鐩稿簲鐨勫垎绫讳俊鎭�");
+				//}
+			}
+		}catch (Throwable e){
+			objerrorCode="100";
+			new  Throwable("鑾峰彇鍒嗙被淇℃伅澶辫触:"+e.getMessage());
+		}
+		return classifyVO;
+	}
+	/***
+	 * 鏍规嵁绌垮叆鐨勫弬鏁颁俊鎭牎楠岀爜娈佃鍒�
+	 */
+	private List<CodeOrderSecDTO> getRuleCodeOrderSecDTOs(List<SectionVO> SectionVOList,CodeRuleVO ruleVO) throws Throwable{
+		List<CodeBasicSecVO>  codeBasicSecVOS= ruleVO.getSecVOList();
+		Map<String,String> sectionVOMap=new HashMap<>();
+		SectionVOList.stream().forEach(SectionVO->{
+			sectionVOMap.put(SectionVO.getName(),SectionVO.getValue());
+		});
+		List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
+		for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {
+			String sectype = codeBasicSecVO.getSecType();
+			if (!sectype.equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())) {
+				String name = codeBasicSecVO.getName();
+				String sectypeText = codeBasicSecVO.getSecTypeText();
+				logger.info("鐮佹鍚嶇О:"+name);
+				logger.info("鎻忚堪:"+sectypeText);
+				CodeOrderSecDTO CodeOrderSecDTO = new CodeOrderSecDTO();
+				if (sectionVOMap.containsKey(name)) {
+					CodeOrderSecDTO.setSecOid(codeBasicSecVO.getOid());
+					String sectypeValue = sectionVOMap.get(name);
+					logger.info("鐮佹鍊�:"+sectypeValue);
+					CodeOrderSecDTO.setSecValue(sectypeValue);
+					codeOrderSecDTOList.add(CodeOrderSecDTO);
+				} else {
+					objerrorCode="101";
+					throw new Throwable("浼犲叆鐨勭爜娈佃鍒欑己灏�" + name + "鐮佹");
+				}
+			}
+		}
+		return codeOrderSecDTOList;
+	}
+	/***
+	 * 鏍规嵁灞炴�ф槧灏勮浆鎹㈢紪鐮佹墍闇�瀛楁
+	 */
+	public void getConfigDatas(String systemId,String libray, ApplyDatasVO applyDatasVO,List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList,DataObjectVO dataObjectVO) throws Throwable {
+		List<ApplyDataVO> applyDataVOList=applyDatasVO.getObject();
+		LinkedHashMap<String,LinkedHashMap<String,String>> dataKeyValueMap=new LinkedHashMap<>();
+		//濡傛灉灏嗘暟鎹浆鎹㈡垚鎵�闇�瑕佺殑鏁版嵁瀵硅薄
+		Map<String, String> attrMapConfigMap=new HashMap<>();
+		Map<String, String> propMaps=new HashMap<>();
+		try {
+			Map<String, String> stringStringMap=attributeMapConfig.getSystem_attrmap();
+			//stringStringMap.put("RLM","D:\\RLM.xml");
+			LibraryDO libraryDO= gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId,stringStringMap);
+			List<LibraryClsfDO> libraryClsfDOList=libraryDO.getClsf();
+			Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
+			if(libPropMaps.containsKey(libray)){
+				List<ClsfAttrMappingDO> clsfAttrMappingDOList=libPropMaps.get(libray);
+				propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
+			}
+		}catch (Throwable e){
+			objerrorCode="1";
+			throw new Throwable("MDM闆嗘垚灞炴�ч厤缃枃浠惰鍙栧け璐�");
+		}
+		LinkedList<String> rowNameList=new LinkedList<>();
+		LinkedHashMap<String,Integer> filedIndexMap=new LinkedHashMap<>();
+		//鏍规嵁鍒嗙被妯℃澘缁勭粐鏁版嵁
+		final int[] index = {0};
+		try {
+			codeClassifyTemplateAttrVOList.stream().forEach(codeClassifyTemplateAttrVO -> {
+				String attrName = codeClassifyTemplateAttrVO.getName();
+				String field = codeClassifyTemplateAttrVO.getId();
+				rowNameList.add(attrName);
+				filedIndexMap.put(field, index[0]++);
+			});
+			dataObjectVO.setColName(rowNameList);//鏀惧叆灞炴��
+			attrMapConfigMap.putAll(propMaps);
+			LinkedList<RowDatas> rowDataList = new LinkedList<>();
+			//Map<String, List<ProppertyVO>> dataPropMap = applyDataVOList.stream().collect(Collectors.toMap(ApplyDataVO::getId, ApplyDataVO::getProp, (key1, key2) -> key2));
+			final int[] rowIndex = {0};
+			applyDataVOList.stream().forEach(applyDataVO -> {
+				rowIndex[0]++;
+				RowDatas rowDatas = new RowDatas();
+				rowDatas.setOid(applyDataVO.getId());
+				rowDatas.setCreator(applyDataVO.getCreator());
+				rowDatas.setEditor(applyDataVO.getEditor());
+				rowDatas.setCode(applyDataVO.getCode());
+				rowDatas.setOperation(applyDataVO.getOperate());
+				rowDatas.setStatus(applyDataVO.getStatus());
+				rowDatas.setRowIndex(rowIndex[0] + "");
+				List<ProppertyVO> proppertyVOList = applyDataVO.getProp();
+
+				LinkedHashMap<Integer, String> integerValueMap = new LinkedHashMap<>();
+				Map<String, String> filedValueMap = new HashMap<>();
+				if (!CollectionUtils.isEmpty(proppertyVOList)) {
+					Map<String, String> sourceKeyValueMap = proppertyVOList.stream().collect(Collectors.toMap(ProppertyVO::getKey, ProppertyVO::getValue, (key1, key2) -> key2));
+					Map<String, String> keyValueMap = new HashMap<>();
+					//鍒ゆ柇attrMapConfigMap鏄惁鏈夊�硷紝濡傛灉娌℃湁鍒欒鏄庡熀纭�榛樿鐨勬槸缂栫爜绯荤粺瀛楁
+					if (!CollectionUtils.isEmpty(attrMapConfigMap)) {
+						sourceKeyValueMap.keySet().forEach(sourceKey -> {
+							String dataValue = sourceKeyValueMap.get(sourceKey);
+							if (attrMapConfigMap.containsKey(sourceKey)) {
+								String targetKey = attrMapConfigMap.get(sourceKey);
+								keyValueMap.put(targetKey, StringUtils.isBlank(dataValue)?"":dataValue);
+							}
+						});
+					} else {
+						sourceKeyValueMap.forEach((filed,value)->{
+							keyValueMap.put(filed,StringUtils.isBlank(value)?"":value) ;
+						});
+					}
+
+					filedIndexMap.forEach((attrKey, column) -> {
+						String keyValue = "";
+						if (keyValueMap.containsKey(attrKey)) {
+							keyValue =StringUtils.isBlank(keyValueMap.get(attrKey))?"":keyValueMap.get(attrKey);
+						}
+						integerValueMap.put(column, keyValue);
+						filedValueMap.put(attrKey, keyValue);
+					});
+				}
+				rowDatas.setData(integerValueMap);
+				rowDatas.setFiledValue(filedValueMap);
+				rowDataList.add(rowDatas);
+			});
+			dataObjectVO.setRowData(rowDataList);
+		}catch (Throwable e){
+			objerrorCode="1";
+			throw new   Throwable("缁勭粐鏁版嵁鏄犲皠鍊煎け璐�");
+		}
+	}
+	/***
+	 * 璁板綍鏃ュ織淇℃伅
+	 * @param systemId
+	 * @param parmaData
+	 * @param result
+	 * @return
+	 */
+	private  void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){
+		//璁板綍鏃ュ織淇℃伅
+		DockingLog dockingLoge=new DockingLog();
+		//String oid=redisService.getUUIDEveryDay();
+		dockingLoge.setSystemCode(StringUtils.isBlank(systemId)?"-":systemId);//璁剧疆绯荤粺鏍囪瘑
+		dockingLoge.setSystemName(StringUtils.isBlank(systemName)?"-":systemName);
+		dockingLoge.setMsg(msg);//鏃ュ織娑堟伅
+		dockingLoge.setClassifyId("-");//鍒嗙被缂栧彿
+		dockingLoge.setClassifyName("-");//鍒嗙被鍚嶇О
+		dockingLoge.setClassifyOid("-");//鍒嗙被涓婚敭
+		dockingLoge.setUniqueCode("-");//鍞竴鏍囪瘑
+		dockingLoge.setSystemOid("-");//绯荤粺鏍囪瘑
+//        dockingLogeDO.setName(operation);
+		//dockingLogeDO.setOid(oid);//鏃ュ織涓婚敭
+		dockingLoge.setParamString(parmaData);//鍙傛暟淇℃伅
+		dockingLoge.setReturnString(result);//杩斿洖淇℃伅
+		dockingLoge.setType(operation);//鏃ュ織鎿嶄綔绫诲瀷
+		if(isSucess) {
+			dockingLoge.setInterfaceStatus("true");//鎺ュ彛闆嗘垚鐘舵��
+		}else{
+			dockingLoge.setInterfaceStatus("false");//鎺ュ彛闆嗘垚鐘舵��
+		}
+		dockingLogeService.save(dockingLoge);
+		logger.info("闆嗘垚鎺ㄩ�佹暟鎹垚鍔�,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
+	}
+
+	/***
+	 * 鏁版嵁缁存姢涓庣紪鐮佺敵璇疯繑鍥�
+	 * @param resultSystemVO
+	 * @param dataType
+	 * @return
+	 */
+	private String transferResultXMl(XMLResultSystemVO resultSystemVO,String dataType){
+		String resultStr="";
+		if ("xml".equals(dataType)) {
+			//缁勭粐杩斿洖鎺ュ彛淇℃伅
+			XStream xStream = new XStream(new DomDriver());
+			xStream.processAnnotations(XMLResultSystemVO.class);
+			xStream.autodetectAnnotations(true);
+			resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultSystemVO);
+		} else {
+			List<XMLResultClassfyVO> resultClassfyVOList =resultSystemVO.getClassifys();
+			JSONResultDataVO resultDataVO = new JSONResultDataVO();
+			JSONResultSystemVO jsonResultSystemVO = new JSONResultSystemVO();
+			JSONResultClassfysVO jsonResultClassfysVO = new JSONResultClassfysVO();
+			List<JSONResultClassfyVO> jSONResultClassfyVOList = new ArrayList<>();
+			resultClassfyVOList.stream().forEach(resultClassfyVO -> {
+				List<XMLResultDataObjectDetailDO> xmlResultDataObjectDetailDOS = resultClassfyVO.getObjects();
+				List<JSONResultDataObjectDetailDO> JSONResultDataObjectDetailDOList = new ArrayList<>();
+				xmlResultDataObjectDetailDOS.stream().forEach(xmlResultDataObjectDetail -> {
+					JSONResultDataObjectDetailDO jsonResultDataObjectDetail = new JSONResultDataObjectDetailDO();
+					BeanUtilForVCI.copyPropertiesIgnoreCase(xmlResultDataObjectDetail, jsonResultDataObjectDetail);
+					JSONResultDataObjectDetailDOList.add(jsonResultDataObjectDetail);
+				});
+				JSONResultClassfyVO jsonResultClassfyVO = new JSONResultClassfyVO();
+				jsonResultClassfyVO.setClassCode(resultClassfyVO.getClassCode());
+				jsonResultClassfyVO.setLibrary(resultClassfyVO.getLibrary());
+				jsonResultClassfyVO.setFullclsfNamePath(resultClassfyVO.getFullclsfNamePath());
+				JSONResultDataObjectDO JSONResultDataObjectDO = new JSONResultDataObjectDO();
+				JSONResultDataObjectDO.setObject(JSONResultDataObjectDetailDOList);
+				jsonResultClassfyVO.setObjects(JSONResultDataObjectDO);
+				jSONResultClassfyVOList.add(jsonResultClassfyVO);
+			});
+			jsonResultClassfysVO.setClassify(jSONResultClassfyVOList);
+			jsonResultSystemVO.setClassifys(jsonResultClassfysVO);
+			jsonResultSystemVO.setErrorid(resultSystemVO.getErrorid());
+			jsonResultSystemVO.setMsg(resultSystemVO.getMsg());
+			resultDataVO.setData(jsonResultSystemVO);
+			Object object = JSONObject.toJSON(resultDataVO);
+			resultStr = object.toString();
+
+		}
+		return resultStr;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java
index e69de29..695bc04 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/util/gennerAttrMapUtil.java
@@ -0,0 +1,46 @@
+package com.vci.ubcs.code.util;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+import com.vci.ubcs.code.vo.webserviceModel.attrmap.LibraryDO;
+import com.vci.ubcs.starter.util.LocalFileUtil;
+import com.vci.ubcs.webservice.config.AttributeMapConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+
+public class gennerAttrMapUtil {
+    @Autowired(required = false)
+    private AttributeMapConfig attributeMapConfig;
+    private static  String fileName="";
+    private static gennerAttrMapUtil newInstance=null;
+    public static gennerAttrMapUtil getNewInstance() {
+        if(newInstance==null){
+            newInstance=new gennerAttrMapUtil();
+        }
+        return newInstance;
+    }
+
+    /****
+     * 鑾峰彇
+     * @param systemId
+     */
+    public LibraryDO gennerAttrMapBySystem(String systemId, Map<String, String> system_attrmap) throws Throwable{
+        if(StringUtils.isBlank(systemId)){
+            throw new Throwable("绯荤粺鏍囪瘑涓虹┖");
+        }
+        LibraryDO rootDataVO=new LibraryDO();
+        if(system_attrmap.containsKey(systemId)){
+           String path=system_attrmap.get(systemId);
+           String attributeMapData=  LocalFileUtil.readContentForFile(path);
+           XStream xStream = new XStream(new DomDriver());
+           xStream.processAnnotations(LibraryDO.class);
+           xStream.autodetectAnnotations(true);
+            rootDataVO = (LibraryDO) xStream.fromXML(attributeMapData);
+
+        }
+        return rootDataVO;
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/DockingLogeWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/DockingLogeWrapper.java
index e69de29..208b9c4 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/DockingLogeWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/DockingLogeWrapper.java
@@ -0,0 +1,16 @@
+package com.vci.ubcs.code.wrapper;
+
+import com.vci.ubcs.code.entity.DockingLog;
+import com.vci.ubcs.code.vo.pagemodel.DockingLogeVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+
+import java.util.Objects;
+
+public class DockingLogeWrapper extends BaseEntityWrapper<DockingLog, DockingLogeVO> {
+	@Override
+	public DockingLogeVO entityVO(DockingLog entity) {
+		DockingLogeVO dockingLogeVO = Objects.requireNonNull(BeanUtil.copy(entity, DockingLogeVO.class));
+		return dockingLogeVO;
+	}
+}

--
Gitblit v1.9.3