From df18b23b4569828d6be32fb64c80492241e1fc46 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期一, 16 十月 2023 20:31:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java |  873 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 660 insertions(+), 213 deletions(-)

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 2d2d0ef..3614e40 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
@@ -5,24 +5,25 @@
 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.vci.ubcs.code.applyjtcodeservice.vo.BaseModelVO;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
 import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
-import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
 import com.vci.ubcs.code.dto.CodeOrderDTO;
 import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
 import com.vci.ubcs.code.entity.*;
 import com.vci.ubcs.code.enumpack.*;
-import com.vci.ubcs.code.mapper.CodeWupinMapper;
 import com.vci.ubcs.code.mapper.CommonsMapper;
 import com.vci.ubcs.code.service.*;
+import com.vci.ubcs.code.util.ClientBusinessObject;
 import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
+import com.vci.ubcs.code.vo.CodeReferConfigVO;
 import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
 import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
 import com.vci.ubcs.code.vo.pagemodel.*;
-import com.vci.ubcs.flow.core.entity.ProcessStageAttr;
+import com.vci.ubcs.code.wrapper.BaseMdodelWrapper;
+import com.vci.ubcs.flow.core.dto.FlowStatusDTO;
 import com.vci.ubcs.flow.core.feign.IMDMIFlowAttrClient;
 import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO;
 import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
@@ -38,6 +39,7 @@
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
 import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
 import com.vci.ubcs.starter.util.UBCSSqlKeyword;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.constant.RegExpConstant;
@@ -55,6 +57,7 @@
 import com.vci.ubcs.system.user.feign.IUserClient;
 import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
 import oracle.sql.TIMESTAMP;
+import org.aspectj.apache.bcel.classfile.Code;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.core.cache.utils.CacheUtil;
@@ -94,7 +97,7 @@
  * @date 2022-2-22
  */
 @Service
-public class MdmEngineServiceImpl extends ServiceImpl<CodeWupinMapper, CodeWupin> implements MdmEngineService {
+public class MdmEngineServiceImpl implements MdmEngineService {
 
 
     /**
@@ -102,7 +105,6 @@
      */
     @Resource
     private CodeClstemplateServiceImpl templateService;
-
 
     /**
      * 鐢熸垚缂栫爜鐨勬湇鍔�
@@ -184,8 +186,6 @@
     @Resource
     CommonsMapper commonsMapper;
 
-    @Resource
-    CodeWupinMapper codeWupinMapper;
     /**
      * 缂栫爜瑙勫垯鐨勬湇鍔�
      */
@@ -357,36 +357,32 @@
         if (baseModels.size() == 0) {
             throw new VciBaseException("鏈煡璇㈠埌鐩稿叧鏁版嵁銆�");
         }
-        // 寰呭畬鍠�
-        List<BtmTypeVO> cboList = null;  // btmTypeClient.selectList(wrapper);
         //杩橀渶瑕佷慨鏀筧llCode鐨勭敓鍛藉懆鏈�
-//		Map<String, String> conditionMap = new HashMap<>();
         QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
         allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname());
         allCodeWrapper.in("createcodeoid", oids);
-//		conditionMap.put("createcodeoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oids.toArray(new String[0])) + ")");
-//		conditionMap.put("createcodebtm", baseModelDTO.getBtmname());
-        List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);
-//		List<ClientBusinessObject> codeCbos = boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap);
-        // 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
+        List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 鍥炴敹闇�瑕佷笟鍔℃暟鎹垹闄�
         if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
             R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname()));
             if (!listR.isSuccess() || listR.getData().size() == 0) {
                 throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
             }
-            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
+			// 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬�
+			commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
+			// commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue());
         } else {
             for (BaseModel baseModel : baseModels) {
                 baseModel.setLcStatus(baseModelDTO.getLcStatus());
             }
-            updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
-            // lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
-        }
+			R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
+			if(!r.isSuccess()){
+				throw new VciBaseException("鏇存柊鏁版嵁鍑洪敊锛岄噸璇曪紒"+r.getMsg());
+			}
+		}
         for (CodeAllCode codeCbo : codeCbos) {
             codeCbo.setLcStatus(baseModelDTO.getLcStatus());
         }
         codeAllCodeService.updateBatchById(codeCbos);
-        // lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
     }
 
     /**
@@ -425,10 +421,18 @@
 //		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
         copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
 		cbo.setOid(VciBaseUtil.getPk());
+		cbo.setRevisionOid(VciBaseUtil.getPk());
+		cbo.setNameOid(VciBaseUtil.getPk());
 		cbo.setCreateTime(new Date());
 		cbo.setLastModifyTime(new Date());
-		cbo.setCreator(AuthUtil.getUser().getUserName());
-		cbo.setLastModifier(AuthUtil.getUser().getUserName());
+		//cbo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));銆�
+		// 瑕佹眰鏄剧ず璐﹀彿锛屾墍浠ュ仛浜嗘洿鏀�
+		cbo.setCreator(String.valueOf(AuthUtil.getUser().getAccount()));
+		cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
+		cbo.setTenantId(AuthUtil.getTenantId());
+		if(StringUtils.isNotBlank(orderDTO.getLcStatus())||StringUtils.isNotBlank(orderDTO.getData().get("lcStatus"))){
+			cbo.setLcStatus(StringUtils.isNotBlank(orderDTO.getLcStatus())?orderDTO.getLcStatus():orderDTO.getData().get("lcStatus"));
+		}
 //		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
         cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
 //		//end -- modify by lihang @20220407
@@ -437,18 +441,11 @@
         //澶囨敞
         cbo.setDescription(orderDTO.getDescription());
         cboList.add(cbo);
-//
-//		cboList.add(cbo);
+
         List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), cboList);
 
-
-//		List<String> charList = new ArrayList<>();
-//		for (BaseModel baseModel : cboList) {
-//			charList.add(baseModel.getId());
-//		}
         batchSaveSelectChar(templateVO, cboList);
         return codeList.size() > 0 ? codeList.get(0) : "";
-//		return null;
     }
 
     /**
@@ -473,7 +470,7 @@
                 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());
+                    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);
@@ -556,10 +553,15 @@
         String value = null;
         if (VciQueryWrapperForDO.BASIC_FIELD_MAP.containsKey(attrId)) {
             value = WebUtil.getStringValueFromObject(WebUtil.getValueFromField(WebUtil.getFieldForObject(attrId, orderDTO.getClass()).getName(), orderDTO));
-        } else {
+        	if(StringUtils.isBlank(value)){
+				value = orderDTO.getData().getOrDefault(attrId, "");
+			}
+		} else {
             //璇存槑鏄嚜琛岄厤缃殑
             //鍓嶇蹇呴』瑕佷紶閫掑皬鍐欑殑灞炴��
-            value = orderDTO.getData().getOrDefault(attrId, "");
+			String orDefault = orderDTO.getData().getOrDefault(attrId, "");
+			value = Func.isBlank(orDefault) ? orderDTO.getData()
+				.getOrDefault(attrId.toUpperCase(Locale.ROOT), ""):orDefault;
         }
         return value;
     }
@@ -655,8 +657,8 @@
         });
 
         //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
-
         if (!CollectionUtils.isEmpty(conditionMap)) {
+			conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
 //			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
             R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
@@ -665,7 +667,11 @@
             }
             final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
             conditionMap.forEach((key, value) -> {
-                sql[0] += " and " + key + " = " + value;
+				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) {
+					sql[0] += " and " + key + " is null";
+				}else{
+					sql[0] += " and " + key + " = " + value;
+				}
             });
             if (StringUtils.isNotBlank(orderDTO.getOid())) {
                 //淇敼鐨勬椂鍊欙紝闇�瑕佹帓闄よ嚜宸�
@@ -683,7 +689,94 @@
         }
     }
 
-    /**
+	/**
+	 * 鏍¢獙鍏抽敭灞炴��
+	 *
+	 * @param orderDTO         缂栫爜鐢宠鐨勭浉鍏崇殑淇℃伅
+	 */
+	@Override
+	public List<Map> checkKeyAttrOnOrderFordatas(CodeOrderDTO orderDTO) {
+		List<Map>dataList=new ArrayList<>();
+		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+		CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
+		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
+		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 = "";
+			}
+			wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+		});
+
+		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
+		if (!CollectionUtils.isEmpty(conditionMap)) {
+			conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
+//			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
+			R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
+//				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+			if (!listR.isSuccess() || listR.getData().size() == 0) {
+				throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+			}
+			final String[] sql = {"select * from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+			conditionMap.forEach((key, value) -> {
+				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) {
+					sql[0] += " and " + key + " is null";
+				}else{
+					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 lastR = '1' and lastV = '1' ";
+//			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
+			dataList=commonsMapper.selectBySql(sql[0]);
+			if (!CollectionUtils.isEmpty(dataList)) {
+//				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
+//				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
+//				throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+				return dataList;
+			}
+		}
+		return dataList;
+	}
+
+	/**
+	 * 鏍规嵁褰撳墠鐢宠缂栫爜鐨勫垎绫伙紝閫愬眰寰�涓婃牎楠屾槸鍚︾鍚堝睘浜庨厤缃殑涓殑鍒嗙被瀛愯妭鐐圭殑鍒�
+	 * 绫伙紝濡傛灉绗﹀悎锛屽垯璇ュ垎绫荤敵璇风殑缂栫爜涓洪泦鍥㈢爜杩斿洖true锛屽弽涔嬪垯涓轰紒涓氱紪鐮佽繑鍥瀎alse
+	 * @param parameter 浼犲叆鏁版嵁,classifyGroupCode:閰嶇疆鐨勪腑鐨勫垎绫婚《鑺傜偣锛宱id锛氶�夋嫨鑺傜偣鐨刼id
+	 */
+	@Override
+	public R checkGroupCode(Map<String, String> parameter) {
+		List<CodeClassify> codeClassifyList = classifyService.selectAllLevelParentByOid(parameter.get("oid"));
+		Set<String> configGroupCode = Arrays.stream(parameter.get("classifyGroupCode").split("#")).collect(Collectors.toSet());
+//		Boolean checkGroupFlag = false;//鏄惁鏌ヨ鍒伴厤缃殑椤跺眰鍒嗙被涓�
+		for (int i = codeClassifyList.size()-1; i >= 0; i--) {
+			if(configGroupCode.contains(codeClassifyList.get(i).getId())){
+//				checkGroupFlag = true;
+				return R.data("true");
+			}
+//			if(checkGroupFlag && parameter.get("nowApplyCode").equals(codeClassifyList.get(i).getId())){
+//				return R.data(true);
+//			}
+		}
+		return R.data("false");
+	}
+
+	/**
      * 灏佽鍏抽敭灞炴�х殑鏌ヨ璇彞
      *
      * @param value        褰撳墠鐨勫��
@@ -702,7 +795,7 @@
         boolean ignoreSpace = trim || trimAll;
         if (StringUtils.isBlank(value)) {
             //涓虹┖鐨勬椂鍊欙紝涓嶈兘鐢≦ueryOperation.ISNULL锛屽钩鍙颁笉鐭ラ亾鍟ユ椂鍊欎笉澶勭悊杩欑浜�
-            conditionMap.put("t." + attrId, "null");
+			conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
         } else {
             if (keyRuleVO != null) {
                 String queryKey = "";
@@ -738,8 +831,12 @@
                 queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
                 conditionMap.put(queryKey, queryValue);
             } else {
-                //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
-                conditionMap.put("t." + attrId, value);
+				if(StringUtils.isNotBlank(value)) {
+					//涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
+					conditionMap.put("t." + attrId, "'" + value + "'");
+				}else{
+					conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
+				}
             }
         }
     }
@@ -808,10 +905,6 @@
         } 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))) {
@@ -822,9 +915,6 @@
 				}
 			}
 		});
-//		BeanMap beanMap = BeanMap.create(cbo);
-//		beanMap.putAll(orderDTO.getData());
-
         try {
 			Map<String, String> data = new HashMap<>();
             data.put(cbo.getData().containsKey(CODE_CLASSIFY_OID_FIELD.toUpperCase())?CODE_CLASSIFY_OID_FIELD.toUpperCase():CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
@@ -886,7 +976,7 @@
             return (BaseModel) valueWrapper.get();
         } catch (Exception e) {
             logger.error("鍒涘缓涓氬姟绫诲瀷瀵硅薄", e);
-            throw new VciBaseException("initBtmError", new String[]{btmName});
+            throw new ServiceException("initBtmError:"+"涓氬姟绫诲瀷锛�"+btmName+":"+e.getMessage());
         }
     }
 
@@ -916,7 +1006,7 @@
 
 //						baseModels.stream().forEach(model-> {
                         try {
-                            map = VciBaseUtil.convertBean2Map(cbo);
+                            map = VciBaseUtil.convertBean2Map(cbo,null);
                         } catch (Exception e) {
                             throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage());
                         }
@@ -942,6 +1032,26 @@
             }
         }
     }
+
+	/**
+	 * 灏佽寮�鍏崇殑鍐呭锛屽父鐢ㄤ簬瀵煎嚭
+	 * @param dataMap 鏁版嵁鐨勫唴瀹�
+	 * @param templateVO 妯℃澘鐨勬樉绀�
+	 */
+	@Override
+	public void wrapperBoolean(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO){
+		List<String> booleanAttributes = templateVO.getAttributes().stream().filter(s -> VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(s.getAttributeDataType())).map(s -> s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList());
+		if(!CollectionUtils.isEmpty(booleanAttributes)){
+			dataMap.stream().forEach(data -> {
+				booleanAttributes.stream().forEach(attrId->{
+					if(data.containsKey(attrId)){
+						String value = data.get(attrId);
+						data.put(attrId,BooleanEnum.TRUE.getValue().equalsIgnoreCase(value)?"鏄�":"鍚�");
+					}
+				});
+			});
+		}
+	}
 
     @Override
     public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
@@ -971,13 +1081,16 @@
         CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
 
         List<UIFormItemVO> itemVOS = new ArrayList<>();
-        Map<String, List<CodeClassifyTemplateAttrVO>> 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);
-        });
+		Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = new HashMap<>();
+		if (Func.isNotEmpty(templateVO.getAttributes())) {
+			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)) {
             //鎸夌収鍒嗙粍鐨勫睘鎬ф帓鍒楋紝鎵惧埌姣忎竴涓垎缁勭殑绗竴涓睘鎬�
@@ -990,7 +1103,11 @@
                 lineVO.setField(attrVO.getId() + "_line");
                 lineVO.setType("line");
                 lineVO.setText(key);
-                //鎵句綅缃�
+				List<CodeClassifyTemplateAttrVO> collect = value.stream().filter(s -> "true".equals(s.getFormDisplayFlag())).collect(Collectors.toList());
+				if(collect.size() == 0){
+					continue;
+				}
+				//鎵句綅缃�
                 for (int i = 0; i < itemVOS.size(); i++) {
                     UIFormItemVO record = itemVOS.get(i);
                     if (record.getField().equalsIgnoreCase(attrVO.getId())) {
@@ -1092,8 +1209,9 @@
             itemVO.setType("refer");
             itemVO.setShowField(itemVO.getField() + "name");
             if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
-                //閰嶇疆鐨勫唴瀹�
-                itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+                // 閰嶇疆鐨勫唴瀹�
+                // itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+				itemVO.setReferConfig(referConfigToUIUiTable(attrVO.getReferConfig()));
             } else {
                 UIFormReferVO formReferVO = new UIFormReferVO();
                 formReferVO.setType("default");
@@ -1207,7 +1325,8 @@
             fieldVO.setShowField(fieldVO.getField());
             if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
                 //閰嶇疆鐨勫唴瀹�
-                fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+                // fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
+				fieldVO.setReferConfig(referConfigToUIUiTable(attrVO.getReferConfig()));
             } else {
                 UIFormReferVO formReferVO = new UIFormReferVO();
                 formReferVO.setType("default");
@@ -1235,11 +1354,61 @@
         }
         fieldVO.setOptionJsMap(eventJsMap);
         fieldVO.setStyle(attrVO.getTableDisplayStyle());
+        fieldVO.setTableDisplayFlag(attrVO.getTableDisplayFlag());
         //鍒楄〃閲屼笉鍏佽鐩存帴缂栬緫
         fieldVO.setDateFormate(attrVO.getCodeDateFormat());
         return fieldVO;
     }
 
+	/**
+	 * 灏唕eferconfig杞崲涓篔SON鏍煎紡鐨刄IFormReferVO
+	 * @param codeReferConfigVO
+	 * @return
+	 */
+	private UIFormReferVO referConfigToUIUiTable(String codeReferConfigVO){
+		CodeReferConfigVO codeReferConfig = JSONObject.parseObject(codeReferConfigVO, CodeReferConfigVO.class);
+		// 鎷疯礉涓轰互鍓嶇殑鑰佸璞�
+		UIFormReferVO uiFormReferVO = new UIFormReferVO();
+		org.springblade.core.tool.utils.BeanUtil.copy(codeReferConfig,uiFormReferVO);
+
+		// 琛ㄦ牸鐨勮嚜瀹氫箟瀹氫箟
+		UITableCustomDefineVO uiTableConfigVO = new UITableCustomDefineVO();
+		uiTableConfigVO.setPage(new UITablePageVO(codeReferConfig.getLimit(),1));
+		// 鍒楄〃鐨勫垪鐨勪俊鎭浆鎹�
+		List<UITableFieldVO> uiTableFieldVOs = new ArrayList<>();
+		// 蹇�熸煡璇㈠垪
+		List<UITableFieldVO> queryColumns = new ArrayList<>();
+		if(!CollectionUtils.isEmpty(codeReferConfig.getCodeShowFieldConfigVOS())){
+			codeReferConfig.getCodeShowFieldConfigVOS().stream().forEach(showField ->{
+				UITableFieldVO tableColVO = new UITableFieldVO();
+				org.springblade.core.tool.utils.BeanUtil.copy(showField,tableColVO);
+				tableColVO.setSortField(showField.getAttrSortField());
+				uiTableFieldVOs.add(tableColVO);
+				if(showField.getIsQuery().equals("true")){
+					queryColumns.add(tableColVO);
+				}
+			});
+		}
+		// 鏄剧ず鐨勫垪
+		uiTableConfigVO.setCols(uiTableFieldVOs);
+		// 蹇�熸煡璇㈠垪
+		uiTableConfigVO.setQueryColumns(queryColumns);
+		//set缁欒〃鏍奸厤缃睘鎬�
+		uiFormReferVO.setTableConfig(uiTableConfigVO);
+		//瀛楁鍚嶄笉涓�鑷达紝闇�瑕佹墜鍔╯et
+
+		uiFormReferVO.setMuti(StringUtils.isBlank(codeReferConfig.getIsMuti())?false:true);
+		uiFormReferVO.setInitSort(new UIFieldSortVO(codeReferConfig.getSortField(),codeReferConfig.getSortType()));
+		// 绛涢�夋潯浠�
+		HashMap<String, String> whereMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(codeReferConfig.getCodeSrchCondConfigVOS())){
+			codeReferConfig.getCodeSrchCondConfigVOS().stream().forEach(srch->{
+				whereMap.put(srch.getFilterField()+srch.getFilterType(),srch.getFilterValue());
+			});
+		}
+		uiFormReferVO.setWhere(whereMap);
+		return uiFormReferVO;
+	}
 
     /**
      * 鐩镐技椤规煡璇�
@@ -1385,7 +1554,16 @@
     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<String, String>> maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+		List<Map<String, String>> maps = null;
+		try {
+			maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
+		}catch (Exception e){
+			String errorMessage = e.getMessage();
+			if (errorMessage.contains("鏃犳硶瑙f瀽鐨勬垚鍛樿闂〃杈惧紡")) {
+				throw new ServiceException("缂哄皯"+errorMessage.substring(errorMessage.indexOf("[t.") + 1, errorMessage.indexOf("]"))+"瀛楁");
+			}
+			throw new ServiceException(e.getMessage());
+		}
 
         DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
         List<Map<String, String>> dataList = new ArrayList<>();
@@ -1393,7 +1571,7 @@
             maps.stream().forEach(map -> {
                 Map<String, String> data = new HashMap<>();
                 for (String s : map.keySet()) {
-                    data.put(s.toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
+                    data.put(s.toLowerCase(Locale.ROOT), map.get(s)==null?null:String.valueOf(map.get(s)));
                 }
 //				map.forEach((key, value) -> {
 //					data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
@@ -1448,26 +1626,32 @@
         }
         //鍏堣浆鎹竴涓嬫椂闂存牸寮�
         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<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = new ArrayList<>();
+		List<CodeClassifyTemplateAttrVO> enumAttrVOs = new ArrayList<>();
+		if (Func.isNotEmpty(templateVO.getAttributes())) {
+			dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
+				s -> StringUtils.isNotBlank(s.getCodeDateFormat()) &&
+					(finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
+			).collect(Collectors.toList());
+			//鏋氫妇鐨勫唴瀹�
+			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 -> {
+		List<CodeClassifyTemplateAttrVO> finalDateFormatAttrVOs = dateFormatAttrVOs;
+		List<CodeClassifyTemplateAttrVO> finalEnumAttrVOs = enumAttrVOs;
+		dataMap.stream().forEach(data -> {
             //澶勭悊鏃堕棿
             if (!form) {
                 //琛ㄥ崟鐨勬椂鍊欏彧鑳界敤缁熶竴鐨勬椂闂存牸寮�
-                wrapperDateFormat(dateFormatAttrVOs, data);
+                wrapperDateFormat(finalDateFormatAttrVOs, data);
             }
             //澶勭悊鏋氫妇
-            wrapperEnum(enumAttrVOs, data);
+            wrapperEnum(finalEnumAttrVOs, 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))
@@ -1582,17 +1766,25 @@
         //鍥犱负鍙傜収涓嶄竴瀹氭槸鍦ㄥ钩鍙扮殑灞炴�ф睜閲岄潰璁剧疆锛屾墍浠ユ垜浠緱闇�瑕佽嚜琛屽鐞�
         //鍙傝�僔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, CodeClassifyTemplateAttrVO> attrVOMap = new HashMap<>();
+		List<String> selectFieldList = new ArrayList<>();
+		if(Func.isNotEmpty(templateVO.getAttributes())){
+			attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
+			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());
+		List<CodeClassifyTemplateAttrVO> referAttrVOs = null;
+		if (Func.isNotEmpty(templateVO.getAttributes())) {
+			referAttrVOs = templateVO.getAttributes().stream().filter(
+				s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())
+			).collect(Collectors.toList());
+		}
         Map<String/**鍙傜収鐨勫睘鎬�**/, String/**瀹為檯鐨勫瓧娈�**/> referFieldMap = new ConcurrentHashMap<>();
         if (!CollectionUtils.isEmpty(referAttrVOs)) {
-            referAttrVOs.parallelStream().forEach(attrVO -> {
+			List<String> finalSelectFieldList = selectFieldList;
+			referAttrVOs.parallelStream().forEach(attrVO -> {
                 UIFormReferVO referVO = null;
                 if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
                     referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class);
@@ -1622,7 +1814,7 @@
                     showFieldInSource = textFields.get(0);
                 }
                 referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource);
-                selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
+                finalSelectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
             });
         }
         R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getDefaultAttrByBtmId(btmType);
@@ -1666,11 +1858,12 @@
                 }
             });
 
-            andCondtionMap.forEach((k, v) -> {
-                andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType));
+			Map<String, CodeClassifyTemplateAttrVO> finalAttrVOMap = attrVOMap;
+			andCondtionMap.forEach((k, v) -> {
+                andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType));
             });
             orConditionMap.forEach((k, v) -> {
-                orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType));
+                orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType));
             });
         }
         //缁勫悎璧锋潵
@@ -1753,7 +1946,7 @@
                     //璇存槑杩樻槸鍙傜収閲岄潰鐨勶紝鎴戜滑榛樿杩欑鎯呭喌涓嬮兘鏄瓧绗︿覆鍚э紝鍥犱负鍙傜収鐨勫睘鎬т笉涓�瀹氱敤鐨勫钩鍙扮殑灞炴�ф睜閲岀殑锛屾墍浠ュぇ閮ㄥ垎鎯呭喌涓嬶紝鏄剧ず鐨勫睘鎬ч兘鏄瓧绗︿覆鍚�
                     return referFieldMap.get(field) + SPACE + "LIKE" + SPACE + "'%" + value + "%'" + SPACE;
                 } else {
-                    return (field.contains(".") ? "" : "t.") + field + SPACE + "LIKE " + "'%" + getStringValueInWhere(field, value, attrVOMap) + "%'" + SPACE;
+                    return (field.contains(".") ? "" : "t.") + field + SPACE + "LIKE " + "'%" + value + "%'" + SPACE;
                 }
             } else if (key.endsWith("_notequal")) {
                 String field = UBCSSqlKeyword.getColumn(key, "_notequal");
@@ -1788,7 +1981,7 @@
                 if (referFieldMap.containsKey(field)) {
                     return referFieldMap.get(field) + SPACE + " >= " + value + SPACE;
                 } else {
-                    return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(value, field, attrVOMap) + SPACE;
+                    return (field.contains(".") ? "" : "t.") + field + SPACE + " >= " + getStringValueInWhere(field, value, attrVOMap) + SPACE;
                 }
             } else if (key.endsWith("_le")) {
                 //璇存槑鏄�<=鐨勩�傛垜浠渶瑕佸厛鑾峰彇涓�涓�
@@ -1873,7 +2066,7 @@
                 if (referFieldMap.containsKey(field)) {
                     return referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE;
                 } else {
-                    return (field.contains(".") ? "" : "t.") + field + SPACE + "= '" + getStringValueInWhere(field, value, attrVOMap) + "'" + SPACE;
+                    return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE;
                 }
             } else {
 //                if (referFieldMap.containsKey(key)) {
@@ -1985,7 +2178,7 @@
         }
         R<BtmTypeVO> r = btmTypeClient.getDefaultAttrByBtmId(btmType);
         List<BtmTypeAttributeVO> attributes = r.getData().getAttributes();
-        if (r.getCode() != 200 || attributes.isEmpty()) {
+        if (!r.isSuccess() || attributes.isEmpty()) {
             return false;
         }
         return attributes.stream().anyMatch(item -> item.getId().equals(selectKey));
@@ -2006,13 +2199,21 @@
             sql.append("t.");
         }
         if (value.startsWith(QueryOptionConstant.IN)) {
-            sql.append(selectKey)
+            if(value.startsWith(QueryOptionConstant.IN+"('") && value.endsWith("')")){
+				sql.append(selectKey)
+					.append(SPACE)
+					.append("in")
+					.append(SPACE)
+					.append(value.replace(QueryOptionConstant.IN, ""));
+			}else{
+				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)
@@ -2162,8 +2363,11 @@
 //		cbo.getData().putAll(orderDTO.getData());
         cbo.setLastModifyTime(new Date());
         cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
-        updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo));
-        batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
+		R r = updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo));
+		if(!r.isSuccess()){
+			throw new ServiceException(r.getMsg());
+		}
+		batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
     }
 
     /**
@@ -2201,7 +2405,7 @@
         }
 
         //鍙兘鍒犻櫎鑷繁鍒涘缓鐨勬暟鎹�
-        String userId = String.valueOf(AuthUtil.getUser().getUserId());
+        String userId = String.valueOf(AuthUtil.getUser().getAccount());
         for (BaseModel clientBusinessObject : cboList) {
             String creator = clientBusinessObject.getCreator();
             if (!userId.equalsIgnoreCase(creator)) {
@@ -2213,10 +2417,10 @@
 //		batchCBO.getDeleteCbos().addAll(cboList);
 //		WebUtil.setPersistence(false);
 //		batchCBO.copyFromOther(
-        productCodeService.recycleCode(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId(), deleteBatchDTO.getOidList());
+        productCodeService.recycleCode(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), deleteBatchDTO.getOidList());
 //		baseMapper.deleteBatchIds(cboList);
         //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
-        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId()));
+        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
         if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
@@ -2240,7 +2444,6 @@
         //鎵鹃樁娈�
         return phaseAttrService.listAttrByTemplateOidAndPhaseId(templateVO.getOid(), phase);
     }
-
 
     /**
      * 璺緞涓婂寘鍚綋鍓嶅垎绫荤殑鎵�鏈夊垎绫讳俊鎭�
@@ -2293,16 +2496,18 @@
         if (conditionMap == null) {
             conditionMap = new HashMap<>();
         }
-        //pageHelper.addDefaultDesc("createTime");
-        pageHelper.addDefaultDesc("id");
+        pageHelper.addDefaultDesc("createTime");
+//        pageHelper.addDefaultDesc("id");
         if (!classifyService.checkHasChild(codeClassifyOid)) {
             conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
         } else {
 //			conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
-
+			List<BtmTypeVO> classifyData = btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY)).getData();
+			if(Func.isEmpty(classifyData)){
+				throw new ServiceException("涓氬姟绫诲瀷涓嫳鏂囧悕绉板拰鏌ヨ鏉′欢閰嶇疆涓嶄竴鑷达紝璇蜂慨鏀逛笟鍔$被鍨嬩腑鍒嗙被琛ㄨ嫳鏂囧悕绉颁负"+MdmBtmTypeConstant.CODE_CLASSIFY);
+			}
             conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " +
-                    btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY))
-                            .getData().get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant
+				classifyData.get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant
                     .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid +
                     "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
         }
@@ -2348,27 +2553,22 @@
         List<BaseModel> updateList = new ArrayList<>();
         // 搴旇閮芥槸涓�涓垎绫讳笅鐨勪笟鍔℃暟鎹紝鎵剧涓�鏉$殑灏辫
         CodeClassifyFullInfoBO topClassifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
-//		Map<String,String> cboOidMap = new HashMap<>();
         if (CollectionUtils.isEmpty(orderDTOMap.keySet())) {
             throw new VciBaseException(DATA_OID_NOT_EXIST);
         }
 
         List<BaseModel> cboList = selectByTypeAndOid(topClassifyFullInfo.getTopClassifyVO().getBtmTypeId(), VciBaseUtil.array2String(orderDTOMap.keySet().toArray(new String[0])));
-//		cboOidMap.put("oid",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(orderDTOMap.keySet().toArray(new String[0])) + ")");
-//		List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap);
-        if (CollectionUtils.isEmpty(cboList)) {
+		if (CollectionUtils.isEmpty(cboList)) {
             throw new VciBaseException(DATA_OID_NOT_EXIST);
         }
-//		BatchCBO batchCBO = new BatchCBO();
-//		CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
-        Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
+		Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
         orderDTOMap.keySet().stream().forEach(oid -> {
             CodeOrderDTO orderDTO = orderDTOMap.get(oid);
             CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
             CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
             BaseModel cbo = cboMap.get(oid);
             String code = cbo.getId();
-            if (!cbo.getTs().toString().contains(orderDTO.getTs().toString())) {
+            if (!cbo.getTs().toString().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
                 throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
             }
             if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
@@ -2394,21 +2594,13 @@
             //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
             cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription());
             cbo.setName(orderDTO.getName());
-//			try {
-//				cbo.setAttributeValue("id",code);
             cbo.setId(code);
             cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription());
-//				cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
-//				cbo.setAttributeValue("name", orderDTO.getName());
             cbo.setName(orderDTO.getName());
-//			} catch (VCIError e) {
-//				e.printStackTrace();
-//			}
-//			batchCBO.getUpdateCbos().add(cbo);
+
             updateList.add(cbo);
             batchSaveSelectChar(firstTemplateVO, cboList);
         });
-//		boService.persistenceBatch(batchCBO);
         updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmTypeId(), updateList);
         return R.success("鎿嶄綔鎴愬姛锛�");
     }
@@ -2514,17 +2706,10 @@
                 orderDTO.getCodeClassifyOid(), "涓婚搴撳垎绫荤殑涓婚敭");
 
         //闇�瑕佸崌鐗�
-//		ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation();
         BaseModel cbo = null;
-//		try {
-//			//cbo = cboOperation.createBusinessObjectVersion(oldCbo,VciBaseUtil.getCurrentUserId());
         cbo = reviseBusinessObject(oldCbo);
-//		} catch (VCIError e) {
-//			throw new VciBaseException("鍒濆鍖栫浉鍏崇殑鍐呭鍑虹幇浜嗛敊璇�", new String[0], e);
-//		}
         //1. 鍒ゆ柇蹇呰緭椤�
-        //CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-        checkRequiredAttrOnOrder(templateVO, orderDTO);
+		checkRequiredAttrOnOrder(templateVO, orderDTO);
         //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
         switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
         //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
@@ -2542,20 +2727,17 @@
         //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
         cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription());
         cbo.setName(orderDTO.getName());
-//		try {
         cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription());
-//		cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
         cbo.setName(orderDTO.getName());
-//		} catch (VCIError e) {
-//			e.printStackTrace();
-//		}
         //鏁版嵁鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
         cbo.setCreateTime(cbo.getCreateTime());
         cbo.setLastModifyTime(cbo.getLastModifyTime());
-//		List<ClientBusinessObject> cboList = new ArrayList<>();
-//		cboList.add(cbo);
+		cbo.setTenantId(AuthUtil.getTenantId());
+		oldCbo.setLastV("0");
+		oldCbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
+		oldCbo.setLastModifyTime(new Date());
         try {
-//			cboOperation.saveRevisionBuinessObject(cbo);
+			updateBatchByBaseModel(oldCbo.getBtmname(), Collections.singletonList(oldCbo));
             insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo));
         } catch (Exception vciError) {
             throw new VciBaseException("鏁版嵁鏇存敼淇濆瓨鍑洪敊浜�", new String[0], vciError);
@@ -2588,12 +2770,102 @@
         String codeRuleOid = classifyVO.getCodeRuleOid();
         if (StringUtils.isBlank(codeRuleOid)) {
             //寰�涓婃壘
-            CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
-            return getCodeRuleByClassifyFullInfo(fullInfo);
+			CodeRuleVO classifyFullInfoCodeRule = getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid));
+			return toCodeValueApplyStatus(classifyFullInfoCodeRule);
         }
-        //鎴戜滑鏌ヨ缂栫爜瑙勫垯
-        return ruleService.getObjectHasSecByOid(codeRuleOid);
+        //鏌ヨ缂栫爜瑙勫垯
+		CodeRuleVO objectHasSecByOid = ruleService.getObjectHasSecByOid(codeRuleOid);
+		return toCodeValueApplyStatus(objectHasSecByOid);
     }
+
+	/**
+	 * 缂栫爜鐢宠琛ㄥ崟锛岄殣钘忋�佸彲杈撱�佸彧璇昏浆鎹�
+	 * @param codeRuleVO
+	 * @return
+	 */
+	private CodeRuleVO toCodeValueApplyStatus(CodeRuleVO codeRuleVO){
+		if(codeRuleVO.getSecVOList().isEmpty()){
+			return codeRuleVO;
+		}
+		// 鍙緭鐮佹绫诲瀷
+		List<String> inputTypes = Arrays.asList(
+			CodeSecTypeEnum.CODE_FIXED_SEC.getValue(),
+			CodeSecTypeEnum.CODE_VARIABLE_SEC.getValue(),
+			CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue(),
+			CodeSecTypeEnum.CODE_REFER_SEC.getValue(),
+			CodeSecTypeEnum.CODE_DATE_SEC.getValue()
+		);
+		// 鍙鐮佹绫诲瀷
+		List<String> readOnlyTypes = Arrays.asList(
+			CodeSecTypeEnum.CODE_LEVEL_SEC.getValue(),
+			CodeSecTypeEnum.CODE_ATTR_SEC.getValue()
+		);
+		// 闅愯棌鐮佹绫诲瀷
+		/*List<String> hideType = Arrays.asList(
+			CodeSecTypeEnum.CODE_SERIAL_SEC.getValue()
+		);*/
+		// 褰撳墠瑙勫垯鐨勬墍鏈夌被鍨嬬爜娈�
+		List<String> secTypeList = codeRuleVO.getSecVOList().stream().map(CodeBasicSecVO::getSecType).collect(Collectors.toList());
+		// 鎯呭喌涓� 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷
+		boolean hasAllReadOnlyType =secTypeList.stream().allMatch(item -> readOnlyTypes.stream().anyMatch(item1-> item.equals(item1)));
+		// 鍏ㄩ儴鏄彧璇荤殑鐮佹绫诲瀷
+		if(hasAllReadOnlyType){
+			List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> {
+				secVO.setCodeValueApplyStatus(3);
+				// 鏃ユ湡鐮佹璁剧疆榛樿鍊�
+				if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) {
+					try {
+						secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr()));
+					}catch (Exception e){
+						throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage());
+					}
+				}
+				return secVO;
+			}).collect(Collectors.toList());
+			codeRuleVO.setSecVOList(basicSecVOS);
+			return codeRuleVO;
+		}
+		// 鎯呭喌浜� 鍏ㄩ儴閮芥槸鍙緭鍏ョ被鍨嬬殑
+		boolean hasAllInputType = secTypeList.stream().allMatch(item -> inputTypes.stream().anyMatch(item1-> item.equals(item1)));
+		if(hasAllInputType){
+			List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> {
+				secVO.setCodeValueApplyStatus(1);
+				// 鏃ユ湡鐮佹璁剧疆榛樿鍊�
+				if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) {
+					try {
+						secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr()));
+					}catch (Exception e){
+						throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage());
+					}
+				}
+				return secVO;
+			}).collect(Collectors.toList());
+			codeRuleVO.setSecVOList(basicSecVOS);
+			return codeRuleVO;
+		}
+		// 鎯呭喌涓夊寘鍚汉涓洪�夋嫨鐨勭爜娈碉紝鍙堟湁鍙绫诲瀷鐮佹鐨勶紝鎵�鏈夌爜娈甸兘瑕佹樉绀哄嚭鏉ワ紝鍙緭璁剧疆涓�1锛屽彧璇昏缃负2锛岄殣钘忚缃负3
+		List<CodeBasicSecVO> basicSecVOS = codeRuleVO.getSecVOList().stream().map(secVO -> {
+			if(inputTypes.contains(secVO.getSecType())){
+				secVO.setCodeValueApplyStatus(1);
+			}else if(readOnlyTypes.contains(secVO.getSecType())){
+				secVO.setCodeValueApplyStatus(2);
+			}else{
+				secVO.setCodeValueApplyStatus(3);
+			}
+			// 鏃ユ湡鐮佹璁剧疆榛樿鍊�
+			if (secVO.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())) {
+				try {
+					secVO.setCodeDateValue(Func.format(new Date(),secVO.getCodeDateFormatStr()));
+				}catch (Exception e){
+					throw new ServiceException("鏃ユ湡鐮佹鏃ユ湡鏍煎紡閰嶇疆鏈夎锛屽鑷磋浆鎹㈠嚭閿欙細"+e.getMessage());
+				}
+			}
+			return secVO;
+		}).collect(Collectors.toList());
+		codeRuleVO.setSecVOList(basicSecVOS);
+		codeRuleVO.setIsShowHideStatus(hasAllReadOnlyType ? "readOnly":(hasAllInputType ? "input":"readAndInput"));
+		return codeRuleVO;
+	}
 
     /**
      * 浣跨敤鍒嗙被鐨勫叏閮ㄤ俊鎭幏鍙栫紪鐮佽鍒�
@@ -2610,7 +2882,7 @@
         } else {
             if (CollectionUtils.isEmpty(fullInfoBO.getParentClassifyVOs())) {
                 //璇存槑宸茬粡鏄渶楂樺眰绾�,
-                throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
+                throw new ServiceException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
             }
             List<CodeClassifyVO> parentClassifyVOList = fullInfoBO.getParentClassifyVOs().stream().sorted((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel())).collect(Collectors.toList());
             //浠庢渶楂樼殑level寮�濮嬭幏鍙�
@@ -2622,7 +2894,7 @@
                 }
             }
             if (StringUtils.isBlank(codeRuleOid)) {
-                throw new VciBaseException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
+                throw new ServiceException("褰撳墠涓婚搴撳垎绫伙紝浠ュ強瀹冪殑鎵�鏈夌殑涓婄骇鍒嗙被閮芥病鏈夎缃紪鐮佽鍒�");
             }
         }
         return ruleService.getObjectHasSecByOid(codeRuleOid);
@@ -2651,7 +2923,7 @@
         cbosB.stream().forEach(map -> {
             Map<String, String> data = new HashMap<>();
             for (Object o : map.keySet()) {
-                data.put(((String) o).toLowerCase(Locale.ROOT), String.valueOf(map.get(o)));
+                data.put(((String) o).toLowerCase(Locale.ROOT), map.get(o)==null?"":String.valueOf(map.get(o)));
             }
             cbos.add(data);
         });
@@ -2911,38 +3183,43 @@
         List<UITableFieldVO> fieldVOList = new ArrayList<>();
         Map<String, String> comboxOrReferFieldMap = new HashMap<>();
 
-        templateVO.getAttributes().forEach(attrVO -> {
-            UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit);
-            if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) {
-                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
-            }
-            if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) {
-                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
-            }
-            if (StringUtils.isNotBlank(tableFieldVO.getEdit())) {
-                tableDefineVO.setHasEditor(true);
-            }
-            fieldVOList.add(tableFieldVO);
-        });
+		if (Func.isNotEmpty(templateVO.getAttributes())) {
+			templateVO.getAttributes().forEach(attrVO -> {
+				UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit);
+				if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) {
+					comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
+				}
+				if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) {
+					comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
+				}
+				if (StringUtils.isNotBlank(tableFieldVO.getEdit())) {
+					tableDefineVO.setHasEditor(true);
+				}
+				fieldVOList.add(tableFieldVO);
+			});
+		}
         List<List<UITableFieldVO>> cols = new ArrayList<>();
         cols.add(fieldVOList);
         tableDefineVO.setCols(cols);
         Map<String, UITableFieldVO> fieldVOMap = fieldVOList.stream().collect(Collectors.toMap(s -> s.getField().toLowerCase(Locale.ROOT), t -> t));
-        //鏌ヨ灞炴��
-        List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList());
-        if (!CollectionUtils.isEmpty(queryAttrVOs)) {
-            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
-            queryAttrVOs.stream().forEach(attrVO -> {
-                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
-                attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT);
-                if (fieldVOMap.containsKey(attrId)) {
-                    queryFieldVOs.add(fieldVOMap.get(attrId));
-                }
-            });
-            tableDefineVO.setQueryColumns(queryFieldVOs);
-        }
-        //楂樼骇灞炴��
-        List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList());
+		List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = null;
+		if (Func.isNotEmpty(templateVO.getAttributes())) {
+			//鏌ヨ灞炴��
+			List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList());
+			if (!CollectionUtils.isEmpty(queryAttrVOs)) {
+				List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
+				queryAttrVOs.stream().forEach(attrVO -> {
+					String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
+					attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT);
+					if (fieldVOMap.containsKey(attrId)) {
+						queryFieldVOs.add(fieldVOMap.get(attrId));
+					}
+				});
+				tableDefineVO.setQueryColumns(queryFieldVOs);
+			}
+			//楂樼骇灞炴��
+			seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList());
+		}
         if (!CollectionUtils.isEmpty(seniorQueryAttrVOs)) {
             List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
             seniorQueryAttrVOs.stream().forEach(attrVO -> {
@@ -3229,17 +3506,61 @@
         if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
-        //灏哹ean杞负map,mybatis缁熶竴澶勭悊
+		//鑾峰彇褰撳墠涓氬姟绫诲瀷鎵�鏈夊瓧娈电敤鏉ュ仛瀵规瘮
+		R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType);
+		if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) {
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲瀛楁淇℃伅锛岃妫�鏌ワ紒");
+		}
+		Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
+			return btmTypeAttributeVO.getId().toLowerCase();
+		}).collect(Collectors.toSet());
+		//灏哹ean杞负map,mybatis缁熶竴澶勭悊
         List<Map<String, String>> maps = new ArrayList<>();
         baseModels.stream().forEach(model -> {
             try {
-                maps.add(VciBaseUtil.convertBean2Map(model));
+                maps.add(VciBaseUtil.convertBean2Map(model,existFild));
             } catch (Exception e) {
                 throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.toString());
             }
         });
         return commonsMapper.insertByBaseModel(listR.getData().get(0).getTableName(), maps.get(0), maps);
     }
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶�
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param ids      澶勭悊鏁版嵁
+	 * @return 鏌ヨ鍒版暟鎹殑鎬绘暟
+	 */
+    @Override
+    public Integer selectIdsCounts(String btmType, List<String> ids) {
+        //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+        if (!listR.isSuccess() || listR.getData().size() == 0) {
+            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+        }
+		return commonsMapper.queryCountBySql("select count(*) from " +
+			listR.getData().get(0).getTableName() + " where id in ("+ ids.stream().map(s -> "'" + s + "'").collect(Collectors.joining(",")) +")");
+    }
+
+	/**
+	 * 浼犲叆涓氬姟绫诲瀷浠ュ強ID銆丱ID鏌ヨ涓氬姟琛ㄦ暟鎹槸鍚﹂噸澶�
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param id      澶勭悊鏁版嵁id
+	 * @param oid      澶勭悊鏁版嵁oid
+	 * @return 鏌ヨ鍒版暟鎹殑鎬绘暟
+	 */
+	@Override
+	public Integer selectIdAndOidCounts(String btmType, String id, String oid) {
+		//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+		if (!listR.isSuccess() || listR.getData().size() == 0) {
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+		}
+		return commonsMapper.queryCountBySql("select count(*) from " +
+			listR.getData().get(0).getTableName() + " where id ='" + id + "' and oid <> '" + oid + "'");
+	}
 
     /**
      * 浼犲叆涓氬姟绫诲瀷浠ュ強鐩竜id闆嗗悎鏌ヨ鏁版嵁杩涜杩斿洖
@@ -3283,14 +3604,18 @@
                                 && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
                             setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
                             map.remove(property.getName().toUpperCase());
-                        } else if (map.get(property.getName().toUpperCase()) != null) {
-                            setter.invoke(obj, map.get(property.getName().toUpperCase()));
+                        } else if (map.containsKey(property.getName().toUpperCase())) {
+							if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
+								setter.invoke(obj, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
+							}else{
+								setter.invoke(obj, map.get(property.getName().toUpperCase()));
+							}
                             map.remove(property.getName().toUpperCase());
                         }
                     }
                 }
                 for (Object key : map.keySet()) {
-                    map.put(key, String.valueOf(map.get(key)));
+                    map.put(key, map.get(key) == null ? null : String.valueOf(map.get(key)));
                 }
 
                 ((BaseModel) obj).setData(map);
@@ -3301,7 +3626,6 @@
         }
         return baseModels;
     }
-
 
     /**
      * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍒涘缓涓氬姟鏁版嵁婧愬璞�
@@ -3314,7 +3638,7 @@
         if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
-        String userName = String.valueOf(AuthUtil.getUser().getUserId());
+//        String userName = String.valueOf(AuthUtil.getUser().getUserId());
         BaseModel bo = new BaseModel();
 //		bo.setOid(VciBaseUtil.getPk());
 //		bo.setRevisionid(VciBaseUtil.getPk());
@@ -3324,16 +3648,16 @@
         bo.setFirstR("1");
         bo.setFirstV("1");
         bo.setLastV("1");
-        bo.setCreator(userName);
-        bo.setCreateTime(new Date());
-        bo.setLastModifier(userName);
-        bo.setLastModifyTime(new Date());
         bo.setRevisionRule(listR.getData().get(0).getRevisionRuleId());
-        bo.setVersionRule(String.valueOf(listR.getData().get(0).getVersionRule()));
+        bo.setVersionRule("".equals(listR.getData().get(0).getVersionRule())?"0":listR.getData().get(0).getVersionRule());
         if (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId())) {
             R<List<RevisionRuleVO>> revisionRuleVO = revisionRuleClient
-                    .selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId()));
-            bo.setRevisionValue(revisionRuleVO.getData().get(0).getStartCode());
+                    .selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId().toLowerCase()));
+            if(revisionRuleVO.getData().size() != 0 ){
+				bo.setRevisionValue(revisionRuleVO.getData().get(0).getStartCode());
+			}else{
+				bo.setRevisionValue("1");
+			}
         }
         bo.setRevisionSeq(1);
         bo.setVersionSeq(1);
@@ -3346,7 +3670,7 @@
         bo.setId("");
         bo.setName("");
         bo.setDescription("");
-        bo.setOwner(userName);
+        bo.setOwner("1");
 //		bo.setCheckinby(userName);
         bo.setCopyFromVersion("");
 //		this.initTypeAttributeValue(bo,btmTypeVO);
@@ -3384,12 +3708,20 @@
         if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
+		//鑾峰彇褰撳墠涓氬姟绫诲瀷鎵�鏈夊瓧娈电敤鏉ュ仛瀵规瘮
+		R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType);
+		if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) {
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲瀛楁淇℃伅锛岃妫�鏌ワ紒");
+		}
+		Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
+			return btmTypeAttributeVO.getId();
+		}).collect(Collectors.toSet());
         //灏哹ean杞负map,mybatis缁熶竴澶勭悊
         List<Map<String, String>> maps = new ArrayList<>();
 
         baseModels.stream().forEach(model -> {
             try {
-                maps.add(VciBaseUtil.convertBean2Map(model));
+                maps.add(VciBaseUtil.convertBean2Map(model,existFild));
             } catch (Exception e) {
                 throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage());
             }
@@ -3403,20 +3735,79 @@
 
         return R.success("鏇存柊鎴愬姛锛�");
     }
+	/**
+	 * 鏇存柊涓氬姟鏁版嵁鍚屾椂瀵圭爜鍊艰〃鏁版嵁鎿嶄綔鎺ュ彛
+	 *
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @param baseModels      澶勭悊鏁版嵁
+	 * @return 澶勭悊鐘舵��
+	 */
+	@Transactional(rollbackFor = VciBaseException.class)
+	@Override
+	public R<Integer> updateBatchBtypeDatas(String btmType, List<BaseModel> baseModels) {
 
-    /**
+		//浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
+		R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+		if (!listR.isSuccess() || listR.getData().size() == 0) {
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+		}
+		//鑾峰彇褰撳墠涓氬姟绫诲瀷鎵�鏈夊瓧娈电敤鏉ュ仛瀵规瘮
+		R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType);
+		if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) {
+			throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲瀛楁淇℃伅锛岃妫�鏌ワ紒");
+		}
+		Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
+			return btmTypeAttributeVO.getId();
+		}).collect(Collectors.toSet());
+		if(!CollectionUtils.isEmpty(baseModels)){
+			List<String> oidList=baseModels.stream().filter(data-> com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(data.getOid())).map(BaseModel::getOid).distinct().collect(Collectors.toList());
+			LambdaQueryWrapper<CodeAllCode> lqw = new LambdaQueryWrapper<>();
+			lqw.in(CodeAllCode::getCreateCodeOid,oidList);
+			List<CodeAllCode> codeAllCodeList= codeAllCodeService.selectByWrapper(lqw);
+			Map<String, CodeAllCode> cboMap = codeAllCodeList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getCreateCodeOid(), t -> t));
+			List<CodeAllCode> newCodeAllCodeList=new ArrayList<>();
+			//灏哹ean杞负map,mybatis缁熶竴澶勭悊
+			List<Map<String, String>> maps = new ArrayList<>();
+			try {
+				baseModels.stream().forEach(baseModel->{
+					String oid=baseModel.getOid();
+					try {
+						maps.add(VciBaseUtil.convertBean2Map(baseModel,existFild));
+					} catch (Exception e) {
+						throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage());
+					}
+					if(cboMap.containsKey(oid)){
+						CodeAllCode codeAllCode=	cboMap.get(oid);
+						codeAllCode.setId(baseModel.getId());
+						codeAllCode.setLastModifier(AuthUtil.getUser().getUserName());
+						codeAllCode.setLastModifyTime(new Date());
+						codeAllCode.setLcStatus(baseModel.getLcStatus());
+						newCodeAllCodeList.add(codeAllCode);
+					}
+				});
+				commonsMapper.updateBatchByBaseModel(listR.getData().get(0).getTableName(), maps);
+				codeAllCodeService.saveOrUpdateBatch(newCodeAllCodeList);
+			} catch (Exception e) {
+				throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage());
+			}
+
+		}
+		return R.success("鏇存柊鎴愬姛锛�");
+	}
+
+	/**
      * 鑾峰彇鍙傜収鐨勪俊鎭�
      *
      * @param referConfigVO 鍙傜収鐨勯厤缃�
      * @return 鍒楄〃鏁版嵁
      */
     @Override
-    public IPage<BaseModel> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException {
+    public IPage<BaseModelVO> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException {
         //checkReferConfig(referConfigVO);
         //浣跨敤涓氬姟绫诲瀷鏌ヨ
         R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(referConfigVO.getReferType());
-        if (allAttributeByBtmId.getCode() != 200) {
-            throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�");
+        if (!allAttributeByBtmId.isSuccess()) {
+            throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒;"+allAttributeByBtmId.getMsg());
         }
         if (Func.isEmpty(allAttributeByBtmId.getData())) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
@@ -3437,12 +3828,13 @@
         }
 
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referConfigVO.getReferType()));
-        if (listR.getCode() != 200) {
+        if (!listR.isSuccess()) {
             throw new ServiceException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�");
         }
         if (listR.getData().isEmpty()) {
-            throw new VciBaseException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
+		// TODO:鍙傜収閰嶇疆鐨勬ā绯婃煡璇㈣繃婊ゆ潯浠舵殏鏈鐞�
         String namesql = "";
         if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("name"))) {
             String s = baseQueryObject.getConditionMap().get("name");
@@ -3459,7 +3851,7 @@
 
         String lcstatusSql = "";
         if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("lcstatus"))) {
-            lcstatusSql = "lcstatus =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lcstatus"));
+            lcstatusSql = "and lcstatus =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lcstatus"));
         }
 //        String where = "";
 
@@ -3472,9 +3864,9 @@
 
         List<Map> maps = commonsMapper.selectBySql("select * from ( select rownum rn, t.* from (select * from " + listR.getData().get(0).getTableName() + SPACE
                 + (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId()) ? (" where lastr = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastr").toString())
-                + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 and "
-                + lcstatusSql + namesql + codesql + ") t where rownum <=" + num1 + ") where rn >=" + num2
-        );
+                + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 "
+                + lcstatusSql + namesql + codesql + ") t "+ (baseQueryObject.getLimit()==-1?")": ("where rownum <=" + num1 + ") where rn >=" + num2)
+		));
         List<BaseModel> baseModels = new ArrayList<>();
         //灏嗘煡璇㈠埌鐨勬暟鎹浆鎹负basemodel锛屼娇鐢ㄧ殑鍙嶅皠鏂瑰紡鏉ヨ繘琛屽垱寤虹殑
         try {
@@ -3492,23 +3884,28 @@
                             ZonedDateTime zdt = localDateTime.atZone(zoneId);
                             Date date = Date.from(zdt.toInstant());
                             setter.invoke(obj, date);
-                            map.remove(property.getName().toUpperCase());
+                            //map.remove(property.getName().toUpperCase());
                         } //oracle鐨勬暟瀛椾负BigDecimal鐨勶紝闇�瑕佽繘琛岃浆鎹㈡垚Integer锛屽惁鍒欏皢鎶ラ敊
                         else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
                                 && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())) {
                             setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
-                            map.remove(property.getName().toUpperCase());
+                            //map.remove(property.getName().toUpperCase());
                         } else if (map.get(property.getName().toUpperCase()) != null) {
-                            setter.invoke(obj, map.get(property.getName().toUpperCase()));
-                            map.remove(property.getName().toUpperCase());
+							if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
+								setter.invoke(obj, map.get(property.getName().toUpperCase()) == null ? null:String.valueOf(map.get(property.getName().toUpperCase())));
+							}else{
+								setter.invoke(obj, map.get(property.getName().toUpperCase()));
+							}
+                            //map.remove(property.getName().toUpperCase());
                         }
                     }
                 }
                 for (Object key : map.keySet()) {
                     map.put(key, String.valueOf(map.get(key)));
                 }
-
-                ((BaseModel) obj).setData(map);
+				Map<String, String> newMap = new HashMap<>();
+				map.forEach((key, value) -> newMap.put(String.valueOf(key).toLowerCase(), String.valueOf(value)));
+				((BaseModel) obj).setData(newMap);
                 baseModels.add((BaseModel) obj);
             }
         } catch (Exception e) {
@@ -3516,13 +3913,13 @@
         }
         int total = commonsMapper.queryCountBySql("select count(*) from " + listR.getData().get(0).getTableName() + SPACE
                 + (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId()) ? (" where lastr = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastr").toString())
-                + "and lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 and "
+                + "and lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 "
                 + lcstatusSql + namesql + codesql
         );
-        IPage<BaseModel> objectDataGrid = new Page<>();
+        IPage<BaseModelVO> objectDataGrid = new Page<>();
         objectDataGrid.setPages(baseQueryObject.getPage());
         objectDataGrid.setCurrent(baseQueryObject.getPage());
-        objectDataGrid.setRecords(baseModels);
+        objectDataGrid.setRecords(BaseMdodelWrapper.build().listVO(baseModels));
         objectDataGrid.setSize(baseQueryObject.getLimit());
         objectDataGrid.setTotal(total);
         return objectDataGrid;
@@ -3593,7 +3990,48 @@
         } else {
             if (StringUtils.isNotBlank(referConfigVO.getParentFieldName()) && StringUtils.isNotBlank(queryObject.getParentOid())) {
                 queryObject.getConditionMap().put(referConfigVO.getParentFieldName(), queryObject.getParentOid());
-            }
+				//鏌ヨ鍏ㄩ儴鐨勪俊鎭�
+				String parentOidSql = "";
+				if (StringUtils.isNotBlank(referConfigVO.getParentValue())) {
+					String temp = referConfigVO.getParentValue();
+					if (temp.startsWith(QueryOptionConstant.IN)) {
+						temp = temp.substring((QueryOptionConstant.IN).length()).trim();
+						parentOidSql = " in " + "('" + queryObject.getParentOid() + "')";
+					} else if (temp.startsWith(QueryOptionConstant.NOTIN)) {
+						parentOidSql = " not in " + "('" + queryObject.getParentOid() + "')";
+					} else if (temp.startsWith(QueryOptionConstant.NOTEQUAL)) {
+						temp = temp.substring((QueryOptionConstant.NOTEQUAL).length()).trim();
+						parentOidSql = QueryOptionConstant.NOTEQUAL + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					} else if (temp.startsWith(QueryOptionConstant.MORETHAN)) {
+						temp = temp.substring((QueryOptionConstant.MORETHAN).length()).trim();
+						parentOidSql = QueryOptionConstant.MORETHAN + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					} else if (temp.startsWith(QueryOptionConstant.MORE)) {
+						temp = temp.substring((QueryOptionConstant.MORE).length()).trim();
+						parentOidSql = QueryOptionConstant.MORE + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					} else if (temp.startsWith(QueryOptionConstant.LESSTHAN)) {
+						temp = temp.substring((QueryOptionConstant.LESSTHAN).length()).trim();
+						parentOidSql = QueryOptionConstant.LESSTHAN + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					} else if (temp.startsWith(QueryOptionConstant.LESS)) {
+						temp = temp.substring((QueryOptionConstant.LESS).length()).trim();
+						parentOidSql = QueryOptionConstant.LESS + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					} else if (temp.startsWith(QueryOptionConstant.ISNOTNULL)) {
+						parentOidSql = " is not null";
+					} else if (temp.startsWith(QueryOptionConstant.ISNULL)) {
+						parentOidSql = " is  null";
+					} else if (temp.contains("*")) {
+						parentOidSql = " like " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'").replace("*", "%");
+					} else {
+						parentOidSql = " = " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
+					}
+
+				}
+				//鏌ヨ鍏ㄩ儴鐨勪俊鎭�
+				queryObject.getConditionMap().put("oid", QueryOptionConstant.IN + "(select oid from " +
+					getTableName(referConfigVO.getReferType()) +
+					" START WITH " + referConfigVO.getParentFieldName() + " " +
+					parentOidSql +
+					" CONNECT BY PRIOR " + oidFieldName + " = " + referConfigVO.getParentFieldName() + ")");
+			}
         }
         LambdaQueryWrapper<CodeClassify> lqw = new LambdaQueryWrapper<>();
         String sql = queryObject.getConditionMap().get("oid").substring(3);
@@ -3606,7 +4044,6 @@
         treeWrapperOptions.setParentOid(queryObject.getParentOid());
         return revisionModelUtil.doList2Trees(codeClassifies, treeWrapperOptions, null);
     }
-
 
     @Override
     public boolean checkUnAttrUnEdit(String attrName) {
@@ -3635,8 +4072,6 @@
 
     public BaseModel reviseBusinessObject(BaseModel fromBo) {
         BaseModel toBo = new BaseModel();
-//		Map<String,String> data = new HashMap<>();
-//		toBo.getData().put(data);
         toBo.setOid(VciBaseUtil.getPk());
         toBo.setRevisionOid(VciBaseUtil.getPk());
         toBo.setNameOid(fromBo.getNameOid());
@@ -3650,16 +4085,13 @@
         toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
         toBo.setLastModifyTime(new Date());
         toBo.setRevisionRule(fromBo.getRevisionRule());
-        toBo.setVersionRule(fromBo.getVersionRule());
-//		RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
-        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname()));
+        toBo.setVersionRule(fromBo.getVersionRule());R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname()));
         if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
         Map<String, Object> nextRevision = commonsMapper.getNextRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid());
         toBo.setRevisionSeq(Integer.parseInt(nextRevision.get("REVISIONSEQ").toString()));
         toBo.setRevisionValue(nextRevision.get("REVISIONVAL").toString());
-//		VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
         toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString()));
         toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString());
         toBo.setLctid(fromBo.getLctid());
@@ -3668,12 +4100,27 @@
         toBo.setName(fromBo.getName());
         toBo.setDescription(fromBo.getDescription());
         toBo.setOwner(String.valueOf(AuthUtil.getUser().getUserId()));
-//		toBo.setCheckinBy(String.valueOf(AuthUtil.getUser().getUserId()));
         toBo.setCopyFromVersion(fromBo.getOid());
         toBo.getData().putAll(fromBo.getData());
         toBo.getData().put("CHECKINBY", String.valueOf(AuthUtil.getUser().getUserId()));
-//		this.initRevisionTypeAttributeValue(fromBo, toBo);
         return toBo;
 
     }
+
+	/**
+	 * 娴佺▼涓彉鏇寸姸鎬佸��
+	 * @param flowDTO
+	 * @return
+	 */
+	@Override
+	public R processChangeStatus(FlowStatusDTO flowDTO) {
+		flowDTO.getOids().forEach(s -> {
+			BaseModelDTO baseModel = new BaseModelDTO();
+			baseModel.setOid(s);
+			baseModel.setBtmname(flowDTO.getBtmType());
+			baseModel.setLcStatus(String.valueOf(flowDTO.getVariableMap().getOrDefault("statusValue","Auditing")));
+			changeStatus(baseModel);
+		});
+		return R.success("鎴愬姛");
+	}
 }

--
Gitblit v1.9.3