From 1d5845e4b98f9c69833e54ef69253d85d0c69fe8 Mon Sep 17 00:00:00 2001
From: yuxc <653031404@qq.com>
Date: 星期五, 09 六月 2023 15:10:59 +0800
Subject: [PATCH] 1、对MDM服务的接口测试更改。 2、增加sys的菜单接口用于通过业务类型获取相关的界面按钮。

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java |  783 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 771 insertions(+), 12 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
index 61722bd..f24d9d7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -1,33 +1,54 @@
 package com.vci.ubcs.code.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
+import com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
 import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
-import com.vci.ubcs.code.entity.CodeClstemplateEntity;
+import com.vci.ubcs.code.entity.CodeClassifyTemplate;
+import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
 import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
+import com.vci.ubcs.code.mapper.CodeClassifyTemplateMapper;
 import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
+import com.vci.ubcs.code.service.ICodeTempphaseService;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
-import com.vci.ubcs.code.wrapper.CodeClstempattrWrapper;
-import com.vci.ubcs.common.utils.PageDO2PageVO;
+import com.vci.ubcs.code.wrapper.CodeClassifyTemplateAttrWrapper;
+import com.vci.ubcs.omd.feign.IAttributeClient;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
-import com.vci.ubcs.starter.util.Map2MPLLambdaUtil;
-import com.vci.ubcs.starter.util.MybatisParameterUtil;
+import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
+import com.vci.ubcs.starter.util.PatternUtil;
+import com.vci.ubcs.starter.util.UBCSCondition;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
+import com.vci.ubcs.starter.web.pagemodel.*;
 import com.vci.ubcs.starter.web.pagemodel.PageHelper;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
+import com.vci.ubcs.system.entity.DictBiz;
+import com.vci.ubcs.system.feign.IDictBizClient;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
 
 /**
  * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф湇鍔�
@@ -42,6 +63,33 @@
 	 */
 	@Resource
 	private CodeClassifyTemplateAttrMapper codeClassifyTemplateAttrMapper;
+
+	//	@Resource
+	//	CodeClstempattrMapper codeClstempattrMapper;
+		//	@Resource
+	//	ICodeTempphaseService codeTempphaseService;
+
+	@Resource
+	IDictBizClient iDictBizClient;
+
+	@Resource
+	CodeClassifyTemplateMapper codeClassifyTemplateMapper;
+
+	@Resource
+	@Lazy
+	ICodeTempphaseService codeTempphaseService;
+
+	/**
+	 * 瀵硅薄鐨勬搷浣�
+	 */
+	@Autowired(required = false)
+	private RevisionModelUtil revisionModelUtil;
+
+	/**
+	 * 灞炴�ф湇鍔″璞�
+	 */
+	@Resource
+	private IAttributeClient attributeClient;
 
 	/**
 	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
@@ -70,7 +118,7 @@
 		IPage<CodeClassifyTemplateAttr> doList = codeClassifyTemplateAttrMapper.selectPage(Condition.getPage(query), mpjLambdaWrapper);
 		IPage<CodeClassifyTemplateAttrVO> voList = new Page<>();
 		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-			voList = CodeClstempattrWrapper.build().pageVO(doList);
+			voList = CodeClassifyTemplateAttrWrapper.build().pageVO(doList);
 		}
 		return voList;
 	}
@@ -83,11 +131,11 @@
 	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
 	 */
 	@Override
-	public IPage<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, Object> conditionMap, PageHelper pageHelper) throws VciBaseException{
+	public IPage<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
 		if(conditionMap == null){
-			conditionMap = new HashMap<String, Object>();
+			conditionMap = new HashMap<String, String>();
 		}
-		return gridCodeClassifyTemplateAttr(Map2MPLLambdaUtil.getMPJLambdaWrapper(conditionMap, CodeClassifyTemplateAttr.class),pageHelper);
+		return gridCodeClassifyTemplateAttr(UBCSCondition.getMPJLambdaWrapperByMapString(conditionMap, CodeClassifyTemplateAttr.class),pageHelper);
 	}
 
 	@Override
@@ -112,7 +160,11 @@
 //			conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
 //			PageHelper pageHelper = new PageHelper(-1);
 //			pageHelper.addDefaultAsc("orderNum");
-			List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
+//			QueryWrapper<CodeClassifyTemplateAttr> wrapper = new QueryWrapper<>();
+//			wrapper.in("classifytemplateoid",templateOids);
+//			wrapper.orderByAsc("orderNum");
+			List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectByClassifytemplateoidRel(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
+//				baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
 
 			if(!CollectionUtils.isEmpty(attrDOS)){
 				attrDOList.addAll(attrDOS);
@@ -158,6 +210,713 @@
 		return vo;
 	}
 
+	//	@Override
+//	public IPage<CodeClassifyTemplateAttrVO> selectCodeClstempattrPage(IPage<CodeClassifyTemplateAttrVO> page, CodeClassifyTemplateAttrVO CodeClstempattr) {
+//		return page.setRecords(baseMapper.selectCodeClstempattrPage(page, CodeClstempattr));
+//	}
 
 
+//	/**
+//	 * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
+//	 *
+//	 * @param templateOidCollection 妯℃澘鐨勪富閿�
+//	 * @return 灞炴�х殑淇℃伅
+//	 */
+//	@Override
+//	public List<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection) {
+//		if(CollectionUtils.isEmpty(templateOidCollection)){
+//			return new ArrayList<>();
+//		}
+//		List<CodeClassifyTemplateAttr> attrDOList = new ArrayList<>();
+//		VciBaseUtil.switchCollectionForOracleIn(templateOidCollection).stream().forEach(templateOids->{
+////			Map<String,String> conditionMap = new HashMap<>();
+////			conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")");
+////			PageHelper pageHelper = new PageHelper(-1);
+////			pageHelper.addDefaultAsc("orderNum");
+//			List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0])));
+//
+//			if(!CollectionUtils.isEmpty(attrDOS)){
+//				attrDOList.addAll(attrDOS);
+//			}
+//		});
+//		return codeClassifyTemplateAttrDO2VOs(attrDOList);
+//	}
+
+//	/**
+//	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+//	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
+//	 * @return 鏄剧ず瀵硅薄
+//	 */
+//	@Override
+//	public List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClassifyTemplateAttr>  codeClassifyTemplateAttrDOs){
+//		List<CodeClassifyTemplateAttrVO> voList = new ArrayList<CodeClassifyTemplateAttrVO>();
+//		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOs)){
+//			for(CodeClassifyTemplateAttr s: codeClassifyTemplateAttrDOs){
+//				CodeClassifyTemplateAttrVO vo =  codeClassifyTemplateAttrDO2VO(s);
+//				if(vo != null){
+//					voList.add(vo);
+//				}
+//			}
+//		}
+//		return voList;
+//	}
+
+//	/**
+//	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
+//	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
+//	 * @return 鏄剧ず瀵硅薄
+//	 */
+//	@Override
+//	public  CodeClassifyTemplateAttrVO codeClassifyTemplateAttrDO2VO(CodeClassifyTemplateAttr codeClassifyTemplateAttrDO){
+//		CodeClassifyTemplateAttrVO vo = new CodeClassifyTemplateAttrVO();
+//		if(codeClassifyTemplateAttrDO != null){
+//			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,vo);
+//			//濡傛灉鏈塴cstatus鐨勭被鐨勮瘽
+//			vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributeDataType()));
+//		}
+//		return vo;
+//	}
+
+	/**
+	 * 鏌ヨ鎵�鏈夌殑涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public DataGrid<CodeClassifyTemplateAttrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) {
+		DataGrid<CodeClassifyTemplateAttrVO> dataGrid=new DataGrid<>();
+		//娌℃湁浼犻�掑弬鏁帮紝灏变笉鎵ц鏌ヨ閫昏緫
+		if(conditionMap.size()==0){
+			dataGrid.setData(new ArrayList<>());
+			dataGrid.setTotal(0);
+			return dataGrid;
+		}
+
+		if (pageHelper == null) {
+			pageHelper = new PageHelper(-1);
+		}
+		pageHelper.addDefaultAsc("ordernum");
+//		IPage iPage = new IPage();
+		Query query = new Query();
+		query.setAscs("ordernum");
+//		query.setSize(100);
+		if(pageHelper.getLimit() != -1){
+			query.setSize(pageHelper.getLimit());
+			query.setCurrent(pageHelper.getPage());
+		}
+//		Condition.getPage(query)
+		CodeClassifyTemplateAttr codeClstempattrVO = new CodeClassifyTemplateAttr();
+//		BeanUtil.toBean(map,codeClstempattrVO);
+//		BeanUtil
+		BeanMap beanMap = BeanMap.create(codeClstempattrVO);
+
+		beanMap.putAll(conditionMap);
+//		Condition.getQueryWrapper(
+		IPage<CodeClassifyTemplateAttr> doList = baseMapper.
+			selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClstempattrVO));
+
+
+		if (!CollectionUtils.isEmpty(doList.getRecords())) {
+//			CodeClstempattrEntity codeClstempattrEntity = new CodeClstempattrEntity();
+//			BeanUtils.copyProperties(conditionMap, codeClstempattrEntity);
+//			List<CodeClstempattrEntity> codeClstempattrEntities = new ArrayList<>();
+//			BeanUtils.copyProperties(doList,codeClstempattrEntities);
+//			codeClstempattrEntities.addAll(doList);
+			dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList.getRecords()));
+			dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(baseMapper.selectCount(Condition.getQueryWrapper(codeClstempattrVO)))));
+		}
+		return dataGrid;
+	}
+
+	/**
+	 * 澧炲姞涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 */
+	@Override
+	public CodeClassifyTemplateAttrVO addSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO){
+		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttr();
+		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeClassifyTemplateAttrDO,"codeclstempattr");
+		baseMapper.insert(codeClassifyTemplateAttrDO);
+		return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
+	}
+
+	/**
+	 * 鎵归噺娣诲姞
+	 * @param codeClassifyTemplateAttrDTOs 鏁版嵁浼犺緭瀵硅薄
+	 * @return 淇濆瓨鍚庣殑鏄剧ず瀵硅薄
+	 */
+	@Override
+	@Transactional
+	public List<CodeClassifyTemplateAttrVO> batchAddSave(List<CodeClassifyTemplateAttrDTO> codeClassifyTemplateAttrDTOs) {
+		if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
+			return new ArrayList<>();
+		}
+
+		//鍙栨墍鏈夊睘鎬х殑鑻辨枃鍚嶇О锛岀涓変釜楠岃瘉闇�瑕佺敤鍒�
+		Map<String,CodeClassifyTemplateAttrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
+
+		//鎵惧睘鎬т腑鏂囧悕瀛楅噸澶�
+		Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
+		List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
+		if(!CollectionUtils.isEmpty(repeatNameList)){
+			throw new VciBaseException("妯℃澘灞炴�т腑鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
+		}
+		//鎵惧睘鎬ц嫳鏂囧悕瀛楅噸澶�
+		Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
+		List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
+		if(!CollectionUtils.isEmpty(repeatIdList)){
+			throw new VciBaseException("妯℃澘灞炴�ц嫳鏂囧悕绉般�恵0}銆戦噸澶�",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
+		}
+
+		//妯℃澘oid
+		String CLASSIFYTEMPLATEOID = null;
+		//杞崲
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClassifyTemplateAttr>();
+		List<String> prefix = new ArrayList<>();
+		List<String> suffix = new ArrayList<>();
+		List<String> dateFormates = new ArrayList<>();
+		for (CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
+			VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
+			//灏咲TO杞崲涓篋O
+			CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = new CodeClassifyTemplateAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+			codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
+
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixValue())){
+				prefix.add(codeClassifyTemplateAttrDO.getPrefixValue());
+			}
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixValue())){
+				suffix.add(codeClassifyTemplateAttrDO.getSuffixValue());
+			}
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+				dateFormates.add(codeClassifyTemplateAttrDO.getCodeDateFormat());
+			}
+			//鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumString())){
+				throw new VciBaseException("{0}{1}灞炴�х殑鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+			}
+			//鍒嗙被娉ㄥ叆
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyInvokeAttr())
+				&& !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyInvokeLevel())
+				&& VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyInvokeLevel()) < 0){
+				throw new VciBaseException("{0}{1}灞炴�х殑鏄垎绫绘敞鍏ワ紝浣嗘槸娉ㄥ叆灞傜骇涓嶈兘灏忎簬0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+			}
+
+			//鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferConfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferConfig())){
+				throw new VciBaseException("{0}{1}灞炴�х殑鍙傜収閰嶇疆鏁版嵁鏍煎紡閿欒!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+			}
+			if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodeDateFormat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodeDateFormat())){
+				throw new VciBaseException("{0}{1}灞炴�х殑鏃堕棿鏍煎紡涓嶇鍚堣姹�",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
+			}
+			//濡傛灉鏄粍鍚堣鍒欙紝閲岄潰浣跨敤鐨勫睘鎬т笉鑳界己澶憋紝涔熼兘寰楁樉绀�
+			String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
+			boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
+			if(isContainsDynamicParameter){
+				List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//鍖呭惈鐨勬墍鏈�${xxx}涓殑xxx
+				if(!CollectionUtils.isEmpty(userdAttrList)){
+					String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
+					if(StringUtils.isNotBlank(unExistAttr)){
+						throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑涓嶅瓨鍦�!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
+					}
+					//瑕佺湅鐪嬭〃鍗曟槸鍚︽樉绀�
+					String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
+						new CodeClassifyTemplateAttrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
+					if(StringUtils.isNotBlank(unFormDisplayAttr)){
+						throw new VciBaseException("{0}灞炴�ф槸缁勫悎瑙勫垯锛屼絾鏄鍒欓噷鍖呭惈鐨勫睘鎬{1}]鍦ㄥ綋鍓嶆ā鏉夸腑娌℃湁璁剧疆 琛ㄥ崟鏄剧ず ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
+					}
+				}
+			}
+
+			if(CLASSIFYTEMPLATEOID==null){
+				CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
+			}
+
+		}
+
+		//鎵ц鏁版嵁淇濆瓨鎿嶄綔
+//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+		//鍏堥兘鍒犱簡
+//		VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+//		deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
+		Map<String,Object> condition = new HashMap<>();
+		condition.put("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDODelete = baseMapper.selectByMap(condition);
+
+		//oids
+		List<String> oids = new ArrayList<String>();
+		for (CodeClassifyTemplateAttr codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
+			oids.add(codeClassifyTemplateAttrDO.getOid());
+		}
+//		BatchCBO batchCBOTemplateDelete = new BatchCBO();
+		if(!CollectionUtils.isEmpty(oids)){
+			baseMapper.deleteBatchIds(oids);
+		}
+
+		//鍐嶆柊澧�
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+			this.saveBatch(codeClassifyTemplateAttrDOInsert);
+		}
+
+		//璋冪敤闃舵
+		if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
+			codeTempphaseService.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
+
+		}
+
+
+//		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+		//澶勭悊鍙緭鍙�夌殑瀛楃
+		if(!CollectionUtils.isEmpty(prefix)){
+			for (String s : prefix) {
+				DictBiz dictBiz = new DictBiz();
+				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
+				dictBiz.setDictKey(s);
+				dictBiz.setDictValue("prefix");
+				iDictBizClient.getCheck(dictBiz) ;
+			}
+//				.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
+		}
+		if(!CollectionUtils.isEmpty(suffix)){
+			for (String s : suffix) {
+				DictBiz dictBiz = new DictBiz();
+				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
+				dictBiz.setDictKey(s);
+				dictBiz.setDictValue("suffix");
+				iDictBizClient.getCheck(dictBiz) ;
+			}
+//			charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
+		}
+		if(!CollectionUtils.isEmpty(dateFormates)){
+			for (String s : dateFormates) {
+				DictBiz dictBiz = new DictBiz();
+				dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
+				dictBiz.setDictKey(s);
+				dictBiz.setDictValue("dateFormates");
+				iDictBizClient.getCheck(dictBiz) ;
+			}
+//			charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
+		}
+
+//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+//		boService.persistenceBatch(batchCBOTemplateDelete);//涓�璧锋墽琛屼繚瀛�
+		return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
+	}
+
+	public boolean checkKVArr(String kvString){
+		boolean isKV = true;
+		try {
+			JSONObject.parseArray(kvString, KeyValue.class);
+		}catch (Exception e){
+			isKV=false;
+		}
+		return isKV;
+	}
+
+	public boolean checkKVObj(String kvString){
+		boolean isKV = true;
+		try {
+			JSONObject.parseObject(kvString, UIFormReferVO.class);
+		}catch (Exception e){
+			isKV=false;
+		}
+		return isKV;
+	}
+
+	/**
+	 * 鏍¢獙鏃堕棿鏍煎紡
+	 * @param dateFormat 鏃堕棿鏍煎紡
+	 * @return true琛ㄧず鏍¢獙閫氳繃
+	 */
+	public boolean checkDateFormat(String dateFormat){
+		try{
+			VciDateUtil.date2Str(new Date(),dateFormat);
+			return  true;
+		}catch (Throwable e){
+			return false;
+		}
+	}
+
+	/**
+	 * 淇敼涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+	 * @return 鎵ц缁撴灉
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public R editSave(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"鏁版嵁瀵硅薄",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�т富閿�");
+
+		//鍒ゆ柇浼犺繃鏉ョ殑鏋氫妇娉ㄥ叆鏄惁鏄痡sonArr鏍煎紡
+		if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumString())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumString())){
+			throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+		}
+
+		//鍒ゆ柇浼犺繃鏉ョ殑鍙傜収閰嶇疆鏄惁鏄痡son鏍煎紡
+		if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
+			throw new VciBaseException("鏋氫妇娉ㄥ叆鏁版嵁鏍煎紡閿欒!");
+		}
+
+
+		//妫�鏌s
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDOCopyFromDTO = new CodeClassifyTemplateAttr();
+//		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
+//		boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
+
+		//妫�鏌s
+//		Map<String,Object> condition = new HashMap<>(2);
+//		condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
+//		condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
+		CodeClassifyTemplateAttr detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
+		if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+		}
+
+		//灏咲TO杞崲涓篋O
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
+		revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+		baseMapper.updateById(codeClassifyTemplateAttrDO);
+		return R.data(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
+	}
+
+	/**
+	 * 鍒犻櫎涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param codeClassifyTemplateAttrDTO 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
+	 * @return 鍒犻櫎缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛岃寮曠敤鏃舵姏鍑哄紓甯�
+	 */
+	@Override
+	public R deleteCodeClassifyTemplateAttr(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+		VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹璞�",codeClassifyTemplateAttrDTO.getOid(),"涓婚搴撳垎绫荤殑妯℃澘灞炴�х殑涓婚敭");
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
+		R baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
+		if(baseResult.isSuccess()) {
+		}else{
+			return baseResult;
+		}
+		//鎵ц鍒犻櫎鎿嶄綔
+		int deleteNum = baseMapper.deleteById(codeClassifyTemplateAttrDO.getOid());
+		return deleteNum>0?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
+	}
+
+	/**
+	 * 鏍¢獙鏄惁鍙互鍒犻櫎锛屽鏋滃瓨鍦ㄤ笅绾э紝骞朵笖涓嬬骇鏈夋暟鎹紩鐢ㄥ垯涓嶈兘鍒犻櫎
+	 * @param codeClassifyTemplateAttrDTO 鏁版嵁浼犺緭瀵硅薄
+	 * @param codeClassifyTemplateAttrDO 鏁版嵁搴撲腑鐨勬暟鎹璞�
+	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
+	 */
+	private R checkIsCanDeleteForDO(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO, CodeClassifyTemplateAttr codeClassifyTemplateAttrDO) {
+//		boService.checkTs(codeClassifyTemplateAttrDO);
+//		Map<String,Object> condition = new HashMap<>(2);
+//		condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
+//		condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
+		CodeClassifyTemplateAttr detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
+//		.selectOne(Condition.getQueryWrapper(condition,CodeClstempattrEntity.class));
+
+		if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//涓嶆槸鏈�鏂扮殑涓嶈鏀�
+			return R.fail("褰撳墠鏁版嵁涓嶆槸鏈�鏂帮紝璇峰埛鏂板悗鍐嶄慨鏀癸紒");
+		}
+		if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
+			return R.success("鍙互鍒犻櫎锛�");
+		}else{
+			return R.fail(DATA_LINKED_NOT_DELETE);
+		}
+	}
+
+	/**
+	 * 鏍¢獙鏄惁琚紩鐢�
+	 * @param oid 涓婚敭
+	 * @throws VciBaseException 琚紩鐢ㄧ殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	private boolean checkIsLinked(String oid) throws VciBaseException{
+		//TODO 娣诲姞闇�瑕佹牎楠屽紩鐢ㄧ殑鍦版柟
+		return false;
+	}
+
+	/**
+	 * 涓婚敭鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param oid 涓婚敭
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屾暟鎹笉瀛樺湪鏃朵細鎶涘嚭寮傚父
+	 */
+	@Override
+	public  CodeClassifyTemplateAttrVO getObjectByOid(String oid) throws VciBaseException{
+		return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
+	}
+	/**
+	 * 涓婚敭鏌ヨ鏁版嵁瀵硅薄
+	 * @param oid 涓婚敭
+	 * @return  鏁版嵁瀵硅薄
+	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽苟涓旀暟鎹笉瀛樺湪鐨勬椂鍊欎細鎶涘嚭寮傚父
+	 */
+	private CodeClassifyTemplateAttr selectByOid(String oid) throws VciBaseException{
+		VciBaseUtil.alertNotNull(oid,"涓婚敭");
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = baseMapper.selectById(oid.trim());
+		if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
+			throw new VciBaseException(DATA_OID_NOT_EXIST);
+		}
+		return codeClassifyTemplateAttrDO;
+	}
+
+	/**
+	 * 涓婚敭鎵归噺鑾峰彇涓婚搴撳垎绫荤殑妯℃澘灞炴��
+	 * @param oidCollections 涓婚敭闆嗗悎锛屼絾鏄彈鎬ц兘褰卞搷锛屽缓璁竴娆℃煡璇笉瓒呰繃10000涓�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
+	 * @throws VciBaseException 鏌ヨ鍑虹幇寮傚父鏃朵細鎶涘嚭
+	 */
+	@Override
+	public Collection<CodeClassifyTemplateAttrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) {
+		VciBaseUtil.alertNotNull(oidCollections,"鏁版嵁瀵硅薄涓婚敭闆嗗悎");
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
+		return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
+	}
+
+	/**
+	 * 浣跨敤涓婚敭闆嗗悎鏌ヨ鏁版嵁瀵硅薄
+	 * @param oidCollections 涓婚敭鐨勯泦鍚�
+	 * @return 鏁版嵁瀵硅薄鍒楄〃
+	 */
+	private List<CodeClassifyTemplateAttr> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList = new ArrayList<CodeClassifyTemplateAttr>();
+		if(!CollectionUtils.isEmpty(oidCollections)){
+			Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
+			for(Collection<String> oids: oidCollectionsList){
+				List<CodeClassifyTemplateAttr> tempDOList = baseMapper.selectBatchIds(oids);
+				if(!CollectionUtils.isEmpty(tempDOList)){
+					codeClassifyTemplateAttrDOList.addAll(tempDOList);
+				}
+			}
+		}
+		return  codeClassifyTemplateAttrDOList;
+	}
+
+	/**
+	 * 鍙傜収涓婚搴撳垎绫荤殑妯℃澘灞炴�у垪琛�
+	 * @param conditionMap 鏌ヨ鏉′欢
+	 * @param pageHelper 鍒嗛〉鍜屾帓搴�
+	 * @return 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞″垪琛紝鐢熸晥鐨勫唴瀹�
+	 * @throws VciBaseException 鏌ヨ鏉′欢鍜屽垎椤靛嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父
+	 */
+	//	@Override
+	//	public DataGrid<CodeClassifyTemplateAttrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
+	//		if(conditionMap == null){
+	//			conditionMap = new HashMap<String, String>();
+	//		}
+	//		return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
+	//	}
+
+	/**
+	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅鐨勬墍鏈夋湭閫夋嫨鐨勫睘鎬�
+	 * @param baseQueryObject
+	 * @return
+	 */
+	@Override
+	public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
+		if(baseQueryObject.getConditionMap() == null){
+			baseQueryObject.setConditionMap(new HashMap<>());
+		}
+		DataGrid<BtmTypeAttributeVO> dataGrid=new DataGrid<BtmTypeAttributeVO>();
+		//妯℃澘oid
+		String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+		String name = baseQueryObject.getConditionMap().getOrDefault("name","");
+		String id = baseQueryObject.getConditionMap().getOrDefault("id","");
+
+		//娌℃湁oid涓嶆墽琛岄�昏緫
+		if(StringUtils.isBlank(templateAttrOid)){
+			dataGrid.setData(new ArrayList<>());
+			dataGrid.setTotal(0);
+			return dataGrid;
+		}
+
+		//鏌ヨ妯℃澘瀵硅薄
+		CodeClassifyTemplate codeClassifyTemplateDO = codeClassifyTemplateMapper.selectById(templateAttrOid);
+
+		//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+		// 寰呭畬鍠�
+		List<BtmTypeAttributeVO> boAttrs = null;  //(List<BtmTypeAttributeVO>)attributeClient.selectById(codeClassifyTemplateDO.getBtmTypeId());// this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
+		// codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
+		// BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
+		//鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
+		if(boAttrs == null){
+			boAttrs = new ArrayList<>();
+		}
+		if(!false){
+//			List<CodeOsbtmtypeattributeVO> finalBoAttrs = boAttrs;
+//			attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
+//				CodeOsbtmtypeattributeVO attributeVO = new CodeOsbtmtypeattributeVO();
+//				BeanUtil.convert(attr, attributeVO);
+//				if ("id".equalsIgnoreCase(attributeVO.getId())) {
+//					attributeVO.setName("浼佷笟缂栫爜");
+//				}
+//				if ("name".equalsIgnoreCase(attributeVO.getId())) {
+//					attributeVO.setName("闆嗗洟鐮�");
+//				}
+//				attributeVO.setAttrDataType(attr.getAttributeDataType());
+//				attributeVO.setAttributeLength(attr.getAttrLength());
+//				attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
+//				attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
+//				finalBoAttrs.add(attributeVO);
+//			});
+//			boAttrs = finalBoAttrs;
+			Object o = null;
+		}
+
+		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+		Map<String,Object> condition = new HashMap<>(1);
+		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList = baseMapper.selectByMap(condition);
+
+		List<String> btmOids = new ArrayList<String>();
+		for (CodeClassifyTemplateAttr codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+			btmOids.add(codeClassifyTemplateAttrDO.getId());
+		}
+
+		//杩囨护鎺夊凡缁忓瓨鍦ㄧ殑灞炴��
+		List<BtmTypeAttributeVO> boAttrss = new ArrayList<BtmTypeAttributeVO>();
+
+		for (BtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+			if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
+				//鐪嬬湅鏄笉鏄湁妯$硦鏌ヨ
+				boolean inSearch = true;
+				if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
+					inSearch = false;
+				}
+				if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
+					inSearch = false;
+				}
+				if(inSearch) {
+					boAttrss.add(osBtmTypeAttributeVO);
+				}
+			}
+		}
+		dataGrid.setData(boAttrss);
+		dataGrid.setTotal(boAttrss.size());
+		return dataGrid;
+	}
+
+	/**
+	 * 鏌ヨ杩欎釜妯℃澘锛屼笟鍔$被鍨嬩笅宸查�夋嫨鐨勫睘鎬�
+	 * @param baseQueryObject
+	 * @return
+	 */
+	@Override
+	public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
+		DataGrid<BtmTypeAttributeVO> dataGrid=new DataGrid<BtmTypeAttributeVO>();
+		//妯℃澘oid
+		String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
+
+		//娌℃湁oid涓嶆墽琛岄�昏緫
+		if(StringUtils.isBlank(templateAttrOid)){
+			dataGrid.setData(new ArrayList<>());
+			dataGrid.setTotal(0);
+			return dataGrid;
+		}
+
+		//鏌ヨ妯℃澘瀵硅薄
+		CodeClassifyTemplate codeClassifyTemplateDO = codeClassifyTemplateMapper.selectById(templateAttrOid);
+
+		//杩欎釜涓氬姟绫诲瀷涓嬬殑鎵�鏈夊睘鎬�
+		// 寰呭畬鍠�
+		List<BtmTypeAttributeVO> boAttrs =  null; // (List<BtmTypeAttributeVO>) attributeClient.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
+//		codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
+//		BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
+		//杩欎釜妯℃澘涓嬪凡缁忔湁鐨勫睘鎬�
+		//鎶婇粯璁ょ殑灞炴�т篃娣诲姞鍒癰oAttrs
+		if(boAttrs == null){
+			boAttrs = new ArrayList<>();
+		}
+//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+//		queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
+
+//		Map<String,Object> condition = new HashMap<>(1);
+//		condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
+
+		QueryWrapper<CodeClassifyTemplateAttr> wrapper=new QueryWrapper<>();
+		wrapper.eq("CLASSIFYTEMPLATEOID",templateAttrOid);
+
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList = baseMapper.selectList(wrapper);
+		List<String> btmOids = new ArrayList<String>();
+		for (CodeClassifyTemplateAttr codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
+			btmOids.add(codeClassifyTemplateAttrDO.getId());
+		}
+
+		//杩囨护鎺夐櫎浜嗚嚜韬殑鍒殑灞炴��
+		List<BtmTypeAttributeVO> boAttrss = new ArrayList<BtmTypeAttributeVO>();
+
+		for (BtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
+			if(btmOids.contains(osBtmTypeAttributeVO.getId())){
+				boAttrss.add(osBtmTypeAttributeVO);
+			}
+		}
+		dataGrid.setData(boAttrss);
+		dataGrid.setTotal(boAttrss.size());
+		return dataGrid;
+	}
+
+	/**
+	 * 鍚屾鍒板叾浠栨ā鏉�
+	 * @param codeClassifyTemplateAttrDTO oid
+	 * @return
+	 */
+	@Override
+	public R copyto(CodeClassifyTemplateAttrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
+
+		String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
+
+		//鏌ヨ鍑烘潵瑕佸鍒剁殑瀵硅薄
+		CodeClassifyTemplateAttr codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
+		String id = codeClassifyTemplateAttrDO.getId();//鑻辨枃鍚嶇О
+		String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifyTemplateOid();
+
+		//鏌ヨ鍏朵粬id=id鐨勬ā鏉垮睘鎬�
+//		VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
+//		queryWrapper.addQueryMap("id",id);
+//		Map<String,Object> condition = new HashMap<>(1);
+//		condition.put("id",id);
+		QueryWrapper<CodeClassifyTemplateAttr> wrapper=new QueryWrapper<>();
+		wrapper.eq("id",id);
+		//鎵�鏈塱d=id鐨勬ā鏉垮睘鎬�
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOList =baseMapper.selectList(wrapper);
+
+		//瑕佸垹闄ょ殑妯℃澘灞炴�х殑oids
+		List<String> deleteOids = new ArrayList<String>();
+		//瑕佷慨鏀圭殑妯℃澘灞炴�у璞�
+		List<CodeClassifyTemplateAttr> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClassifyTemplateAttr>();
+		for (CodeClassifyTemplateAttr codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
+			String oid = codeClassifyTemplateAttrDOi.getOid();
+			String templateOldOid = codeClassifyTemplateAttrDOi.getClassifyTemplateOid();
+
+			CodeClassifyTemplateAttr codeClassifyTemplateAttrDOInsert = new CodeClassifyTemplateAttr();
+			BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
+			codeClassifyTemplateAttrDOInsert.setOid(oid);
+			codeClassifyTemplateAttrDOInsert.setClassifyTemplateOid(templateOldOid);
+			codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
+
+			deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
+		}
+
+//		WebUtil.setPersistence(false);//涓嶆墽琛屼繚瀛�
+
+		//鍒犻櫎
+//		BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrDOissifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
+		baseMapper.deleteBatchIds(deleteOids);
+		//鍐嶆柊澧�
+//		BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
+//		batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
+		this.saveBatch(codeClassifyTemplateAttrDOListInsert);
+
+//		WebUtil.setPersistence(true);//鎵ц淇濆瓨
+//		boService.persistenceBatch(batchCBOTemplateAttrDelete);//涓�璧锋墽琛屼繚瀛�
+
+		return R.success("鎿嶄綔鎴愬姛锛�");
+	}
+
 }

--
Gitblit v1.9.3