Browse Source

feat: 同步表、字段

huangzqa 2 years ago
parent
commit
d4550bd27a
19 changed files with 448 additions and 56 deletions
  1. 8 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java
  2. 24 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/BaseResp.java
  3. 20 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceInfoDTO.java
  4. 17 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceItemIntoDTO.java
  5. 34 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageDataRespDTO.java
  6. 28 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageReqDTO.java
  7. 3 1
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataItemInfo.java
  8. 1 1
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataResourceInfo.java
  9. 17 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IDataIndexBusiness.java
  10. 140 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/DataIndexBusinessImpl.java
  11. 11 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java
  12. 69 49
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java
  13. 16 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataItemInfoService.java
  14. 15 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataResourceInfoService.java
  15. 21 1
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataItemInfoServiceImpl.java
  16. 19 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataResourceInfoServiceImpl.java
  17. 2 1
      dcuc-app-service/src/main/resources/application-app.yml
  18. 1 1
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0008__Add_Data_Table_Ration.sql
  19. 2 2
      dcuc-app-service/src/main/resources/config/sql/V4_1_0008__Add_Data_Table_Ration.sql

+ 8 - 0
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java

@@ -78,6 +78,14 @@ public interface IDataResourceFacade {
     @GetMapping(value = "fieldClaSync")
     ResponseStatus fieldClaSync();
 
+    /**
+     * 表和字段同步
+     *
+     * @return 状态
+     */
+    @GetMapping(value = "syncTableAndColumn")
+    ResponseStatus syncTableAndColumn();
+
     /**
      * 批量获取
      * 根据id和classifyType获取名字和code值

+ 24 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/BaseResp.java

@@ -5,13 +5,37 @@ import lombok.Data;
 import java.util.List;
 
 /**
+ * 基础返回值
+ *
  * @Author: qiuyu
  * @Date: 2021/4/15 11:11
  * @Description:
  */
 @Data
 public class BaseResp<T> {
+
+    /**
+     * 成功代码
+     */
+    public static final String SUCCESS_CODE = "000";
+    /**
+     * 返回状态,000成功,其它异常
+     */
     private String code;
+    /**
+     * 返回消息
+     */
     private String message;
+    /**
+     * 返回数据
+     */
     private T resultData;
+
+    public boolean isSuccess() {
+        return this.code.equals(SUCCESS_CODE);
+    }
+
+    public boolean isFail() {
+        return !isSuccess();
+    }
 }

+ 20 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceInfoDTO.java

@@ -1,8 +1,13 @@
 
 package com.dragoninfo.dcuc.app.dto.dataresource;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -286,4 +291,19 @@ public class DataResourceInfoDTO {
      */
     private List<DataResourceItemIntoDTO> dataItems;
 
+    public AppDataResourceInfo parseToAppDataResourceInfo() {
+        AppDataResourceInfo appDataResourceInfo = new AppDataResourceInfo();
+        BeanUtil.copyProperties(this, appDataResourceInfo);
+        BeanUtil.copyProperties(this, appDataResourceInfo);
+        Date registerTime = DateUtil.parse(this.registerTime, DatePattern.NORM_DATETIME_PATTERN);
+        appDataResourceInfo.setResourceRegisterTime(registerTime);
+        Date updateTime = DateUtil.parse(this.updateTime, DatePattern.NORM_DATETIME_PATTERN);
+        appDataResourceInfo.setResourceUpdateTime(updateTime);
+        appDataResourceInfo.setAccess(this.isAccess);
+
+        appDataResourceInfo.setCreateTime(null);
+        appDataResourceInfo.setUpdateTime(null);
+        return appDataResourceInfo;
+    }
+
 }

+ 17 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceItemIntoDTO.java

@@ -1,8 +1,14 @@
 
 package com.dragoninfo.dcuc.app.dto.dataresource;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 数据资源表信息
  *
@@ -138,5 +144,16 @@ public class DataResourceItemIntoDTO {
      */
     private String updateTime;
 
+    public AppDataItemInfo parseToAppDataItemInfo() {
+        AppDataItemInfo appDataItemInfo = new AppDataItemInfo();
+        BeanUtil.copyProperties(this, appDataItemInfo);
+        Date registerTime = DateUtil.parse(this.registerTime, DatePattern.NORM_DATETIME_PATTERN);
+        appDataItemInfo.setColumnRegisterTime(registerTime);
+        Date updateTime = DateUtil.parse(this.updateTime, DatePattern.NORM_DATETIME_PATTERN);
+        appDataItemInfo.setColumnUpdateTime(updateTime);
+        appDataItemInfo.setCreateTime(null);
+        appDataItemInfo.setUpdateTime(null);
+        return appDataItemInfo;
+    }
 
 }

+ 34 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageDataRespDTO.java

@@ -0,0 +1,34 @@
+package com.dragoninfo.dcuc.app.dto.dataresource;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 分页返回
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Data
+public class PageDataRespDTO<T> {
+    /**
+     * 当前页码
+     */
+    private Integer page;
+    /**
+     * 每页条数,为空默认为10
+     */
+    private Integer pageSize;
+    /**
+     * 总记录数
+     */
+    private Integer totalCount;
+    /**
+     * 返回数据
+     */
+    private List<T> dataList;
+
+}

+ 28 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageReqDTO.java

@@ -0,0 +1,28 @@
+package com.dragoninfo.dcuc.app.dto.dataresource;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 分页请求
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Data
+public class PageReqDTO {
+    /**
+     * 请求页码,从1开始
+     */
+    private Integer page;
+    /**
+     * 每页条数,为空默认为10
+     */
+    private Integer pageSize;
+
+    /**
+     * 条件
+     */
+    private Object condition;
+}

+ 3 - 1
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataItemInfo.java

@@ -1,6 +1,7 @@
 package com.dragoninfo.dcuc.app.entity.sub;
 
 import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
 import org.apache.ibatis.type.JdbcType;
 import org.springframework.data.annotation.CreatedBy;
 import org.springframework.data.annotation.CreatedDate;
@@ -17,6 +18,7 @@ import java.util.Date;
  * @author huangzqa
  * @date 2022/10/2
  */
+@Data
 @TableName("t_app_data_item_info")
 public class AppDataItemInfo {
     /**
@@ -27,7 +29,7 @@ public class AppDataItemInfo {
     /**
      * 数据资源ID
      */
-    private String resourceId;
+    private String resourceTableId;
     /**
      * 数据项ID
      */

+ 1 - 1
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataResourceInfo.java

@@ -24,7 +24,7 @@ public class AppDataResourceInfo {
     /**
      * 编号
      */
-    @TableId(type = IdType.UUID)
+    @TableId(type = IdType.INPUT)
     private String id;
     /**
      * 数据对象ID

+ 17 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IDataIndexBusiness.java

@@ -0,0 +1,17 @@
+package com.dragoninfo.dcuc.app.business;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface IDataIndexBusiness {
+
+    /**
+     * 同步表和字段
+     */
+    void syncTableAndColumn();
+}

+ 140 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/DataIndexBusinessImpl.java

@@ -0,0 +1,140 @@
+package com.dragoninfo.dcuc.app.business.impl;
+
+import cn.hutool.core.util.PageUtil;
+import com.dragoninfo.dcuc.app.business.IDataIndexBusiness;
+import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
+import com.dragoninfo.dcuc.app.dto.dataresource.*;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
+import com.dragoninfo.dcuc.app.service.sub.IAppDataItemInfoService;
+import com.dragoninfo.dcuc.app.service.sub.IAppDataResourceInfoService;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.commons.util.UUIDUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.RequestEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Slf4j
+@Component
+public class DataIndexBusinessImpl implements IDataIndexBusiness {
+
+    @Autowired
+    private DcucResourceConfig dataResourceConfig;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IAppDataResourceInfoService appDataResourceInfoService;
+
+    @Autowired
+    private IAppDataItemInfoService appDataItemInfoService;
+    /**
+     * 资源列表查询
+     */
+    public static final String CATALOG_LIST_URL = "/resource/catalog-api/catalog-list";
+
+    @Async
+    @Override
+    public void syncTableAndColumn() {
+        // 获取总条数
+        int totalCount = getTotalCount();
+        Integer requestPageSize = dataResourceConfig.getDataResource().getRequestPageSize();
+        int totalPage = PageUtil.totalPage(totalCount, requestPageSize);
+        int reqPage = 1;
+
+        appDataResourceInfoService.deleteAll();
+        appDataItemInfoService.deleteAll();
+
+        do {
+            PageReqDTO pageReqDTO = new PageReqDTO();
+            pageReqDTO.setPage(reqPage);
+            pageReqDTO.setPageSize(requestPageSize);
+
+            Optional<PageDataRespDTO<DataResourceInfoDTO>> pageOptional = getPage(pageReqDTO);
+            if (pageOptional.isPresent()) {
+                PageDataRespDTO<DataResourceInfoDTO> pageDataRespDTO = pageOptional.get();
+                List<DataResourceInfoDTO> dataList = pageDataRespDTO.getDataList();
+
+                List<AppDataResourceInfo> resourceInfoList = new ArrayList<>();
+                List<AppDataItemInfo> dataItemInfoList = new ArrayList<>();
+                for (DataResourceInfoDTO dataResourceInfoDTO : dataList) {
+                    AppDataResourceInfo appDataResourceInfo = dataResourceInfoDTO.parseToAppDataResourceInfo();
+                    String uuid = UUIDUtils.getUUID();
+                    appDataResourceInfo.setId(uuid);
+                    appDataResourceInfo.setDeleted(BooleanEnum.FALSE.value);
+
+                    resourceInfoList.add(appDataResourceInfo);
+                    List<DataResourceItemIntoDTO> dataItems = dataResourceInfoDTO.getDataItems();
+                    for (DataResourceItemIntoDTO dataItem : dataItems) {
+                        AppDataItemInfo appDataItemInfo = dataItem.parseToAppDataItemInfo();
+                        appDataItemInfo.setDeleted(BooleanEnum.FALSE.value);
+                        appDataItemInfo.setResourceTableId(uuid);
+                        dataItemInfoList.add(appDataItemInfo);
+                    }
+                }
+
+                appDataResourceInfoService.saveAll(resourceInfoList);
+                appDataItemInfoService.saveAll(dataItemInfoList);
+            }
+
+            reqPage++;
+        } while (reqPage <= totalPage);
+    }
+
+    public int getTotalCount() {
+        PageReqDTO pageReqDTO = new PageReqDTO();
+        pageReqDTO.setPage(1);
+        pageReqDTO.setPageSize(1);
+        Optional<PageDataRespDTO<DataResourceInfoDTO>> pageOptional = getPage(pageReqDTO);
+        int totalCount = 0;
+        if (pageOptional.isPresent()) {
+            totalCount = pageOptional.get().getTotalCount();
+        }
+        return totalCount;
+    }
+
+
+    public Optional<PageDataRespDTO<DataResourceInfoDTO>> getPage(PageReqDTO pageReqDTO) {
+        String url = dataResourceConfig.getDataResource().getDataCatalogUrl() + CATALOG_LIST_URL;
+        log.info("Request dataCatalog page info:{} ", JsonUtils.toJSONString(pageReqDTO));
+        RequestEntity<PageReqDTO> httpEntity = new RequestEntity<>(pageReqDTO, HttpMethod.POST, URI.create(url));
+        ParameterizedTypeReference<BaseResp<PageDataRespDTO<DataResourceInfoDTO>>> typeReference =
+                new ParameterizedTypeReference<BaseResp<PageDataRespDTO<DataResourceInfoDTO>>>() {
+                };
+        ResponseEntity<BaseResp<PageDataRespDTO<DataResourceInfoDTO>>> responseEntity = restTemplate.exchange(httpEntity, typeReference);
+        if (!responseEntity.getStatusCode().is2xxSuccessful()) {
+            log.error("Request dataCatalog error httpStatusCode :{}", responseEntity.getStatusCode().value());
+            return Optional.empty();
+        }
+        BaseResp<PageDataRespDTO<DataResourceInfoDTO>> baseResp = responseEntity.getBody();
+        if (baseResp == null) {
+            return Optional.empty();
+        }
+        if (baseResp.isFail()) {
+            log.error("Request dataCatalog error code:{} message: {}", baseResp.getCode(), baseResp.getMessage());
+        }
+
+        return Optional.ofNullable(baseResp.getResultData());
+    }
+}

+ 11 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java

@@ -172,6 +172,17 @@ public class DcucResourceConfig {
          * 总线请求头参数
          */
         private String busServiceFunc;
+
+        /**
+         * 数据资源目录路径
+         */
+        private String dataCatalogUrl;
+
+        /**
+         * 请求页码大小
+         */
+        private Integer requestPageSize = 10;
+
     }
 
 

+ 69 - 49
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -1,5 +1,6 @@
 package com.dragoninfo.dcuc.app.facade;
 
+import com.dragoninfo.dcuc.app.business.IDataIndexBusiness;
 import com.dragoninfo.dcuc.app.dto.dataresource.ChildResourceClassify;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
 import com.dragoninfo.dcuc.app.enumresources.DataResourceEnum;
@@ -44,8 +45,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @RestController
 @RequestMapping(value = "/dcuc/app/dataResourceFacade")
-public class DataResourceFacade implements IDataResourceFacade
-{
+public class DataResourceFacade implements IDataResourceFacade {
 
     public static final String ID_SEPARATOR = "|";
 
@@ -64,6 +64,9 @@ public class DataResourceFacade implements IDataResourceFacade
     @Autowired
     private IFieldClaService fieldClaService;
 
+    @Autowired
+    private IDataIndexBusiness dataIndexBusiness;
+
 
     @Override
     public List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType) {
@@ -85,7 +88,7 @@ public class DataResourceFacade implements IDataResourceFacade
     public DataResourceClassifyVo getDataResourceTree(String typeCode) {
         DataResourceClassifyVo result = null;
         DataResourceEnum dataResourceEnum = Enum.valueOf(DataResourceEnum.class, typeCode);
-        switch (dataResourceEnum){
+        switch (dataResourceEnum) {
             case DATA_CLASSIFY:
                 result = getDataLevelTree();
                 break;
@@ -99,8 +102,8 @@ public class DataResourceFacade implements IDataResourceFacade
             case DATA_RESOURCE_CLASSIFY:
                 result = getDataClassifyTree();
                 break;
-                default:
-                    break;
+            default:
+                break;
         }
         return result;
     }
@@ -121,19 +124,21 @@ public class DataResourceFacade implements IDataResourceFacade
                 .build();
         List<DataLevelVo> dataLevelList = getDataLevelList();
         List<DataResourceTreeVo> child = dataLevelList.stream().map(item -> DataResourceTreeVo.builder()
-              .id(Joiner.on(ID_SEPARATOR).join(dataLevelTreeVo.getId(), item.getLevelCode()))
-              .code(item.getLevelCode())
-              .label(item.getLevelName())
-              .dataType(item.getTypeCode())
-              .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + item.getLevelCode() + ID_SEPARATOR + item.getTypeCode())
-              .treeNode(false)
-              .pId(dataLevelTreeVo.getId())
-              .innerId(item.getInnerId()).build()).collect(Collectors.toList());
+                .id(Joiner.on(ID_SEPARATOR).join(dataLevelTreeVo.getId(), item.getLevelCode()))
+                .code(item.getLevelCode())
+                .label(item.getLevelName())
+                .dataType(item.getTypeCode())
+                .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + item.getLevelCode() + ID_SEPARATOR + item.getTypeCode())
+                .treeNode(false)
+                .pId(dataLevelTreeVo.getId())
+                .innerId(item.getInnerId()).build()).collect(Collectors.toList());
         dataLevelTreeVo.setChild(child);
-        if(child.size() == 0) {
+        if (child.size() == 0) {
             dataResourceClassifyVo.setNodes(new ArrayList<>());
         } else {
-            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
+            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                add(dataLevelTreeVo);
+            }});
         }
         //设置总数量
         dataResourceClassifyVo.setTotal(child.size());
@@ -167,11 +172,13 @@ public class DataResourceFacade implements IDataResourceFacade
                 .pId(securityLevelTree.getId())
                 .innerId(item.getInnerId()).build()).collect(Collectors.toList());
         securityLevelTree.setChild(child);
-        if(child.size() == 0) {
+        if (child.size() == 0) {
             dataResourceClassifyVo.setNodes(new ArrayList<>());
             dataResourceClassifyVo.setTotal(0);
         } else {
-            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
+            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                add(securityLevelTree);
+            }});
             //设置总数量
             dataResourceClassifyVo.setTotal(child.size());
         }
@@ -205,13 +212,15 @@ public class DataResourceFacade implements IDataResourceFacade
         combineTreeNode(secNodes, thirdNodes);
         combineTreeNode(thirdNodes, fourNodes);
         topTreeVo.setChild(firNodes);
-        if(firNodes.size() == 0) {
+        if (firNodes.size() == 0) {
             resourceVo.setNodes(new ArrayList<>());
             resourceVo.setTotal(0);
         } else {
             //计算总数量
             resourceVo.setTotal(getTotalCount(topTreeVo));
-            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                add(topTreeVo);
+            }});
         }
         return resourceVo;
     }
@@ -244,11 +253,13 @@ public class DataResourceFacade implements IDataResourceFacade
                 .stream().map(item -> convertFieldClaToNode(item, item.getFirId())).collect(Collectors.toList());
         combineTreeNode(firNodes, secNodes);
         topTreeVo.setChild(firNodes);
-        if(firNodes.size() == 0) {
+        if (firNodes.size() == 0) {
             resourceVo.setNodes(new ArrayList<>());
             resourceVo.setTotal(0);
         } else {
-            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                add(topTreeVo);
+            }});
             resourceVo.setTotal(getTotalCount(topTreeVo));
         }
         return resourceVo;
@@ -267,7 +278,7 @@ public class DataResourceFacade implements IDataResourceFacade
 
     private void combineTreeNode(List<DataResourceTreeVo> firNodes, List<DataResourceTreeVo> secNodes) {
         Map<String, List<DataResourceTreeVo>> secMap = secNodes.stream().collect(Collectors.groupingBy(DataResourceTreeVo::getPId));
-        firNodes.forEach(item->{
+        firNodes.forEach(item -> {
             List<DataResourceTreeVo> childes = secMap.get(item.getId());
             item.setChild(childes);
         });
@@ -310,7 +321,7 @@ public class DataResourceFacade implements IDataResourceFacade
     @Override
     public List<DataFieldClassifyVo> getFieldClassifyList() {
         List<FieldClaAcceptDTO> list = fieldClaService.getAll();
-        return list.stream().map(item-> {
+        return list.stream().map(item -> {
             DataFieldClassifyVo vo = new DataFieldClassifyVo();
             vo.setFirstLevelCode(item.getFirCode());
             vo.setFirstLevelName(item.getFirName());
@@ -330,7 +341,7 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             RequestContextHolder.setRequestAttributes(requestAttributes);
             try {
                 List<DataLevelVo> list = getDataLevelListFromRemote();
@@ -354,7 +365,7 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             RequestContextHolder.setRequestAttributes(requestAttributes);
             try {
                 List<DataLevelVo> list = getSecurityLevelListFromRemote();
@@ -378,7 +389,7 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             try {
                 RequestContextHolder.setRequestAttributes(requestAttributes);
                 List<DataResourceTreeVo> nodes = getDataClassifyTreeFromRemote();
@@ -403,7 +414,7 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             try {
                 RequestContextHolder.setRequestAttributes(requestAttributes);
                 List<DataResourceTreeVo> nodes = getFieldClassifyTreeFromRemote();
@@ -418,22 +429,28 @@ public class DataResourceFacade implements IDataResourceFacade
         return ResponseStatus.success();
     }
 
+    @Override
+    public ResponseStatus syncTableAndColumn() {
+        dataIndexBusiness.syncTableAndColumn();
+        return ResponseStatus.success();
+    }
+
 
     @Override
     public List<DataLevelVo> getDetailByIdsAndClaType(List<String> ids, String classifyType) {
-        List<DataLevelVo> vos= new ArrayList<>();
-        if(CollectionUtils.isEmpty(ids)) {
+        List<DataLevelVo> vos = new ArrayList<>();
+        if (CollectionUtils.isEmpty(ids)) {
             return vos;
         }
-        if(StringUtils.isBlank(classifyType)) {
+        if (StringUtils.isBlank(classifyType)) {
             return vos;
         }
         DataResourceEnum anEnum = DataResourceEnum.getByCode(classifyType);
-        if(null == anEnum) {
+        if (null == anEnum) {
             return vos;
-        } else if(DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
             List<FieldCla> list = fieldClaService.getByIds(ids);
-            list.stream().map(item->{
+            list.stream().map(item -> {
                 DataLevelVo vo = new DataLevelVo();
                 vo.setTypeCode(item.getDataType());
                 vo.setLevelName(item.getName());
@@ -442,9 +459,9 @@ public class DataResourceFacade implements IDataResourceFacade
                 return vo;
             }).collect(Collectors.toList());
 
-        } else if(DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
             List<DataLevel> list = dataLevelService.getByIds(ids);
-            list.stream().map(item->{
+            list.stream().map(item -> {
                 DataLevelVo vo = new DataLevelVo();
                 vo.setTypeCode(item.getDataType());
                 vo.setLevelName(item.getLevelName());
@@ -453,9 +470,9 @@ public class DataResourceFacade implements IDataResourceFacade
                 return vo;
             }).collect(Collectors.toList());
 
-        } else if(DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
             List<DataCla> list = dataClaService.getByIds(ids);
-            list.stream().map(item->{
+            list.stream().map(item -> {
                 DataLevelVo vo = new DataLevelVo();
                 vo.setTypeCode(item.getDataType());
                 vo.setLevelName(item.getName());
@@ -464,9 +481,9 @@ public class DataResourceFacade implements IDataResourceFacade
                 return vo;
             }).collect(Collectors.toList());
 
-        } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
             List<DataSec> list = dataSecService.getByIds(ids);
-            list.stream().map(item->{
+            list.stream().map(item -> {
                 DataLevelVo vo = new DataLevelVo();
                 vo.setTypeCode(item.getDataType());
                 vo.setLevelName(item.getSecName());
@@ -480,32 +497,32 @@ public class DataResourceFacade implements IDataResourceFacade
 
     @Override
     public DataLevelVo getDetailByIdAndClaType(String id, String classifyType) {
-        if(StringUtils.isAnyBlank(id, classifyType)) {
+        if (StringUtils.isAnyBlank(id, classifyType)) {
             return null;
         }
         DataLevelVo vo = new DataLevelVo();
         DataResourceEnum anEnum = DataResourceEnum.getByCode(classifyType);
-        if(null == anEnum) {
+        if (null == anEnum) {
             return null;
-        } else if(DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
             FieldCla fieldCla = fieldClaService.getById(id);
             vo.setInnerId(fieldCla.getId());
             vo.setLevelCode(fieldCla.getCode());
             vo.setLevelName(fieldCla.getName());
             vo.setTypeCode(fieldCla.getDataType());
-        } else if(DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
             DataLevel dataLevel = dataLevelService.getById(id);
             vo.setInnerId(dataLevel.getId());
             vo.setLevelCode(dataLevel.getLevelCode());
             vo.setLevelName(dataLevel.getLevelName());
             vo.setTypeCode(dataLevel.getDataType());
-        } else if(DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
             DataCla dataCla = dataClaService.getById(id);
             vo.setInnerId(dataCla.getId());
             vo.setLevelCode(dataCla.getId());
             vo.setLevelName(dataCla.getName());
             vo.setTypeCode(dataCla.getCode());
-        } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
             DataSec dataSec = dataSecService.getById(id);
             vo.setInnerId(dataSec.getId());
             vo.setLevelCode(dataSec.getSecCode());
@@ -624,6 +641,7 @@ public class DataResourceFacade implements IDataResourceFacade
 
     /**
      * 计算treeVo所有最底层子节点数量,不包含叶节点
+     *
      * @param treeVo
      * @return
      */
@@ -634,10 +652,10 @@ public class DataResourceFacade implements IDataResourceFacade
             childVo.setPId(treeVo.getId());
             childVo.setId(Joiner.on(ID_SEPARATOR).join(treeVo.getId(), childVo.getCode()));
             List<DataResourceTreeVo> cc = childVo.getChild();
-            if(CollectionUtils.isNotEmpty(cc)){
+            if (CollectionUtils.isNotEmpty(cc)) {
                 childVo.setTreeNode(true);
                 count += getTotalCount(childVo);
-            }else {
+            } else {
                 childVo.setTreeNode(false);
                 count += 1;
             }
@@ -647,17 +665,19 @@ public class DataResourceFacade implements IDataResourceFacade
 
     /**
      * 从数据资源目录获取数据-数据分级
+     *
      * @return
      */
     private List<DataLevelVo> getDataLevelListFromRemote() {
         return getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
                 .stream()
-                .map(childResourceClassify -> new DataLevelVo(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName(),childResourceClassify.getTypeCode()))
+                .map(childResourceClassify -> new DataLevelVo(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName(), childResourceClassify.getTypeCode()))
                 .collect(Collectors.toList());
     }
 
     /**
      * 从数据资源目录获取数据-安全级别数据
+     *
      * @return
      */
     private List<DataLevelVo> getSecurityLevelListFromRemote() {
@@ -673,7 +693,7 @@ public class DataResourceFacade implements IDataResourceFacade
                 .map(resourceClassify -> {
                     //设置节点的dataType,dataType为上级的typeCode字段
                     List<ChildResourceClassify> dataList = Optional.ofNullable(resourceClassify.getDataList()).orElse(Lists.newArrayList());
-                    dataList.stream().forEach(item-> item.setTypeCode(resourceClassify.getTypeCode()));
+                    dataList.stream().forEach(item -> item.setTypeCode(resourceClassify.getTypeCode()));
                     return dataList;
                 })
                 .orElse(Lists.newArrayList());

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

@@ -1,5 +1,9 @@
 package com.dragoninfo.dcuc.app.service.sub;
 
+import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
+
+import java.util.List;
+
 /**
  * <p>
  *
@@ -9,4 +13,16 @@ package com.dragoninfo.dcuc.app.service.sub;
  * @date 2022/10/2
  */
 public interface IAppDataItemInfoService {
+
+    /**
+     * 保存所有
+     *
+     * @param appDataItemInfoList 列表
+     */
+    void saveAll(List<AppDataItemInfo> appDataItemInfoList);
+
+    /**
+     * 删除所有
+     */
+    void deleteAll();
 }

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

@@ -1,5 +1,9 @@
 package com.dragoninfo.dcuc.app.service.sub;
 
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
+
+import java.util.List;
+
 /**
  * <p>
  *
@@ -9,4 +13,15 @@ package com.dragoninfo.dcuc.app.service.sub;
  * @date 2022/10/2
  */
 public interface IAppDataResourceInfoService {
+    /**
+     * 保存所有
+     *
+     * @param resourceInfoList 数据资源列表
+     */
+    void saveAll(List<AppDataResourceInfo> resourceInfoList);
+
+    /**
+     * 删除所有
+     */
+    void deleteAll();
 }

+ 21 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataItemInfoServiceImpl.java

@@ -1,9 +1,16 @@
 package com.dragoninfo.dcuc.app.service.sub.impl;
 
+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.mapper.sub.AppDataItemInfoMapper;
+import com.dragoninfo.dcuc.app.service.sub.IAppDataItemInfoService;
 import com.dragoninfo.dcuc.app.service.sub.IAppDataResourceInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,9 +21,22 @@ import org.springframework.stereotype.Service;
  * @date 2022/10/2
  */
 @Service
-public class AppDataItemInfoServiceImpl implements IAppDataResourceInfoService {
+public class AppDataItemInfoServiceImpl implements IAppDataItemInfoService {
 
     @Autowired
     private AppDataItemInfoMapper appDataItemInfoMapper;
 
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void saveAll(List<AppDataItemInfo> appDataItemInfoList) {
+        for (AppDataItemInfo appDataItemInfo : appDataItemInfoList) {
+            appDataItemInfoMapper.insert(appDataItemInfo);
+        }
+    }
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void deleteAll() {
+        appDataItemInfoMapper.delete(Wrappers.emptyWrapper());
+    }
 }

+ 19 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataResourceInfoServiceImpl.java

@@ -1,9 +1,14 @@
 package com.dragoninfo.dcuc.app.service.sub.impl;
 
+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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * <p>
@@ -18,4 +23,18 @@ public class AppDataResourceInfoServiceImpl implements IAppDataResourceInfoServi
 
     @Autowired
     private AppDataResourceInfoMapper appDataResourceInfoMapper;
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void saveAll(List<AppDataResourceInfo> resourceInfoList) {
+        for (AppDataResourceInfo appDataResourceInfo : resourceInfoList) {
+            appDataResourceInfoMapper.insert(appDataResourceInfo);
+        }
+    }
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void deleteAll() {
+        appDataResourceInfoMapper.delete(Wrappers.emptyWrapper());
+    }
 }

+ 2 - 1
dcuc-app-service/src/main/resources/application-app.yml

@@ -13,7 +13,7 @@ dcuc:
       app-topic: 10000028
       service-topic: 10000029
       bus-sra-id: Y-120000000000-0042
-#      bus-sra-id: Y-120000000000-0037 # 测试使用
+      #      bus-sra-id: Y-120000000000-0037 # 测试使用
       bus-sre-idcard: 654001197503078495
       #应用资源请求参数
       page-size: 50
@@ -39,5 +39,6 @@ dcuc:
       data-resource:
         bus-service-id: S-120000000000-0100-00028
         bus-service-func: searchType
+        data-catalog-url: http://10.201.8.40:9977
       resource-url: http://10.201.7.31:8585/bus/send
       bu-service-url: http://10.11.0.41:8081/ddos/v1/ministryResources/searchMinistryResources

+ 1 - 1
dcuc-app-service/src/main/resources/config/mysql/V4_1_0008__Add_Data_Table_Ration.sql

@@ -18,7 +18,7 @@ DROP TABLE IF EXISTS t_app_data_item_info;
 CREATE TABLE t_app_data_item_info
 (
     id                         VARCHAR(32)  NOT NULL COMMENT '编号',
-    resource_id                VARCHAR(255) NOT NULL COMMENT '数据资源ID',
+    resource_table_id                VARCHAR(255) NOT NULL COMMENT '数据资源ID',
     column_id                  VARCHAR(32)  NOT NULL COMMENT '数据项ID',
     column_code                VARCHAR(90)  NOT NULL COMMENT '字段英文名称',
     column_name                VARCHAR(90)  NOT NULL COMMENT '字段中文名称',

+ 2 - 2
dcuc-app-service/src/main/resources/config/sql/V4_1_0008__Add_Data_Table_Ration.sql

@@ -28,7 +28,7 @@ COMMENT ON COLUMN t_app_column_relation.update_user IS '更新用户';
 CREATE TABLE t_app_data_item_info
 (
     id VARCHAR2 (32) NOT NULL,
-    resource_id VARCHAR2 (255) NOT NULL,
+    resource_table_id VARCHAR2 (32) NOT NULL,
     column_id VARCHAR2 (32) NOT NULL,
     column_code VARCHAR2 (90) NOT NULL,
     column_name VARCHAR2 (90) NOT NULL,
@@ -60,7 +60,7 @@ CREATE TABLE t_app_data_item_info
 
 COMMENT ON TABLE t_app_data_item_info IS '数据项(字段)信息';
 COMMENT ON COLUMN t_app_data_item_info.id IS '编号';
-COMMENT ON COLUMN t_app_data_item_info.resource_id IS '数据资源ID';
+COMMENT ON COLUMN t_app_data_item_info.resource_table_id IS '数据资源ID';
 COMMENT ON COLUMN t_app_data_item_info.column_id IS '数据项ID';
 COMMENT ON COLUMN t_app_data_item_info.column_code IS '字段英文名称';
 COMMENT ON COLUMN t_app_data_item_info.column_name IS '字段中文名称';