Преглед на файлове

feature: 列分级分类拼接表数据

mazq преди 2 години
родител
ревизия
1fc03bd10a

+ 25 - 17
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -73,20 +73,21 @@ public class DataResourceFacade implements IDataResourceFacade {
         //表:数据分级  数据资源分类
         if (DataAttrTypeEnum.DATA_ATTR_TABLE.getValue().equals(attrType)) {
             // 查询所有的表和列
-            List<AppDataResourceInfo> tabInfos = tabInfoService.getAllTabInfos();
+            List<AppDataResourceInfo> tabInfos = tabInfoService.getHasClassifyTables();
             result.add(getDataLevelTree());
             result.add(getDataClassifyTree(tabInfos));
         } else if (DataAttrTypeEnum.DATA_ATTR_COLUMN.getValue().equals(attrType)) {
-            List<AppDataItemInfo> colInfos = colInfoService.getAllColInfos();
+            List<AppDataResourceInfo> tabInfos = tabInfoService.getAllTabInfos();
+            List<AppDataItemInfo> colInfos = colInfoService.getHasClassifyColInfos();
             result.add(getSecurityLevelTree());
-            result.add(getFieldClassifyTree(colInfos));
+            result.add(getFieldClassifyTree(tabInfos, colInfos));
         } else {
             List<AppDataResourceInfo> tabInfos = tabInfoService.getAllTabInfos();
-            List<AppDataItemInfo> colInfos = colInfoService.getAllColInfos();
+            List<AppDataItemInfo> colInfos = colInfoService.getHasClassifyColInfos();
             result.add(getDataLevelTree());
             result.add(getDataClassifyTree(tabInfos));
             result.add(getSecurityLevelTree());
-            result.add(getFieldClassifyTree(colInfos));
+            result.add(getFieldClassifyTree(tabInfos, colInfos));
         }
         return result;
     }
@@ -102,8 +103,8 @@ public class DataResourceFacade implements IDataResourceFacade {
                 result = getDataLevelTree();
                 break;
             case COLUMN_CLASSIFY:
-                colInfos = colInfoService.getAllColInfos();
-                result = getFieldClassifyTree(colInfos);
+                colInfos = colInfoService.getHasClassifyColInfos();
+                result = getFieldClassifyTree(tabInfos, colInfos);
                 break;
             case DATA_SECURITY_LEVEL:
                 result = getSecurityLevelTree();
@@ -315,8 +316,10 @@ public class DataResourceFacade implements IDataResourceFacade {
     }
 
 
-    private DataResourceClassifyVo getFieldClassifyTree(List<AppDataItemInfo> colInfos) {
-
+    private DataResourceClassifyVo getFieldClassifyTree(List<AppDataResourceInfo> tabInfos, List<AppDataItemInfo> colInfos) {
+        Map<String, AppDataResourceInfo> tableMap = tabInfos
+                .stream()
+                .collect(Collectors.toMap(AppDataResourceInfo::getDataObjectId, e -> e));
         Map<String, List<AppDataItemInfo>> colInfosMap = getColumnClaGroupMap(colInfos);
 
         DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_CLASSIFY;
@@ -338,7 +341,7 @@ public class DataResourceFacade implements IDataResourceFacade {
             resourceVo.setNodes(new ArrayList<>());
             resourceVo.setTotal(0);
         } else {
-            boolean b = combinePidCol(topTreeVo, colInfosMap);
+            boolean b = combinePidTabAndCol(topTreeVo, tableMap, colInfosMap);
             if (b) {
                 resourceVo.setNodes(new ArrayList<>());
                 resourceVo.setTotal(0);
@@ -355,7 +358,7 @@ public class DataResourceFacade implements IDataResourceFacade {
         return colInfos.stream().collect(Collectors.groupingBy(AppDataItemInfo::getColumnClassify));
     }
 
-    private boolean combinePidCol(DataResourceTreeVo treeVo, Map<String, List<AppDataItemInfo>> colInfosMap) {
+    private boolean combinePidTabAndCol(DataResourceTreeVo treeVo, Map<String, AppDataResourceInfo> tableMap, Map<String, List<AppDataItemInfo>> colInfosMap) {
         List<DataResourceTreeVo> child = treeVo.getChild();
         Iterator<DataResourceTreeVo> iterator = child.iterator();
         while (iterator.hasNext()) {
@@ -365,19 +368,24 @@ public class DataResourceFacade implements IDataResourceFacade {
             List<DataResourceTreeVo> cc = childVo.getChild();
             if (CollectionUtils.isNotEmpty(cc)) {
                 childVo.setTreeNode(true);
-                boolean emptyChild = combinePidCol(childVo, colInfosMap);
+                boolean emptyChild = combinePidTabAndCol(childVo, tableMap, colInfosMap);
                 if (emptyChild) {
                     iterator.remove();
                 }
             } else {
                 // 如果为叶子节点,查找对应的表和列
                 // 如果查找不到表和列则移除
-                String id = childVo.getId();
                 List<AppDataItemInfo> dataColInfo = colInfosMap.get(childVo.getCode());
                 if (dataColInfo == null) {
                     iterator.remove();
                 } else {
-                    List<DataResourceTreeVo> tableVos = convertColumnToTreeVo(childVo.getId(), dataColInfo);
+                    Map<String, List<AppDataItemInfo>> tableGroup = dataColInfo.stream()
+                            .collect(Collectors.groupingBy(AppDataItemInfo::getResourceTableId));
+                    List<DataResourceTreeVo> tableVos = tableGroup.entrySet().stream().map(e -> {
+                        String tableId = e.getKey();
+                        AppDataResourceInfo table = tableMap.get(tableId);
+                        return convertTableToTreeVo(childVo.getId(), Collections.singletonList(table), tableGroup);
+                    }).flatMap(List::stream).collect(Collectors.toList());
                     childVo.setTreeNode(true);
                     childVo.setChild(tableVos);
                 }
@@ -811,7 +819,7 @@ public class DataResourceFacade implements IDataResourceFacade {
                     if (dataTabInfo == null) {
                         iterator.remove();
                     } else {
-                        List<DataResourceTreeVo> tableVos = convertTableToTreeVo(childVo, dataTabInfo, null);
+                        List<DataResourceTreeVo> tableVos = convertTableToTreeVo(childVo.getId(), dataTabInfo, null);
                         childVo.setTreeNode(true);
                         childVo.setChild(tableVos);
                     }
@@ -822,11 +830,11 @@ public class DataResourceFacade implements IDataResourceFacade {
         return CollectionUtils.isEmpty(child);
     }
 
-    private List<DataResourceTreeVo> convertTableToTreeVo(DataResourceTreeVo childVo, List<AppDataResourceInfo> dataTabInfo, Map<String, List<AppDataItemInfo>> colInfosMap) {
+    private List<DataResourceTreeVo> convertTableToTreeVo(String pid, List<AppDataResourceInfo> dataTabInfo, Map<String, List<AppDataItemInfo>> colInfosMap) {
         return dataTabInfo.stream().map(e -> {
             DataResourceTreeVo vo = new DataResourceTreeVo();
             vo.setId(e.getId());
-            vo.setPId(childVo.getId());
+            vo.setPId(pid);
             vo.setLabel(e.getTableName());
             vo.setDataType(DataResourceEnum.TAB.getCode());
             if (null != colInfosMap) {

+ 1 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataItemInfoService.java

@@ -45,6 +45,6 @@ public interface IAppDataItemInfoService {
      * 获取所有列信息
      * @return
      */
-    List<AppDataItemInfo> getAllColInfos();
+    List<AppDataItemInfo> getHasClassifyColInfos();
 
 }

+ 7 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataResourceInfoService.java

@@ -46,4 +46,11 @@ public interface IAppDataResourceInfoService {
      * @return
      */
     List<AppDataResourceInfo> getAllTabInfos();
+
+    /**
+     * 获取有表分类信息的所有表数据
+     * @return
+     */
+    List<AppDataResourceInfo> getHasClassifyTables();
+
 }

+ 9 - 5
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataItemInfoServiceImpl.java

@@ -1,18 +1,17 @@
 package com.dragoninfo.dcuc.app.service.sub.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
-import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
 import com.dragoninfo.dcuc.app.mapper.sub.AppDataItemInfoMapper;
 import com.dragoninfo.dcuc.app.service.sub.IAppDataItemInfoService;
-import com.dragoninfo.dcuc.app.service.sub.IAppDataResourceInfoService;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -58,10 +57,15 @@ public class AppDataItemInfoServiceImpl implements IAppDataItemInfoService {
     }
 
     @Override
-    public List<AppDataItemInfo> getAllColInfos() {
+    public List<AppDataItemInfo> getHasClassifyColInfos() {
         LambdaQueryWrapper<AppDataItemInfo> query = Wrappers.lambdaQuery();
         query.select(AppDataItemInfo::getId, AppDataItemInfo::getColumnName, AppDataItemInfo::getResourceTableId,
                 AppDataItemInfo::getColumnClassify, AppDataItemInfo::getDataSecurityLevel);
-        return appDataItemInfoMapper.selectList(query);
+        query.isNotNull(AppDataItemInfo::getColumnClassify);
+        List<AppDataItemInfo> appDataItemInfos = appDataItemInfoMapper.selectList(query);
+        return appDataItemInfos
+                .stream()
+                .filter(e -> StringUtils.isNotEmpty(e.getColumnClassify()))
+                .collect(Collectors.toList());
     }
 }

+ 21 - 4
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataResourceInfoServiceImpl.java

@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
 import com.dragoninfo.dcuc.app.mapper.sub.AppDataResourceInfoMapper;
 import com.dragoninfo.dcuc.app.service.sub.IAppDataResourceInfoService;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -58,10 +60,25 @@ public class AppDataResourceInfoServiceImpl implements IAppDataResourceInfoServi
     public List<AppDataResourceInfo> getAllTabInfos() {
         LambdaQueryWrapper<AppDataResourceInfo> query = Wrappers.lambdaQuery();
         query.select(AppDataResourceInfo::getId, AppDataResourceInfo::getTableName, AppDataResourceInfo::getDataObjectId,
-                     AppDataResourceInfo::getDataClassification, AppDataResourceInfo::getDataClassifyOneCode,
-                     AppDataResourceInfo::getDataClassifyTwoCode, AppDataResourceInfo::getDataLabelOneCode,
-                     AppDataResourceInfo::getDataLabelTwoCode, AppDataResourceInfo::getDataLabelThreeCode,
-                     AppDataResourceInfo::getDataLabelFourCode, AppDataResourceInfo::getDataLabelFiveCode);
+                AppDataResourceInfo::getDataClassification, AppDataResourceInfo::getDataClassifyOneCode,
+                AppDataResourceInfo::getDataClassifyTwoCode, AppDataResourceInfo::getDataLabelOneCode,
+                AppDataResourceInfo::getDataLabelTwoCode, AppDataResourceInfo::getDataLabelThreeCode,
+                AppDataResourceInfo::getDataLabelFourCode, AppDataResourceInfo::getDataLabelFiveCode);
         return appDataResourceInfoMapper.selectList(query);
     }
+
+    @Override
+    public List<AppDataResourceInfo> getHasClassifyTables() {
+        LambdaQueryWrapper<AppDataResourceInfo> query = Wrappers.lambdaQuery();
+        query.select(AppDataResourceInfo::getId, AppDataResourceInfo::getTableName, AppDataResourceInfo::getDataObjectId,
+                AppDataResourceInfo::getDataClassification, AppDataResourceInfo::getDataClassifyOneCode,
+                AppDataResourceInfo::getDataClassifyTwoCode, AppDataResourceInfo::getDataLabelOneCode,
+                AppDataResourceInfo::getDataLabelTwoCode, AppDataResourceInfo::getDataLabelThreeCode,
+                AppDataResourceInfo::getDataLabelFourCode, AppDataResourceInfo::getDataLabelFiveCode);
+        query.isNotNull(e -> StringUtils.isNotBlank(e.getDataClassification()));
+        List<AppDataResourceInfo> appDataResourceInfos = appDataResourceInfoMapper.selectList(query);
+        return appDataResourceInfos.stream()
+                .filter(e -> StringUtils.isNotBlank(e.getDataClassification()))
+                .collect(Collectors.toList());
+    }
 }