From f8d4f3017991aba4186fc06c06bd3b68693f89d1 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期四, 15 六月 2023 18:22:21 +0800
Subject: [PATCH] 统一接口添加

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java                               |   17 +
 Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java                          |  885 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java                |   16 
 4 files changed, 909 insertions(+), 13 deletions(-)

diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
index 93f152f..9592564 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
@@ -1,6 +1,8 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
 
+import com.vci.ubcs.starter.revision.model.BaseModel;
+
 import java.util.*;
 
 /**
@@ -28,7 +30,10 @@
      * 鍏抽敭灞炴�ф牎楠屽悗锛岄噸澶嶇殑琛屽彿
      */
     private Set<String> keyAttrRepeatRowIndexList  = new HashSet<>();
-
+	/***
+	 * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄
+	 */
+	private Map<String,  List<BaseModel>> indexTODataMap=new HashMap<>();
     /***
      * 鏍规嵁鍏抽敭鐔熸倝鏌ヨ鐨勯噸澶嶇殑鏁版嵁瀵硅薄
      */
@@ -89,7 +94,14 @@
         this.selfRepeatRowIndexList = selfRepeatRowIndexList;
     }
 
-    /*public Map<String,List<ClientBusinessObject>> getIndexTODataMap() {
+	public Map<String, List<BaseModel>> getIndexTODataMap() {
+		return indexTODataMap;
+	}
+
+	public void setIndexTODataMap(Map<String, List<BaseModel>> indexTODataMap) {
+		this.indexTODataMap = indexTODataMap;
+	}
+	/*public Map<String,List<ClientBusinessObject>> getIndexTODataMap() {
         return indexTODataMap;
     }
 
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 5d9b9f6..7374475 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
@@ -14,6 +14,7 @@
 import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
 import com.vci.ubcs.starter.web.pagemodel.*;
+import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO;
 import org.springblade.core.tool.api.R;
 
 import java.beans.IntrospectionException;
@@ -411,4 +412,20 @@
 	 * @return 鏍戝舰鐨勬暟鎹�
 	 */
 	List<Tree> referTree(UIFormReferVO referConfigVO, TreeQueryObject queryObject);
+
+	/**
+	 * 鏄惁涓轰慨鏀瑰拷鐣ョ殑灞炴��
+	 * @param attrName 灞炴�х殑鍚嶅瓧
+	 * @return true 琛ㄧず搴旇蹇界暐
+	 */
+	default 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));
+	}
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index cc8e8a7..118c0c2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -35,6 +35,7 @@
 import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
+import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.KeyValue;
@@ -62,6 +63,7 @@
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
+import java.text.MessageFormat;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -1621,7 +1623,7 @@
 		if(!CollectionUtils.isEmpty(unExistAttrVOs)){
 			throw new VciBaseException("銆�" + unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName) + "銆戣繖浜涘睘鎬у湪excel涓病鏈夋壘鍒�");
 		}
-
+		List<ClientBusinessObject> cboList = new ArrayList<>();
 		String fullPath = getFullPath(classifyFullInfo);
 
 		// List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order");
@@ -1630,19 +1632,765 @@
 		/** if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){
 		 isProcess=true;
 		 }***/
-		//List<ClientBusinessObject> cboList = new ArrayList<>();
-		//Map<String,String> codeOidToSystemOidMap=new HashMap<>();//瀛樺偍缂栫爜鏁版嵁鍜岄泦鎴愮郴缁熸暟鎹畂id瀵圭収鏄犲皠
-		//excelToCbo(classifyFullInfo,titleRowData,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,isProcess,"create",errorMap,codeOidToSystemOidMap);
+		Map<String,String> codeOidToSystemOidMap=new HashMap<>();//瀛樺偍缂栫爜鏁版嵁鍜岄泦鎴愮郴缁熸暟鎹畂id瀵圭収鏄犲皠
+		excelToCbo(classifyFullInfo,titleRowData,fieldIndexMap,rowDataList,templateVO,cboList,fullPath,isProcess,"create",errorMap,codeOidToSystemOidMap);
 
 		//閮借浆鎹㈠畬浜嗐�傞渶瑕佹壒閲忔鏌�
 		//濡傛灉鍑洪敊浜嗭紝鎴戜滑渚濈劧鎵ц鏈夋晥鐨勬暟鎹紝鏃犳晥鐨勬暟鎹啓鍥炲埌excel涓�
 		//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
+		batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
+
+
+		/**
+		 * 鍏抽敭鐔熸倝閿欒鎻愮ず
+		 */
+		Map<String,String> errorKeyMap=new HashMap<>();
+
+
+		//3.鍒ゆ柇鍏抽敭灞炴��
+		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
+		Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
+		if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
+			selfRepeatRowIndexList.stream().forEach(rowIndex->{
+               /* //浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙
+                RowDatas rowData= rowDataMap.get(rowIndex);
+                XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                resultDataObjectDetailDO.setCode("");
+                resultDataObjectDetailDO.setId(rowData.getOid());
+                resultDataObjectDetailDO.setErrorid("1");
+                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�ч噸澶�");
+                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                */
+				errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";浼犲叆鐨勬暟鎹腑鍏抽敭灞炴�ч噸澶�");
+			});
+		}
+		/****
+		 * 鍏抽敭灞炴�т笌绯荤粺涓噸澶嶇殑鍒ゆ柇
+		 */
+		if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
+			keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
+				//浼犲叆鏁版嵁涔嬮棿鍏抽敭灞炴�х殑鏍¢獙
+               /* RowDatas rowData= rowDataMap.get(rowIndex);
+                XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                resultDataObjectDetailDO.setCode("");
+                resultDataObjectDetailDO.setId(rowData.getOid());
+                resultDataObjectDetailDO.setErrorid("1");
+                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                */
+				errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+			});
+		}
+		//鍒嗙被娉ㄥ叆
+		batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
+		//boolean
+		reSwitchBooleanAttrOnOrder(attrVOS,cboList);
+		// cboList.stream().forEach(cbo->{
+		//4.鏍¢獙瑙勫垯
+		batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
+		//5.鏍¢獙鏋氫妇鏄惁姝g‘
+		batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
+		//6.鏃堕棿鏍煎紡鐨勯獙璇�
+		//6.鏃堕棿鐨勶紝蹇呴』缁熶竴涓簓yyy-MM-dd HH:mm:ss
+		batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
+		//7.澶勭悊鍙傜収鐨勬儏鍐�
+		batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
+		//鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭�
+		if(errorMap.size()>0){
+			String[] newMsg = {""};
+			cboList.stream().forEach(cbo -> {
+				String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
+				if(errorMap.containsKey(rowIndex)){
+					String oid=cbo.getOid();
+					String sourceOid=oid;
+					if(codeOidToSystemOidMap.containsKey(oid)){
+						sourceOid=codeOidToSystemOidMap.get(oid);
+					}
+					String code="";
+					String errorid="103";
+					String mes=errorMap.get(rowIndex);
+					XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+					resultDataObjectDetailDO.setCode(code);
+					resultDataObjectDetailDO.setId(sourceOid);
+					resultDataObjectDetailDO.setErrorid(errorid);
+					resultDataObjectDetailDO.setMsg(mes);
+					resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+				}
+			});
+
+		}
+
+		Map<String,String> newKeyMap=new HashedMap();
+		if(errorKeyMap.size()>0 ) {
+			errorKeyMap.keySet().forEach(key->{
+				if(!errorMap.containsKey(key)){
+					newKeyMap.put(key,errorKeyMap.get(key));
+				}
+			});
+			if(newKeyMap.size()>0) {
+				List<BaseModel> editBoList = new ArrayList<>();
+				Map<String, List<BaseModel>> indexTodataMap = keyResultVO.getIndexTODataMap();
+				cboList.stream().forEach(cbo -> {
+					String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+					if (indexTodataMap.containsKey(rowIndex)) {
+						String oid = cbo.getOid();
+						String sourceOid = oid;
+						String code = "";
+						String errorid = "201";
+						if(codeOidToSystemOidMap.containsKey(oid)){
+							sourceOid=codeOidToSystemOidMap.get(oid);
+						}
+						List<BaseModel> newCboList = indexTodataMap.get(rowIndex);
+						if (!CollectionUtils.isEmpty(newCboList)) {
+							BaseModel newCbo= newCboList.get(0);
+							String lcstatus =newCbo.getLcStatus();
+							String newOid =newCbo.getOid();
+							Date ts =newCbo.getTs();
+							code=newCbo.getId();
+							String lastmodifier=newCbo.getLastModifier();
+							if (!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) {
+								newCbo.setOid(newOid);
+								newCbo.setLastModifier(lastmodifier);
+								newCbo.setId(code);
+								newCbo.setTs(ts);
+								cbo.setLastModifier(cbo.getLastModifier());
+								editBoList.add(newCbo);
+							}
+							String mes = errorKeyMap.get(rowIndex);
+							XMLResultDataObjectDetailDO resultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+							resultDataObjectDetailDO.setCode(code);
+							resultDataObjectDetailDO.setId(sourceOid);
+							resultDataObjectDetailDO.setErrorid(errorid);
+							resultDataObjectDetailDO.setMsg(mes);
+							resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+						}
+					}
+				});
+				//鍏抽敭鐔熸倝鏇存敼
+				if (!CollectionUtils.isEmpty(editBoList)) {
+					engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(),editBoList);//淇濆瓨鏁版嵁
+				}
+				errorMap.putAll(errorKeyMap);
+			}
+		}
+
+		//  });
+		//璁剧疆榛樿鍊�
+		batchSwitchAttrDefault(attrVOS, cboList);
+		//鏈�鍚庡紕缁勫悎瑙勫垯
+		batchSwitchComponentAttrOnOrder(attrVOS,cboList);
+		//瑕佹妸浠ヤ笂鐨勯敊璇殑閮芥姏鍑哄悗锛屽啀缁х画澶勭悊鏃堕棿鍜岀粍鍚堣鍒�
+		List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
+			String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
+			return !errorMap.containsKey(rowIndex);
+		}).collect(Collectors.toList());
+		List<String> needRowIndexList = new ArrayList<>();
+		if(!CollectionUtils.isEmpty(needSaveCboList)) {
+			//9.鎴戜滑澶勭悊涓氬姟鏁版嵁
+			//鐢熸垚缂栫爜鐨勫唴瀹�
+
+			List<String>allNeedSaveCboList=new ArrayList<>();
+			List<BaseModel> dataCBOList=new ArrayList<>();
+			needSaveCboList.stream().forEach(clientBusinessObject -> {
+				BaseModel baseModel=new BaseModel();
+				BeanUtil.convert(clientBusinessObject,baseModel);
+				baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
+				dataCBOList.add(baseModel);
+				allNeedSaveCboList.add(baseModel.getOid());
+			});
+			try {
+				productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
+				//濡傛灉鏄紪鐮佺敓鎴愬け璐ワ紝鍒欑洿鎺ュ氨澶辫触浜嗭紝鍏朵粬鐨勫垽鏂嚭鏉ユ湁閿欒鐨勬垜浠兘缁熶竴杩斿洖鍒癳xcel閲岄潰
+				engineService.batchSaveSelectChar(templateVO, allNeedSaveCboList);
+				// if(!isProcess){
+				needSaveCboList.stream().forEach(needSaveCbo->{
+					XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+					resultDataObjectDetailDO.setCode(needSaveCbo.getId());
+					String oid=needSaveCbo.getOid();
+					String sourceOid=oid;
+					if(codeOidToSystemOidMap.containsKey(oid)){
+						sourceOid=codeOidToSystemOidMap.get(oid);
+					}
+					resultDataObjectDetailDO.setId(sourceOid);
+					resultDataObjectDetailDO.setErrorid("0");
+					resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛");
+					resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+				});
+               /* }else{
+                    needSaveCboList.stream().forEach(needSaveCbo->{
+                        XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+                       // resultDataObjectDetailDO.setCode(needSaveCbo.getId());//涓嶇敤杩斿洖缂栫爜
+                        String oid=needSaveCbo.getOid();
+                        String sourceOid=oid;
+                        if(codeOidToSystemOidMap.containsKey(oid)){
+                            sourceOid=codeOidToSystemOidMap.get(oid);
+                        }
+                        resultDataObjectDetailDO.setId(sourceOid);
+                        resultDataObjectDetailDO.setErrorid("204");
+                        resultDataObjectDetailDO.setMsg("鐢宠缂栫爜鎴愬姛锛岀瓑寰呯紪鐮佺郴缁熷彂甯冿紒");
+                        resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+                    });
+
+                }*/
+			}catch (Throwable e){
+				e.printStackTrace();
+				needSaveCboList.stream().forEach(needSaveCbo->{
+					XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+					resultDataObjectDetailDO.setCode("");
+					String oid=needSaveCbo.getOid();
+					String sourceOid=oid;
+					if(codeOidToSystemOidMap.containsKey(oid)){
+						sourceOid=codeOidToSystemOidMap.get(oid);
+					}
+					resultDataObjectDetailDO.setId(sourceOid);
+					resultDataObjectDetailDO.setErrorid("1");
+					resultDataObjectDetailDO.setMsg("淇濆瓨鍑虹幇闂:"+e.getMessage());
+					resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
+				});
+
+			}
+		}
 
 	}
-
+	/***
+	 * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛
+	 * @param codeClassifyVO;
+	 * @param dataObjectVO 鏁版嵁淇℃伅
+	 * @param resultDataObjectDetailDOs 閿欒淇℃伅
+	 */
 	@Override
 	public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
+		String errorid="";
+		String msg="";
+		//鏌ヨ鍒嗙被鍜屾ā鏉�
+		//鍏堟壘鍒版瘡涓�琛岀殑鏍囬锛岀劧鍚庢牴鎹爣棰樻潵鑾峰彇瀵瑰簲鐨勫睘鎬�
+		List<RowDatas> rowDataList = dataObjectVO.getRowData();
+		Map<String, RowDatas> rowDataMap = new LinkedHashMap<>();
+		Map<String, RowDatas> codeDataMap = new LinkedHashMap<>();
+		rowDataList.stream().forEach(rowData -> {
+			rowDataMap.put(rowData.getRowIndex(), rowData);
+			codeDataMap.put(rowData.getCode(), rowData);
+		});
+		//鎵剧涓�琛岋紝涓轰簡鎵炬爣棰�
+		CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
+		// 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
+		//鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
+		//checkTemplateSync(sheetDataSetList,templateVO);
+		//闄ゅ幓榛樿鐨勫睘鎬�.杩樻湁鍙湁琛ㄥ崟鏄剧ず鐨勫瓧娈垫墠瀵煎叆
+		List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
+		).collect(Collectors.toList());
+		Map<Integer/**鍒楀彿**/, String/**瀛楁鐨勫悕绉�**/> fieldIndexMap = new HashMap<>();
+		List<String> titleRowData = dataObjectVO.getColName();
+		Map<String/**涓枃鍚嶇О**/, String/**鑻辨枃鍚嶇О**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT), (o1, o2) -> o2));
+		getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
+		Map<String, String> cboOidMap = new HashMap<>();
+		cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
+		R<BtmTypeVO>  r= btmTypeClient.getDetail(templateVO.getBtmTypeId());
+		BtmTypeVO btmTypeVO =r.getData();
+		String tableName=btmTypeVO.getTableName();
 
+		StringBuffer sb=new StringBuffer();
+		sb.append(" select * from ");
+		sb.append(tableName);
+		sb.append(" where 1=1 ");
+		sb.append(" id in (");
+		sb.append(VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])));
+		sb.append(")");
+		List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString());
+		List<ClientBusinessObject> cboList=	ChangeMapTOClientBusinessObjects(dataMapList);
+		Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+		Map<String, String> errorMap = new HashMap<>();
+		List<CodeOrderDTO> codeOrderDTOList = new ArrayList<>();
+		this.getCodeOrderDTOs(codeClassifyVO, templateVO, codeDataMap, codeSystemObjectMap, codeOrderDTOList, errorMap);
+		// List<CodeClassifyProcessTempVO> codeClassifyProcessTempVOS=codeClassifyProcessTempService.listProcessTemplate(templateVO.getOid(),"code_cls_flow_use_order");
+		boolean isProcess=false;
+		/**  if(!CollectionUtils.isEmpty(codeClassifyProcessTempVOS)){
+		 isProcess=true;
+		 }**/
+
+		Map<String, CodeOrderDTO> orderDTOMap = codeOrderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+		List<BaseModel> updateList = new ArrayList<>();
+		List<CodeAllCode> codeAllCodeList = new ArrayList<>();
+		List<BaseModel> deleteList = new ArrayList<>();
+
+		CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
+		Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
+		//  boolean finalIsProcess = isProcess;
+		orderDTOMap.keySet().stream().forEach(code -> {
+			CodeOrderDTO orderDTO = orderDTOMap.get(code);
+			ClientBusinessObject cbo = cboMap.get(code);
+			String dataStatus=cbo.getLcStatus();
+			RowDatas rowData=codeDataMap.get(code);
+			String status=rowData.getStatus();
+			String operation=rowData.getOperation();
+			if (cbo.getTs().compareTo(orderDTO.getTs())==0?true:false) {
+				// throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+				errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
+			}
+           /* if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
+                throw new VciBaseException("鏁版嵁涓嶆槸{0}鐨勭姸鎬侊紝涓嶅厑璁镐慨鏀�", new String[]{CodeDefaultLC.EDITING.getText()});
+            }*/
+			if(operation.equals("update")) {
+				//1. 鍒ゆ柇蹇呰緭椤�
+				checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
+				//2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
+				switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap);
+				//3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
+				switchComponentAttrOnOrder(templateVO, orderDTO);
+				//4.鏍¢獙瑙勫垯
+				checkVerifyOnOrder(templateVO, orderDTO, errorMap);
+				//5.鍒ゆ柇鍏抽敭灞炴��
+				checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
+				//6.鏍¢獙鏋氫妇鐨勫唴瀹规槸鍚︽纭�
+				checkEnumOnOrder(templateVO, orderDTO, errorMap);
+				//7.澶勭悊鏃堕棿鏍煎紡锛屽湪鏁版嵁搴撻噷闈笉璁烘槸瀛楃涓茶繕鏄棩鏈熸牸寮忥紝閮戒娇鐢ㄧ浉鍚岀殑鏍煎紡瀛樺偍
+				switchDateAttrOnOrder(templateVO, orderDTO);
+				//榛樿鐨勫唴瀹逛笉鑳藉彉锛屾墍浠ュ彧闇�瑕佹嫹璐濊嚜瀹氫箟鐨勭浉鍏冲睘鎬у嵆鍙�
+				copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap);
+				//浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
+				cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
+				cbo.setName(orderDTO.getName());
+				try {
+					cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
+					cbo.setAttributeValue("name", orderDTO.getName());
+					//  if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀�
+					//     errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!"));
+					//  }else{
+					cbo.setLcStatus(status);
+					cbo.setAttributeValue("lcstatus",status);
+					//  }
+				} catch (VciBaseException e) {
+					e.printStackTrace();
+				}
+				BaseModel baseModel=new BaseModel();
+				BeanUtil.convert(cbo,baseModel);
+				baseModel.setData(VciBaseUtil.objectToMapString(cbo));
+				updateList.add(baseModel);
+			}else if(operation.equals("delete")){//濡傛灉鍦ㄦ祦绋嬩腑涓嶅厑璁稿垹闄わ紝涓嶅湪娴佺▼涓姸鎬佷负鍙戝竷鎴栬�呭仠鐢ㄧ殑鏁版嵁涓嶅厑璁稿垹闄わ紝灏嗗叾鏇存敼涓哄仠鐢紝鍏朵粬鐨勬儏鍐电洿鎺ュ垹闄�
+				//  if(finalIsProcess){
+				//    errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鍒犻櫎!"));
+				//}else {
+				try {
+					Map<String, String> condtionMap = new HashMap<>();
+					condtionMap.put("createcodeoid", cbo.getOid());
+					log.info("oid:" + cbo.getOid());
+					List<CodeAllCode>newCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getCreateCodeOid, cbo.getOid()));
+					log.info("codeCbos size:" + newCodeAllCodeList.size());
+					if (!CollectionUtils.isEmpty(newCodeAllCodeList)) {
+						CodeAllCode codeCbo = codeAllCodeList.get(0);
+						log.info("codeCbos code:" + codeCbo.getId());
+						codeCbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+						codeAllCodeList.add(codeCbo);
+					}
+					deleteList.add(cbo);
+				}catch (VciBaseException e) {
+					e.printStackTrace();
+				}
+				// }
+			}else if(operation.equals("editstatus")){
+				try {
+					//  if (finalIsProcess) {
+					//      errorMap.put(code, errorMap.getOrDefault(code, errorMap.getOrDefault(code, "") + ";鏁版嵁" + code + "鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼鐘舵��!"));
+					//   } else {
+					cbo.setLcStatus(status);
+					cbo.setAttributeValue("lcstatus", status);
+
+					//  }
+					BaseModel baseModel=new BaseModel();
+					BeanUtil.convert(cbo,baseModel);
+					baseModel.setData(VciBaseUtil.objectToMapString(cbo));
+					updateList.add(baseModel);
+				}catch (VciBaseException e) {
+					e.printStackTrace();
+				}
+			}
+		});
+		/**
+		 * 閿欒淇℃伅杈撳嚭
+		 */
+		if(errorMap.size()>0){
+			errorMap.keySet().forEach(code->{
+				if(codeDataMap.containsKey(code)){
+					RowDatas rowDatas=  codeDataMap.get(code);
+					String dataMsg=errorMap.get(code);
+					String oid=rowDatas.getOid();
+					XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
+					xmlResultDataObjectDetailDO.setErrorid("103");
+					xmlResultDataObjectDetailDO.setMsg(dataMsg);
+					xmlResultDataObjectDetailDO.setId(oid);
+					xmlResultDataObjectDetailDO.setCode(code);
+					resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+				}
+			});
+		}else {
+			//瀛樺偍鏁版嵁
+			try {
+				engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(),updateList);
+				codeAllCodeService.saveBatch(codeAllCodeList);
+				commonsMapper.deleteByTaleAndOid("",null);
+
+			//	engineService.del(deleteList);
+				errorid="0";
+				msg="鏇存柊/鐘舵�佹洿鏀�/鍒犻櫎鎴愬姛锛�";
+			}catch (Throwable e){
+				errorid="1";
+				msg="淇濆瓨澶辫触锛�"+e;
+			}finally {
+				String finalMsg = msg;
+				String finalErrorid = errorid;
+				cboList.stream().forEach(cbo->{
+					String code =cbo.getId();
+					if(codeDataMap.containsKey(code)) {
+						RowDatas rowDatas=codeDataMap.get(code);
+						String oid=rowDatas.getOid();
+						XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
+						xmlResultDataObjectDetailDO.setErrorid(finalErrorid);
+						xmlResultDataObjectDetailDO.setMsg(finalMsg);
+						xmlResultDataObjectDetailDO.setId(oid);
+						xmlResultDataObjectDetailDO.setCode(code);
+						resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
+					}
+				});
+
+			}
+		}
+	}
+	/**
+	 * 鏍¢獙灞炴�ф槸鍚︿负蹇呰緭
+	 *
+	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+	 */
+	private void checkRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+		Map<String, CodeClassifyTemplateAttrVO> 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))) {
+					errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"") + ";灞炴�с�恵"+attrVO.getName()+"}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭" );
+					//  throw new VciBaseException("灞炴�с�恵0}銆戝繀椤昏杈撳叆(閫夋嫨)鍐呭", new String[]{attrVO.getName()});
+				}
+			});
+		}
+	}
+	/**
+	 * 杞崲缁勫悎瑙勫垯鐨勫��
+	 *
+	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚ā鏉垮睘鎬�
+	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+	 */
+	private void switchComponentAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+		Map<String, CodeClassifyTemplateAttrVO> 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);
+			});
+		}
+	}
+
+	/**
+	 * 鏍¢獙姝e垯琛ㄨ揪寮忔槸鍚︽纭�
+	 *
+	 * @param templateVO 妯℃澘鐨勪俊鎭紝蹇呴』鍖呭惈灞炴�х殑鍐呭
+	 * @param orderDTO   缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+	 */
+	private void checkVerifyOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+		Map<String, CodeClassifyTemplateAttrVO> 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())) {
+					errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";灞炴�"+attrVO.getName()+"]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�");
+					//鏍¢獙姝e垯琛ㄨ揪寮�
+					// throw new VciBaseException("灞炴�{0}]鐨勫�间笉绗﹀悎鏍¢獙瑙勫垯鐨勮姹�", new String[]{attrVO.getName()});
+				}
+			});
+		}
+	}
+	/**
+	 * 鏍¢獙鍏抽敭灞炴��
+	 *
+	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+	 * @param templateVO       妯℃澘鐨勫唴瀹癸紝蹇呴』鍖呭惈妯℃澘灞炴��
+	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+	 */
+	private void checkKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+		CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
+		//娉ㄦ剰鐨勬槸keyRuleVO鍙兘涓虹┖锛岃〃绀轰笉浣跨敤瑙勫垯鎺у埗
+		//鑾峰彇鎵�鏈夌殑鍏抽敭灞炴��
+		Map<String, CodeClassifyTemplateAttrVO> 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 = "";
+			}
+			engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+		});
+
+		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+
+		if (!CollectionUtils.isEmpty(conditionMap)) {
+			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " 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 (commonsMapper.queryCountBySql(sql[0]) > 0) {
+				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+				String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�";
+				String errormsg=defaultValue+ MessageFormat.format(ruleInfoMsg, objs);
+				errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
+				// throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+			}
+		}
+	}
+	/**
+	 * 鏍¢獙鏋氫妇鐨勫唴瀹�
+	 *
+	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+	 */
+	private void checkEnumOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+		//濡傛灉鏋氫妇鍙互淇敼锛屽垯涓嶉渶瑕佹牎楠屾槸鍚︾鍚堟灇涓剧殑閫夐」
+		Map<String, CodeClassifyTemplateAttrVO> 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)) {
+					//鏈夊�兼墠鑳芥牎楠�
+					List<KeyValue> comboboxKVs = this.engineService.listComboboxItems(attrVO);
+					if (!comboboxKVs.stream().anyMatch(s -> value.equalsIgnoreCase(s.getKey()))) {
+						errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";灞炴�с��"+attrVO.getName()+"銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�");
+						//throw new VciBaseException("灞炴�с�恵0}銆戠殑鍊间笉绗﹀悎鏋氫妇鐨勮姹�", new String[]{attrVO.getName()});
+					}
+				}
+			});
+		}
+	}
+	/**
+	 * 杞崲鏃堕棿鐨勬牸寮�
+	 *
+	 * @param templateVO 妯℃澘鐨勬樉绀哄璞★紝闇�瑕佸寘鍚睘鎬�
+	 * @param orderDTO   缂栫爜鐢宠鐨勪俊鎭�
+	 */
+	private void switchDateAttrOnOrder(CodeClassifyTemplateVO templateVO, CodeOrderDTO orderDTO) {
+		Map<String, CodeClassifyTemplateAttrVO> 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, ClientBusinessObject cbo,
+								CodeOrderDTO orderDTO, CodeClassifyTemplateVO templateVO,
+								boolean edit,Map<String,String> errorMap) {
+		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();
+		}
+		orderDTO.getData().forEach((key, value) -> {
+			if (!edit || (!engineService.checkUnAttrUnEdit(key) &&
+				!VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
+				try {
+					cbo.setAttributeValue(key, value);
+				} catch (VciBaseException e) {
+					log.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+				}
+			}
+		});
+		try {
+			cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
+			cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+			cbo.setAttributeValue(CODE_FULL_PATH_FILED, fullPath);
+			if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
+				//鎵剧敓鍛藉懆鏈熺殑璧峰鐘舵�侊紝
+				if (StringUtils.isNotBlank(cbo.getLctid())) {
+					//OsLifeCycleVO lifeCycleVO = lifeCycleService.getLifeCycleById(cbo.getLctid());
+//					if (lifeCycleVO != null) {
+//						cbo.setLcStatus(lifeCycleVO.getStartStatus());
+//					} else {
+						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+//					}
+				} else {
+					cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+				}
+
+			}
+			int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+			/*if (secret == 0 || !secretService.checkDataSecret(secret)) {
+				Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+				cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
+			}*/
+		} catch (Throwable e) {
+			log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�", e);
+		}
+	}
+	/**
+	 * 璁剧疆鏂扮殑鍊煎埌鐢宠瀵硅薄涓�
+	 *
+	 * @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);
+		}
+	}
+	/**
+	 * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
+	 *
+	 * @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 classifyFullInfoBO 鍒嗙被鐨勫叏璺緞
+	 * @param orderDTO           缂栫爜鐢宠鐨勪俊鎭�
+	 */
+	private void switchClassifyLevelOnOrder(CodeClassifyTemplateVO templateVO, CodeClassifyFullInfoBO classifyFullInfoBO, CodeOrderDTO orderDTO,Map<String,String> errorMap) {
+		Map<String, CodeClassifyTemplateAttrVO> 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) {
+					//璇存槑灞傜骇鏈夎
+					errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+";鍒嗙被鏍戜笂娌℃湁灞傜骇[" + attrVO.getClassifyInvokeLevel() + "]");
+					//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 codeClassifyVO
+	 * @param templateVO
+	 * @param codeDataMap
+	 * @param codeSystemObjectMap
+	 * @param codeOrderDTOList
+	 * @param errorMap
+	 * @return
+	 */
+	private void   getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap){
+		codeDataMap.keySet().forEach(code->{
+			RowDatas rowDatas=codeDataMap.get(code);
+			Map<String, String> data= rowDatas.getFiledValue();
+			CodeOrderDTO orderDTO = new CodeOrderDTO();
+			if(codeSystemObjectMap.containsKey(code)){
+				ClientBusinessObject sysDataObject= codeSystemObjectMap.get(code);
+				orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//鍒嗙被涓婚敭
+				orderDTO.setOid(sysDataObject.getOid());//鏁版嵁oid
+				orderDTO.setLcStatus(rowDatas.getStatus());//鐘舵��
+				orderDTO.setId(code);
+				orderDTO.setTs(sysDataObject.getTs());
+				orderDTO.setBtmname(codeClassifyVO.getBtmname());//涓氬姟绫诲瀷
+				orderDTO.setDescription("闆嗘垚璋冪敤:鏇存柊");//鏁版嵁鎻忚堪
+				if(data.containsKey("name")){
+					String name=data.get("name");
+					orderDTO.setName(name);//鍚嶇О灞炴�у��
+				}
+				orderDTO.setData(data);//璁剧疆鏁版嵁
+				orderDTO.setSecDTOList(null);//鍒嗙被鐮佹
+				orderDTO.setEditInProcess(false);//鏄惁鍦ㄦ祦绋嬩腑
+				orderDTO.setTemplateOid(templateVO.getOid());
+			}else{
+				errorMap.put("code","缂栫爜涓猴細銆�"+code+"銆戠殑鏁版嵁鍦ㄧ郴缁熶腑涓嶅瓨鍦�");
+			}
+			codeOrderDTOList.add(orderDTO);
+		});
 	}
 
 	/**
@@ -1728,7 +2476,118 @@
 			}
 		});
 	}
+	/**
+	 * excel杞崲涓篶bo鐨勫璞�
+	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
+	 * @param fieldIndexMap 瀛楁鐨勪綅缃�
+	 * @param rowDataList excel閲岀殑琛屾暟鎹�
+	 * @param templateVO 妯℃澘鐨勬樉绀哄璞�
+	 * @param cboList 鏁版嵁鐨勫垪琛�
+	 * @param fullPath 鍏ㄨ矾寰�
+	 * @param operation 鎿嶄綔绫诲瀷
+	 * @param errorMap 閿欒淇℃伅璁板綍
+	 */
+	private void excelToCbo(CodeClassifyFullInfoBO classifyFullInfo,List<String> titleRowData,Map<Integer,String> fieldIndexMap,List<RowDatas> rowDataList,
+							CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,
+							String fullPath,boolean isProcess,String operation,Map<String,String> errorMap,Map<String,String> codeOidToSystemOidMap){
+		rowDataList.stream().forEach(rowData -> {
+			String oid=rowData.getOid();
+			String rowNumber=rowData.getRowIndex();
+			ClientBusinessObject cbo = new ClientBusinessObject();
+			DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+			rowData.getData().forEach((index,value)->{
+				String field = fieldIndexMap.get(index);
+				if(StringUtils.isBlank(field)){
+					errorMap.put(rowNumber,"灞炴�э細銆�" +titleRowData.get(index)+ "銆戝湪绯荤粺涓笉瀛樺湪");
+				}
+				try {
+					cbo.setAttributeValueWithNoCheck(field,value);
+					if(WebUtil.isDefaultField(field)){
+						WebUtil.setValueToField(field, cbo, value);
+					}
+				} catch (VciBaseException e) {
+					log.error("璁剧疆灞炴�х殑鍊奸敊璇�",e);
+					errorMap.put(rowNumber,"灞炴�э細銆�" +titleRowData.get(index)+ "銆戝湪绯荤粺涓笉瀛樺湪");
+				}
+			});
+			try {
+				cbo.setAttributeValue(IMPORT_ROW_INDEX,rowData.getRowIndex());
+				cbo.setAttributeValue(CODE_TEMPLATE_OID_FIELD,templateVO.getOid());
+				if(operation.equals("create")){
+					log.info("鍒嗙被瀵硅薄锛�"+classifyFullInfo.getCurrentClassifyVO());
+					log.info("codeClassoid:"+classifyFullInfo.getCurrentClassifyVO().getOid());
+					cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
+					cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
+					int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
+					/*if(secret == 0 || !secretService.checkDataSecret(secret) ){
+						Integer userSecret = VciBaseUtil.getCurrentUserSecret();
+						String secretValue= String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret);
+						cbo.setAttributeValue(SECRET_FIELD,secretValue);
+					}*/
+					if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+						cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓�
+						cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+						cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+					}else{
+						cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());//鍙戝竷
+					}
+					/**  if(!isProcess){
+					 cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+					 }else {
+					 if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+					 cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+					 }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+					 cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					 }else {//鍙戝竷
+					 cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+					 }
+					 }***/
+					cbo.setCreator(rowData.getCreator());
+					cbo.setLastModifier(rowData.getEditor()==null?"":rowData.getEditor());
+				}else if(operation.equals("update")){
+					//姝ゆ椂杩樻病鏈夎浆鎹㈣矾寰�
+					//cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
+					if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//鍋滅敤
+						cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.RELEASED.getValue())){//鍙戝竷
+						cbo.setLcStatus(CodeDefaultLC.RELEASED.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//缂栬緫
+						cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.AUDITING.getValue())) {//瀹℃壒涓�
+						cbo.setLcStatus(CodeDefaultLC.AUDITING.getValue());
+					}else if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+						cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+					}
+					cbo.setLastModifier(rowData.getEditor() == null ? "" : rowData.getEditor());//淇敼鑰�
+				}else if(operation.equals("delete")){
+					if(rowData.getStatus().equals(CodeDefaultLC.TASK_BACK.getValue())){//鍥炴敹
+						cbo.setLcStatus(CodeDefaultLC.TASK_BACK.getValue());
+					}else{
+						cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());//鍋滅敤
+					}
+				}
 
+
+			}catch (Throwable e){
+				log.error("璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�",e);
+				if(e instanceof  VciBaseException){
+					errorMap.put(rowNumber,"璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�"+((VciBaseException) e).getMessage());
+				}else{
+					errorMap.put(rowNumber,"璁剧疆榛樿鐨勫睘鎬х殑鍊奸敊璇�"+e.getMessage());
+				}
+
+			}finally {
+				codeOidToSystemOidMap.put(cbo.getOid(),oid);
+			}
+			cbo.setDescription("");
+			cboList.add(cbo);
+		});
+
+	}
 	/**
 	 * excel杞崲涓篶bo鐨勫璞�
 	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
@@ -2428,7 +3287,7 @@
 		//2.鍒ゆ柇鍏抽敭灞炴�у湪绯荤粺閲屾槸鍚﹂噸澶�
 		//鍥犱负鏁版嵁閲忓緢澶э紝鎵�浠ュ緱鎯冲姙娉曞苟琛�
 		//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
-		Map<String,List<ClientBusinessObject>> indexTODataMap=new HashMap<>();
+		Map<String,List<BaseModel>> indexTODataMap=new HashMap<>();
 		List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
 			//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
 			//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -2446,8 +3305,16 @@
 				boolean isKeyCheck= commonsMapper.queryCountBySql(sqlBO.getSqlCount()) > 0;
 				if(isKeyCheck){
 					List<Map<String,String>> newDataList=  commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
-					List<ClientBusinessObject> newCboList=	ChangeMapTOClientBusinessObjects(newDataList);
-					indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX),newCboList);
+					//List<ClientBusinessObject> newCboList=	ChangeMapTOClientBusinessObjects(newDataList);
+					List<BaseModel> newCboList=new ArrayList<>();
+					newDataList.stream().forEach(stringStringMap -> {
+						BaseModel baseModel=new BaseModel();
+						DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel);
+						newCboList.add(baseModel);
+					});
+					if(!CollectionUtils.isEmpty(newCboList)) {
+						indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
+					}
 				}
 				return isKeyCheck;
 			}else{
@@ -2457,7 +3324,7 @@
 		if(!CollectionUtils.isEmpty(repeatDataMap)){
 			resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet()));
 		}
-		//resultVO.setIndexTODataMap(indexTODataMap);
+		resultVO.setIndexTODataMap(indexTODataMap);
 		//resultVO.setSuccess(true);
 		return resultVO;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java
index 0fa9c0d..0424584 100644
--- a/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/GroupMdmInterServiceImpl.java
@@ -198,7 +198,7 @@
 				}
 				//淇濆瓨琛ㄥ崟鏁版嵁
 				dockingPreApplyFormService.saveOrUpdateBatch(dockingPreAttrMappings);
-				mdmEngineClient.insertBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁
+				mdmEngineClient.updateBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁
 			}
 			return R.success("鐢宠鎺ュ彛璋冪敤鎴愬姛");
 		}catch (VciBaseException e){
@@ -312,7 +312,7 @@
 				}
 				//淇濆瓨琛ㄥ崟鏁版嵁
 				dockingPreApplyFormService.saveOrUpdateBatch(dockingPreAttrMappings);
-				mdmEngineClient.insertBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁
+				mdmEngineClient.updateBatchByType(btmName,updateCbos);//淇濆瓨鏁版嵁
 			}
 			return R.success("鐢宠鎺ュ彛璋冪敤鎴愬姛");
 		}catch (VciBaseException e){

--
Gitblit v1.9.3