From 19ec0269a9ce3a57ccfcd1d36585bb1c31977b60 Mon Sep 17 00:00:00 2001
From: ludc <ludc@vci-tech.com>
Date: 星期五, 10 一月 2025 10:25:22 +0800
Subject: [PATCH] ui定义为树或树表时默认设置orientation为positive

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java |  748 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 408 insertions(+), 340 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java
index 6c38eee..78105b6 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java
@@ -27,6 +27,10 @@
 import com.vci.starter.web.annotation.bus.VciChangeDataPlugin;
 import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
 import com.vci.starter.web.constant.QueryOptionConstant;
+import com.vci.starter.web.dto.BaseLinkModelDTO;
+import com.vci.starter.web.dto.BaseLinkModelDTOList;
+import com.vci.starter.web.dto.BaseModelDTO;
+import com.vci.starter.web.dto.BaseModelDTOList;
 import com.vci.starter.web.enumpck.VciChangeDocumentTypeEnum;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.model.BaseModel;
@@ -40,7 +44,6 @@
 import com.vci.web.service.*;
 import com.vci.web.service.impl.WebBoServiceImpl;
 import com.vci.web.service.impl.WebLoServiceImpl;
-import com.vci.web.service.uidataservice.UIDataBaseServiceI;
 import com.vci.web.service.uidataservice.UIDataCommonServiceI;
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
@@ -56,7 +59,6 @@
 import java.util.stream.Collectors;
 
 import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
-
 
 /**
  * UI涓婄殑鏁版嵁鏌ヨ(閫氱敤鏌ヨ鏈嶅姟)
@@ -150,78 +152,97 @@
      */
     @Override
     public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException, PLException {
-        VciBaseUtil.alertNotNull(dataGridQuery,"鏌ヨ瀵硅薄",dataGridQuery.getBtmname(),"涓氬姟绫诲瀷",dataGridQuery.getTableDefineId());
+        VciBaseUtil.alertNotNull(dataGridQuery,"鏌ヨ瀵硅薄",dataGridQuery.getBtmName(),"涓氬姟绫诲瀷",dataGridQuery.getTableDefineId());
         // TODO: 2024/12/4 Ludc 鍓嶇浼犺繃鏉ョ殑sourceData鍙傛暟鐨剉laue鍙兘鏄痡son杩欏効鍋氫竴涓嬪鐞�
         if(Func.isNotEmpty(dataGridQuery.getSourceData())){
             dataGridQuery.setSourceData(this.convertMapValueJson2Map(dataGridQuery.getSourceData()));
         }
-        //鍏堝垽鏂煡璇㈡ā鏉�
-        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(),null).getTableDefineVO();
-        String queryTemplate = Func.isNotEmpty(dataGridQuery.getSourceData())? (String) dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()) :tableDefineVO.getQueryTemplateName();
-        if(StringUtils.isBlank(queryTemplate)){
-            //璇存槑娌℃湁璁剧疆鏌ヨ妯℃澘锛岄渶瑕佺湅鐪嬪湪杩欎釜琛ㄦ牸鎵�鍦ㄧ殑缁勪欢鏈夋病鏈夎缃�
-            tableDefineVO = uiEngineService.getTableById(dataGridQuery.getBtmname(), dataGridQuery.getTableDefineId());
-            queryTemplate = tableDefineVO.getQueryTemplateName();
-        }
-        //鐪嬬湅鏈夋病鏈夎嚜瀹氫箟鐨凷QL
-        Set<String> queryFieldList = new HashSet<>();
-        tableDefineVO.getCols().forEach(cols->{
-            //鑾峰彇鍙傜収
-            List<UITableFieldVO> referFieldList = cols.stream().filter(s -> UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getFieldType())).collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(referFieldList)){
-                referFieldList.stream().forEach(field->{
-                    queryFieldList.add(field.getField());
-                    if(StringUtils.isNotBlank(field.getShowField())) {
-                        queryFieldList.add(field.getShowField());
-                    }
-                });
+        UIComponentVO componentVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(), null);
+        UITableDefineVO tableDefineVO = componentVO.getTableDefineVO();
+        //鍏堝垽鏂煡璇㈡ā鏉挎槸鍚﹂厤缃簡鑷畾涔夋煡璇㈢被
+        String bsCustQueryCLsOrUrl = componentVO.getBsDataModel()   ;
+        // TODO: 2024/12/5 Ludc 鏍规嵁UI閰嶇疆鐨勮繘琛屽垽鏂槸鍚︿娇鐢ㄨ嚜瀹氫箟绫昏繘琛屾煡璇�(鑷畾涔夌被鏌ヨ鏂瑰紡浼樺厛绾ч珮浜庢煡璇㈡ā鏉�)
+        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
+            //閫氳繃鍙嶅皠璋冪敤bsCustQueryCLsOrUrl涓畾涔夌殑鏈嶅姟绫讳腑鐨勬煡璇㈡柟娉�
+            try {
+                // 鑾峰彇绫荤殑 Class 瀵硅薄
+                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
+                // 鍒涘缓绫荤殑瀹炰緥
+                Object instance = clazz.getDeclaredConstructor().newInstance();
+                // 鑾峰彇鏂规硶getDataForGrid锛堣鏂规硶鏄帴鍙d腑缁熶竴瀹氫箟鐨勬柟娉曪級
+                Method method = clazz.getMethod("getDataForGrid", UIDataGridQuery.class);
+                // 璋冪敤鏂规硶
+                DataGrid dataGrid = (DataGrid) method.invoke(instance, dataGridQuery);
+                return dataGrid;
+            }catch (Exception e){
+                e.printStackTrace();
+                throw new VciBaseException("鑾峰彇琛ㄦ牸鏁版嵁鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+e.getMessage());
             }
-            Map<String, String> comboxMap = cols.stream().filter(s -> UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getFieldType()) && StringUtils.isNotBlank(s.getComboxKey())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getField(), t -> t.getComboxKey()));
-            if(!CollectionUtils.isEmpty(comboxMap)) {
-                comboxMap.forEach((field,comboxKey)->{
-                    queryFieldList.add(comboxKey+"_" + field.substring(0,field.length()-4) + "#" + field);
-                });
-            }
-            queryFieldList.addAll(cols.stream().filter(s -> !UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getFieldType()) && !UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getFieldType())).map(s -> s.getField()).collect(Collectors.toList()));
-        });
-
-        //閽堝鍙傜収鐨勶紝鎴戜滑闇�瑕佹坊鍔犲搴旂殑
-        //杩欎釜涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�
-        OsBtmTypeVO btmTypeVO = null;
-        OsLinkTypeVO linkTypeVO = null;
-        if(dataGridQuery.isLinkTypeFlag()){
-            linkTypeVO = linkTypeService.getLinkTypeById(dataGridQuery.getBtmname());
-            queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
-            queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
         }else{
-            //btmTypeVO = btmService.getBtmById(dataGridQuery.getBtmname());
-            btmTypeVO = btmService.getBtmByName(dataGridQuery.getBtmname());
-            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
-            queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
-        }
-        queryFieldList.add("creator_name");
-        queryFieldList.add("lastmodifier_name");
-        //鎴戜滑鍦ㄥ悗鍙版煡璇笟鍔℃暟鎹�
-        Map<String, Object> replaceMap = wrapperReplaceMap(dataGridQuery.getSourceData());
-
-        if(dataGridQuery.isLinkTypeFlag()){
-            UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
-            linkTypeDataQuery.setQueryTemplateName(queryTemplate);
-            linkTypeDataQuery.setReplaceMap(replaceMap);
-            linkTypeDataQuery.setConditionMap(dataGridQuery.getConditionMap());
-            linkTypeDataQuery.setClauseList(queryFieldList);
-            linkTypeDataQuery.setLinkType(dataGridQuery.getBtmname());
-            if(dataGridQuery.isTreeTableFlag()){
-                linkTypeDataQuery.setLevel(-1);
+            String queryTemplate = Func.isNotEmpty(dataGridQuery.getSourceData())? (String) dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()) :tableDefineVO.getQueryTemplateName();
+            if(StringUtils.isBlank(queryTemplate)){
+                //璇存槑娌℃湁璁剧疆鏌ヨ妯℃澘锛岄渶瑕佺湅鐪嬪湪杩欎釜琛ㄦ牸鎵�鍦ㄧ殑缁勪欢鏈夋病鏈夎缃�
+                tableDefineVO = uiEngineService.getTableById(dataGridQuery.getBtmName(), dataGridQuery.getTableDefineId());
+                queryTemplate = tableDefineVO.getQueryTemplateName();
             }
-            return loService.queryGridByScheme(linkTypeDataQuery);
-        }else {
-            DataGrid dataGrid = boService.queryGridByScheme(queryTemplate,
-                    dataGridQuery.getConditionMap(), replaceMap, dataGridQuery.getPageHelper(), queryFieldList.stream().collect(Collectors.toList()));
-            return dataGrid;
+            //鐪嬬湅鏈夋病鏈夎嚜瀹氫箟鐨凷QL
+            Set<String> queryFieldList = new HashSet<>();
+            tableDefineVO.getCols().forEach(cols->{
+                //鑾峰彇鍙傜収
+                List<UITableFieldVO> referFieldList = cols.stream().filter(s -> UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getFieldType())).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(referFieldList)){
+                    referFieldList.stream().forEach(field->{
+                        queryFieldList.add(field.getField());
+                        if(StringUtils.isNotBlank(field.getShowField())) {
+                            queryFieldList.add(field.getShowField());
+                        }
+                    });
+                }
+                Map<String, String> comboxMap = cols.stream().filter(s -> UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getFieldType()) && StringUtils.isNotBlank(s.getComboxKey())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getField(), t -> t.getComboxKey()));
+                if(!CollectionUtils.isEmpty(comboxMap)) {
+                    comboxMap.forEach((field,comboxKey)->{
+                        queryFieldList.add(comboxKey+"_" + field.substring(0,field.length()-4) + "#" + field);
+                    });
+                }
+                queryFieldList.addAll(cols.stream().filter(s -> !UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getFieldType()) && !UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getFieldType())).map(s -> s.getField()).collect(Collectors.toList()));
+            });
+
+            //閽堝鍙傜収鐨勶紝鎴戜滑闇�瑕佹坊鍔犲搴旂殑
+            //杩欎釜涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�
+            OsBtmTypeVO btmTypeVO = null;
+            OsLinkTypeVO linkTypeVO = null;
+            if(dataGridQuery.isLinkTypeFlag()){
+                linkTypeVO = linkTypeService.getLinkTypeById(dataGridQuery.getBtmName());
+                queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
+                queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
+            }else{
+                //btmTypeVO = btmService.getBtmById(dataGridQuery.getBtmname());
+                btmTypeVO = btmService.getBtmByName(dataGridQuery.getBtmName());
+                queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
+                queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
+            }
+            queryFieldList.add("creator_name");
+            queryFieldList.add("lastmodifier_name");
+            //鎴戜滑鍦ㄥ悗鍙版煡璇笟鍔℃暟鎹�
+            Map<String, Object> replaceMap = wrapperReplaceMap(dataGridQuery.getSourceData());
+
+            if(dataGridQuery.isLinkTypeFlag()){
+                UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
+                linkTypeDataQuery.setQueryTemplateName(queryTemplate);
+                linkTypeDataQuery.setReplaceMap(replaceMap);
+                linkTypeDataQuery.setConditionMap(dataGridQuery.getConditionMap());
+                linkTypeDataQuery.setClauseList(queryFieldList);
+                linkTypeDataQuery.setLinkType(dataGridQuery.getBtmName());
+                if(dataGridQuery.isTreeTableFlag()){
+                    linkTypeDataQuery.setLevel(-1);
+                }
+                return loService.queryGridByScheme(linkTypeDataQuery);
+            }else {
+                DataGrid dataGrid = boService.queryGridByScheme(queryTemplate,
+                        dataGridQuery.getConditionMap(), replaceMap, dataGridQuery.getPageHelper(), queryFieldList.stream().collect(Collectors.toList()));
+                return dataGrid;
+            }
         }
-        //鐢熷懡鍛ㄦ湡鍦ㄥ叾涓煡璇㈠悗灏变細澶勭悊
-        //鏋氫妇涔熶細琚鐞嗕簡
     }
 
     /**
@@ -233,107 +254,129 @@
      */
     @Override
     public UIFormDataVO getDataForForm(UIFormQuery formQuery) throws VciBaseException, PLException {
-        VciBaseUtil.alertNotNull(formQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",formQuery.getBtmname(),"涓氬姟绫诲瀷鐨勪俊鎭�",formQuery.getOid(),"涓氬姟鏁版嵁鐨勪富閿�",formQuery.getFormDefineId(),"琛ㄥ崟鐨勫畾涔夌紪鍙�");
+        VciBaseUtil.alertNotNull(formQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",formQuery.getBtmName(),"涓氬姟绫诲瀷鐨勪俊鎭�",formQuery.getSourceOid(),"涓氬姟鏁版嵁鐨勪富閿�",formQuery.getFormDefineId(),"琛ㄥ崟鐨勫畾涔夌紪鍙�");
         // TODO: 2024/12/4 Ludc 鍓嶇浼犺繃鏉ョ殑sourceData鍙傛暟鐨剉laue鍙兘鏄痡son杩欏効鍋氫竴涓嬪鐞�
         if(Func.isNotEmpty(formQuery.getSourceData())){
             formQuery.setSourceData(this.convertMapValueJson2Map(formQuery.getSourceData()));
         }
-        UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmname(),formQuery.getFormDefineId());
-        String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())? (String) formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()) :formDefineVO.getQueryTemplateName();
-        Set<String> queryFieldList = formDefineVO.getItems().stream().filter(s->!UIFieldTypeEnum.CUSTOM.getValue().equalsIgnoreCase(s.getType())).map(UIFormItemVO::getField).collect(Collectors.toSet());
-        //鑾峰彇鍙傜収
-        List<UIFormItemVO> referFieldList = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getType())).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(referFieldList)){
-            referFieldList.stream().forEach(field->{
-                queryFieldList.add(field.getField());
-                if(StringUtils.isNotBlank(field.getShowField())) {
-                    queryFieldList.add(field.getShowField());
-                }
-            });
-        }
-        Map<String, String> comboxMap = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getType()) && StringUtils.isNotBlank(s.getComboxKey())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getField(), t -> t.getComboxKey()));
-        if(!CollectionUtils.isEmpty(comboxMap)) {
-            comboxMap.forEach((field,comboxKey)->{
-                //瑕佹妸鏋氫妇鐨勫睘鎬ф煡璇㈠嚭鏉ワ紝鍜岃〃鏍奸鍦版柟涓嶄竴鏍凤紝鍥犱负閭h竟浼氭妸field鐩存帴鍔犱簡text
-                queryFieldList.add(comboxKey+"_" + field + "#" + field +"text");
-            });
-        }
-        //杩欎釜涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�
-        OsBtmTypeVO btmTypeVO = null;
-        OsLinkTypeVO linkTypeVO = null;
-        if(formDefineVO.isLinkTypeFlag()){
-            linkTypeVO = linkTypeService.getLinkTypeById(formQuery.getBtmname());
-            queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
-            queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
-        }else{
-            btmTypeVO = btmService.getBtmByName(formQuery.getBtmname());
-            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
-        }
-        queryFieldList.add("creator_name");
-        queryFieldList.add("lastmodifier_name");
-        Map<String,String> conditionMap = WebUtil.getOidQuery(formQuery.getOid());
-        Map<String, Object> replaceMap = wrapperReplaceMap(formQuery.getSourceData());
-        UIFormDataVO formDataVO = new UIFormDataVO();
-        replaceMap.put("oid", formQuery.getOid().trim());
-        if(!formDefineVO.isLinkTypeFlag()) {
-            List<BusinessObject> cbos = null;
-            if (StringUtils.isNotBlank(queryTemplate)) {
-                replaceMap.put("oid", formQuery.getOid().trim());
-                cbos = boService.queryCBOByScheme(queryTemplate, conditionMap, replaceMap, null, queryFieldList.stream().collect(Collectors.toList()));
-            } else {
-                //娌℃湁鏌ヨ妯℃澘锛岄偅鎴戜滑灏辩洿鎺ヤ富閿拰涓氬姟绫诲瀷鍘绘煡璇�
-                cbos = boService.queryCBO(formQuery.getBtmname(), conditionMap, null, queryFieldList.stream().collect(Collectors.toList()));
-            }
-            if (!CollectionUtils.isEmpty(cbos)) {
-                BusinessObject cbo = cbos.get(0);
-                formDataVO.setData(boService.cbo2Map(cbo));
-            } else {
-                throw new VciBaseException(DATA_OID_NOT_EXIST);
+        //鍏堝垽鏂煡璇㈡ā鏉挎槸鍚﹂厤缃簡鑷畾涔夋煡璇㈢被
+        UIComponentVO componentVO = uiEngineService.getComponentByOid(formQuery.getComponentOid(), null);
+        //UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmName(),formQuery.getFormDefineId());
+        String bsCustQueryCLsOrUrl = componentVO.getBsDataModel();
+        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
+            //閫氳繃鍙嶅皠璋冪敤bsCustQueryCLsOrUrl涓畾涔夌殑鏈嶅姟绫讳腑鐨勬煡璇㈡柟娉�
+            try {
+                // 鑾峰彇绫荤殑 Class 瀵硅薄
+                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
+                // 鍒涘缓绫荤殑瀹炰緥
+                Object instance = clazz.getDeclaredConstructor().newInstance();
+                // 鑾峰彇鏂规硶getDataForGrid锛堣鏂规硶鏄帴鍙d腑缁熶竴瀹氫箟鐨勬柟娉曪級
+                Method method = clazz.getMethod("getDataForForm", UIFormQuery.class);
+                // 璋冪敤鏂规硶
+                UIFormDataVO uiFormDataVO = (UIFormDataVO) method.invoke(instance, formQuery);
+                return uiFormDataVO;
+            }catch (Exception e){
+                e.printStackTrace();
+                throw new VciBaseException("鑾峰彇琛ㄦ牸鏁版嵁鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+e.getMessage());
             }
         }else{
-            UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
-            linkTypeDataQuery.setQueryTemplateName(queryTemplate);
-            linkTypeDataQuery.setReplaceMap(replaceMap);
-            linkTypeDataQuery.setConditionMap(conditionMap);
-            linkTypeDataQuery.setClauseList(queryFieldList);
-            linkTypeDataQuery.setLinkType(formQuery.getBtmname());
-            //linkTypeDataQuery.setDirection(formQuery.isOrientation());
-            //linkTypeDataQuery.setToBtmType(treeDefineVO.getBtmType());
-            DataGrid dataGrid = loService.queryGridByScheme(linkTypeDataQuery);
-            if (dataGrid != null && !CollectionUtils.isEmpty(dataGrid.getData())) {
-                formDataVO.setData((Map<String, Object>) dataGrid.getData().get(0));
-            }
-        }
-        //鏌ヨ闄勪欢
-        formDataVO.setAttachmentFileVOs(fileObjectService.listFilesByOwnbiz(formQuery.getOid(), formQuery.getBtmname(), "attachment"));
-        List<UIFormItemVO> fileItems = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.FILE.getValue().equalsIgnoreCase(s.getType())).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(fileItems)){
-            //瀛楁鐨勫睘鎬ц偗瀹氫笉浼氳秴杩�1000涓�
-            //鏌ヨ杩欎簺鐨勫��
-            List<String> filePathList = new ArrayList<>();
-            fileItems.stream().forEach(field->{
-                Object value = formDataVO.getData().getOrDefault(field.getField(),null);
-                if(value!=null && StringUtils.isNotBlank(value.toString())){
-                    filePathList.add(value.toString());
-                }
-            });
-            List<VciFileObjectVO> fileObjectVOS = fileObjectService.listFileObjectByPath(filePathList, "filePathField");
-            if(!CollectionUtils.isEmpty(fileObjectVOS)){
-                Map<String,VciFileObjectVO> fileObjectVOMap = fileObjectVOS.stream().collect(Collectors.toMap(s->s.getFilePath(),t->t,(o1,o2)->o2));
-                Map<String,VciFileObjectVO> fieldFileVOMap = new HashMap<>();
-                fileItems.stream().forEach(field->{
-                    Object value = formDataVO.getData().getOrDefault(field.getField(),null);
-                    if(value!=null){
-                        VciFileObjectVO fileObjectVO = fileObjectVOMap.getOrDefault(value.toString(),null);
-                        if(fileObjectVO!=null){
-                            fieldFileVOMap.put(field.getField(),fileObjectVO);
-                        }
+            UIFormDefineVO formDefineVO = componentVO.getFormDefineVO();
+            String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())? (String) formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()) :formDefineVO.getQueryTemplateName();
+            Set<String> queryFieldList = formDefineVO.getItems().stream().filter(s->!UIFieldTypeEnum.CUSTOM.getValue().equalsIgnoreCase(s.getType())).map(UIFormItemVO::getField).collect(Collectors.toSet());
+            //鑾峰彇鍙傜収
+            List<UIFormItemVO> referFieldList = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.REFER.getValue().equalsIgnoreCase(s.getType())).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(referFieldList)){
+                referFieldList.stream().forEach(field->{
+                    queryFieldList.add(field.getField());
+                    if(StringUtils.isNotBlank(field.getShowField())) {
+                        queryFieldList.add(field.getShowField());
                     }
                 });
-                formDataVO.setFilePathFieldMap(fieldFileVOMap);
             }
+            Map<String, String> comboxMap = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.COMBOX.getValue().equalsIgnoreCase(s.getType()) && StringUtils.isNotBlank(s.getComboxKey())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getField(), t -> t.getComboxKey()));
+            if(!CollectionUtils.isEmpty(comboxMap)) {
+                comboxMap.forEach((field,comboxKey)->{
+                    //瑕佹妸鏋氫妇鐨勫睘鎬ф煡璇㈠嚭鏉ワ紝鍜岃〃鏍奸鍦版柟涓嶄竴鏍凤紝鍥犱负閭h竟浼氭妸field鐩存帴鍔犱簡text
+                    queryFieldList.add(comboxKey+"_" + field + "#" + field +"text");
+                });
+            }
+            //杩欎釜涓氬姟绫诲瀷鍖呭惈鐨勫睘鎬�
+            OsBtmTypeVO btmTypeVO = null;
+            OsLinkTypeVO linkTypeVO = null;
+            if(formDefineVO.isLinkTypeFlag()){
+                linkTypeVO = linkTypeService.getLinkTypeById(formQuery.getBtmName());
+                queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
+                queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
+            }else{
+                btmTypeVO = btmService.getBtmByName(formQuery.getBtmName());
+                queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
+            }
+            queryFieldList.add("creator_name");
+            queryFieldList.add("lastmodifier_name");
+            Map<String,String> conditionMap = WebUtil.getOidQuery(formQuery.getSourceOid());
+            Map<String, Object> replaceMap = wrapperReplaceMap(formQuery.getSourceData());
+            UIFormDataVO formDataVO = new UIFormDataVO();
+            replaceMap.put("oid", formQuery.getSourceOid().trim());
+            if(!formDefineVO.isLinkTypeFlag()) {
+                List<BusinessObject> cbos = null;
+                if (StringUtils.isNotBlank(queryTemplate)) {
+                    // replaceMap.put("oid", formQuery.getOid().trim());
+                    cbos = boService.queryCBOByScheme(queryTemplate, conditionMap, replaceMap, null, queryFieldList.stream().collect(Collectors.toList()));
+                } else {
+                    //娌℃湁鏌ヨ妯℃澘锛岄偅鎴戜滑灏辩洿鎺ヤ富閿拰涓氬姟绫诲瀷鍘绘煡璇�
+                    cbos = boService.queryCBO(formQuery.getBtmName(), conditionMap, null, queryFieldList.stream().collect(Collectors.toList()));
+                }
+                if (!CollectionUtils.isEmpty(cbos)) {
+                    BusinessObject cbo = cbos.get(0);
+                    formDataVO.setData(boService.cbo2Map(cbo));
+                } else {
+                    throw new VciBaseException(DATA_OID_NOT_EXIST);
+                }
+            }else{
+                UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
+                linkTypeDataQuery.setQueryTemplateName(queryTemplate);
+                linkTypeDataQuery.setReplaceMap(replaceMap);
+                linkTypeDataQuery.setConditionMap(conditionMap);
+                linkTypeDataQuery.setClauseList(queryFieldList);
+                linkTypeDataQuery.setLinkType(formQuery.getBtmName());
+                //linkTypeDataQuery.setDirection(formQuery.isOrientation());
+                //linkTypeDataQuery.setToBtmType(treeDefineVO.getBtmType());
+                DataGrid dataGrid = loService.queryGridByScheme(linkTypeDataQuery);
+                if (dataGrid != null && !CollectionUtils.isEmpty(dataGrid.getData())) {
+                    formDataVO.setData((Map<String, Object>) dataGrid.getData().get(0));
+                }
+            }
+            //鏌ヨ闄勪欢
+            formDataVO.setAttachmentFileVOs(fileObjectService.listFilesByOwnbiz(formQuery.getSourceOid(), formQuery.getBtmName(), "attachment"));
+            List<UIFormItemVO> fileItems = formDefineVO.getItems().stream().filter(s -> UIFieldTypeEnum.FILE.getValue().equalsIgnoreCase(s.getType())).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(fileItems)){
+                //瀛楁鐨勫睘鎬ц偗瀹氫笉浼氳秴杩�1000涓�
+                //鏌ヨ杩欎簺鐨勫��
+                List<String> filePathList = new ArrayList<>();
+                fileItems.stream().forEach(field->{
+                    Object value = formDataVO.getData().getOrDefault(field.getField(),null);
+                    if(value!=null && StringUtils.isNotBlank(value.toString())){
+                        filePathList.add(value.toString());
+                    }
+                });
+                List<VciFileObjectVO> fileObjectVOS = fileObjectService.listFileObjectByPath(filePathList, "filePathField");
+                if(!CollectionUtils.isEmpty(fileObjectVOS)){
+                    Map<String,VciFileObjectVO> fileObjectVOMap = fileObjectVOS.stream().collect(Collectors.toMap(s->s.getFilePath(),t->t,(o1,o2)->o2));
+                    Map<String,VciFileObjectVO> fieldFileVOMap = new HashMap<>();
+                    fileItems.stream().forEach(field->{
+                        Object value = formDataVO.getData().getOrDefault(field.getField(),null);
+                        if(value!=null){
+                            VciFileObjectVO fileObjectVO = fileObjectVOMap.getOrDefault(value.toString(),null);
+                            if(fileObjectVO!=null){
+                                fieldFileVOMap.put(field.getField(),fileObjectVO);
+                            }
+                        }
+                    });
+                    formDataVO.setFilePathFieldMap(fieldFileVOMap);
+                }
+            }
+            return formDataVO;
         }
-        return formDataVO;
     }
 
     /**
@@ -367,7 +410,7 @@
      */
     @Override
     public List<UIDataTree> getDataForTree(UITreeQuery treeQuery) throws Exception {
-        VciBaseUtil.alertNotNull(treeQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",treeQuery.getBtmname(),"涓氬姟绫诲瀷鐨勪俊鎭�",treeQuery.getComponentOid(),"鏍戞墍鍦ㄧ殑缁勪欢鐨勪富閿�");
+        VciBaseUtil.alertNotNull(treeQuery,"琛ㄥ崟鐨勬煡璇㈠璞�",treeQuery.getBtmName(),"涓氬姟绫诲瀷鐨勪俊鎭�",treeQuery.getComponentOid(),"鏍戞墍鍦ㄧ殑缁勪欢鐨勪富閿�");
         // TODO: 2024/12/4 Ludc 鍓嶇浼犺繃鏉ョ殑sourceData鍙傛暟鐨剉laue鍙兘鏄痡son杩欏効鍋氫竴涓嬪鐞�
         if(Func.isNotEmpty(treeQuery.getSourceData())){
             treeQuery.setSourceData(this.convertMapValueJson2Map(treeQuery.getSourceData()));
@@ -377,149 +420,199 @@
         if(componentVO == null || StringUtils.isBlank(componentVO.getOid())){
             throw new VciBaseException("鏍戠殑閰嶇疆淇℃伅娌℃湁鑾峰彇鍒�");
         }
-        //鏍戝舰鏈変袱绉嶏紝涓�绉嶆槸涓氬姟绫诲瀷閲岃嚜鍙傜収锛屼竴绉嶆槸閾炬帴绫诲瀷
-        UITreeDefineVO treeDefineVO = componentVO.getTreeDefineVO();
-        if(treeDefineVO == null){
-            throw new VciBaseException("杩欎釜缁勪欢涓嶆槸鏍�");
-        }
-        if(!treeQuery.isLinkTypeFlag() && StringUtils.isBlank(treeQuery.getParentBtmName())){
-            treeQuery.setParentBtmName(treeQuery.getBtmname());
-        }
-        //TODO: 鏇挎崲鏍戝畾涔変笂鐨勬鍙嶅悜鏌ヨ灞炴�э紝鍥犱负姝e弽鍚戞煡璇㈡槸鐢遍摼鎺ョ被鍨嬫煡璇㈡ā鏉夸笂鎺у埗鐨�
-        boolean isOrientation = false; //鏄惁鍙嶅悜锛屼娇鐢ㄦā鏉夸笂閰嶇疆鐨�
-        String qtName = treeDefineVO.getQueryTemplateName();
-        if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
-            QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
-            QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
-            isOrientation = qt.getDirection().equals("opposite");
-        }
-        if(treeQuery.getConditionMap() == null){
-            treeQuery.setConditionMap(new HashMap<>());
-        }
-        if(treeQuery.getExtandParamsMap() != null){
-            treeQuery.getConditionMap().putAll(treeQuery.getExtandParamsMap());
-        }
-       String parentFieldName = treeQuery.getParentFieldName();
-        if(parentFieldName.contains(",")){
-            parentFieldName = parentFieldName.split(",")[0];
-        }
-        if(StringUtils.isNotBlank(parentFieldName)){
-            if(StringUtils.isNotBlank(treeQuery.getParentOid())){
-                treeQuery.getConditionMap().put(parentFieldName,treeQuery.getParentOid());
-            }
-        }
-        if(StringUtils.isNotBlank(treeQuery.getParentOid()) && treeQuery.getParentOid().contains(TREE_NODE_ID_SEP)){
-            treeQuery.setParentOid(treeQuery.getParentOid().split(TREE_NODE_ID_SEP)[1]);
-        }
-        String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())? (String) treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()) :treeDefineVO.getQueryTemplateName());
-        String valueField = treeQuery.isLinkTypeFlag()?(!isOrientation?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
-        String textField = StringUtils.isNotBlank(treeDefineVO.getTreeNodeExpression())?treeDefineVO.getTreeNodeExpression():(StringUtils.isNotBlank(treeQuery.getTextField())?treeQuery.getTextField():"name");
-        List<UIDataTree> rootTreeList = new ArrayList<>();
-        List<String> queryFieldList = new ArrayList<>();
-        queryFieldList.add("creator_name");
-        queryFieldList.add("lastmodifier_name");
-        String rootExpress = StringUtils.isNotBlank(treeQuery.getRootExpress())?treeQuery.getRootExpress():treeDefineVO.getRootContent();
-        Map<String, Object> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
-        if(StringUtils.isBlank(treeDefineVO.getLinkType())){
-            //杩欎釜鏄笟鍔$被鍨嬬殑鑷弬鐓�
-            //浠ュ墠鐨勫钩鍙版病鏈夊鑷弬鐓ц繖绉嶆湁鍏ㄩ儴鏌ヨ鐨�
-            OsBtmTypeVO btmTypeVO = btmService.getBtmByName(treeDefineVO.getBtmType());
-            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
-            queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
-
-            addQueryField(queryFieldList,valueField);
-            addQueryField(queryFieldList,textField);
-
-            if(treeQuery.isQueryRoot()){
-                //鏄煡璇㈡牴鑺傜偣
-                List<BusinessObject> rootCbos = null;
-                if(StringUtils.isNotBlank(queryTemplate)){
-                    //璇存槑鏄彍鍗曢噷瀹氫箟浜嗘煡璇㈡ā鏉跨殑
-                    rootCbos = boService.queryCBOByScheme(queryTemplate, null, replaceMap);
-                }else{
-                    //璇存槑娌℃湁浼犻�掞紝杩欓渶瑕佸吋瀹逛互鍓嶇殑鏂瑰紡锛屽氨鏄湪showLinkAps閲岃缃�
-                    String parentFieldNameAndValue = treeDefineVO.getShowLinkAbs();
-                    if(StringUtils.isBlank(parentFieldNameAndValue) || !parentFieldNameAndValue.contains(",")){
-                        throw new VciBaseException("閰嶇疆鐨勪俊鎭湁璇�傚湪娌℃湁鍦ㄨ彍鍗曟垨鑰呮潵婧愭暟鎹缃牴鑺傜偣鐨勬煡璇㈡ā鏉挎椂锛岃鍦ㄦ爲鐨勩�愬弬鐓ф爲銆戜笂璁剧疆涓婄骇瀛楁鐨勫悕绉板拰鏍硅妭鐐圭殑鏌ヨ鐨勫�笺�傛瘮濡倄xxx,yyy銆傚叾涓瓁xxx鏄笂绾у瓧娈佃嫳鏂囧悕绉�");
-                    }
-                    parentFieldName = parentFieldNameAndValue.split(",")[0];
-                    String rootQueryValue = parentFieldNameAndValue.split(",")[1];
-                    treeQuery.getConditionMap().put(parentFieldName,rootQueryValue);
-                    replaceMap.put(parentFieldName,rootQueryValue);
-                    replaceMap.put("f_oid",rootQueryValue);
-                    if(StringUtils.isNotBlank(queryTemplate)){
-                        rootCbos = boService.queryCBOByScheme(queryTemplate,treeQuery.getConditionMap(),replaceMap,null,queryFieldList);
-                    }else{
-                        rootCbos = boService.queryCBO(treeDefineVO.getBtmType(),treeQuery.getConditionMap(),null,queryFieldList);
-                    }
-                }
-                if(!CollectionUtils.isEmpty(rootCbos)){
-                    rootTreeList = cbo2Trees(rootCbos,valueField,StringUtils.isBlank(rootExpress)?textField:rootExpress,parentFieldName,treeQuery.isShowCheckBox(),null);
-                    TreeQueryObject treeQueryObject = new TreeQueryObject();
-                    treeQueryObject.setValueField(valueField);
-                    treeQueryObject.setTextField(textField);
-                    treeQueryObject.setParentFieldName(parentFieldName);
-                    treeQueryObject.setShowCheckBox(treeQuery.isShowCheckBox());
-                    if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
-                        treeQueryObject.setQueryAllLevel(true);
-                    }
-                    queryTreeForBO(rootTreeList,treeDefineVO.getQueryTemplateName(),queryFieldList,treeQueryObject);
-                }
-                return rootTreeList;
-            }else{
-                //杩欎釜涓嶆槸璺熻妭鐐癸紝浣嗘槸涓�鑸彧鏄鍔犱竴涓�愮骇鏌ヨ锛屽洜涓哄叏閮ㄦ煡璇㈢殑鏃跺�欙紝鍦ㄦ牴鑺傜偣宸茬粡鍏ㄩ儴鏌ヨ瀹屼簡
-                List<BusinessObject> thisChildren = null;
-                if (StringUtils.isNotBlank(queryTemplate)) {
-                    thisChildren = boService.queryCBOByScheme(queryTemplate, treeQuery.getConditionMap(), replaceMap, null, queryFieldList);
-                } else {
-                    thisChildren = boService.queryCBO(treeQuery.getParentBtmName(), treeQuery.getConditionMap(), null, queryFieldList);
-                }
-                return cbo2Trees(thisChildren, valueField, textField, parentFieldName, treeQuery.isShowCheckBox(), null);
+        String bsCustQueryCLsOrUrl = componentVO.getBsDataModel();
+        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
+            //閫氳繃鍙嶅皠璋冪敤bsCustQueryCLsOrUrl涓畾涔夌殑鏈嶅姟绫讳腑鐨勬煡璇㈡柟娉�
+            try {
+                // 鑾峰彇绫荤殑 Class 瀵硅薄
+                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
+                // 鍒涘缓绫荤殑瀹炰緥
+                Object instance = clazz.getDeclaredConstructor().newInstance();
+                // 鑾峰彇鏂规硶getDataForGrid锛堣鏂规硶鏄帴鍙d腑缁熶竴瀹氫箟鐨勬柟娉曪級
+                Method method = clazz.getMethod("getDataForForm", UITreeQuery.class);
+                // 璋冪敤鏂规硶
+                List<UIDataTree> uiDataTreeList = (List<UIDataTree>) method.invoke(instance, treeQuery);
+                return uiDataTreeList;
+            }catch (Exception e){
+                e.printStackTrace();
+                throw new VciBaseException("鑾峰彇琛ㄦ牸鏁版嵁鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+e.getMessage());
             }
         }else{
-            //OsLinkTypeVO linkTypeVO = linkTypeService.getLinkTypeById(treeDefineVO.getLinkType());
-            LinkType linkType = platformClientUtil.getLinkTypeService().getLinkType(treeDefineVO.getLinkType());
-            //queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
-            queryFieldList.addAll(Arrays.asList(linkType.attributes));
-            queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
-
-            addQueryField(queryFieldList,valueField);
-            addQueryField(queryFieldList,textField);
-            UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
-            linkTypeDataQuery.setQueryTemplateName(queryTemplate);
-            linkTypeDataQuery.setReplaceMap(replaceMap);
-            linkTypeDataQuery.setConditionMap(treeQuery.getConditionMap());
-            linkTypeDataQuery.setParentOid(treeQuery.getParentOid());
-            linkTypeDataQuery.setClauseList(queryFieldList);
-            linkTypeDataQuery.setDirection(isOrientation);
-            linkTypeDataQuery.setToBtmType(treeDefineVO.getBtmType());
-            linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
-            if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
-                linkTypeDataQuery.setQueryAllLevel(true);
+            //鏍戝舰鏈変袱绉嶏紝涓�绉嶆槸涓氬姟绫诲瀷閲岃嚜鍙傜収锛屼竴绉嶆槸閾炬帴绫诲瀷
+            UITreeDefineVO treeDefineVO = componentVO.getTreeDefineVO();
+            if(treeDefineVO == null){
+                throw new VciBaseException("杩欎釜缁勪欢涓嶆槸鏍�");
             }
-            if(treeQuery.isQueryRoot()){
-                //鏌ヨ鏍硅妭鐐�.鎴戜滑闇�瑕佸垽鏂槸鍚﹁缃簡鏍硅妭鐐圭殑鏌ヨ鏉′欢
-                List<BOAndLO> rootCbos = null;
-                String parentFieldNameAndValue = treeDefineVO.getShowLinkAbs();
-                if(StringUtils.isNotBlank(parentFieldNameAndValue)){
+            if(!treeQuery.isLinkTypeFlag() && StringUtils.isBlank(treeQuery.getParentBtmName())){
+                treeQuery.setParentBtmName(treeQuery.getBtmName());
+            }
+            //TODO: 鏇挎崲鏍戝畾涔変笂鐨勬鍙嶅悜鏌ヨ灞炴�э紝鍥犱负姝e弽鍚戞煡璇㈡槸鐢遍摼鎺ョ被鍨嬫煡璇㈡ā鏉夸笂鎺у埗鐨�
+            boolean isOrientation = false; //鏄惁鍙嶅悜锛屼娇鐢ㄦā鏉夸笂閰嶇疆鐨�
+            String qtName = treeDefineVO.getQueryTemplateName();
+            if(Func.isNotBlank(treeDefineVO.getOrientation())){
+                isOrientation = treeDefineVO.getOrientation().equalsIgnoreCase("opposite");
+            }else{
+                if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
+                    QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
+                    QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
+                    isOrientation = qt.getDirection().equals("opposite");
+                }
+            }
+            if(treeQuery.getConditionMap() == null){
+                treeQuery.setConditionMap(new HashMap<>());
+            }
+            if(treeQuery.getExtandParamsMap() != null){
+                treeQuery.getConditionMap().putAll(treeQuery.getExtandParamsMap());
+            }
+            String parentFieldName = treeQuery.getParentFieldName();
+            if(parentFieldName.contains(",")){
+                parentFieldName = parentFieldName.split(",")[0];
+            }
+            if(StringUtils.isNotBlank(parentFieldName)){
+                if(StringUtils.isNotBlank(treeQuery.getParentOid())){
+                    treeQuery.getConditionMap().put(parentFieldName,treeQuery.getParentOid());
+                }
+            }
+            if(StringUtils.isNotBlank(treeQuery.getParentOid()) && treeQuery.getParentOid().contains(TREE_NODE_ID_SEP)){
+                treeQuery.setParentOid(treeQuery.getParentOid().split(TREE_NODE_ID_SEP)[1]);
+            }
+            String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())? (String) treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()) :treeDefineVO.getQueryTemplateName());
+            String valueField = treeQuery.isLinkTypeFlag()?(!isOrientation?"${oid}" + TREE_NODE_ID_SEP + "${t_oid}":"${oid}" + TREE_NODE_ID_SEP + "${f_oid}"):(StringUtils.isNotBlank(treeQuery.getValueField())?treeQuery.getValueField():"oid");
+            String textField = StringUtils.isNotBlank(treeDefineVO.getTreeNodeExpression())?treeDefineVO.getTreeNodeExpression():(StringUtils.isNotBlank(treeQuery.getTextField())?treeQuery.getTextField():"name");
+            List<UIDataTree> rootTreeList = new ArrayList<>();
+            List<String> queryFieldList = new ArrayList<>();
+            queryFieldList.add("creator_name");
+            queryFieldList.add("lastmodifier_name");
+            String rootExpress = StringUtils.isNotBlank(treeQuery.getRootExpress())?treeQuery.getRootExpress():treeDefineVO.getRootContent();
+            Map<String, Object> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
+            if(StringUtils.isBlank(treeDefineVO.getLinkType())){
+                //杩欎釜鏄笟鍔$被鍨嬬殑鑷弬鐓�
+                //浠ュ墠鐨勫钩鍙版病鏈夊鑷弬鐓ц繖绉嶆湁鍏ㄩ儴鏌ヨ鐨�
+                OsBtmTypeVO btmTypeVO = btmService.getBtmByName(treeDefineVO.getBtmType());
+                queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
+                queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
+
+                addQueryField(queryFieldList,valueField);
+                addQueryField(queryFieldList,textField);
+
+                if(treeQuery.isQueryRoot()){
+                    //鏄煡璇㈡牴鑺傜偣
+                    List<BusinessObject> rootCbos = null;
                     if(StringUtils.isNotBlank(queryTemplate)){
-                        linkTypeDataQuery.setQueryAllLevel(false);
-                        //鏍硅妭鐐瑰彧鏌ヨ涓�娆�
-                        //浣跨敤鏌ヨ妯℃澘鏈韩璁剧疆鐨勫唴瀹�
-                        linkTypeDataQuery.setToBtmType(null);
-                        linkTypeDataQuery.setQueryTemplateName(queryTemplate);
-                        rootCbos = loService.queryCLOAndBOBySchema(linkTypeDataQuery);
+                        //璇存槑鏄彍鍗曢噷瀹氫箟浜嗘煡璇㈡ā鏉跨殑
+                        rootCbos = boService.queryCBOByScheme(queryTemplate, null, replaceMap);
                     }else{
-                        String rootQueryValue = "";
+                        //璇存槑娌℃湁浼犻�掞紝杩欓渶瑕佸吋瀹逛互鍓嶇殑鏂瑰紡锛屽氨鏄湪showLinkAps閲岃缃�
+                        String parentFieldNameAndValue = treeDefineVO.getShowLinkAbs();
+                        if(StringUtils.isBlank(parentFieldNameAndValue) || !parentFieldNameAndValue.contains(",")){
+                            throw new VciBaseException("閰嶇疆鐨勪俊鎭湁璇�傚湪娌℃湁鍦ㄨ彍鍗曟垨鑰呮潵婧愭暟鎹缃牴鑺傜偣鐨勬煡璇㈡ā鏉挎椂锛岃鍦ㄦ爲鐨勩�愬弬鐓ф爲銆戜笂璁剧疆涓婄骇瀛楁鐨勫悕绉板拰鏍硅妭鐐圭殑鏌ヨ鐨勫�笺�傛瘮濡倄xxx,yyy銆傚叾涓瓁xxx鏄笂绾у瓧娈佃嫳鏂囧悕绉�");
+                        }
                         parentFieldName = parentFieldNameAndValue.split(",")[0];
-                        rootQueryValue = parentFieldNameAndValue.split(",")[1];
+                        String rootQueryValue = parentFieldNameAndValue.split(",")[1];
                         treeQuery.getConditionMap().put(parentFieldName,rootQueryValue);
-                        linkTypeDataQuery.setQueryAllLevel(false);
-                        linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
-                        linkTypeDataQuery.setParentOid(rootQueryValue);
-                        rootCbos = loService.queryCLOAndBoByLinkType(linkTypeDataQuery);
+                        replaceMap.put(parentFieldName,rootQueryValue);
+                        replaceMap.put("f_oid",rootQueryValue);
+                        if(StringUtils.isNotBlank(queryTemplate)){
+                            rootCbos = boService.queryCBOByScheme(queryTemplate,treeQuery.getConditionMap(),replaceMap,null,queryFieldList);
+                        }else{
+                            rootCbos = boService.queryCBO(treeDefineVO.getBtmType(),treeQuery.getConditionMap(),null,queryFieldList);
+                        }
                     }
                     if(!CollectionUtils.isEmpty(rootCbos)){
+                        rootTreeList = cbo2Trees(rootCbos,valueField,StringUtils.isBlank(rootExpress)?textField:rootExpress,parentFieldName,treeQuery.isShowCheckBox(),null);
+                        TreeQueryObject treeQueryObject = new TreeQueryObject();
+                        treeQueryObject.setValueField(valueField);
+                        treeQueryObject.setTextField(textField);
+                        treeQueryObject.setParentFieldName(parentFieldName);
+                        treeQueryObject.setShowCheckBox(treeQuery.isShowCheckBox());
+                        if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
+                            treeQueryObject.setQueryAllLevel(true);
+                        }
+                        queryTreeForBO(rootTreeList,treeDefineVO.getQueryTemplateName(),queryFieldList,treeQueryObject);
+                    }
+                    return rootTreeList;
+                }else{
+                    //杩欎釜涓嶆槸璺熻妭鐐癸紝浣嗘槸涓�鑸彧鏄鍔犱竴涓�愮骇鏌ヨ锛屽洜涓哄叏閮ㄦ煡璇㈢殑鏃跺�欙紝鍦ㄦ牴鑺傜偣宸茬粡鍏ㄩ儴鏌ヨ瀹屼簡
+                    List<BusinessObject> thisChildren = null;
+                    if (StringUtils.isNotBlank(queryTemplate)) {
+                        thisChildren = boService.queryCBOByScheme(queryTemplate, treeQuery.getConditionMap(), replaceMap, null, queryFieldList);
+                    } else {
+                        thisChildren = boService.queryCBO(treeQuery.getParentBtmName(), treeQuery.getConditionMap(), null, queryFieldList);
+                    }
+                    return cbo2Trees(thisChildren, valueField, textField, parentFieldName, treeQuery.isShowCheckBox(), null);
+                }
+            }else{
+                //OsLinkTypeVO linkTypeVO = linkTypeService.getLinkTypeById(treeDefineVO.getLinkType());
+                LinkType linkType = platformClientUtil.getLinkTypeService().getLinkType(treeDefineVO.getLinkType());
+                //queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
+                queryFieldList.addAll(Arrays.asList(linkType.attributes));
+                queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
+
+                addQueryField(queryFieldList,valueField);
+                addQueryField(queryFieldList,textField);
+                UILinkTypeDataQuery linkTypeDataQuery = new UILinkTypeDataQuery();
+                linkTypeDataQuery.setQueryTemplateName(queryTemplate);
+                linkTypeDataQuery.setReplaceMap(replaceMap);
+                linkTypeDataQuery.setConditionMap(treeQuery.getConditionMap());
+                linkTypeDataQuery.setParentOid(treeQuery.getParentOid());
+                linkTypeDataQuery.setClauseList(queryFieldList);
+                linkTypeDataQuery.setDirection(isOrientation);
+                linkTypeDataQuery.setToBtmType(treeDefineVO.getBtmType());
+                linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
+                if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
+                    linkTypeDataQuery.setQueryAllLevel(true);
+                }
+                if(treeQuery.isQueryRoot()){
+                    //鏌ヨ鏍硅妭鐐�.鎴戜滑闇�瑕佸垽鏂槸鍚﹁缃簡鏍硅妭鐐圭殑鏌ヨ鏉′欢
+                    List<BOAndLO> rootCbos = null;
+                    String parentFieldNameAndValue = treeDefineVO.getShowLinkAbs();
+                    if(StringUtils.isNotBlank(parentFieldNameAndValue)){
+                        if(StringUtils.isNotBlank(queryTemplate)){
+                            linkTypeDataQuery.setQueryAllLevel(false);
+                            //鏍硅妭鐐瑰彧鏌ヨ涓�娆�
+                            //浣跨敤鏌ヨ妯℃澘鏈韩璁剧疆鐨勫唴瀹�
+                            linkTypeDataQuery.setToBtmType(null);
+                            linkTypeDataQuery.setQueryTemplateName(queryTemplate);
+                            rootCbos = loService.queryCLOAndBOBySchema(linkTypeDataQuery);
+                        }else{
+                            String rootQueryValue = "";
+                            parentFieldName = parentFieldNameAndValue.split(",")[0];
+                            rootQueryValue = parentFieldNameAndValue.split(",")[1];
+                            treeQuery.getConditionMap().put(parentFieldName,rootQueryValue);
+                            linkTypeDataQuery.setQueryAllLevel(false);
+                            linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
+                            linkTypeDataQuery.setParentOid(rootQueryValue);
+                            rootCbos = loService.queryCLOAndBoByLinkType(linkTypeDataQuery);
+                        }
+                        if(!CollectionUtils.isEmpty(rootCbos)){
+                            if(StringUtils.isBlank(parentFieldName)){
+                                if(isOrientation){
+                                    parentFieldName = "t_oid";
+                                }else{
+                                    parentFieldName = "f_oid";
+                                }
+                            }
+                            rootTreeList = cloAndCbo2Trees(rootCbos,valueField,rootExpress,parentFieldName,treeQuery.isShowCheckBox(),null);
+                            linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
+                            linkTypeDataQuery.setQueryTemplateName(queryTemplate);
+                            if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
+                                linkTypeDataQuery.setQueryAllLevel(true);
+                            }
+                            queryTreeForLO(rootTreeList,linkTypeDataQuery,parentFieldName,valueField,textField,treeQuery.isShowCheckBox());
+                        }
+                        return rootTreeList;
+                    }else{
+                        //娌℃湁璁剧疆鏌ヨ鏉′欢銆傞偅灏辨槸鎶婃潵婧愭暟鎹綔涓烘牴鑺傜偣
+                        if(CollectionUtils.isEmpty(replaceMap)){
+                            throw new VciBaseException("鏍硅妭鐐规病鏈夐厤缃煡璇㈡潯浠讹紝涔熸病鏈夋潵婧愭暟鎹�");
+                        }
+                        UIDataTree root = new UIDataTree();
+                        root.setOid((String) replaceMap.getOrDefault("oid",replaceMap.getOrDefault("t_oid","")));
+                        root.setText(getValueByExpressForBOAndLO(new HashMap<>(),replaceMap,rootExpress));
+                        root.setAttributes(replaceMap);
+                        root.setIndex("0");
+                        rootTreeList.add(root);
+
                         if(StringUtils.isBlank(parentFieldName)){
                             if(isOrientation){
                                 parentFieldName = "t_oid";
@@ -527,51 +620,24 @@
                                 parentFieldName = "f_oid";
                             }
                         }
-                        rootTreeList = cloAndCbo2Trees(rootCbos,valueField,rootExpress,parentFieldName,treeQuery.isShowCheckBox(),null);
                         linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
                         linkTypeDataQuery.setQueryTemplateName(queryTemplate);
                         if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
                             linkTypeDataQuery.setQueryAllLevel(true);
                         }
                         queryTreeForLO(rootTreeList,linkTypeDataQuery,parentFieldName,valueField,textField,treeQuery.isShowCheckBox());
+                        return rootTreeList;
                     }
-                    return rootTreeList;
                 }else{
-                    //娌℃湁璁剧疆鏌ヨ鏉′欢銆傞偅灏辨槸鎶婃潵婧愭暟鎹綔涓烘牴鑺傜偣
-                    if(CollectionUtils.isEmpty(replaceMap)){
-                        throw new VciBaseException("鏍硅妭鐐规病鏈夐厤缃煡璇㈡潯浠讹紝涔熸病鏈夋潵婧愭暟鎹�");
-                    }
-                    UIDataTree root = new UIDataTree();
-                    root.setOid((String) replaceMap.getOrDefault("oid",replaceMap.getOrDefault("t_oid","")));
-                    root.setText(getValueByExpressForBOAndLO(new HashMap<>(),replaceMap,rootExpress));
-                    root.setAttributes(replaceMap);
-                    root.setIndex("0");
-                    rootTreeList.add(root);
-
-                    if(StringUtils.isBlank(parentFieldName)){
-                        if(isOrientation){
-                            parentFieldName = "t_oid";
-                        }else{
-                            parentFieldName = "f_oid";
+                    if(StringUtils.isNotBlank(treeQuery.getParentOid())){
+                        //鏈変笂绾т簡銆傞偅replace鐨刦_oid灏卞簲璇ヨ缃负涓婄骇
+                        if(linkTypeDataQuery.getReplaceMap() == null){
+                            linkTypeDataQuery.setReplaceMap(new HashMap<>());
                         }
+                        linkTypeDataQuery.getReplaceMap().put(isOrientation?"t_oid":"f_oid",treeQuery.getParentOid());
                     }
-                    linkTypeDataQuery.setLinkType(treeDefineVO.getLinkType());
-                    linkTypeDataQuery.setQueryTemplateName(queryTemplate);
-                    if(UITreeLoadTypeEnum.ALL.getValue().equalsIgnoreCase(treeDefineVO.getLoadType())){
-                        linkTypeDataQuery.setQueryAllLevel(true);
-                    }
-                    queryTreeForLO(rootTreeList,linkTypeDataQuery,parentFieldName,valueField,textField,treeQuery.isShowCheckBox());
-                    return rootTreeList;
+                    return cloAndCbo2Trees(loService.queryCLOAndBoByLinkType(linkTypeDataQuery),valueField,textField,parentFieldName,treeQuery.isShowCheckBox(),treeQuery.getParentOid());
                 }
-            }else{
-                if(StringUtils.isNotBlank(treeQuery.getParentOid())){
-                    //鏈変笂绾т簡銆傞偅replace鐨刦_oid灏卞簲璇ヨ缃负涓婄骇
-                    if(linkTypeDataQuery.getReplaceMap() == null){
-                        linkTypeDataQuery.setReplaceMap(new HashMap<>());
-                    }
-                    linkTypeDataQuery.getReplaceMap().put(isOrientation?"t_oid":"f_oid",treeQuery.getParentOid());
-                }
-                return cloAndCbo2Trees(loService.queryCLOAndBoByLinkType(linkTypeDataQuery),valueField,textField,parentFieldName,treeQuery.isShowCheckBox(),treeQuery.getParentOid());
             }
         }
     }
@@ -601,11 +667,16 @@
         UITreeDefineVO treeDefineVO = componentVO.getTreeDefineVO();
         boolean isOrientation = false; //鏄惁鍙嶅悜锛屼娇鐢ㄦā鏉夸笂閰嶇疆鐨�
         String qtName = treeDefineVO.getQueryTemplateName();
-        if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
-            QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
-            QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
-            isOrientation = qt.getDirection().equals("opposite");
+        if(Func.isNotBlank(treeDefineVO.getOrientation())){
+            isOrientation = treeDefineVO.getOrientation().equalsIgnoreCase("opposite");
+        }else{
+            if(Func.isNotBlank(treeDefineVO.getLinkType()) && Func.isNotBlank(qtName)){
+                QTInfo wrapper = platformClientUtil.getQTDService().getQT(qtName);
+                QueryTemplate qt = OQTool.getQTByDoc(DocumentHelper.parseText(wrapper.qtText), qtName);
+                isOrientation = qt.getDirection().equals("opposite");
+            }
         }
+
         String queryTemplate = StringUtils.isNotBlank(treeQuery.getQueryTemplate())?treeQuery.getQueryTemplate():(!CollectionUtils.isEmpty(treeQuery.getSourceData())? (String) treeQuery.getSourceData().getOrDefault("querytemplate",treeDefineVO.getQueryTemplateName()) :treeDefineVO.getQueryTemplateName());
         Map<String, Object> replaceMap = wrapperReplaceMap(treeQuery.getSourceData());
         List<String> queryFieldList = new ArrayList<>();
@@ -1235,7 +1306,6 @@
         return result;
     }
 
-
     /**
      * 灏佽cbo瀵硅薄
      * @param formDataDTO 琛ㄥ崟鏁版嵁
@@ -1300,7 +1370,7 @@
         BaseModel baseModel = new BaseModel();
         baseModel.setOid(cbo.oid);
         baseModel.setNameOid(cbo.nameoid);
-        baseModel.setRevisionOid(cbo.revisionid);
+        baseModel.setRevisionOid(cbo.revoid);
         baseModel.setBtmName(cbo.btName);
         baseModel.setLastR(String.valueOf(cbo.isLastR));
         baseModel.setLastV(String.valueOf(cbo.isLastV));
@@ -1351,7 +1421,6 @@
         }
         return data;
     }
-
 
     /**
      * 閾炬帴鏁版嵁琛ㄥ崟瀵硅薄杞崲涓哄熀纭�鐨勫睘鎬�
@@ -1945,7 +2014,6 @@
         return BaseResult.success(clo);
     }
 
-
     /**
      * 灏佽to绔殑鏁版嵁
      * @param formLinkDataDTO 閾炬帴绫诲瀷鐨勮〃鍗曟暟鎹�
@@ -2100,7 +2168,7 @@
                     //璇存槑鏄崌鐗�
                     BaseModel baseModel = cbo2BaseModel(cbo);
                     RevisionDataInfo revisionValueObject = getNextRevision(btmTypeVO,baseModel);
-                    cbo.revisionid = VciBaseUtil.getPk();
+                    cbo.revoid = VciBaseUtil.getPk();
                     cbo.revisionSeq = revisionValueObject.revisionSeq;
                     cbo.revisionValue = revisionValueObject.revisionVal;
                     cbo.isLastR = true;
@@ -2195,8 +2263,8 @@
                 if (StringUtils.isBlank(cbo.nameoid)) {
                     cbo.nameoid = VciBaseUtil.getPk();
                 }
-                if (StringUtils.isBlank(cbo.revisionid)) {
-                    cbo.revisionid = VciBaseUtil.getPk();
+                if (StringUtils.isBlank(cbo.revoid)) {
+                    cbo.revoid = VciBaseUtil.getPk();
                 }
                 cbo.isFirstR = true;
                 cbo.isLastR = true;
@@ -2639,9 +2707,9 @@
             throw new PLException("500", new String[]{"娌℃湁鑾峰彇鍒版暟鎹殑涓婚敭"});
         }
         for (BusinessObject cbo : cbos) {
-            if(StringUtils.isBlank(cbo.revisionid)){
-                String revisionoid = Arrays.stream(cbo.hisAttrValList).filter(e -> e.attrName.equals("REVISIONOID")).findFirst().map(e -> e.attrVal).orElse("");
-                cbo.revisionid = revisionoid;
+            if(StringUtils.isBlank(cbo.revoid)){
+                String revisionoid = Arrays.stream(cbo.hisAttrValList).filter(e -> e.name.equals("REVISIONOID")).findFirst().map(e -> e.value).orElse("");
+                cbo.revoid = revisionoid;
             }
             boolean b = platformClientUtil.getBOFService().deleteBusinessObject(cbo,type);
             if(!b){

--
Gitblit v1.9.3