| | |
| | | |
| | | import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST; |
| | | |
| | | |
| | | /** |
| | | * UI上的数据查询(通用查询服务) |
| | | * @author Ludc |
| | |
| | | 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; |
| | | } |
| | | } |
| | | //生命周期在其中查询后就会处理 |
| | | //枚举也会被处理了 |
| | | } |
| | | |
| | | /** |
| | |
| | | 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.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); |
| | | //先判断查询模板是否配置了自定义查询类 |
| | | UIComponentVO componentVO = uiEngineService.getComponentByOid(formQuery.getComponentOid(), null); |
| | | //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", 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.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); |
| | | } |
| | | 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)->{ |
| | | //要把枚举的属性查询出来,和表格额地方不一样,因为那边会把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; |
| | | } |
| | | |
| | | /** |
| | |
| | | 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: 替换树定义上的正反向查询属性,因为正反向查询是由链接类型查询模板上控制的 |
| | | 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("配置的信息有误。在没有在菜单或者来源数据设置根节点的查询模板时,请在树的【参照树】上设置上级字段的名称和根节点的查询的值。比如xxxx,yyy。其中xxxx是上级字段英文名称"); |
| | | } |
| | | 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.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", 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: 替换树定义上的正反向查询属性,因为正反向查询是由链接类型查询模板上控制的 |
| | | 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)){ |
| | | 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("配置的信息有误。在没有在菜单或者来源数据设置根节点的查询模板时,请在树的【参照树】上设置上级字段的名称和根节点的查询的值。比如xxxx,yyy。其中xxxx是上级字段英文名称"); |
| | | } |
| | | 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"; |
| | |
| | | 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的f_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的f_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()); |
| | | } |
| | | } |
| | | } |
| | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 封装cbo对象 |
| | | * @param formDataDTO 表单数据 |
| | |
| | | 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)); |
| | |
| | | } |
| | | return data; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 链接数据表单对象转换为基础的属性 |
| | |
| | | return BaseResult.success(clo); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 封装to端的数据 |
| | | * @param formLinkDataDTO 链接类型的表单数据 |
| | |
| | | //说明是升版 |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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){ |