| | |
| | | |
| | | import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST; |
| | | |
| | | |
| | | /** |
| | | * UI上的数据查询(通用查询服务) |
| | | * @author Ludc |
| | |
| | | */ |
| | | @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; |
| | | } |
| | | } |
| | | //生命周期在其中查询后就会处理 |
| | | //枚举也会被处理了 |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @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; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @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())); |
| | |
| | | throw new VciBaseException("这个组件不是树"); |
| | | } |
| | | if(!treeQuery.isLinkTypeFlag() && StringUtils.isBlank(treeQuery.getParentBtmName())){ |
| | | treeQuery.setParentBtmName(treeQuery.getBtmname()); |
| | | treeQuery.setParentBtmName(treeQuery.getBtmName()); |
| | | } |
| | | //TODO: 替换树定义上的正反向查询属性,因为正反向查询是由链接类型查询模板上控制的 |
| | | boolean isOrientation = false; //是否反向,使用模板上配置的 |