ludc
2024-12-05 a485f4494787001a2695863e239910c019a52246
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java
@@ -57,7 +57,6 @@
import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
/**
 * UI上的数据查询(通用查询服务)
 * @author Ludc
@@ -150,78 +149,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参数的vlaue可能是json这儿做一下处理
        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();
        }
        //看看有没有自定义的SQL
        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.getBsCustQueryCLsOrUrl();
        // 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(该方法是接口中统一定义的方法)
                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;
            //看看有没有自定义的SQL
            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 +251,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参数的vlaue可能是json这儿做一下处理
        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)->{
                //要把枚举的属性查询出来,和表格额地方不一样,因为那边会把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 = componentVO.getFormDefineVO();
        //UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmName(),formQuery.getFormDefineId());
        String bsCustQueryCLsOrUrl = componentVO.getBsCustQueryCLsOrUrl();
        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
            //通过反射调用bsCustQueryCLsOrUrl中定义的服务类中的查询方法
            try {
                // 获取类的 Class 对象
                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
                // 创建类的实例
                Object instance = clazz.getDeclaredConstructor().newInstance();
                // 获取方法getDataForGrid(该方法是接口中统一定义的方法)
                Method method = clazz.getMethod("getDataForForm", UIDataGridQuery.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);
                        }
            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)->{
                    //要把枚举的属性查询出来,和表格额地方不一样,因为那边会把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 +407,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参数的vlaue可能是json这儿做一下处理
        if(Func.isNotEmpty(treeQuery.getSourceData())){
            treeQuery.setSourceData(this.convertMapValueJson2Map(treeQuery.getSourceData()));
@@ -383,7 +423,7 @@
            throw new VciBaseException("这个组件不是树");
        }
        if(!treeQuery.isLinkTypeFlag() && StringUtils.isBlank(treeQuery.getParentBtmName())){
            treeQuery.setParentBtmName(treeQuery.getBtmname());
            treeQuery.setParentBtmName(treeQuery.getBtmName());
        }
        //TODO: 替换树定义上的正反向查询属性,因为正反向查询是由链接类型查询模板上控制的
        boolean isOrientation = false; //是否反向,使用模板上配置的