From 54f35ae7866dac5c497372b68d03309c7eae9424 Mon Sep 17 00:00:00 2001
From: dangsn <dangsn@chicecm.com>
Date: 星期三, 02 八月 2023 18:15:07 +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 |  658 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 429 insertions(+), 229 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 1b53436..e6df324 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
@@ -6,7 +6,6 @@
 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.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
 import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
 import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
@@ -23,6 +22,9 @@
 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.flow.core.feign.IMDMIFlowAttrClient;
+import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO;
 import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
 import com.vci.ubcs.omd.cache.EnumCache;
 import com.vci.ubcs.omd.feign.*;
@@ -39,6 +41,7 @@
 import com.vci.ubcs.starter.util.UBCSSqlKeyword;
 import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
 import com.vci.ubcs.starter.web.constant.RegExpConstant;
+import com.vci.ubcs.starter.web.constant.VciSystemVarConstants;
 import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
 import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
 import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
@@ -67,6 +70,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.annotation.Resource;
 import java.beans.BeanInfo;
@@ -279,6 +283,11 @@
      * 鏇挎崲瀛楃
      */
     public static final String SPECIAL_CHAR = "VCI";
+	/**
+	 * 涓绘暟鎹祦绋嬮樁娈垫湇鍔�
+	 */
+	@Autowired
+	private IMDMIFlowAttrClient imdmiFlowAttrClient;
 //	@Autowired
 //	private CodeOsbtmtypeMapper codeOsbtmtypeMapper;----
 
@@ -350,33 +359,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()));
-            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
+            if (!listR.isSuccess() || listR.getData().size() == 0) {
+                throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+            }
+			// 鐩存帴鍒犻櫎锛屼笉缁欑姸鎬�
+			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());
     }
 
     /**
@@ -410,10 +418,18 @@
         switchDateAttrOnOrder(templateVO, orderDTO);
         //9.鐢熸垚缂栫爜鐨勪俊鎭�
 //		ClientBusinessObject cbo = boService.createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
-        BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmtypeid());
+        BaseModel cbo = createCBOByBtmName(classifyFullInfo.getTopClassifyVO().getBtmTypeId());
 //		//榛樿鐨勫睘鎬ч兘涓嶇敤浠庡墠绔嫹璐�
 //		//璁剧疆缂栫爜闇�瑕佺殑榛樿灞炴�х殑鍐呭
         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.setTenantId(AuthUtil.getTenantId());
 //		//TODO:鍥犱负榛樿鐨勫睘鎬ч兘涓嶆嫹璐濓紝鐩墠闆嗗洟鐮佸彨name锛屽苟娌℃湁浠嶥TO鎷疯礉鍒癱bo閲屻�傚鍔犱竴涓崟鐙鐞嗭紝浠ュ悗鍐嶇湅瑕佷笉瑕佽皟鏁�
         cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
 //		//end -- modify by lihang @20220407
@@ -643,8 +659,11 @@
 
         if (!CollectionUtils.isEmpty(conditionMap)) {
 //			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()));
+            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 count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
             conditionMap.forEach((key, value) -> {
                 sql[0] += " and " + key + " = " + value;
@@ -721,7 +740,7 @@
                 conditionMap.put(queryKey, queryValue);
             } else {
                 //涓虹┖鐨勬椂鍊欎笉浠h〃涓嶆牎楠岋紝鍙槸涓嶅幓闄ょ浉鍏崇殑淇℃伅
-                conditionMap.put("t." + attrId, value);
+                conditionMap.put("t." + attrId, "'" +value+ "'");
             }
         }
     }
@@ -794,35 +813,27 @@
 //		BeanUtils.
 //		BeanUtils.copyProperties(orderDTO.getData(),cbo);
 //		cbo.setMaterialtype(Short.valueOf("1001"));
-//		orderDTO.getData().forEach((key, value) -> {
-//			if (!edit || (!checkUnAttrUnEdit(key) &&
-//				!VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
-//				try {
-//					cbo.setAttributeValue(key, value);
-//				} catch (Exception e) {
-//					logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
-//				}
-//			}
-//		});
+		orderDTO.getData().forEach((key, value) -> {
+			if (!edit || (!checkUnAttrUnEdit(key) &&
+				!VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(key))) {
+				try {
+					cbo.getData().put(cbo.getData().containsKey(key.toUpperCase())?key.toUpperCase():key, value);
+				} catch (Exception e) {
+					logger.error("璁剧疆灞炴�х殑鍊奸敊璇�", e);
+				}
+			}
+		});
 //		BeanMap beanMap = BeanMap.create(cbo);
 //		beanMap.putAll(orderDTO.getData());
 
         try {
-
-            BeanUtilForVCI.copyPropertiesIgnoreNull(BeanUtilForVCI.convertMap(BaseModel.class, orderDTO.getData()), cbo);
-            Map<String, String> data = new HashMap<>();
-            data.put(CODE_CLASSIFY_OID_FIELD, classifyFullInfo.getCurrentClassifyVO().getOid());
-            data.put(CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
-            data.put(CODE_FULL_PATH_FILED, fullPath);
-            cbo.setData(data);
-            cbo.setOid(VciBaseUtil.getPk());
-            cbo.setCreateTime(new Date());
+			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());
+            data.put(cbo.getData().containsKey(CODE_TEMPLATE_OID_FIELD.toUpperCase())?CODE_TEMPLATE_OID_FIELD.toUpperCase():CODE_TEMPLATE_OID_FIELD, templateVO.getOid());
+            data.put(cbo.getData().containsKey(CODE_FULL_PATH_FILED.toUpperCase())?CODE_FULL_PATH_FILED.toUpperCase():CODE_FULL_PATH_FILED, fullPath);
+            cbo.getData().putAll(data);
             cbo.setLastModifyTime(new Date());
-            cbo.setCreator(AuthUtil.getUser().getUserName());
             cbo.setLastModifier(AuthUtil.getUser().getUserName());
-//			cbo.setCodeclsfid(classifyFullInfo.getCurrentClassifyVO().getOid());
-//			cbo.setTemplateOid(templateVO.getOid());
-//			cbo.setCodeclsfpath(fullPath);
             cbo.setTs(new Date());
             if (!edit && StringUtils.isBlank(orderDTO.getLcStatus())) {
                 //TODO 鍏堝啓鍥哄畾锛屽悗闈㈢敓鍛藉懆鏈熷ソ浜嗗湪缂栧啓
@@ -906,7 +917,7 @@
 
 //						baseModels.stream().forEach(model-> {
                         try {
-                            map = VciBaseUtil.convertBean2Map(cbo);
+                            map = VciBaseUtil.convertBean2Map(cbo,null);
                         } catch (Exception e) {
                             throw new VciBaseException("绫诲瀷杞崲閿欒锛�" + e.getMessage());
                         }
@@ -932,6 +943,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) {
@@ -961,13 +992,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)) {
             //鎸夌収鍒嗙粍鐨勫睘鎬ф帓鍒楋紝鎵惧埌姣忎竴涓垎缁勭殑绗竴涓睘鎬�
@@ -1220,7 +1254,8 @@
             fieldVO.setTemplet(attrVO.getTableDisplayJs());
         }
         if (StringUtils.isBlank(fieldVO.getTemplet()) && VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(attrVO.getAttributeDataType())) {
-            fieldVO.setTemplet("function(d){return $webUtil.formateBoolean(d." + fieldVO.getField() + ");}");
+            fieldVO.setTemplet("function(row,column){return row[column.property]=='true' || row[column.property]=='1'?'鏄�':'鍚�'}");
+//            fieldVO.setTemplet("function(d){return $webUtil.formateBoolean(d." + fieldVO.getField() + ");}");
         }
         fieldVO.setOptionJsMap(eventJsMap);
         fieldVO.setStyle(attrVO.getTableDisplayStyle());
@@ -1272,7 +1307,7 @@
             conditionMap.putAll(andConditionMap);
             PageHelper pageHelper = new PageHelper(-1);
             pageHelper.addDefaultDesc("id");
-            return queryGrid(fullInfoBO.getTopClassifyVO().getBtmtypeid(), templateVO, conditionMap, pageHelper);
+            return queryGrid(fullInfoBO.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, pageHelper);
         }
         return new DataGrid<>();
     }
@@ -1293,11 +1328,11 @@
             //璇存槑宸茬粡瀛樺湪
             return resembleRuleService.getObjectByOid(currentClassifyVO.getCodeResembleRuleOid());
         }
-        if (StringUtils.isBlank(currentClassifyVO.getParentcodeclassifyoid())) {
+        if (StringUtils.isBlank(currentClassifyVO.getParentCodeClassifyOid())) {
             return null;
         }
         Map<String, CodeClassifyVO> classifyVOMap = fullInfoBO.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
-        return getUseResembleRule(fullInfoBO, classifyVOMap.getOrDefault(currentClassifyVO.getParentcodeclassifyoid(), null));
+        return getUseResembleRule(fullInfoBO, classifyVOMap.getOrDefault(currentClassifyVO.getParentCodeClassifyOid(), null));
     }
 
     /**
@@ -1374,7 +1409,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<>();
@@ -1382,7 +1426,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));
@@ -1437,26 +1481,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))
@@ -1571,17 +1621,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);
@@ -1594,6 +1652,9 @@
                 //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
                 R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referVO.getReferType()));
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
+                if (!listR.isSuccess() || listR.getData().size() == 0) {
+                    throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+                }
                 String referTable = listR.getData().get(0).getTableName();
 //				String referTable = "pl_code_classify";
                 String referTableNick = attrVO.getId() + "0";
@@ -1608,7 +1669,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);
@@ -1652,11 +1713,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));
             });
         }
         //缁勫悎璧锋潵
@@ -1690,6 +1752,9 @@
         }
 //		String tableName = VciBaseUtil.getTableName(btmType);
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
+        if (!listR.isSuccess() || listR.getData().size() == 0) {
+            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+        }
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
         String tableName = listR.getData().get(0).getTableName();
         String sql = "select " + selectFieldList.stream().map(s -> (s.contains(".") ? s : ("t." + s))).collect(Collectors.joining(","))
@@ -1864,7 +1929,7 @@
 //                    String selectKey = referFieldMap.get(key);
 //                    return getSqlByValue(selectKey, value, null, btmType);
 //                } else {
-                    return getSqlByValue(key, value, attrVOMap, btmType);
+                return getSqlByValue(key, value, attrVOMap, btmType);
 //                }
             }
         }
@@ -1919,7 +1984,7 @@
             }
             if (field.contains(".") && attrVOMap != null && attrVOMap.containsKey(field.split("\\.")[0].toLowerCase(Locale.ROOT))) {
                 //鏄弬鐓�
-				return "'" + value + "'";
+                return "'" + value + "'";
             } else {
                 return value;
             }
@@ -1943,13 +2008,13 @@
                         || VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) {
                     return value;
                 } else {
-					return "'" + value + "'";
+                    return "'" + value + "'";
                 }
             } else {
                 if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) {
                     return value;
                 }
-				return "'" + value + "'";
+                return "'" + value + "'";
             }
         }
 
@@ -1968,7 +2033,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));
@@ -1989,13 +2054,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)
@@ -2091,22 +2164,15 @@
 //		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
         CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
         //鎵句笟鍔$被鍨嬶紝鐒跺悗浣跨敤涓婚敭鍘昏幏鍙栨暟鎹簱閲岀殑鏁版嵁
-        List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), orderDTO.getOid());
+        List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), orderDTO.getOid());
 
         if (CollectionUtils.isEmpty(cbos)) {
             throw new VciBaseException(DATA_OID_NOT_EXIST);
         }
-//		QueryWrapper<CodeWupin> btmWrapper = new QueryWrapper<>();
-//		btmWrapper.eq("OID",orderDTO.getOid());
-//		CodeWupin cbo = codeWupinMapper.selectOne(btmWrapper);
         BaseModel cbo = cbos.get(0);
-//		CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-//		CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
-
-        if (cbo != null) {
+        if (cbo == null) {
             throw new VciBaseException(DATA_OID_NOT_EXIST);
         }
-//		ClientBusinessObject cbo = cbos.get(0);
         if (!cbo.getTs().toString().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
             throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯");
         }
@@ -2116,9 +2182,16 @@
 
         //娉ㄦ剰妯℃澘涓嶈兘浣跨敤鏁版嵁瀛樺偍鐨勬椂鍊欑殑妯℃澘锛屽洜涓哄彲鑳戒細鍙樺寲
 
-        //1. 鍒ゆ柇蹇呰緭椤�
+		String codeClassifyOid=cbo.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase());
+		orderDTO.setCodeClassifyOid(codeClassifyOid);
+//		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
+//		CodeClassifyTemplateVO templateVO= this.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
+
+
         CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
-        checkRequiredAttrOnOrder(templateVO, orderDTO);
+		orderDTO.setTemplateOid(templateVO.getOid());
+		//1. 鍒ゆ柇蹇呰緭椤�
+		checkRequiredAttrOnOrder(templateVO, orderDTO);
         //2.鍏堟敞鍏ワ紝鍐嶇粍鍚堬紝鏈�鍚庢牎楠�
         switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
         //3.澶勭悊缁勫悎瑙勫垯銆傜粍鍚堣鍒欎笉鑳戒娇鐢ㄧ紪鐮佺殑灞炴�э紝鍥犱负缂栫爜鐨勭敓鎴愬彲鑳芥槸闇�瑕佸睘鎬х殑
@@ -2135,46 +2208,18 @@
         copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
         //浼佷笟鐮佸拰闆嗗洟鐮佺殑涓嶄慨鏀�
         cbo.setDescription(orderDTO.getDescription());
-        cbo.setName(orderDTO.getName());
+//        cbo.setName(orderDTO.getName());
         try {
             cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription()) ? "" : orderDTO.getDescription());
             cbo.setName(orderDTO.getName());
-////			cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
-//			cbo.setAttributeValue("name", orderDTO.getName());
         } catch (Exception e) {
             e.printStackTrace();
         }
+//		cbo.getData().putAll(orderDTO.getData());
         cbo.setLastModifyTime(new Date());
         cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
-        updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), Collections.singletonList(cbo));
-//		codeWupinMapper.updateById(cbo);
-//
-//		List<CodeWupinEntity> cboList = new ArrayList<>();
-//
-//		//澶囨敞
-//		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 (CodeWupinEntity wupinEntity : cboList) {
-//			charList.add(wupinEntity.getId());
-//		}
-//		batchSaveSelectChar(templateVO, charList);
-//		return codeList.size() > 0 ? codeList.get(0) : "";
-
-
-        //淇敼鐨勬椂鍊欙紝缂栫爜鏄笉鍙樼殑
-//		BatchCBO batchCBO = new BatchCBO();
-//		batchCBO.getUpdateCbos().add(cbo);
-//		List<ClientBusinessObject> cboList = new ArrayList<>();
-//		cboList.add(cbo);
-//		boService.persistenceBatch(batchCBO);
+        updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), Collections.singletonList(cbo));
         batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
-//		batchSaveSelectChar(templateVO, Arrays.asList(cbo.getId()));
     }
 
     /**
@@ -2198,7 +2243,7 @@
         oidCollection.stream().forEach(oids -> {
             Map<String, String> conditionMap = new HashMap<>();
 //			conditionMap.put("oid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oids.toArray(new String[0])) + ")");
-            List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), oids);
+            List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), oids);
 //				boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), conditionMap);
             cboList.addAll(cbos);
         });
@@ -2224,11 +2269,11 @@
 //		batchCBO.getDeleteCbos().addAll(cboList);
 //		WebUtil.setPersistence(false);
 //		batchCBO.copyFromOther(
-        productCodeService.recycleCode(classifyFullInfo.getCurrentClassifyVO().getBtmtypeid(), deleteBatchDTO.getOidList());
+        productCodeService.recycleCode(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId(), deleteBatchDTO.getOidList());
 //		baseMapper.deleteBatchIds(cboList);
         //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
-        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getCurrentClassifyVO().getBtmtypeid()));
-        if (listR.getData().size() == 0) {
+        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getCurrentClassifyVO().getBtmTypeId()));
+        if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
         commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(),
@@ -2294,10 +2339,10 @@
         //4. 鏌ヨ鐨勬椂鍊欙紝鐩存帴浣跨敤codeclsfpath鏉ユ煡璇�
         CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(codeClassifyOid);
         CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
-        if (topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmtypeid())) {
+        if (topClassifyVO == null || StringUtils.isBlank(topClassifyVO.getBtmTypeId())) {
             throw new VciBaseException("褰撳墠涓婚搴撳垎绫绘病鏈夐《灞傚垎绫伙紝鎴栬�呴《灞傚垎绫绘病鏈夎缃笟鍔$被鍨�");
         }
-        String btmTypeId = topClassifyVO.getBtmtypeid();
+        String btmTypeId = topClassifyVO.getBtmTypeId();
         if (StringUtils.isBlank(btmTypeId)) {
             return new DataGrid<>("杩欎釜鍒嗙被鎵�灞為《灞傚垎绫绘病鏈夋坊鍔犱笟鍔$被鍨�");
         }
@@ -2312,7 +2357,7 @@
 //			conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
 
             conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " +
-                    btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY))
+                    btmTypeClient.selectByIdCollection(Collections.singletonList("classify"))
                             .getData().get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant
                     .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid +
                     "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
@@ -2364,7 +2409,7 @@
             throw new VciBaseException(DATA_OID_NOT_EXIST);
         }
 
-        List<BaseModel> cboList = selectByTypeAndOid(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(), VciBaseUtil.array2String(orderDTOMap.keySet().toArray(new String[0])));
+        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)) {
@@ -2420,7 +2465,7 @@
             batchSaveSelectChar(firstTemplateVO, cboList);
         });
 //		boService.persistenceBatch(batchCBO);
-        updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(), updateList);
+        updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmTypeId(), updateList);
         return R.success("鎿嶄綔鎴愬姛锛�");
     }
 
@@ -2434,27 +2479,27 @@
      */
     @Override
     public R markDataPassing(String oid, String btmName, Boolean pass) {
-		VciBaseUtil.alertNotNull(oid, "涓氬姟鏁版嵁涓婚敭", btmName, "涓氬姟绫诲瀷", pass, "鏍囪绫诲瀷");
-		boolean flag = true;
-		try {
-			List<BaseModel> datas = selectByTypeAndOid(btmName, oid);
-			if (datas.size() == 0) {
-				return R.fail(DATA_OID_NOT_EXIST);
-			}
-			datas.stream().forEach(data->data.getData().put("PASSING",String.valueOf(pass)));
-			R r = updateBatchByBaseModel(btmName, datas);
-			if(!r.isSuccess()){
-				flag = false;
-			}
-		} catch (Exception e) {
-			flag = false;
-			e.printStackTrace();
-		}
-		if (flag) {
-			return R.success("鏍囪鎴愬姛锛�");
-		} else {
-			return R.fail("鏍囪澶辫触锛�");
-		}
+        VciBaseUtil.alertNotNull(oid, "涓氬姟鏁版嵁涓婚敭", btmName, "涓氬姟绫诲瀷", pass, "鏍囪绫诲瀷");
+        boolean flag = true;
+        try {
+            List<BaseModel> datas = selectByTypeAndOid(btmName, oid);
+            if (datas.size() == 0) {
+                return R.fail(DATA_OID_NOT_EXIST);
+            }
+            datas.stream().forEach(data -> data.getData().put("PASSING", String.valueOf(pass)));
+            R r = updateBatchByBaseModel(btmName, datas);
+            if (!r.isSuccess()) {
+                flag = false;
+            }
+        } catch (Exception e) {
+            flag = false;
+            e.printStackTrace();
+        }
+        if (flag) {
+            return R.success("鏍囪鎴愬姛锛�");
+        } else {
+            return R.fail("鏍囪澶辫触锛�");
+        }
     }
 
     /**
@@ -2596,7 +2641,7 @@
     public CodeRuleVO getCodeRuleByClassifyOid(String codeClassifyOid) {
         VciBaseUtil.alertNotNull(codeClassifyOid, "鍒嗙被鐨勪富閿�");
         CodeClassifyVO classifyVO = classifyService.getObjectByOid(codeClassifyOid);
-        String codeRuleOid = classifyVO.getCoderuleoid();
+        String codeRuleOid = classifyVO.getCodeRuleOid();
         if (StringUtils.isBlank(codeRuleOid)) {
             //寰�涓婃壘
             CodeClassifyFullInfoBO fullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
@@ -2616,8 +2661,8 @@
     public CodeRuleVO getCodeRuleByClassifyFullInfo(CodeClassifyFullInfoBO fullInfoBO) {
         //寰�涓婃壘
         String codeRuleOid = "";
-        if (StringUtils.isNotBlank(fullInfoBO.getCurrentClassifyVO().getCoderuleoid())) {
-            codeRuleOid = fullInfoBO.getCurrentClassifyVO().getCoderuleoid();
+        if (StringUtils.isNotBlank(fullInfoBO.getCurrentClassifyVO().getCodeRuleOid())) {
+            codeRuleOid = fullInfoBO.getCurrentClassifyVO().getCodeRuleOid();
         } else {
             if (CollectionUtils.isEmpty(fullInfoBO.getParentClassifyVOs())) {
                 //璇存槑宸茬粡鏄渶楂樺眰绾�,
@@ -2627,8 +2672,8 @@
             //浠庢渶楂樼殑level寮�濮嬭幏鍙�
             for (int i = 0; i < parentClassifyVOList.size(); i++) {
                 CodeClassifyVO record = parentClassifyVOList.get(i);
-                if (StringUtils.isNotBlank(record.getCoderuleoid())) {
-                    codeRuleOid = record.getCoderuleoid();
+                if (StringUtils.isNotBlank(record.getCodeRuleOid())) {
+                    codeRuleOid = record.getCodeRuleOid();
                     break;
                 }
             }
@@ -2651,7 +2696,7 @@
         CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(templateOid);
         //涓轰簡闃叉妯℃澘涓婄殑涓氬姟绫诲瀷涓庡垎绫讳笂涓嶅搴�
         CodeClassifyVO topClassifyVO = classifyService.getTopClassifyVO(templateVO.getCodeclassifyoid());
-        String btmId = topClassifyVO.getBtmtypeid();
+        String btmId = topClassifyVO.getBtmTypeId();
         //鏌ヨ鏁版嵁
         Map<String, String> conditionMap = new HashMap<>();
         conditionMap.put("t.oid", oid);
@@ -2662,7 +2707,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);
         });
@@ -2766,18 +2811,18 @@
         }
         List<String> oidList = VciBaseUtil.str2List(conditionMap.get("oid"));
 
-        List<BaseModel> cbos = selectByTypeAndOid(btmType,conditionMap.get("oid"));
+        List<BaseModel> cbos = selectByTypeAndOid(btmType, conditionMap.get("oid"));
         if (CollectionUtils.isEmpty(cbos)) {
             throw new VciBaseException("鏈壘鍒颁笟鍔℃暟鎹�");
         }
-		BaseModel cbo = cbos.get(0);
+        BaseModel cbo = cbos.get(0);
         String templateOid = cbo.getData().get("CODETEMPLATEOID");
 
         QueryWrapper<CodeClassifyTemplate> codeClassifyTemplateWrapper = new QueryWrapper<>();
         codeClassifyTemplateWrapper.eq("oid", templateOid);
         List<CodeClassifyTemplate> templateDOList = templateService.list(codeClassifyTemplateWrapper);
 
-		QueryWrapper<CodeClassifyTemplateAttr> codeClassifyTemplateAttrWrapper = new QueryWrapper<>();
+        QueryWrapper<CodeClassifyTemplateAttr> codeClassifyTemplateAttrWrapper = new QueryWrapper<>();
         codeClassifyTemplateAttrWrapper.eq("CLASSIFYTEMPLATEOID", templateOid);
 
         List<CodeClassifyTemplateAttr> attrDOList = codeClassifyTemplateAttrService.list(codeClassifyTemplateAttrWrapper);
@@ -2858,6 +2903,51 @@
         return uiInfoVO;
     }
 
+	/**
+	 * 浣跨敤鍒嗙被鐨勪富閿幏鍙栬〃鏍肩殑瀹氫箟-ubcs鍚庝慨鏀硅幏鍙栨祦绋嬮樁娈电啛鎮夎幏鍙栨柟娉�
+	 * @param codeClassifyOid
+	 * @param templateId
+	 * @param taskId
+	 * @param modelKey
+	 * @return
+	 */
+	public MdmUIInfoVO getTableDefineByClassifyOid_v2(String codeClassifyOid,String templateId,String taskId,String modelKey) {
+		MdmUIInfoVO uiInfoVO = new MdmUIInfoVO();
+		CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid);
+		uiInfoVO.setTemplateVO(templateVO);
+		UITableDefineVO uiTableDefineVO = wrapperTableDefineByTemplate(templateVO, true);
+		R<List<ProcessStageAttrVO>> r = imdmiFlowAttrClient.ssslist(templateId,modelKey,taskId);
+		List<ProcessStageAttrVO> stageAttrVOS = r.getData();
+		List<String> attrList = new ArrayList<>();
+		stageAttrVOS.stream().forEach(attr->{
+			attrList.add(attr.getAttrId());
+		});
+		uiTableDefineVO.getCols().stream().forEach(list -> {
+			List<UITableFieldVO> visiableTableField = new ArrayList<>();
+			visiableTableField = list.stream().filter(col ->
+				attrList.stream().anyMatch(s -> StringUtils.equalsIgnoreCase(col.getField(), s) ||
+					(StringUtils.equalsIgnoreCase(col.getFieldType(), "combox") && StringUtils.equalsIgnoreCase(col.getSortField(), s))
+					|| (StringUtils.equalsIgnoreCase(col.getFieldType(), "refer") && StringUtils.equalsIgnoreCase(col.getQueryField(), s))
+				)).collect(Collectors.toList());
+
+			visiableTableField.stream().forEach(vo -> {
+				uiTableDefineVO.setHasEditor(true);
+				if ("refer".equalsIgnoreCase(vo.getFieldType())) {
+					setReferConfig2EditConfig(vo);
+				} else if ("combox".equalsIgnoreCase(vo.getFieldType())) {
+					setComboxConfig2EditConfig(vo);
+				} else if (StringUtils.isNotBlank(vo.getDateFormate())) {
+					vo.setEdit("date");
+				} else {
+					vo.setEdit(vo.getFieldType());
+				}
+			});
+		});
+		uiInfoVO.setTableDefineVO(uiTableDefineVO);
+		wrapperResemble(templateVO, uiInfoVO);
+		return uiInfoVO;
+	}
+
     /**
      * 妯℃澘灞炴�ц浆鎹负琛ㄦ牸瀹氫箟鐨勪俊鎭�
      *
@@ -2877,38 +2967,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 -> {
@@ -3093,12 +3188,12 @@
         uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0);
         if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) {
             List<Menu> buttonVOS = iSysClient.getMenuButtonByType(uiInfoVO.getTemplateVO().getBtmTypeId()).getData();
-//			List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
-//			if (operationVOS == null) {
-//				operationVOS = new ArrayList<>();
-//			}
-//			//鏌ヨ鎵╁睍鎸夐挳
-//			List<CodeButtonVO> buttonVOS = listButtonInToolbarByClassifyOid(codeClassifyOid);
+            //			List<SmOperationVO> operationVOS = operationService.listButtonByFunctionId(functionId);
+            //			if (operationVOS == null) {
+            //				operationVOS = new ArrayList<>();
+            //			}
+            //			//鏌ヨ鎵╁睍鎸夐挳
+            //			List<CodeButtonVO> buttonVOS = listButtonInToolbarByClassifyOid(codeClassifyOid);
             List<SmOperationVO> operationVOS = new ArrayList<>();
             if (!CollectionUtils.isEmpty(buttonVOS)) {
                 for (int i = 0; i < buttonVOS.size(); i++) {
@@ -3118,6 +3213,33 @@
         }
         return uiInfoVO;
     }
+    @Override
+	public MdmUIInfoVO getFlowUIInfoByClassifyOid(String codeClassifyOid, String functionId,String templateId,String taskId,String modelKey){
+//		MdmUIInfoVO uiInfoVO = getTableDefineByClassifyOid_v2(codeClassifyOid,templateId,taskId,modelKey);
+		MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid));
+		R<List<ProcessStageAttrVO>> r = imdmiFlowAttrClient.ssslist(templateId,modelKey,taskId);
+		List<ProcessStageAttrVO> stageAttrVOS = r.getData();
+		Set<String> attrSet = new HashSet<>();
+		stageAttrVOS.stream().forEach(attr->{
+			attrSet.add(attr.getAttrId());
+		});
+
+		try {
+
+			UITableDefineVO tableDefineVO = uiInfoVO.getTableDefineVO();
+			List<List<UITableFieldVO>> tableFieldVOs = tableDefineVO.getCols();
+			List<UITableFieldVO> uiTableFieldVOS = tableFieldVOs.get(0);
+			uiTableFieldVOS.stream().forEach(ui->{
+//				if(!attrSet.contains(ui.getField())){
+//					ui.setEdit(null);
+//					ui.setEditConfig(null);
+//				}
+			});
+		}catch (Exception e){
+			throw new ServiceException("妯℃澘娌℃湁瀹氫箟灞炴�э紝璇诲彇琛ㄥご澶辫触!");
+		}
+		return uiInfoVO;
+	}
 
     /**
      * 浣跨敤鍒嗙被涓婚敭鑾峰彇宸ュ叿鏍忎腑鐨勬寜閽俊鎭�
@@ -3165,14 +3287,22 @@
     public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) {
         //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
-        if (listR.getData().size() == 0) {
+        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());
             }
@@ -3192,7 +3322,7 @@
 
         //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
-        if (listR.getData().size() == 0) {
+        if (!listR.isSuccess() || listR.getData().size() == 0) {
             throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
         //鏌ヨ鏁版嵁
@@ -3222,14 +3352,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);
@@ -3250,7 +3384,10 @@
      */
     public BaseModel createBaseModel(String boName) {
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(boName));
-        String userName = String.valueOf(AuthUtil.getUser().getUserId());
+        if (!listR.isSuccess() || listR.getData().size() == 0) {
+            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+        }
+//        String userName = String.valueOf(AuthUtil.getUser().getUserId());
         BaseModel bo = new BaseModel();
 //		bo.setOid(VciBaseUtil.getPk());
 //		bo.setRevisionid(VciBaseUtil.getPk());
@@ -3260,16 +3397,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);
@@ -3282,7 +3419,7 @@
         bo.setId("");
         bo.setName("");
         bo.setDescription("");
-        bo.setOwner(userName);
+        bo.setOwner("1");
 //		bo.setCheckinby(userName);
         bo.setCopyFromVersion("");
 //		this.initTypeAttributeValue(bo,btmTypeVO);
@@ -3317,15 +3454,23 @@
     public R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) {
         //浣跨敤浼犲叆鐨勪笟鍔$被鍨嬫煡璇㈣〃
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
-        if (listR.getData().size() == 0) {
+        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());
             }
@@ -3347,10 +3492,16 @@
      * @return 鍒楄〃鏁版嵁
      */
     @Override
-    public IPage<BaseModel> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException{
-		//checkReferConfig(referConfigVO);
+    public IPage<BaseModel> referDataGrid(UIFormReferVO referConfigVO, BaseQueryObject baseQueryObject) throws VciBaseException {
+        //checkReferConfig(referConfigVO);
         //浣跨敤涓氬姟绫诲瀷鏌ヨ
         R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(referConfigVO.getReferType());
+        if (!allAttributeByBtmId.isSuccess()) {
+            throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�");
+        }
+        if (Func.isEmpty(allAttributeByBtmId.getData())) {
+            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+        }
         BtmTypeVO btmTypeVO = allAttributeByBtmId.getData();
         /**
          * 鍔犱笂鏌ヨ鏈�鏂扮増娆�
@@ -3367,11 +3518,11 @@
         }
 
         R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referConfigVO.getReferType()));
-        if (listR.getCode() != 200) {
-            throw new ServiceException("涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒");
+        if (!listR.isSuccess()) {
+            throw new ServiceException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "涓氬姟绫诲瀷feign鎺ュ彛璋冪敤閿欒锛�");
         }
-        if (listR.getData().size() == 0) {
-            throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
+        if (listR.getData().isEmpty()) {
+            throw new VciBaseException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
         }
         String namesql = "";
         if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("name"))) {
@@ -3389,15 +3540,20 @@
 
         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 = "";
+
+//        if (StringUtils.isNotBlank(codesql) || StringUtils.isNotBlank(lcstatusSql) || StringUtils.isNotBlank(namesql)) {
+//            where = "where ";
+//        }
 
         String num1 = baseQueryObject.getPage() * baseQueryObject.getLimit() + "";
         String num2 = ((baseQueryObject.getPage()) - 1) * baseQueryObject.getLimit() + 1 + "";
 
         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
+                + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 "
                 + lcstatusSql + namesql + codesql + ") t where rownum <=" + num1 + ") where rn >=" + num2
         );
         List<BaseModel> baseModels = new ArrayList<>();
@@ -3439,14 +3595,14 @@
         } catch (Exception e) {
             throw new VciBaseException("鏌ヨ澶辫触锛�" + e.getMessage());
         }
-        int total = commonsMapper.queryCountBySql("select count(*) from " + listR.getData().get(0).getTableName()
+        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 lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 "
                 + lcstatusSql + namesql + codesql
         );
-		IPage<BaseModel> objectDataGrid = new Page<>();
+        IPage<BaseModel> objectDataGrid = new Page<>();
         objectDataGrid.setPages(baseQueryObject.getPage());
-		objectDataGrid.setCurrent(baseQueryObject.getPage());
+        objectDataGrid.setCurrent(baseQueryObject.getPage());
         objectDataGrid.setRecords(baseModels);
         objectDataGrid.setSize(baseQueryObject.getLimit());
         objectDataGrid.setTotal(total);
@@ -3518,7 +3674,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);
@@ -3578,6 +3775,9 @@
         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()));
+        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());

--
Gitblit v1.9.3