Kaynağa Gözat

Merge branch 'master' into 'mazq-230110-aksmerge'

Master

See merge request dcuc-tjdsj/app-service!81
马志强 2 yıl önce
ebeveyn
işleme
9e3762ad78
71 değiştirilmiş dosya ile 3711 ekleme ve 497 silme
  1. 1 1
      dcuc-app-api/pom.xml
  2. 17 1
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java
  3. 74 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppColumnRelationFacaed.java
  4. 42 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppDataItemInfoFacade.java
  5. 41 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppDataResourceInfoFacade.java
  6. 5 5
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IDataSecFacade.java
  7. 8 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IFieldClaFacade.java
  8. 1 1
      dcuc-app-model/pom.xml
  9. 24 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/BaseResp.java
  10. 309 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceInfoDTO.java
  11. 159 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/DataResourceItemIntoDTO.java
  12. 34 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageDataRespDTO.java
  13. 28 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/PageReqDTO.java
  14. 1 1
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/DataLevelDTO.java
  15. 2 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/FieldClaDTO.java
  16. 2 2
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/FieldSecDTO.java
  17. 73 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppColumnRelation.java
  18. 145 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataItemInfo.java
  19. 227 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataResourceInfo.java
  20. 1 1
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/FieldSec.java
  21. 45 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/AppDataTypeEnum.java
  22. 23 14
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataResourceEnum.java
  23. 29 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnDetailVo.java
  24. 30 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnRelationPageVO.java
  25. 35 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnRelationVO.java
  26. 26 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnSaveVo.java
  27. 111 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppDataItemInfoRespVO.java
  28. 187 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppDataResourceInfoRespVO.java
  29. 1 1
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataLevelVo.java
  30. 41 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceSyncTreeVo.java
  31. 6 17
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceTreeVo.java
  32. 3 38
      dcuc-app-service/pom.xml
  33. 0 22
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/ConsumerTomcatApplication.java
  34. 0 64
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/NacosPortConfig.java
  35. 30 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IDataCatalogBusiness.java
  36. 1 1
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java
  37. 208 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/DataCatalogBusinessImpl.java
  38. 0 32
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java
  39. 6 5
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java
  40. 15 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/cons/CommonCons.java
  41. 407 163
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java
  42. 183 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppColumnRelationFacade.java
  43. 54 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppDataItemInfoFacade.java
  44. 53 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppDataResourceInfoFacade.java
  45. 8 8
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/DataSecFacade.java
  46. 16 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/FieldClaFacade.java
  47. 15 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/mapper/sub/AppColumnRelationMapper.java
  48. 16 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/mapper/sub/AppDataItemInfoMapper.java
  49. 16 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/mapper/sub/AppDataResourceInfoMapper.java
  50. 2 2
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/mapper/sub/DataSecMapper.java
  51. 9 1
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/IDataResourceService.java
  52. 24 17
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/DataResourceServiceImpl.java
  53. 80 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppColumnRelationService.java
  54. 74 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataItemInfoService.java
  55. 66 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppDataResourceInfoService.java
  56. 2 2
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IDataClaService.java
  57. 11 11
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IDataSecService.java
  58. 10 2
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IFieldClaService.java
  59. 134 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppColumnRelationServiceImpl.java
  60. 86 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataItemInfoServiceImpl.java
  61. 95 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataResourceInfoServiceImpl.java
  62. 7 6
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/DataClaServiceImpl.java
  63. 33 48
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/DataSecServiceImpl.java
  64. 12 8
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/FieldClaServiceImpl.java
  65. 2 3
      dcuc-app-service/src/main/resources/application-app.yml
  66. 2 2
      dcuc-app-service/src/main/resources/application-base.yml
  67. 3 3
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0007__app_del_orgid.sql
  68. 104 0
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0008__Add_Data_Table_Ration.sql
  69. 194 0
      dcuc-app-service/src/main/resources/config/sql/V4_1_0008__Add_Data_Table_Ration.sql
  70. 0 13
      dcuc-app-service/src/test/java/com/dragoninfo/dcuc/app/business/ResourceBusinessTest.java
  71. 2 2
      pom.xml

+ 1 - 1
dcuc-app-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.4-tjdsj-SNAPSHOT</version>
+        <version>2.2.4-xjaks-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 17 - 1
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java

@@ -38,7 +38,7 @@ public interface IDataResourceFacade {
     @ApiOperation(value = "数据资源树")
     @ApiImplicitParam(name = "attrType", value = "数据属性类型 TABLE:表 COLUMN:列")
     @GetMapping(value = "getAllDataResourceTree")
-    List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType);
+    List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam(value = "attrType", required = false) String attrType);
 
     @ApiOperation(value = "数据资源树")
     @ApiImplicitParam(name = "typeCode", value = "typeCode类型(数据分级:DATA_CLASSIFY;数据资源分类:DATA_RESOURCE_CLASSIFY;数据安全级别:DATA_SECURITY_LEVEL;字段分类:COLUMN_CLASSIFY)")
@@ -62,6 +62,14 @@ public interface IDataResourceFacade {
     @GetMapping(value = "dataSecSync")
     ResponseStatus dataSecSync();
 
+    /**
+     * 字段关系同步
+     *
+     * @return 状态
+     */
+    @GetMapping(value = "columnRelationSync")
+    ResponseStatus columnRelationSync();
+
     /**
      * 数据资源分类同步
      *
@@ -78,6 +86,14 @@ public interface IDataResourceFacade {
     @GetMapping(value = "fieldClaSync")
     ResponseStatus fieldClaSync();
 
+    /**
+     * 表和字段同步
+     *
+     * @return 状态
+     */
+    @GetMapping(value = "syncTableAndColumn")
+    ResponseStatus syncTableAndColumn();
+
     /**
      * 批量获取
      * 根据id和classifyType获取名字和code值

+ 74 - 0
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppColumnRelationFacaed.java

@@ -0,0 +1,74 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import com.dragoninfo.dcuc.app.vo.AppColumnDetailVo;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationPageVO;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragoninfo.dcuc.app.vo.AppColumnSaveVo;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2022/10/5
+ */
+@FeignClient(name = "dcuc-app", path = "/dcuc/app/appColumnRelationFacaed")
+public interface IAppColumnRelationFacaed {
+
+
+    /**
+     * 分页查询列表
+     *
+     * @param searchDTO
+     * @return
+     */
+    @PostMapping("search")
+    Page<AppColumnRelationPageVO> pageSearch(@RequestBody SearchDTO searchDTO);
+
+    /**
+     * 根据id获取详情
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("detail")
+    AppColumnDetailVo detail(@RequestParam("id") String id);
+
+    /**
+     * 根据id删除关联关系
+     *
+     * @param id
+     */
+    @DeleteMapping("deleteById")
+    void deleteById(@RequestParam("id") String id);
+
+    /**
+     * 新增关联关系
+     *
+     * @param saveVo
+     * @return
+     */
+    @PostMapping("relationAdd")
+    ResponseStatus relationAdd(@RequestBody AppColumnSaveVo saveVo);
+
+    /**
+     * 关联关系修改
+     *
+     * @param saveVo
+     * @return
+     */
+    @PostMapping("relationUpdate")
+    ResponseStatus relationUpdate(@RequestBody AppColumnSaveVo saveVo);
+
+    /**
+     * 查询所有的关联关系id和code
+     *
+     * @return
+     */
+    @GetMapping("findAllIdAndCode")
+    List<AppColumnRelationVO> findAllIdAndCode();
+}

+ 42 - 0
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppDataItemInfoFacade.java

@@ -0,0 +1,42 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import com.dragoninfo.dcuc.app.vo.AppDataItemInfoRespVO;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@FeignClient(name = "dcuc-app", path = "/dcuc/app/appDataItemInfoFacade")
+public interface IAppDataItemInfoFacade {
+
+    /**
+     * 搜索查询列表
+     *
+     * @param searchDTO 搜索条件
+     * @return 集合
+     */
+    @PostMapping("searchList")
+    List<AppDataItemInfoRespVO> searchList(@RequestBody SearchDTO searchDTO);
+
+    /**
+     * 根据表ID查询数据项信息
+     *
+     * @param tableId 表ID
+     * @return 数据项信息
+     */
+    @GetMapping("selectByTableId")
+    List<AppDataItemInfoRespVO> selectByTableId(@RequestParam("tableId") String tableId);
+
+}

+ 41 - 0
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IAppDataResourceInfoFacade.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import com.dragoninfo.dcuc.app.vo.AppDataResourceInfoRespVO;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@FeignClient(name = "dcuc-app", path = "/dcuc/app/appDataResourceInfoFacade")
+public interface IAppDataResourceInfoFacade {
+    /**
+     * 根据查询条件查询列表
+     *
+     * @param searchDTO 查询条件
+     * @return 数据资源列表
+     */
+    @PostMapping("searchList")
+    List<AppDataResourceInfoRespVO> searchList(@RequestBody SearchDTO searchDTO);
+
+    /**
+     * 根据数据资源标识符查询数据资源
+     *
+     * @param resourceCode 数据资源标识符
+     * @return 数据资源
+     */
+    @GetMapping("findByResourceCode")
+    AppDataResourceInfoRespVO findByResourceCode(@RequestParam("resourceCode") String resourceCode);
+
+}

+ 5 - 5
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/sub/IDataSecFacade.java

@@ -1,6 +1,6 @@
 package com.dragoninfo.dcuc.app.facade.sub;
 
-import com.dragoninfo.dcuc.app.dto.sub.DataSecDTO;
+import com.dragoninfo.dcuc.app.dto.sub.FieldSecDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -21,7 +21,7 @@ public interface IDataSecFacade {
      * @return
      */
     @PostMapping("dataLevelAdd")
-    ResponseStatus dataLevelAdd(@RequestBody DataSecDTO dto);
+    ResponseStatus dataLevelAdd(@RequestBody FieldSecDTO dto);
 
     /**
      * 查看详情
@@ -29,7 +29,7 @@ public interface IDataSecFacade {
      * @return
      */
     @GetMapping("detail/{id}")
-    DataSecDTO detail(@PathVariable("id") String id);
+    FieldSecDTO detail(@PathVariable("id") String id);
 
     /**
      * 根据id删除
@@ -45,7 +45,7 @@ public interface IDataSecFacade {
      * @return
      */
     @GetMapping("detailByCode/{secCode}")
-    DataSecDTO detailByCode(@PathVariable("secCode") String secCode);
+    FieldSecDTO detailByCode(@PathVariable("secCode") String secCode);
 
     /**
      * 数据安全等级分页查询
@@ -53,6 +53,6 @@ public interface IDataSecFacade {
      * @return
      */
     @PostMapping("search")
-    Page<DataSecDTO> pageSearch(@RequestBody SearchDTO searchDTO);
+    Page<FieldSecDTO> pageSearch(@RequestBody SearchDTO searchDTO);
 
 }

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

@@ -76,4 +76,12 @@ public interface IFieldClaFacade {
     @PostMapping("pageSearch")
     Page<FieldClaAcceptDTO> pageSearch(@RequestBody SearchDTO searchDTO);
 
+    /**
+     * 获取二级字段分类
+     *
+     * @param searchDTO
+     * @return
+     */
+    @PostMapping("getSecLevelColumn")
+    List<FieldClaDTO> getSecLevelColumn(@RequestBody SearchDTO searchDTO);
 }

+ 1 - 1
dcuc-app-model/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.4-tjdsj-SNAPSHOT</version>
+        <version>2.2.4-xjaks-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 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();
+    }
 }

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

@@ -0,0 +1,309 @@
+
+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;
+
+/**
+ * 数据资源表信息
+ *
+ * @author huangzqa
+ * @date 2022/10/02
+ */
+@Data
+public class DataResourceInfoDTO {
+
+    /**
+     * 应用系统编号
+     */
+    private String applicationCode;
+
+    /**
+     * 应用系统名称
+     */
+    private String applicationCodeName;
+
+    /**
+     * 数据资源事权单位编号
+     */
+    private String authorityDeptCode;
+
+    /**
+     * 数据资源事权单位名称
+     */
+    private String authorityDeptName;
+
+    /**
+     * 数据资源目录编号
+     */
+    private String catalogCode;
+
+    /**
+     * 对标类型00:未对标;01:本地标准;02:公安部规范
+     */
+    private String comparisonType;
+
+    /**
+     * 数据获取方式编号
+     */
+    private String dataAccessCode;
+
+    /**
+     * 数据获取方式名称
+     */
+    private String dataAccessName;
+
+    /**
+     * 数据分级代码
+     */
+    private String dataClassification;
+
+    /**
+     * 数据分级名称
+     */
+    private String dataClassificationName;
+
+    /**
+     * 数据组织一级分类代码
+     */
+    private String dataClassifyOneCode;
+
+    /**
+     * 数据组织一级分类名称
+     */
+    private String dataClassifyOneName;
+
+    /**
+     * 数据组织二级分类代码
+     */
+    private String dataClassifyTwoCode;
+
+    /**
+     * 数据组织二级分类名称
+     */
+    private String dataClassifyTwoName;
+
+    /**
+     * 数据接入方式编号
+     */
+    private String dataInsertCode;
+
+    /**
+     * 数据接入方式名称
+     */
+    private String dataInsertName;
+
+    /**
+     * 数据标签5代码
+     */
+    private String dataLabelFiveCode;
+
+    /**
+     * 数据标签5名称
+     */
+    private String dataLabelFiveName;
+
+    /**
+     * 数据标签4代码
+     */
+    private String dataLabelFourCode;
+
+    /**
+     * 数据标签4名称
+     */
+    private String dataLabelFourName;
+    /**
+     * 数据标签3代码
+     */
+    private String dataLabelThreeCode;
+    /**
+     * 数据标签3名称
+     */
+    private String dataLabelThreeName;
+    /**
+     * 数据标签3代码
+     */
+    private String dataLabelTwoCode;
+    /**
+     * 数据标签2名称
+     */
+    private String dataLabelTwoName;
+    /**
+     * 数据标签1代码
+     */
+    private String dataLabelOneCode;
+    /**
+     * 数据标签1名称
+     */
+    private String dataLabelOneName;
+    /**
+     * 数据对象ID
+     */
+    private String dataObjectId;
+    /**
+     * 一级数据来源编号
+     */
+    private String dataSourceOneCode;
+    /**
+     * 一级数据来源名称
+     */
+    private String dataSourceOneName;
+    /**
+     * 二级数据来源编号
+     */
+    private String dataSourceTwoCode;
+    /**
+     * 二级数据来源名称
+     */
+    private String dataSourceTwoName;
+    /**
+     * 增量数据记录规模
+     */
+    private String incrementRecordSize;
+    /**
+     * 增量数据存储规模
+     */
+    private String incrementStorageSize;
+    /**
+     * 是否开放服务1是0否
+     */
+    private String isAccess;
+    /**
+     * 数据资源管理单位编号
+     */
+    private String manageDeptCode;
+    /**
+     * 数据资源管理单位名称
+     */
+    private String manageDeptName;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private String registerTime;
+    /**
+     * 数据资源标识符
+     */
+    private String resourceCode;
+    /**
+     * 数据资源描述
+     */
+    private String resourceDescription;
+
+    /**
+     * 资源ID
+     */
+    private String resourceId;
+    /***
+     * 数据资源位置编号
+     */
+    private String resourceLocationCode;
+    /**
+     * 数据资源位置名称
+     */
+    private String resourceLocationName;
+    /**
+     * 据资源名称
+     */
+    private String resourceName;
+    /**
+     * 数据资源服务编号
+     */
+    private String resourceServiceCode;
+    /**
+     * 资源状态代码
+     */
+    private String resourceStatus;
+
+    /**
+     * 资源状态名称1启动0停用2注销
+     */
+    private String resourceStatusName;
+
+    /**
+     * 数据资源版本号
+     */
+    private String resourceVersion;
+    /**
+     * 来源系统种类编号
+     */
+    private String sourceSystemCode;
+    /**
+     * 来源系统种类名称
+     */
+    private String sourceSystemName;
+    /**
+     * 标准数据项集编码
+     */
+    private String standardDataCode;
+    /**
+     * 标准数据项集名称
+     */
+    private String standardDataName;
+    /**
+     * 存量数据记录规模
+     */
+    private String stockRecordSize;
+    /**
+     * 存量数据存储规模
+     */
+    private String stockStorageSize;
+    /**
+     * 数据资源存储位置描述编号
+     */
+    private String storageCenterCode;
+    /**
+     * 数据资源存储位置描述名称
+     */
+    private String storageCenterName;
+    /**
+     * 数据存储周期
+     */
+    private String storageCycle;
+    /**
+     * 数据对象英文名
+     */
+    private String tableCode;
+    /**
+     * 数据对象中文名
+     */
+    private String tableName;
+    /**
+     * 数据更新周期代码
+     */
+    private String updateCycleCode;
+    /**
+     * 数据更新周期名称
+     */
+    private String updateCycleName;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private String updateTime;
+
+    /**
+     * 数据项信息
+     */
+    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;
+    }
+
+}

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

@@ -0,0 +1,159 @@
+
+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;
+
+/**
+ * 数据资源表信息
+ *
+ * @author huangzqa
+ * @date 2022/10/02
+ */
+@Data
+public class DataResourceItemIntoDTO {
+
+    /**
+     * 字段分类代码
+     */
+    private String columnClassify;
+    /**
+     * 字段分类名称
+     */
+    private String columnClassifyName;
+    /**
+     * 字段英文名称
+     */
+    private String columnCode;
+    /**
+     * 数据项ID
+     */
+    private String columnId;
+    /**
+     * 字段中文名称
+     */
+    private String columnName;
+    /**
+     * 数据元内部标识符
+     */
+    private String dataElementCode;
+    /**
+     * 数据项标识符
+     */
+    private String dataItemCode;
+    /**
+     * 数据项编号
+     */
+    private String dataItemNo;
+    /**
+     * 数据安全级别代码
+     */
+    private String dataSecurityLevel;
+    /**
+     * 数据安全级别名称
+     */
+    private String dataSecurityLevelName;
+    /**
+     * 数据项类型代码
+     */
+    private String dataSourceItemType;
+    /**
+     * 数据项类型名称
+     */
+    private String dataSourceItemTypeName;
+
+    /**
+     * ???
+     */
+    private Boolean idItemStatus;
+    /**
+     * 是否失效,true/false
+     */
+    private Boolean invalidStatus;
+    /**
+     * 查询/订阅匹配方式代码
+     */
+    private String matchingModeCode;
+    /**
+     * 查询/订阅匹配方式名称
+     */
+    private String matchingModeName;
+    /**
+     * 字段性质分类代码
+     */
+    private String propertyClassifyCode;
+    /**
+     * 字段性质分类名称
+     */
+    private String propertyClassifyName;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private String registerTime;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 是否必填,true/false
+     */
+    private Boolean requiredStatus;
+    /**
+     * 是否查询条件,true/false
+     */
+    private Boolean searchConditionStatus;
+    /**
+     * 字段敏感分类代码
+     */
+    private String sensitiveClassifyCode;
+    /**
+     * 字段敏感分类名称
+     */
+    private String sensitiveClassifyName;
+    /**
+     * 数据项集数据项英文名
+     */
+    private String standardDataItemCode;
+    /**
+     * 数据项集数据项数据长度
+     */
+    private String standardDataItemLength;
+    /**
+     * 数据项集数据项中文名
+     */
+    private String standardDataItemName;
+    /**
+     * 数据项集数据项编号
+     */
+    private String standardDataItemNo;
+    /**
+     * 数据项集数据项数据类型
+     */
+    private String standardDataItemType;
+    /**
+     * 是否订阅条件,true/false
+     */
+    private Boolean subscribeConditionStatus;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    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;
+}

+ 1 - 1
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/DataLevelDTO.java

@@ -3,7 +3,7 @@ package com.dragoninfo.dcuc.app.dto.sub;
 import lombok.Data;
 
 /**
- * 主客体授权-数据分级新增修改DTO
+ * 主客体授权-数据分级DTO
  * @author mazq
  * @date 2021/5/25
  */

+ 2 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/FieldClaDTO.java

@@ -5,6 +5,8 @@ import lombok.Data;
 import java.util.Date;
 
 /**
+ * 字段分类Dto
+ *
  * @author mazq
  * @date 2021/5/31
  */

+ 2 - 2
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/DataSecDTO.java → dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/sub/FieldSecDTO.java

@@ -3,12 +3,12 @@ package com.dragoninfo.dcuc.app.dto.sub;
 import lombok.Data;
 
 /**
- * 主客体授权-数据分级新增修改DTO
+ * 主客体授权-字段安全等级Dto
  * @author mazq
  * @date 2021/5/25
  */
 @Data
-public class DataSecDTO {
+public class FieldSecDTO {
 
     private String id;
 

+ 73 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppColumnRelation.java

@@ -0,0 +1,73 @@
+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;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 字段关系表
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@TableName("t_app_column_relation")
+@Data
+public class AppColumnRelation {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.UUID)
+    private String id;
+    /**
+     * 表码名称
+     */
+    private String codeName;
+    /**
+     * 表码值
+     */
+    private String codeValue;
+    /**
+     * 字段一分类值
+     */
+    private String columnOneClassValue;
+    /**
+     * 字段二分类值
+     */
+    private String columnTwoClassValue;
+    /**
+     * 是否删除
+     */
+    @TableLogic
+    private String deleted;
+    /**
+     * 创建时间
+     */
+    @CreatedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP, fill = FieldFill.INSERT)
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @LastModifiedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
+    private Date updateTime;
+    /**
+     * 创建用户
+     */
+    @CreatedBy
+    @TableField(jdbcType = JdbcType.VARCHAR, fill = FieldFill.INSERT)
+    private String createUser;
+    /**
+     * 更新用户
+     */
+    @LastModifiedBy
+    private String updateUser;
+}

+ 145 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/AppDataItemInfo.java

@@ -0,0 +1,145 @@
+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;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 数据资源字段信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Data
+@TableName("t_app_data_item_info")
+public class AppDataItemInfo {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.UUID)
+    private String id;
+    /**
+     * AppDataResourceInfo表主键
+     */
+    private String resourceTableId;
+    /**
+     * 数据项ID
+     */
+    private String columnId;
+    /**
+     * 字段英文名称
+     */
+    private String columnCode;
+    /**
+     * 字段中文名称
+     */
+    private String columnName;
+    /**
+     * 字段分类代码
+     */
+    private String columnClassify;
+    /**
+     * 字段分类名称
+     */
+    private String columnClassifyName;
+    /**
+     * 数据安全级别代码
+     */
+    private String dataSecurityLevel;
+    /**
+     * 数据安全级别名称
+     */
+    private String dataSecurityLevelName;
+    /**
+     * 数据项编号
+     */
+    private String dataItemNo;
+    /**
+     * 数据项标识符
+     */
+    private String dataItemCode;
+    /**
+     * 数据项类型代码
+     */
+    private String dataSourceItemType;
+    /**
+     * 数据项类型名称
+     */
+    private String dataSourceItemTypeName;
+    /**
+     * 数据元内部标识符
+     */
+    private String dataElementCode;
+    /**
+     * 数据项集数据项编号
+     */
+    private String standardDataItemNo;
+    /**
+     * 数据项集数据项中文名
+     */
+    private String standardDataItemName;
+    /**
+     * 数据项集数据项英文名
+     */
+    private String standardDataItemCode;
+    /**
+     * 数据项集数据项数据类型
+     */
+    private String standardDataItemType;
+    /**
+     * 数据项集数据项数据长度
+     */
+    private String standardDataItemLength;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 是否失效,true/false
+     */
+    private String invalidStatus;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date columnRegisterTime;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date columnUpdateTime;
+    /**
+     * 是否删除
+     */
+    @TableLogic
+    private String deleted;
+    /**
+     * 创建时间
+     */
+    @CreatedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP, fill = FieldFill.INSERT)
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @LastModifiedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
+    private Date updateTime;
+    /**
+     * 创建用户
+     */
+    @CreatedBy
+    @TableField(jdbcType = JdbcType.VARCHAR, fill = FieldFill.INSERT)
+    private String createUser;
+    /**
+     * 更新用户
+     */
+    @LastModifiedBy
+    private String updateUser;
+}

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

@@ -0,0 +1,227 @@
+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;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 数据资源表信息
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Data
+@TableName("t_app_data_resource_info")
+public class AppDataResourceInfo {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.INPUT)
+    private String id;
+    /**
+     * 数据对象ID
+     */
+    private String dataObjectId;
+    /**
+     * 数据资源标识符
+     */
+    private String resourceCode;
+    /**
+     * 资源名称
+     */
+    private String resourceName;
+    /**
+     * 数据资源版本号
+     */
+    private String resourceVersion;
+    /**
+     * 数据资源描述
+     */
+    private String resourceDescription;
+    /**
+     * 数据对象英文名
+     */
+    private String tableCode;
+    /**
+     * 数据对象中文名
+     */
+    private String tableName;
+    /**
+     * 数据资源目录编号
+     */
+    private String catalogCod;
+    /**
+     * 应用系统编号
+     */
+    private String applicationCode;
+    /**
+     * 应用系统名称
+     */
+    private String applicationCodeName;
+    /**
+     * 一级数据来源编号
+     */
+    private String dataSourceOneCode;
+    /**
+     * 一级数据来源名称
+     */
+    private String dataSourceOneName;
+    /**
+     * 二级数据来源编号
+     */
+    private String dataSourceTwoCode;
+    /**
+     * 二级数据来源名称
+     */
+    private String dataSourceTwoName;
+    /**
+     * 数据分级代码
+     */
+    private String dataClassification;
+    /**
+     * 数据分级名称
+     */
+    private String dataClassificationName;
+    /**
+     * 标准数据项集编码
+     */
+    private String standardDataCode;
+    /**
+     * 标准数据项集名称
+     */
+    private String standardDataName;
+    /**
+     * 数据组织一级分类代码
+     */
+    private String dataClassifyOneCode;
+    /**
+     * 数据组织一级分类名称
+     */
+    private String dataClassifyOneName;
+    /**
+     * 数据组织二级分类代码
+     */
+    private String dataClassifyTwoCode;
+    /**
+     * 数据组织二级分类名称
+     */
+    private String dataClassifyTwoName;
+    /**
+     * 数据标签1代码
+     */
+    private String dataLabelOneCode;
+    /**
+     * 数据标签1名称
+     */
+    private String dataLabelOneName;
+    /**
+     * 数据标签2代码
+     */
+    private String dataLabelTwoCode;
+    /**
+     * 数据标签2名称
+     */
+    private String dataLabelTwoName;
+    /**
+     * 数据标签3代码
+     */
+    private String dataLabelThreeCode;
+    /**
+     * 数据标签3名称
+     */
+    private String dataLabelThreeName;
+    /**
+     * 数据标签4代码
+     */
+    private String dataLabelFourCode;
+    /**
+     * 数据标签4名称
+     */
+    private String dataLabelFourName;
+    /**
+     * 数据标签5代码
+     */
+    private String dataLabelFiveCode;
+    /**
+     * 数据标签5名称
+     */
+    private String dataLabelFiveName;
+    /**
+     * 数据资源服务编号
+     */
+    private String resourceServiceCode;
+    /**
+     * 资源状态代码
+     */
+    private String resourceStatus;
+    /**
+     * 资源状态名称1启动0停用2注销
+     */
+    private String resourceStatusName;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date resourceRegisterTime;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date resourceUpdateTime;
+    /**
+     * 数据资源事权单位编号
+     */
+    private String authorityDeptCode;
+    /**
+     * 数据资源事权单位名称
+     */
+    private String authorityDeptName;
+    /**
+     * 数据资源管理单位编号
+     */
+    private String manageDeptCode;
+    /**
+     * 数据资源管理单位名称
+     */
+    private String manageDeptName;
+    /**
+     * 否开发服务1是0否
+     */
+    @TableField(value = "is_access")
+    private String access;
+
+    /**
+     * 是否删除
+     */
+    @TableLogic
+    private String deleted;
+    /**
+     * 创建时间
+     */
+    @CreatedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP, fill = FieldFill.INSERT)
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @LastModifiedDate
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
+    private Date updateTime;
+    /**
+     * 创建用户
+     */
+    @CreatedBy
+    @TableField(jdbcType = JdbcType.VARCHAR, fill = FieldFill.INSERT)
+    private String createUser;
+    /**
+     * 更新用户
+     */
+    @LastModifiedBy
+    private String updateUser;
+}

+ 1 - 1
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/DataSec.java → dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/sub/FieldSec.java

@@ -20,7 +20,7 @@ import java.util.Date;
  */
 @Data
 @TableName("T_APP_DATA_SEC")
-public class DataSec implements Serializable {
+public class FieldSec implements Serializable {
 
     @TableId(type = IdType.UUID)
     private String id;

+ 45 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/AppDataTypeEnum.java

@@ -0,0 +1,45 @@
+package com.dragoninfo.dcuc.app.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * @author mazq
+ * @date 2022/10/4
+ */
+public enum AppDataTypeEnum implements ICodeEnum {
+
+    /**
+     * 表资源类型
+     */
+    TAB("TAB", "表"),
+
+    /**
+     * 列资源类型
+     */
+    COL("COL", "列");
+
+    /**
+     * 数据资源code
+     */
+    private String value;
+
+    /**
+     * 数据资源名称
+     */
+    private String label;
+
+    AppDataTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+}

+ 23 - 14
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataResourceEnum.java

@@ -5,30 +5,36 @@ import java.util.List;
 
 /**
  * 数据资源类型枚举类
+ *
  * @author mazq
  * @date 2021/4/13
  */
-public enum  DataResourceEnum {
+public enum DataResourceEnum {
 
     /**
      * 数据分级
      */
-    DATA_CLASSIFY("DATA_CLASSIFY","数据分级","DATA_CLASSIFY", DataAttrTypeEnum.DATA_ATTR_TABLE),
+    DATA_LEVEL("DATA_LEVEL", "数据分级", "DATA_LEVEL", DataAttrTypeEnum.DATA_ATTR_TABLE),
 
     /**
      * 数据资源分类
      */
-    DATA_RESOURCE_CLASSIFY("DATA_RESOURCE_CLASSIFY","数据资源分类","DATA_RESOURCE_CLASSIFY",DataAttrTypeEnum.DATA_ATTR_TABLE),
+    DATA_RESOURCE_CLASSIFY("DATA_RESOURCE_CLASSIFY", "数据资源分类", "DATA_RESOURCE_CLASSIFY", DataAttrTypeEnum.DATA_ATTR_TABLE),
 
     /**
      * 数据安全级别
      */
-    DATA_SECURITY_LEVEL("DATA_SECURITY_LEVEL","数据安全级别","DATA_SECURITY_LEVEL", DataAttrTypeEnum.DATA_ATTR_COLUMN),
+    COLUMN_SECURITY_LEVEL("COLUMN_SECURITY_LEVEL", "数据安全级别", "COLUMN_SECURITY_LEVEL", DataAttrTypeEnum.DATA_ATTR_COLUMN),
 
     /**
      * 字段分类
      */
-    COLUMN_CLASSIFY("COLUMN_CLASSIFY","字段分类","COLUMN_CLASSIFY",DataAttrTypeEnum.DATA_ATTR_COLUMN);
+    COLUMN_CLASSIFY("COLUMN_CLASSIFY", "字段分类", "COLUMN_CLASSIFY", DataAttrTypeEnum.DATA_ATTR_COLUMN),
+
+    /**
+     * 字段关系
+     */
+    COLUMN_RELATION_CATALOG("COLUMN_RELATION_CATALOG", "字段关系", "COLUMN_RELATION_CATALOG", DataAttrTypeEnum.DATA_ATTR_COLUMN);
 
     DataResourceEnum(String code, String label, String dataType, DataAttrTypeEnum attrType) {
         this.code = code;
@@ -95,14 +101,15 @@ public enum  DataResourceEnum {
 
     /**
      * 获取所有列属性的枚举类,包括公用资源
+     *
      * @return
      */
-    public static List<DataResourceEnum> getColumnDataResource(){
+    public static List<DataResourceEnum> getColumnDataResource() {
         List<DataResourceEnum> list = new ArrayList<>();
         for (DataResourceEnum value : values()) {
-            if(value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_COLUMN) ||
-               value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)){
-                 list.add(value);
+            if (value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_COLUMN) ||
+                    value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)) {
+                list.add(value);
             }
         }
         return list;
@@ -110,14 +117,15 @@ public enum  DataResourceEnum {
 
     /**
      * 获取所有表属性的枚举类,包括公用资源
+     *
      * @return
      */
-    public static List<DataResourceEnum> getTableDataResource(){
+    public static List<DataResourceEnum> getTableDataResource() {
         List<DataResourceEnum> list = new ArrayList<>();
         for (DataResourceEnum value : values()) {
-            if(value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_TABLE) ||
-               value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)){
-                 list.add(value);
+            if (value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_TABLE) ||
+                    value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)) {
+                list.add(value);
             }
         }
         return list;
@@ -125,11 +133,12 @@ public enum  DataResourceEnum {
 
     /**
      * 根据code获取枚举类值
+     *
      * @param code
      */
     public static DataResourceEnum getByCode(String code) {
         for (DataResourceEnum value : values()) {
-            if(value.getCode().equals(code)){
+            if (value.getCode().equals(code)) {
                 return value;
             }
         }

+ 29 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnDetailVo.java

@@ -0,0 +1,29 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2022/10/5
+ */
+@ApiModel(value = "字段关系保存Vo")
+@Data
+public class AppColumnDetailVo {
+
+    @ApiModelProperty("关联关系id, 新增时可不填")
+    private String id;
+
+    @ApiModelProperty(name = "字段分类1 id")
+    private String columnClaIdOne;
+
+    @ApiModelProperty(name = "字段分类2 id")
+    private String columnClaIdTwo;
+
+    @ApiModelProperty(name = "字段分类1 名称")
+    private String columnClaNameOne;
+
+    @ApiModelProperty(name = "字段分类2 名称")
+    private String columnClaNameTwo;
+}

+ 30 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnRelationPageVO.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@ApiModel(value = "字段关系分页Vo")
+@Data
+public class AppColumnRelationPageVO {
+
+    @ApiModelProperty("关联关系id")
+    private String id;
+
+    @ApiModelProperty("表码名称")
+    private String columnRelation;
+
+    @ApiModelProperty("表码值")
+    private String codeValue;
+
+}

+ 35 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnRelationVO.java

@@ -0,0 +1,35 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class AppColumnRelationVO {
+
+    /**
+     * 编号
+     */
+    private String id;
+    /**
+     * 表码名称
+     */
+    private String codeName;
+    /**
+     * 表码值
+     */
+    private String codeValue;
+
+}

+ 26 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnSaveVo.java

@@ -0,0 +1,26 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2022/10/5
+ */
+@ApiModel(value = "字段关系保存Vo")
+@Data
+public class AppColumnSaveVo {
+
+    @ApiModelProperty("关联关系id")
+    private String id;
+
+    @ApiModelProperty(name = "字段分类1 id")
+    private String columnClaIdOne;
+
+    @ApiModelProperty(name = "字段分类2 id")
+    private String columnClaIdTwo;
+
+
+
+}

+ 111 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppDataItemInfoRespVO.java

@@ -0,0 +1,111 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@Data
+public class AppDataItemInfoRespVO {
+    /**
+     * 编号
+     */
+    private String id;
+    /**
+     * 数据资源ID
+     */
+    private String resourceTableId;
+    /**
+     * 数据项ID
+     */
+    private String columnId;
+    /**
+     * 字段英文名称
+     */
+    private String columnCode;
+    /**
+     * 字段中文名称
+     */
+    private String columnName;
+    /**
+     * 字段分类代码
+     */
+    private String columnClassify;
+    /**
+     * 字段分类名称
+     */
+    private String columnClassifyName;
+    /**
+     * 数据安全级别代码
+     */
+    private String dataSecurityLevel;
+    /**
+     * 数据安全级别名称
+     */
+    private String dataSecurityLevelName;
+    /**
+     * 数据项编号
+     */
+    private String dataItemNo;
+    /**
+     * 数据项标识符
+     */
+    private String dataItemCode;
+    /**
+     * 数据项类型代码
+     */
+    private String dataSourceItemType;
+    /**
+     * 数据项类型名称
+     */
+    private String dataSourceItemTypeName;
+    /**
+     * 数据元内部标识符
+     */
+    private String dataElementCode;
+    /**
+     * 数据项集数据项编号
+     */
+    private String standardDataItemNo;
+    /**
+     * 数据项集数据项中文名
+     */
+    private String standardDataItemName;
+    /**
+     * 数据项集数据项英文名
+     */
+    private String standardDataItemCode;
+    /**
+     * 数据项集数据项数据类型
+     */
+    private String standardDataItemType;
+    /**
+     * 数据项集数据项数据长度
+     */
+    private String standardDataItemLength;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 是否失效,true/false
+     */
+    private String invalidStatus;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date columnRegisterTime;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date columnUpdateTime;
+}

+ 187 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppDataResourceInfoRespVO.java

@@ -0,0 +1,187 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@Data
+public class AppDataResourceInfoRespVO {
+    /**
+     * 编号
+     */
+    private String id;
+    /**
+     * 数据对象ID
+     */
+    private String dataObjectId;
+    /**
+     * 数据资源标识符
+     */
+    private String resourceCode;
+    /**
+     * 资源名称
+     */
+    private String resourceName;
+    /**
+     * 数据资源版本号
+     */
+    private String resourceVersion;
+    /**
+     * 数据资源描述
+     */
+    private String resourceDescription;
+    /**
+     * 数据对象英文名
+     */
+    private String tableCode;
+    /**
+     * 数据对象中文名
+     */
+    private String tableName;
+    /**
+     * 数据资源目录编号
+     */
+    private String catalogCod;
+    /**
+     * 应用系统编号
+     */
+    private String applicationCode;
+    /**
+     * 应用系统名称
+     */
+    private String applicationCodeName;
+    /**
+     * 一级数据来源编号
+     */
+    private String dataSourceOneCode;
+    /**
+     * 一级数据来源名称
+     */
+    private String dataSourceOneName;
+    /**
+     * 二级数据来源编号
+     */
+    private String dataSourceTwoCode;
+    /**
+     * 二级数据来源名称
+     */
+    private String dataSourceTwoName;
+    /**
+     * 数据分级代码
+     */
+    private String dataClassification;
+    /**
+     * 数据分级名称
+     */
+    private String dataClassificationName;
+    /**
+     * 标准数据项集编码
+     */
+    private String standardDataCode;
+    /**
+     * 标准数据项集名称
+     */
+    private String standardDataName;
+    /**
+     * 数据组织一级分类代码
+     */
+    private String dataClassifyOneCode;
+    /**
+     * 数据组织一级分类名称
+     */
+    private String dataClassifyOneName;
+    /**
+     * 数据组织二级分类代码
+     */
+    private String dataClassifyTwoCode;
+    /**
+     * 数据组织二级分类名称
+     */
+    private String dataClassifyTwoName;
+    /**
+     * 数据标签1代码
+     */
+    private String dataLabelOneCode;
+    /**
+     * 数据标签1名称
+     */
+    private String dataLabelOneName;
+    /**
+     * 数据标签2代码
+     */
+    private String dataLabelTwoCode;
+    /**
+     * 数据标签2名称
+     */
+    private String dataLabelTwoName;
+    /**
+     * 数据标签3代码
+     */
+    private String dataLabelThreeCode;
+    /**
+     * 数据标签3名称
+     */
+    private String dataLabelThreeName;
+    /**
+     * 数据标签4代码
+     */
+    private String dataLabelFourCode;
+    /**
+     * 数据标签4名称
+     */
+    private String dataLabelFourName;
+    /**
+     * 数据标签5代码
+     */
+    private String dataLabelFiveCode;
+    /**
+     * 数据标签5名称
+     */
+    private String dataLabelFiveName;
+    /**
+     * 数据资源服务编号
+     */
+    private String resourceServiceCode;
+    /**
+     * 资源状态代码
+     */
+    private String resourceStatus;
+    /**
+     * 资源状态名称1启动0停用2注销
+     */
+    private String resourceStatusName;
+    /**
+     * 注册时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date resourceRegisterTime;
+    /**
+     * 更新时间,格式:yyyy-MM-dd HH:mm:ss
+     */
+    private Date resourceUpdateTime;
+    /**
+     * 数据资源事权单位编号
+     */
+    private String authorityDeptCode;
+    /**
+     * 数据资源事权单位名称
+     */
+    private String authorityDeptName;
+    /**
+     * 数据资源管理单位编号
+     */
+    private String manageDeptCode;
+    /**
+     * 数据资源管理单位名称
+     */
+    private String manageDeptName;
+}

+ 1 - 1
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataLevelVo.java

@@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 public class DataLevelVo {
-    private String innerId;
+    private String id;
     private String levelCode;
     private String levelName;
     private String typeCode;

+ 41 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceSyncTreeVo.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/4/13
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "数据资源同步树对象")
+public class DataResourceSyncTreeVo {
+
+    @ApiModelProperty(value = "节点id")
+    private String id;
+    @ApiModelProperty(value = "数据资源code")
+    private String code;
+    @ApiModelProperty(value = "节点名称")
+    private String label;
+    @ApiModelProperty(value = "数据资源类型" +
+            "数据安全级别:DATA_SECURITY_LEVEL " +
+            "字段一级分类:LEVEL_1_COLUMN_CLASSIFY" +
+            "字段二级分类:LEVEL_2_COLUMN_CLASSIFY" +
+            "数据分级:DATA_CLASSIFY")
+    private String dataType;
+    @ApiModelProperty(value = "子节点集合")
+    private List<DataResourceSyncTreeVo> child;
+    @ApiModelProperty(value = "是否是树节点 true:是树节点,child不为空。false:非树节点,child为空。")
+    private Boolean treeNode;
+    @ApiModelProperty(value = "父节点id")
+    private String pId;
+}

+ 6 - 17
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceTreeVo.java

@@ -2,8 +2,10 @@ package com.dragoninfo.dcuc.app.vo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.experimental.Tolerate;
 
 import java.util.List;
@@ -14,6 +16,8 @@ import java.util.List;
  */
 @Data
 @Builder
+@NoArgsConstructor
+@AllArgsConstructor
 @ApiModel(value = "数据资源树对象")
 public class DataResourceTreeVo {
 
@@ -23,27 +27,12 @@ public class DataResourceTreeVo {
     private String code;
     @ApiModelProperty(value = "节点名称")
     private String label;
-    @ApiModelProperty(value = "数据资源类型" +
-            "数据安全级别:DATA_SECURITY_LEVEL " +
-            "字段一级分类:LEVEL_1_COLUMN_CLASSIFY" +
-            "字段二级分类:LEVEL_2_COLUMN_CLASSIFY" +
-            "数据分级:DATA_CLASSIFY")
-    private String dataType;
+    @ApiModelProperty(value = "分级分类code")
+    private String classifyCode;
     @ApiModelProperty(value = "子节点集合")
     private List<DataResourceTreeVo> child;
     @ApiModelProperty(value = "是否是树节点 true:是树节点,child不为空。false:非树节点,child为空。")
     private Boolean treeNode;
     @ApiModelProperty(value = "父节点id")
     private String pId;
-
-    @ApiModelProperty(value = "数据资源code与dataType拼接,以|拼接")
-    private String codeDataTypeStr;
-
-    @ApiModelProperty(value = "内部使用唯一标识id")
-    private String innerId;
-    /**
-     * 添加无参构造器,便于调用端序列化
-     */
-    @Tolerate
-    DataResourceTreeVo() {}
 }

+ 3 - 38
dcuc-app-service/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.4-tjdsj-SNAPSHOT</version>
+        <version>2.2.4-xjaks-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -120,7 +120,7 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-auth-api</artifactId>
-            <version>2.4.2-tjdsj-SNAPSHOT</version>
+            <version>2.4.2-xjaks-SNAPSHOT</version>
         </dependency>
         <!--配置 dcuc 结束-->
 
@@ -178,41 +178,6 @@
     <packaging>${project.packaging}</packaging>
 
     <profiles>
-        <!--war打包配置-->
-        <!--使用方式 mvn clean package -Pwar-->
-        <profile>
-            <id>war</id>
-            <properties>
-                <project.packaging>war</project.packaging>
-            </properties>
-            <dependencies>
-                <dependency>
-                    <groupId>com.dragonsoft</groupId>
-                    <artifactId>duceap-boot-starter-web</artifactId>
-                    <!-- 移除嵌入式tomcat插件 -->
-                    <exclusions>
-                        <exclusion>
-                            <groupId>org.springframework.boot</groupId>
-                            <artifactId>spring-boot-starter-tomcat</artifactId>
-                        </exclusion>
-                    </exclusions>
-                </dependency>
-            </dependencies>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-war-plugin</artifactId>
-                        <version>2.1.1</version>
-                        <configuration>
-                            <failOnMissingWebXml>false</failOnMissingWebXml>
-                            <!--排除licenseignore包,用来禁用许可开关,防止生产环境通过关闭开关,绕过许可-->
-                           <!-- <packagingExcludes>WEB-INF/lib/duceap-support-licenseignore*.jar</packagingExcludes>-->
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
         <profile>
             <id>jar</id>
             <activation>
@@ -235,7 +200,7 @@
                                 </goals>
                                 <configuration>
                                     <!--排除licenseignore包,用来禁用许可开关,防止生产环境通过关闭开关,绕过许可-->
-                                   <!-- <excludeArtifactIds>duceap-support-licenseignore</excludeArtifactIds>-->
+                                    <excludeArtifactIds>duceap-support-licenseignore</excludeArtifactIds>
                                     <excludeScope>provided</excludeScope>
                                     <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                     <!--取消依赖包的时间戳-->

+ 0 - 22
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/ConsumerTomcatApplication.java

@@ -1,22 +0,0 @@
-package com.dragoninfo.dcuc.app;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-
-/**
- * @author huangzqa
- * @date 2021/4/4
- **/
-@SpringBootApplication(scanBasePackages = {"com.dragonsoft", "com.dragoninfo"})
-public class ConsumerTomcatApplication extends SpringBootServletInitializer {
-    @Override
-    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
-        return builder.sources(ConsumerTomcatApplication.class);
-    }
-
-    public static void main(String[] args) {
-        SpringApplication.run(ConsumerTomcatApplication.class, args);
-    }
-}

+ 0 - 64
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/NacosPortConfig.java

@@ -1,64 +0,0 @@
-package com.dragoninfo.dcuc.app;
-
-import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
-import com.dragonsoft.duceap.commons.util.string.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.Query;
-import java.lang.management.ManagementFactory;
-import java.util.Set;
-
-@Component
-public class NacosPortConfig implements ApplicationRunner {
-    private static final Logger logger = LoggerFactory.getLogger(NacosPortConfig.class);
-    @Autowired
-    private NacosAutoServiceRegistration registration;
-    @Value("${spring.application.name}")
-    private String appName;
-    @Value("${server.port}")
-    private int port;
-    @Override
-    public void run(ApplicationArguments args) throws Exception {
-        int port = this.getTomcatPort();
-        if (registration != null) {
-            registration.setPort(port);
-            registration.start();
-        }
-    }
-    /**
-     * 获取容器端口号
-     *
-     * @return
-     * @throws Exception 容器端口号未获取到
-     */
-    public int getTomcatPort() throws Exception {
-        String port = this.getTomcatPortValue();
-        if (!StringUtils.isEmpty(port)) {
-            return Integer.valueOf(port);
-        }
-        return this.port;
-    }
-    /**
-     * 获取容器端口号(解决使用外部容器部署,nacos无法注册问题)
-     *
-     * @return port
-     */
-    private String getTomcatPortValue() throws Exception {
-        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
-        Set<ObjectName> objectNames = beanServer.queryNames
-                (new ObjectName("*:type=Connector,*"),
-                        Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
-        for (ObjectName objectName : objectNames) {
-            return objectName.getKeyProperty("port");
-        }
-        return "";
-    }
-}

+ 30 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IDataCatalogBusiness.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.app.business;
+
+import java.lang.reflect.Type;
+import java.util.Map;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface IDataCatalogBusiness {
+
+    /**
+     * 同步表和字段
+     */
+    void syncTableAndColumn();
+
+    /**
+     * 根据类型获取数据类别
+     *
+     * @param paramMap 请求参数
+     * @param type     类型
+     * @param <T>      泛型
+     * @return 查询到的数据
+     */
+    <T> T getDataResource(Map<String,Object> paramMap, Type type);
+}

+ 1 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java

@@ -98,6 +98,6 @@ public interface IResourceBusiness {
      */
     boolean cancelService(String serviceCode);
 
-    <T> T getDataResource(Map paramMap, Type type);
+
 
 }

+ 208 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/DataCatalogBusinessImpl.java

@@ -0,0 +1,208 @@
+package com.dragoninfo.dcuc.app.business.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.util.PageUtil;
+import com.alibaba.fastjson.JSON;
+import com.dragoninfo.dcuc.app.business.IDataCatalogBusiness;
+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.dragoninfo.dcuc.common.http.HttpUtil;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.commons.util.UUIDUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import com.google.common.reflect.TypeToken;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+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.lang.reflect.Type;
+import java.net.URI;
+import java.util.*;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Slf4j
+@Component
+public class DataCatalogBusinessImpl implements IDataCatalogBusiness {
+
+    @Autowired
+    private DcucResourceConfig dataResourceConfig;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IAppDataResourceInfoService appDataResourceInfoService;
+
+    @Autowired
+    private IAppDataItemInfoService appDataItemInfoService;
+    /**
+     * 数据类别查询接口
+     */
+    public static final String RESOURCE_TYPE = "/resource/catalog-api/resource-type";
+
+    /**
+     * 资源列表查询
+     */
+    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;
+        CopyOptions ignoreNullCopyOptions = CopyOptions.create().setIgnoreNullValue(true);
+
+        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> addResourceInfoList = new ArrayList<>();
+                List<AppDataResourceInfo> updateResourceInfoList = new ArrayList<>();
+
+                List<AppDataItemInfo> addDataItemInfoList = new ArrayList<>();
+                List<AppDataItemInfo> updateDataItemInfoList = new ArrayList<>();
+
+                for (DataResourceInfoDTO dataResourceInfoDTO : dataList) {
+                    String resourceCode = dataResourceInfoDTO.getResourceCode();
+
+                    AppDataResourceInfo appDataResourceInfo = appDataResourceInfoService.findByResourceCode(resourceCode);
+                    if (appDataResourceInfo == null) {
+                        appDataResourceInfo = dataResourceInfoDTO.parseToAppDataResourceInfo();
+                        String uuid = UUIDUtils.getUUID();
+                        appDataResourceInfo.setId(uuid);
+                        appDataResourceInfo.setDeleted(BooleanEnum.FALSE.value);
+                        addResourceInfoList.add(appDataResourceInfo);
+                    } else {
+                        AppDataResourceInfo newAppDataResourceInfo = dataResourceInfoDTO.parseToAppDataResourceInfo();
+                        BeanUtil.copyProperties(newAppDataResourceInfo, appDataResourceInfo, ignoreNullCopyOptions);
+                        updateResourceInfoList.add(appDataResourceInfo);
+                    }
+
+
+                    List<DataResourceItemIntoDTO> dataItems = dataResourceInfoDTO.getDataItems();
+                    for (DataResourceItemIntoDTO dataItem : dataItems) {
+                        String id = appDataResourceInfo.getId();
+                        String dataItemNo = dataItem.getDataItemNo();
+                        AppDataItemInfo appDataItemInfo = appDataItemInfoService.selectByDataItemNo(dataItemNo);
+                        if (appDataItemInfo == null) {
+                            appDataItemInfo = dataItem.parseToAppDataItemInfo();
+                            appDataItemInfo.setDeleted(BooleanEnum.FALSE.value);
+                            appDataItemInfo.setResourceTableId(id);
+                            addDataItemInfoList.add(appDataItemInfo);
+                        } else {
+                            AppDataItemInfo newAppDataItemInfo = dataItem.parseToAppDataItemInfo();
+                            BeanUtil.copyProperties(newAppDataItemInfo, appDataItemInfo, ignoreNullCopyOptions);
+                            updateDataItemInfoList.add(appDataItemInfo);
+                        }
+
+                    }
+                }
+
+                appDataResourceInfoService.saveAll(addResourceInfoList);
+                appDataResourceInfoService.updateAll(updateResourceInfoList);
+                appDataItemInfoService.saveAll(addDataItemInfoList);
+                appDataItemInfoService.updateAll(updateDataItemInfoList);
+            }
+
+            reqPage++;
+        } while (reqPage <= totalPage);
+    }
+
+    /**
+     * 获取总条数
+     *
+     * @return 总条数
+     */
+    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;
+    }
+
+    /**
+     * 获取分页信息
+     *
+     * @param pageReqDTO 分页请求信息
+     * @return 分页信息
+     */
+    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());
+    }
+
+    /**
+     * 获取资源信息
+     *
+     * @param paramMap 请求参数 请求参数
+     * @param type     类型 类型
+     * @param <T>      泛型
+     * @return 资源信息
+     */
+    @Override
+    public <T> T getDataResource(Map<String, Object> paramMap, Type type) {
+        String url = dataResourceConfig.getDataResource().getDataCatalogUrl() + RESOURCE_TYPE;
+
+        String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), null, null);
+        log.info("getDataResource response:{}", response);
+        BaseResp<String> baseResp = JSON.parseObject(response, new TypeToken<BaseResp<String>>() {
+        }.getType());
+        if (baseResp.isSuccess()) {
+            return JSON.parseObject(baseResp.getResultData(), type);
+        }
+        log.error("调用数据失败:getDataResource type error message:{} ", baseResp.getMessage());
+        return null;
+    }
+
+}

+ 0 - 32
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java

@@ -239,38 +239,6 @@ public class ResourceBusiness implements IResourceBusiness {
         return true;
     }
 
-    @Override
-    public <T> T getDataResource(Map paramMap, Type type) {
-        // 构建header
-        String busSraId = resourceConfig.getBusSraId();
-
-        String busSreIdcard = UserContextUtils.getCurrentUser().getIdcard();
-
-        String busServiceId = resourceConfig.getDataResource().getBusServiceId();
-        String busServiceFunc = resourceConfig.getDataResource().getBusServiceFunc();
-
-        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
-                .busSraId(busSraId)
-                .busServiceId(busServiceId)
-                .busServiceFunc(busServiceFunc)
-                .busSreIdcard(busSreIdcard)
-                .build();
-
-        List<Header> headerList = getHeaders(busSendReqVO);
-        String url = resourceConfig.getResourceUrl();
-        logger.info("getDataResource >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}",
-                url, busSraId, busServiceId, busServiceFunc, busSreIdcard);
-        String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), headerList, null);
-        logger.info("getDataResource response:{}", response);
-        BaseResp<String> baseResp = JSON.parseObject(response, new TypeToken<BaseResp<String>>() {
-        }.getType());
-        if ("000".equals(baseResp.getCode())) {
-            return JSON.parseObject(baseResp.getResultData(), type);
-        }
-        logger.error("调用数据失败:getDataResource >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}",
-                url, busSraId, busServiceId, busServiceFunc, busSreIdcard);
-        return null;
-    }
 
     private String getServiceRemoteDetailByCode(String serviceCode) {
 

+ 6 - 5
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java

@@ -84,7 +84,6 @@ public class DcucResourceConfig {
      */
     private DataResourceConfig dataResource;
 
-
     @Data
     public static class MenuResourceConfig {
 
@@ -165,13 +164,15 @@ public class DcucResourceConfig {
     public static class DataResourceConfig {
 
         /**
-         * 总线请求头参
+         * 数据资源目录路径
          */
-        private String busServiceId;
+        private String dataCatalogUrl;
+
         /**
-         * 总线请求头参数
+         * 请求页码大小
          */
-        private String busServiceFunc;
+        private Integer requestPageSize = 10;
+
     }
 
 

+ 15 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/cons/CommonCons.java

@@ -6,6 +6,10 @@ package com.dragoninfo.dcuc.app.cons;
  */
 public interface CommonCons {
 
+    String ID_SEPARATOR = "|";
+
+    String ID_SEPARATOR_SPLIT = "\\|";
+
     String PATH_SEP = "-";
 
     Integer PATH_LEVEL_FIR = 1;
@@ -16,4 +20,15 @@ public interface CommonCons {
 
     Integer PATH_LEVEL_FOUR = 4;
 
+
+    String LAB_CLA_FIR = "RESOURCE_SJZYBQ1";
+
+    String LAB_CLA_SEC = "RESOURCE_SJZYBQ2";
+
+    String LAB_CLA_THI = "RESOURCE_SJZYBQ3";
+
+    String LAB_CLA_FOUR = "RESOURCE_SJZYBQ4";
+
+    String LAB_CLA_FIV = "RESOURCE_SJZYBQ5";
+
 }

+ 407 - 163
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -1,42 +1,35 @@
 package com.dragoninfo.dcuc.app.facade;
 
+import com.dragoninfo.dcuc.app.business.IDataCatalogBusiness;
+import com.dragoninfo.dcuc.app.cons.CommonCons;
 import com.dragoninfo.dcuc.app.dto.dataresource.ChildResourceClassify;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
-import com.dragoninfo.dcuc.app.enumresources.DataResourceEnum;
-import com.dragoninfo.dcuc.app.service.IDataResourceService;
 import com.dragoninfo.dcuc.app.dto.sub.DataClaAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaAcceptDTO;
-import com.dragoninfo.dcuc.app.entity.sub.DataCla;
-import com.dragoninfo.dcuc.app.entity.sub.DataLevel;
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
-import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
+import com.dragoninfo.dcuc.app.entity.sub.*;
+import com.dragoninfo.dcuc.app.enumresources.AppDataTypeEnum;
+import com.dragoninfo.dcuc.app.enumresources.DataAttrTypeEnum;
+import com.dragoninfo.dcuc.app.enumresources.DataResourceEnum;
 import com.dragoninfo.dcuc.app.enumresources.sub.DataClaTypeEnum;
 import com.dragoninfo.dcuc.app.enumresources.sub.FieldClaTypeEnum;
-import com.dragoninfo.dcuc.app.service.sub.IDataClaService;
-import com.dragoninfo.dcuc.app.service.sub.IDataLevelService;
-import com.dragoninfo.dcuc.app.service.sub.IDataSecService;
-import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
+import com.dragoninfo.dcuc.app.service.IDataResourceService;
+import com.dragoninfo.dcuc.app.service.sub.*;
 import com.dragoninfo.dcuc.app.vo.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
-import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
-import com.dragonsoft.duceap.web.utils.RequestUtils;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.servlet.support.RequestContextUtils;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * Created by lidr on 2021/4/14
@@ -44,10 +37,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @RestController
 @RequestMapping(value = "/dcuc/app/dataResourceFacade")
-public class DataResourceFacade implements IDataResourceFacade
-{
-
-    public static final String ID_SEPARATOR = "|";
+public class DataResourceFacade implements IDataResourceFacade {
 
     @Autowired
     private IDataResourceService dataResourceService;
@@ -64,19 +54,43 @@ public class DataResourceFacade implements IDataResourceFacade
     @Autowired
     private IFieldClaService fieldClaService;
 
+    @Autowired
+    private IAppDataResourceInfoService tabInfoService;
+
+    @Autowired
+    private IAppDataItemInfoService colInfoService;
+
+    @Autowired
+    private IDataCatalogBusiness dataCatalogBusiness;
+
+    @Autowired
+    private IAppColumnRelationService appColumnRelationService;
+
 
     @Override
-    public List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType) {
+    public List<DataResourceClassifyVo> getAllDataResourceTree(String attrType) {
         List<DataResourceClassifyVo> result = Lists.newArrayList();
-
         //列:数据安全级别  字段分类
         //表:数据分级  数据资源分类
-        if ("TABLE".equals(attrType)) {
+        if (DataAttrTypeEnum.DATA_ATTR_TABLE.getValue().equals(attrType)) {
+            // 查询所有的表和列
+            List<AppDataResourceInfo> tabInfos = tabInfoService.getHasClassifyTables();
             result.add(getDataLevelTree());
-            result.add(getDataClassifyTree());
+            result.add(getDataClassifyTree(tabInfos));
+        } else if (DataAttrTypeEnum.DATA_ATTR_COLUMN.getValue().equals(attrType)) {
+            List<AppDataResourceInfo> tabInfos = tabInfoService.getAllTabInfos();
+            List<AppDataItemInfo> colInfos = colInfoService.getHasClassifyColInfos();
+            result.add(getSecurityLevelTree());
+            result.add(getFieldClassifyTree(tabInfos, colInfos));
+            result.add(getColumnRelTree());
         } else {
+            List<AppDataResourceInfo> tabInfos = tabInfoService.getAllTabInfos();
+            List<AppDataItemInfo> colInfos = colInfoService.getHasClassifyColInfos();
+            result.add(getDataLevelTree());
+            result.add(getDataClassifyTree(tabInfos));
             result.add(getSecurityLevelTree());
-            result.add(getFieldClassifyTree());
+            result.add(getFieldClassifyTree(tabInfos, colInfos));
+            result.add(getColumnRelTree());
         }
         return result;
     }
@@ -85,28 +99,40 @@ public class DataResourceFacade implements IDataResourceFacade
     public DataResourceClassifyVo getDataResourceTree(String typeCode) {
         DataResourceClassifyVo result = null;
         DataResourceEnum dataResourceEnum = Enum.valueOf(DataResourceEnum.class, typeCode);
-        switch (dataResourceEnum){
-            case DATA_CLASSIFY:
+        List<AppDataItemInfo> colInfos = null;
+        List<AppDataResourceInfo> tabInfos = null;
+        switch (dataResourceEnum) {
+            case DATA_LEVEL:
                 result = getDataLevelTree();
                 break;
             case COLUMN_CLASSIFY:
-                result = getFieldClassifyTree();
+                tabInfos = tabInfoService.getAllTabInfos();
+                colInfos = colInfoService.getHasClassifyColInfos();
+                result = getFieldClassifyTree(tabInfos, colInfos);
                 break;
-
-            case DATA_SECURITY_LEVEL:
+            case COLUMN_SECURITY_LEVEL:
                 result = getSecurityLevelTree();
                 break;
             case DATA_RESOURCE_CLASSIFY:
-                result = getDataClassifyTree();
+                tabInfos = tabInfoService.getHasClassifyTables();
+                result = getDataClassifyTree(tabInfos);
+                break;
+            case COLUMN_RELATION_CATALOG:
+                result = getColumnRelTree();
+                break;
+            default:
                 break;
-                default:
-                    break;
         }
         return result;
     }
 
     private DataResourceClassifyVo getDataLevelTree() {
-        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_CLASSIFY;
+        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_LEVEL;
+        List<DataLevelVo> dataLevelList = getDataLevelList();
+        return getOneLevelTree(dataResourceEnum, dataLevelList);
+    }
+
+    private DataResourceClassifyVo getOneLevelTree(DataResourceEnum dataResourceEnum, List<DataLevelVo> dataLevelList) {
         DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
                 .id(dataResourceEnum.getCode())
                 .attrType(dataResourceEnum.getAttrType().getValue())
@@ -117,23 +143,25 @@ public class DataResourceFacade implements IDataResourceFacade
                 .id(dataResourceEnum.getCode())
                 .label("全部")
                 .code(dataResourceEnum.getCode())
+                .classifyCode(dataResourceEnum.getCode())
                 .treeNode(true)
                 .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(item.getId())
+                .code(item.getLevelCode())
+                .label(item.getLevelName())
+                .classifyCode(dataResourceEnum.getCode())
+                .treeNode(false)
+                .pId(dataLevelTreeVo.getId())
+                .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());
@@ -141,51 +169,25 @@ public class DataResourceFacade implements IDataResourceFacade
     }
 
     private DataResourceClassifyVo getSecurityLevelTree() {
-        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_SECURITY_LEVEL;
-
-        DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
-                .id(dataResourceEnum.getCode())
-                .attrType(dataResourceEnum.getAttrType().getValue())
-                .label(dataResourceEnum.getLabel())
-                .build();
-
-        DataResourceTreeVo securityLevelTree = DataResourceTreeVo.builder()
-                .id(dataResourceEnum.getCode())
-                .label("全部")
-                .code(dataResourceEnum.getCode())
-                .treeNode(true)
-                .build();
+        DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_SECURITY_LEVEL;
         List<DataLevelVo> securityLevelList = getSecurityLevelList();
-
-        List<DataResourceTreeVo> child = securityLevelList.stream().map(item -> DataResourceTreeVo.builder()
-                .id(Joiner.on(ID_SEPARATOR).join(securityLevelTree.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(securityLevelTree.getId())
-                .innerId(item.getInnerId()).build()).collect(Collectors.toList());
-        securityLevelTree.setChild(child);
-        if(child.size() == 0) {
-            dataResourceClassifyVo.setNodes(new ArrayList<>());
-            dataResourceClassifyVo.setTotal(0);
-        } else {
-            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
-            //设置总数量
-            dataResourceClassifyVo.setTotal(child.size());
-        }
-        return dataResourceClassifyVo;
+        return getOneLevelTree(dataResourceEnum, securityLevelList);
     }
 
-    private DataResourceClassifyVo getDataClassifyTree() {
+    private DataResourceClassifyVo getDataClassifyTree(List<AppDataResourceInfo> tabInfos) {
+        // 将表分类映射到表
+        Map<String, List<AppDataResourceInfo>> tabLabMap = getTabLabGroupMap(tabInfos);
+
         DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_RESOURCE_CLASSIFY;
 
         DataResourceClassifyVo resourceVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
                 .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
 
         DataResourceTreeVo topTreeVo = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
-                .code(dataResourceEnum.getCode()).treeNode(true).build();
+                .code(dataResourceEnum.getCode())
+                .classifyCode(dataResourceEnum.getCode())
+                .treeNode(true)
+                .build();
         List<DataCla> dataClaList = dataClaService.getAllDataCla();
         Map<String, List<DataCla>> levelMap = dataClaList.stream().collect(Collectors.groupingBy(DataCla::getLevel));
         //一级节点
@@ -205,37 +207,126 @@ 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);}});
+            // 拼接表、列、pid
+            int count = combinePidAndTableInfo(topTreeVo, tabLabMap, dataResourceEnum);
+            if (count == 0) {
+                resourceVo.setNodes(new ArrayList<>());
+                resourceVo.setTotal(0);
+            } else {
+                resourceVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                    add(topTreeVo);
+                }});
+            }
+            resourceVo.setTotal(count);
         }
         return resourceVo;
     }
 
+    private Map<String, List<AppDataResourceInfo>> getTabLabGroupMap(List<AppDataResourceInfo> tabInfos) {
+        Map<String, List<AppDataResourceInfo>> group = new HashMap<>();
+        tabInfos.forEach(e -> {
+            // 一级分类
+            String claFir = e.getDataClassifyOneCode();
+            if (StringUtils.isBlank(claFir)) {
+                return;
+            }
+            // 二级分类
+            String claSec = e.getDataClassifyTwoCode();
+            if (StringUtils.isBlank(claSec)) {
+                putInMap(group, e, claFir);
+                return;
+            }
+            // 标签1
+            String labFir = e.getDataLabelOneCode();
+            if (StringUtils.isNotBlank(labFir)) {
+                labFir = CommonCons.LAB_CLA_FIR + CommonCons.ID_SEPARATOR + labFir;
+            }
+            // 标签2
+            String labSec = e.getDataLabelTwoCode();
+            if (StringUtils.isNotBlank(labSec)) {
+                labSec = CommonCons.LAB_CLA_SEC + CommonCons.ID_SEPARATOR + labSec;
+            }
+            // 标签3
+            String labThr = e.getDataLabelThreeCode();
+            if (StringUtils.isNotBlank(labThr)) {
+                labThr = CommonCons.LAB_CLA_THI + CommonCons.ID_SEPARATOR + labThr;
+            }
+            // 标签4
+            String labFour = e.getDataLabelFourCode();
+            if (StringUtils.isNotBlank(labFour)) {
+                labFour = CommonCons.LAB_CLA_FOUR + CommonCons.ID_SEPARATOR + labFour;
+            }
+            // 标签5
+            String labFiv = e.getDataLabelFiveCode();
+            if (StringUtils.isNotBlank(labFiv)) {
+                labFiv = CommonCons.LAB_CLA_FIV + CommonCons.ID_SEPARATOR + labFiv;
+            }
+            List<String> collect = Stream.of(labFir, labSec, labThr, labFour, labFiv).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+            String key = claFir + CommonCons.ID_SEPARATOR + claSec;
+            if (CollectionUtils.isEmpty(collect)) {
+                putInMap(group, e, key);
+                return;
+            }
+            collect.forEach(lab -> {
+                String s = key + CommonCons.ID_SEPARATOR + lab;
+                putInMap(group, e, s);
+            });
+        });
+        return group;
+    }
+
+    private void putInMap(Map<String, List<AppDataResourceInfo>> group, AppDataResourceInfo e, String claFir) {
+        List<AppDataResourceInfo> list = group.get(claFir);
+        if (null == list) {
+            list = new ArrayList<>();
+        }
+        list.add(e);
+        group.put(claFir, list);
+    }
+
     private DataResourceTreeVo convertDataClaToNode(DataCla item, String pid) {
         return DataResourceTreeVo.builder()
                 .id(item.getId())
                 .pId(pid)
-                .dataType(item.getDataType())
                 .label(item.getName())
                 .code(item.getCode())
-                .innerId(item.getId())
+                .classifyCode(DataResourceEnum.DATA_RESOURCE_CLASSIFY.getCode())
                 .build();
     }
 
+    private DataResourceClassifyVo getColumnRelTree() {
+        DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_RELATION_CATALOG;
+        List<DataLevelVo> columnRelationList = getColumnRelationList();
+        return getOneLevelTree(dataResourceEnum, columnRelationList);
+    }
+
+    private List<DataLevelVo> getColumnRelationList() {
+        List<AppColumnRelation> all = appColumnRelationService.findAll();
+        return all.stream()
+                .map(item -> new DataLevelVo(item.getId(), item.getCodeValue(), item.getCodeName(), DataResourceEnum.COLUMN_RELATION_CATALOG.getDataType()))
+                .collect(Collectors.toList());
+    }
+
+    private DataResourceClassifyVo getFieldClassifyTree(List<AppDataResourceInfo> tabInfos, List<AppDataItemInfo> colInfos) {
+        Map<String, AppDataResourceInfo> tableMap = tabInfos
+                .stream()
+                .collect(Collectors.toMap(AppDataResourceInfo::getId, e -> e));
+        Map<String, List<AppDataItemInfo>> colInfosMap = getColumnClaGroupMap(colInfos);
 
-    private DataResourceClassifyVo getFieldClassifyTree() {
         DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_CLASSIFY;
 
         DataResourceClassifyVo resourceVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
                 .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
 
         DataResourceTreeVo topTreeVo = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
-                .code(dataResourceEnum.getCode()).treeNode(true).build();
+                .code(dataResourceEnum.getCode())
+                .classifyCode(dataResourceEnum.getCode())
+                .treeNode(true)
+                .build();
         List<FieldCla> fieldClaList = fieldClaService.getAllFieldCla();
         Map<String, List<FieldCla>> levelMap = fieldClaList.stream().collect(Collectors.groupingBy(FieldCla::getLevel));
         List<DataResourceTreeVo> firNodes = Optional.ofNullable(levelMap.get(FieldClaTypeEnum.FIR.getLevel())).orElse(new ArrayList<>())
@@ -244,30 +335,81 @@ 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.setTotal(getTotalCount(topTreeVo));
+            int count = combinePidTabAndCol(topTreeVo, tableMap, colInfosMap, dataResourceEnum);
+            if (count == 0) {
+                resourceVo.setNodes(new ArrayList<>());
+                resourceVo.setTotal(0);
+            } else {
+                resourceVo.setNodes(new ArrayList<DataResourceTreeVo>() {{
+                    add(topTreeVo);
+                }});
+            }
+            resourceVo.setTotal(count);
         }
         return resourceVo;
     }
 
+    private Map<String, List<AppDataItemInfo>> getColumnClaGroupMap(List<AppDataItemInfo> colInfos) {
+        return colInfos.stream().collect(Collectors.groupingBy(AppDataItemInfo::getColumnClassify));
+    }
+
+    private int combinePidTabAndCol(DataResourceTreeVo treeVo, Map<String, AppDataResourceInfo> tableMap, Map<String, List<AppDataItemInfo>> colInfosMap, DataResourceEnum resourceEnum) {
+        int count = 0;
+        List<DataResourceTreeVo> child = treeVo.getChild();
+        Iterator<DataResourceTreeVo> iterator = child.iterator();
+        while (iterator.hasNext()) {
+            DataResourceTreeVo childVo = iterator.next();
+            childVo.setPId(treeVo.getId());
+            childVo.setId(Joiner.on(CommonCons.ID_SEPARATOR).join(treeVo.getId(), childVo.getCode()));
+            List<DataResourceTreeVo> cc = childVo.getChild();
+            if (CollectionUtils.isNotEmpty(cc)) {
+                childVo.setTreeNode(true);
+                int childCount = combinePidTabAndCol(childVo, tableMap, colInfosMap, resourceEnum);
+                if (childCount == 0) {
+                    iterator.remove();
+                } else {
+                    count += childCount;
+                }
+            } else {
+                // 如果为叶子节点,查找对应的表和列
+                // 如果查找不到表和列则移除
+                List<AppDataItemInfo> dataColInfo = colInfosMap.get(childVo.getCode());
+                if (dataColInfo == null) {
+                    iterator.remove();
+                } else {
+                    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, resourceEnum);
+                    }).flatMap(List::stream).collect(Collectors.toList());
+                    childVo.setTreeNode(true);
+                    childVo.setChild(tableVos);
+                    count += dataColInfo.size();
+                }
+            }
+        }
+        return count;
+    }
+
     private DataResourceTreeVo convertFieldClaToNode(FieldCla item, String pid) {
         return DataResourceTreeVo.builder()
                 .id(item.getId())
                 .pId(pid)
-                .dataType(item.getDataType())
                 .label(item.getName())
+                .classifyCode(DataResourceEnum.COLUMN_CLASSIFY.getCode())
                 .code(item.getCode())
-                .innerId(item.getId())
                 .build();
     }
 
     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);
         });
@@ -284,7 +426,7 @@ public class DataResourceFacade implements IDataResourceFacade
 
     @Override
     public List<DataLevelVo> getSecurityLevelList() {
-        List<DataSec> all = dataSecService.getAll();
+        List<FieldSec> all = dataSecService.getAll();
         return all.stream()
                 .map(item -> new DataLevelVo(item.getId(), item.getSecCode(), item.getSecName(), item.getDataType()))
                 .collect(Collectors.toList());
@@ -310,7 +452,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 +472,7 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             RequestContextHolder.setRequestAttributes(requestAttributes);
             try {
                 List<DataLevelVo> list = getDataLevelListFromRemote();
@@ -344,6 +486,30 @@ public class DataResourceFacade implements IDataResourceFacade
         return ResponseStatus.success();
     }
 
+    @Override
+    public ResponseStatus columnRelationSync() {
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = () -> {
+            RequestContextHolder.setRequestAttributes(requestAttributes);
+            try {
+                List<AppColumnRelationVO> list = getColumnRelationCatalogFromRemote();
+                appColumnRelationService.sync(list);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        return ResponseStatus.success();
+    }
+
     @Override
     public ResponseStatus dataSecSync() {
         //因为子线程中需要调用总线需要用到请求头中的信息
@@ -354,7 +520,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,10 +544,10 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             try {
                 RequestContextHolder.setRequestAttributes(requestAttributes);
-                List<DataResourceTreeVo> nodes = getDataClassifyTreeFromRemote();
+                List<DataResourceSyncTreeVo> nodes = getDataClassifyTreeFromRemote();
                 dataClaService.sync(nodes, null);
             } finally {
                 RequestContextHolder.resetRequestAttributes();
@@ -403,10 +569,10 @@ public class DataResourceFacade implements IDataResourceFacade
         //方法内部有从ThreadLocal获取信息
         //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
         //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
-        Runnable r = ()-> {
+        Runnable r = () -> {
             try {
                 RequestContextHolder.setRequestAttributes(requestAttributes);
-                List<DataResourceTreeVo> nodes = getFieldClassifyTreeFromRemote();
+                List<DataResourceSyncTreeVo> nodes = getFieldClassifyTreeFromRemote();
                 fieldClaService.sync(nodes, null);
             } finally {
                 RequestContextHolder.resetRequestAttributes();
@@ -418,60 +584,66 @@ public class DataResourceFacade implements IDataResourceFacade
         return ResponseStatus.success();
     }
 
+    @Override
+    public ResponseStatus syncTableAndColumn() {
+        dataCatalogBusiness.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());
                 vo.setLevelCode(item.getCode());
-                vo.setInnerId(item.getId());
+                vo.setId(item.getId());
                 return vo;
             }).collect(Collectors.toList());
 
-        } else if(DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
+        } else if (DataResourceEnum.DATA_LEVEL.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());
                 vo.setLevelCode(item.getLevelCode());
-                vo.setInnerId(item.getId());
+                vo.setId(item.getId());
                 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());
                 vo.setLevelCode(item.getCode());
-                vo.setInnerId(item.getId());
+                vo.setId(item.getId());
                 return vo;
             }).collect(Collectors.toList());
 
-        } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
-            List<DataSec> list = dataSecService.getByIds(ids);
-            list.stream().map(item->{
+        } else if (DataResourceEnum.COLUMN_SECURITY_LEVEL.equals(anEnum)) {
+            List<FieldSec> list = dataSecService.getByIds(ids);
+            list.stream().map(item -> {
                 DataLevelVo vo = new DataLevelVo();
                 vo.setTypeCode(item.getDataType());
                 vo.setLevelName(item.getSecName());
                 vo.setLevelCode(item.getSecCode());
-                vo.setInnerId(item.getId());
+                vo.setId(item.getId());
                 return vo;
             }).collect(Collectors.toList());
         }
@@ -480,34 +652,34 @@ 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.setId(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_LEVEL.equals(anEnum)) {
             DataLevel dataLevel = dataLevelService.getById(id);
-            vo.setInnerId(dataLevel.getId());
+            vo.setId(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.setId(dataCla.getId());
             vo.setLevelCode(dataCla.getId());
             vo.setLevelName(dataCla.getName());
             vo.setTypeCode(dataCla.getCode());
-        } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
-            DataSec dataSec = dataSecService.getById(id);
-            vo.setInnerId(dataSec.getId());
+        } else if (DataResourceEnum.COLUMN_SECURITY_LEVEL.equals(anEnum)) {
+            FieldSec dataSec = dataSecService.getById(id);
+            vo.setId(dataSec.getId());
             vo.setLevelCode(dataSec.getSecCode());
             vo.setLevelName(dataSec.getSecName());
             vo.setTypeCode(dataSec.getDataType());
@@ -521,55 +693,51 @@ public class DataResourceFacade implements IDataResourceFacade
      *
      * @return
      */
-    private List<DataResourceTreeVo> getDataClassifyTreeFromRemote() {
+    private List<DataResourceSyncTreeVo> getDataClassifyTreeFromRemote() {
         String id = DataResourceEnum.DATA_RESOURCE_CLASSIFY.getCode();
-        List<DataResourceTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
+        List<DataResourceSyncTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
                 .stream()
                 .map(firstClassify -> {
-                    DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
-                            .id(Joiner.on(ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
+                    DataResourceSyncTreeVo firstTreeVo = DataResourceSyncTreeVo.builder()
+                            .id(Joiner.on(CommonCons.ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
                             .code(firstClassify.getCodeValue())
                             .label(firstClassify.getCodeName())
                             .treeNode(true)
                             .pId(id)
                             .dataType(firstClassify.getTypeCode())
-                            .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
                             .build();
 
                     firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
                             .map(secondClassify -> {
-                                DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
-                                        .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
+                                DataResourceSyncTreeVo secondTreeVo = DataResourceSyncTreeVo.builder()
+                                        .id(Joiner.on(CommonCons.ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
                                         .code(secondClassify.getCodeValue())
                                         .label(secondClassify.getCodeName())
                                         .treeNode(true)
                                         .pId(firstTreeVo.getId())
                                         .dataType(secondClassify.getTypeCode())
-                                        .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
                                         .build();
 
                                 secondTreeVo.setChild(getChildrenTypeList(secondClassify.getChildrenType()).stream()
                                         .map(thirdClassify -> {
-                                            DataResourceTreeVo thirdTreeVo = DataResourceTreeVo.builder()
-                                                    .id(Joiner.on(ID_SEPARATOR).join(secondTreeVo.getId(), thirdClassify.getTypeCode()))
+                                            DataResourceSyncTreeVo thirdTreeVo = DataResourceSyncTreeVo.builder()
+                                                    .id(Joiner.on(CommonCons.ID_SEPARATOR).join(secondTreeVo.getId(), thirdClassify.getTypeCode()))
                                                     .code(thirdClassify.getTypeCode())
                                                     .label(thirdClassify.getTypeName())
                                                     .treeNode(true)
                                                     .pId(secondTreeVo.getId())
                                                     .dataType(thirdClassify.getTypeCode())
-                                                    .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + thirdClassify.getTypeCode() + ID_SEPARATOR + thirdClassify.getTypeCode())
                                                     .build();
 
                                             thirdTreeVo.setChild(thirdClassify.getDataList().stream()
                                                     .map(fourClassify -> {
-                                                        DataResourceTreeVo fourTreeVo = DataResourceTreeVo.builder()
-                                                                .id(Joiner.on(ID_SEPARATOR).join(thirdTreeVo.getId(), fourClassify.getCodeValue()))
+                                                        DataResourceSyncTreeVo fourTreeVo = DataResourceSyncTreeVo.builder()
+                                                                .id(Joiner.on(CommonCons.ID_SEPARATOR).join(thirdTreeVo.getId(), fourClassify.getCodeValue()))
                                                                 .code(fourClassify.getCodeValue())
                                                                 .label(fourClassify.getCodeName())
                                                                 .treeNode(false).child(null)
                                                                 .pId(thirdTreeVo.getId())
                                                                 .dataType(thirdClassify.getTypeCode())
-                                                                .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + fourClassify.getCodeValue() + ID_SEPARATOR + thirdClassify.getTypeCode())
                                                                 .build();
                                                         return fourTreeVo;
                                                     }).collect(Collectors.toList()));
@@ -587,32 +755,30 @@ public class DataResourceFacade implements IDataResourceFacade
      *
      * @return
      */
-    private List<DataResourceTreeVo> getFieldClassifyTreeFromRemote() {
+    private List<DataResourceSyncTreeVo> getFieldClassifyTreeFromRemote() {
         String id = DataResourceEnum.COLUMN_CLASSIFY.getCode();
-        List<DataResourceTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
+        List<DataResourceSyncTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
                 .stream()
                 .map(firstClassify -> {
-                    DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
-                            .id(Joiner.on(ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
+                    DataResourceSyncTreeVo firstTreeVo = DataResourceSyncTreeVo.builder()
+                            .id(Joiner.on(CommonCons.ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
                             .code(firstClassify.getCodeValue())
                             .label(firstClassify.getCodeName())
                             .dataType(firstClassify.getTypeCode())
                             .treeNode(true)
                             .pId(id)
-                            .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
                             .build();
 
                     firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType())
                             .stream()
                             .map(secondClassify -> {
-                                        DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
-                                                .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
+                                DataResourceSyncTreeVo secondTreeVo = DataResourceSyncTreeVo.builder()
+                                                .id(Joiner.on(CommonCons.ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
                                                 .code(secondClassify.getCodeValue())
                                                 .label(secondClassify.getCodeName())
                                                 .treeNode(false)
                                                 .dataType(secondClassify.getTypeCode())
                                                 .pId(firstTreeVo.getId())
-                                                .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
                                                 .build();
                                         return secondTreeVo;
                                     }
@@ -623,41 +789,119 @@ public class DataResourceFacade implements IDataResourceFacade
     }
 
     /**
+     * 拼接表、列、pid
+     *
      * 计算treeVo所有最底层子节点数量,不包含叶节点
+     *
      * @param treeVo
+     * @param tabInfosMap
+     * @param dataResourceEnum
      * @return
      */
-    private int getTotalCount(DataResourceTreeVo treeVo) {
+    private int combinePidAndTableInfo(DataResourceTreeVo treeVo, Map<String, List<AppDataResourceInfo>> tabInfosMap, DataResourceEnum dataResourceEnum) {
         int count = 0;
         List<DataResourceTreeVo> child = treeVo.getChild();
-        for (DataResourceTreeVo childVo : child) {
+        Iterator<DataResourceTreeVo> iterator = child.iterator();
+        while (iterator.hasNext()) {
+            DataResourceTreeVo childVo = iterator.next();
             childVo.setPId(treeVo.getId());
-            childVo.setId(Joiner.on(ID_SEPARATOR).join(treeVo.getId(), childVo.getCode()));
+            childVo.setId(Joiner.on(CommonCons.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 {
-                childVo.setTreeNode(false);
-                count += 1;
+                int childCount = combinePidAndTableInfo(childVo, tabInfosMap, dataResourceEnum);
+                if (childCount == 0) {
+                    iterator.remove();
+                } else {
+                    count += childCount;
+                }
+            } else {
+                // 如果为叶子节点,查找对应的表和列
+                // 为字段分类添加表
+                // 如果查找不到表和列则移除
+                String id = childVo.getId();
+                String classifyCode = DataResourceEnum.DATA_RESOURCE_CLASSIFY.getCode();
+                String replace = id.replace(classifyCode + CommonCons.ID_SEPARATOR, "");
+                List<AppDataResourceInfo> dataTabInfo = tabInfosMap.get(replace);
+                if (dataTabInfo == null) {
+                    iterator.remove();
+                } else {
+                    List<DataResourceTreeVo> tableVos = convertTableToTreeVo(childVo.getId(), dataTabInfo, null, dataResourceEnum);
+                    childVo.setTreeNode(true);
+                    childVo.setChild(tableVos);
+                    count += tableVos.size();
+                }
             }
         }
         return count;
     }
 
+    private List<DataResourceTreeVo> convertTableToTreeVo(String pid, List<AppDataResourceInfo> dataTabInfo, Map<String, List<AppDataItemInfo>> colInfosMap, DataResourceEnum resourceEnum) {
+        return dataTabInfo.stream().map(e -> {
+            DataResourceTreeVo vo = new DataResourceTreeVo();
+            // 因为表可能属于多个字段分类,前端树结构需要唯一id
+            vo.setId(pid + CommonCons.ID_SEPARATOR + e.getId());
+            vo.setPId(pid);
+            vo.setLabel(e.getStandardDataName());
+            vo.setClassifyCode(resourceEnum.getCode());
+            if (null != colInfosMap) {
+                List<AppDataItemInfo> colInfoList = colInfosMap.get(e.getId());
+                if (CollectionUtils.isNotEmpty(colInfoList)) {
+                    List<DataResourceTreeVo> colVos = convertColumnToTreeVo(vo.getId(), colInfoList, resourceEnum);
+                    vo.setChild(colVos);
+                    vo.setTreeNode(true);
+                } else {
+                    vo.setChild(Collections.emptyList());
+                    vo.setTreeNode(false);
+                }
+            } else {
+                vo.setChild(Collections.emptyList());
+                vo.setTreeNode(false);
+            }
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
+    private List<DataResourceTreeVo> convertColumnToTreeVo(String pid, List<AppDataItemInfo> colInfoList, DataResourceEnum resourceEnum) {
+        return colInfoList.stream().map(e -> {
+            DataResourceTreeVo vo = new DataResourceTreeVo();
+            vo.setId(e.getId());
+            vo.setPId(pid);
+            vo.setLabel(e.getStandardDataItemName());
+            vo.setClassifyCode(resourceEnum.getCode());
+            vo.setTreeNode(false);
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
     /**
      * 从数据资源目录获取数据-数据分级
+     *
      * @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<AppColumnRelationVO> getColumnRelationCatalogFromRemote() {
+        return getFirstChildResourceClassifies(dataResourceService.getColumnRelationCatalog())
+                .stream()
+                .map(childResourceClassify -> new AppColumnRelationVO(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName()))
+                .collect(Collectors.toList());
+    }
+
+
     /**
      * 从数据资源目录获取数据-安全级别数据
+     *
      * @return
      */
     private List<DataLevelVo> getSecurityLevelListFromRemote() {
@@ -673,7 +917,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());

+ 183 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppColumnRelationFacade.java

@@ -0,0 +1,183 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import cn.hutool.core.util.StrUtil;
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
+import com.dragoninfo.dcuc.app.service.sub.IAppColumnRelationService;
+import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
+import com.dragoninfo.dcuc.app.vo.AppColumnDetailVo;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationPageVO;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragoninfo.dcuc.app.vo.AppColumnSaveVo;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
+import com.dragonsoft.duceap.core.search.filter.Condition;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author mazq
+ * @date 2022/10/5
+ */
+@RestController
+@RequestMapping(value = "/dcuc/app/appColumnRelationFacaed")
+public class AppColumnRelationFacade implements IAppColumnRelationFacaed {
+
+    @Autowired
+    private IAppColumnRelationService appColumnRelationService;
+
+    @Autowired
+    private IFieldClaService fieldClaService;
+
+    @Override
+    public Page<AppColumnRelationPageVO> pageSearch(SearchDTO searchDTO) {
+        Searchable searchable = Searchable.toSearchable(searchDTO);
+        Pageable pageable = searchable.getPage();
+        searchable.addSort(Sort.Direction.DESC, "createTime");
+        Condition columnRelation = searchable.getSearchFilter("columnRelation", SearchOperator.like);
+        if (columnRelation != null) {
+            searchable.removeSearchFilter("columnRelation", SearchOperator.like);
+            searchable.addSearchFilter("codeName", SearchOperator.like, columnRelation.getValue().toString());
+        }
+        Page<AppColumnRelation> page = appColumnRelationService.pageSearch(searchable);
+        if (page.isEmpty()) {
+            return new PageImpl<>(Collections.emptyList(), pageable, 0L);
+        }
+        List<AppColumnRelation> content = page.getContent();
+        List<AppColumnRelationPageVO> collect = content.stream().map(e -> {
+            AppColumnRelationPageVO vo = new AppColumnRelationPageVO();
+            vo.setId(e.getId());
+            vo.setCodeValue(e.getCodeValue());
+            String codeName = e.getCodeName();
+            String[] split = codeName.split("->");
+            String relationName = split[0].split(StrUtil.UNDERLINE)[1] + "->" + split[1].split(StrUtil.UNDERLINE)[1];
+            vo.setColumnRelation(relationName);
+            return vo;
+        }).collect(Collectors.toList());
+        return new PageImpl<>(collect, pageable, page.getTotalElements());
+    }
+
+    @Override
+    public AppColumnDetailVo detail(String id) {
+        AppColumnRelation relation = appColumnRelationService.getById(id);
+        if (null != relation) {
+            AppColumnDetailVo vo = new AppColumnDetailVo();
+            vo.setId(relation.getId());
+            String codeName = relation.getCodeName();
+            String[] split = codeName.split("->");
+            String oneName = split[0].split(StrUtil.UNDERLINE)[1];
+            String twoName = split[1].split(StrUtil.UNDERLINE)[1];
+            vo.setColumnClaNameOne(oneName);
+            vo.setColumnClaNameTwo(twoName);
+            String oneCode = relation.getColumnOneClassValue();
+            List<FieldCla> oneList = fieldClaService.getByNameLike(oneCode, "2");
+            if (CollectionUtils.isNotEmpty(oneList)) {
+                vo.setColumnClaIdOne(oneList.get(0).getId());
+            }
+            String twoCode = relation.getColumnTwoClassValue();
+            List<FieldCla> twoList = fieldClaService.getByNameLike(twoCode, "2");
+            if (CollectionUtils.isNotEmpty(twoList)) {
+                vo.setColumnClaIdTwo(twoList.get(0).getId());
+            }
+            return vo;
+        }
+        return null;
+    }
+
+    @Override
+    public void deleteById(String id) {
+        appColumnRelationService.deleteById(id);
+    }
+
+    @Override
+    public ResponseStatus relationAdd(AppColumnSaveVo saveVo) {
+        String columnClaIdOne = saveVo.getColumnClaIdOne();
+        String columnClaIdTwo = saveVo.getColumnClaIdTwo();
+        if (columnClaIdOne.equals(columnClaIdTwo)) {
+            return ResponseStatus.fail("不能选择相同的分类");
+        }
+        AppColumnRelation relation = getNewRelation(saveVo);
+        AppColumnRelation exist = appColumnRelationService.getByCode(relation.getCodeValue());
+        if (null != exist) {
+            return ResponseStatus.fail("字段关系已存在");
+        }
+        appColumnRelationService.save(relation);
+        return ResponseStatus.success();
+    }
+
+    @Override
+    public ResponseStatus relationUpdate(AppColumnSaveVo saveVo) {
+        AppColumnRelation relation = getNewRelation(saveVo);
+        String codeValue = relation.getCodeValue();
+        AppColumnRelation oldRelation = appColumnRelationService.getById(saveVo.getId());
+        if (codeValue.equals(oldRelation.getCodeValue())) {
+            return ResponseStatus.fail("字段关系未修改");
+        }
+        AppColumnRelation exist = appColumnRelationService.getByCode(codeValue);
+        if (null != exist) {
+            return ResponseStatus.fail("字段关系已存在");
+        }
+        BeanUtils.copyProperties(relation, oldRelation, "id", "createTime", "createUser");
+        appColumnRelationService.update(oldRelation);
+        return ResponseStatus.success();
+    }
+
+    @Override
+    public List<AppColumnRelationVO> findAllIdAndCode() {
+        List<AppColumnRelation> allIdAndCode = appColumnRelationService.findAllIdAndCode();
+        return allIdAndCode.stream().map(e-> {
+            AppColumnRelationVO vo = new AppColumnRelationVO();
+            vo.setId(e.getId());
+            vo.setCodeName(e.getCodeName());
+            vo.setCodeValue(e.getCodeValue());
+            return vo;
+        }).collect(Collectors.toList());
+    }
+
+    private AppColumnRelation getNewRelation(AppColumnSaveVo saveVo) {
+        String columnIdOne = saveVo.getColumnClaIdOne();
+        String columnIdTwo = saveVo.getColumnClaIdTwo();
+        List<String> list = new ArrayList<>();
+        list.add(columnIdOne);
+        list.add(columnIdTwo);
+        List<FieldCla> secColumnClas = fieldClaService.getByIds(list);
+        List<String> firIds = secColumnClas.stream().map(FieldCla::getFirId).distinct().collect(Collectors.toList());
+        List<FieldCla> firColumnClas = fieldClaService.getByIds(firIds);
+        firColumnClas.addAll(secColumnClas);
+        Map<String, FieldCla> claMap = firColumnClas.stream().collect(Collectors.toMap(FieldCla::getId, e -> e));
+        AppColumnRelation relation = new AppColumnRelation();
+        // 组装成关联关系对象
+        FieldCla oneFieldCla = claMap.get(columnIdOne);
+        FieldCla twoFieldCla = claMap.get(columnIdTwo);
+        String oneName = oneFieldCla.getName();
+        String twoName = twoFieldCla.getName();
+        relation.setColumnOneClassValue(oneName);
+        relation.setColumnTwoClassValue(twoName);
+        FieldCla firOneFieldCla = claMap.get(oneFieldCla.getFirId());
+        FieldCla firTwoFieldCla = claMap.get(twoFieldCla.getFirId());
+        String code = firOneFieldCla.getName() + StrUtil.UNDERLINE + oneName + "->"
+                + firTwoFieldCla.getName() + StrUtil.UNDERLINE + twoName;
+        relation.setCodeName(code);
+        relation.setCodeValue(code);
+        relation.setDeleted(BooleanEnum.FALSE.value);
+        return relation;
+    }
+
+
+}

+ 54 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppDataItemInfoFacade.java

@@ -0,0 +1,54 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import cn.hutool.core.bean.BeanUtil;
+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.vo.AppDataItemInfoRespVO;
+import com.dragoninfo.dcuc.app.vo.AppDataResourceInfoRespVO;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@RestController
+@RequestMapping(value = "/dcuc/app/appDataItemInfoFacade")
+public class AppDataItemInfoFacade implements IAppDataItemInfoFacade {
+
+    @Autowired
+    private IAppDataItemInfoService appDataItemInfoService;
+
+    @Override
+    public List<AppDataItemInfoRespVO> searchList(SearchDTO searchDTO) {
+        List<AppDataItemInfo> dataItemInfoList = appDataItemInfoService.searchList(Searchable.toSearchable(searchDTO));
+        return toRespVOList(dataItemInfoList);
+    }
+
+    @Override
+    public List<AppDataItemInfoRespVO> selectByTableId(String tableId) {
+        List<AppDataItemInfo> dataItemInfoList = appDataItemInfoService.selectByTableId(tableId);
+        return toRespVOList(dataItemInfoList);
+    }
+
+    private List<AppDataItemInfoRespVO> toRespVOList(List<AppDataItemInfo> dataItemInfoList) {
+        List<AppDataItemInfoRespVO> respVOList = new ArrayList<>(dataItemInfoList.size());
+        for (AppDataItemInfo appDataItemInfo : dataItemInfoList) {
+            AppDataItemInfoRespVO respVO = new AppDataItemInfoRespVO();
+            BeanUtil.copyProperties(appDataItemInfo, respVO);
+            respVOList.add(respVO);
+        }
+        return respVOList;
+    }
+}

+ 53 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/AppDataResourceInfoFacade.java

@@ -0,0 +1,53 @@
+package com.dragoninfo.dcuc.app.facade.sub;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
+import com.dragoninfo.dcuc.app.service.sub.IAppDataResourceInfoService;
+import com.dragoninfo.dcuc.app.vo.AppDataResourceInfoRespVO;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@RestController
+@RequestMapping(value = "/dcuc/app/appDataResourceInfoFacade")
+public class AppDataResourceInfoFacade implements IAppDataResourceInfoFacade {
+
+    @Autowired
+    private IAppDataResourceInfoService appDataResourceInfoService;
+
+    @Override
+    public List<AppDataResourceInfoRespVO> searchList(SearchDTO searchDTO) {
+        List<AppDataResourceInfo> resourceInfoList = appDataResourceInfoService.searchList(Searchable.toSearchable(searchDTO));
+        List<AppDataResourceInfoRespVO> respVOList = new ArrayList<>(resourceInfoList.size());
+        for (AppDataResourceInfo appDataResourceInfo : resourceInfoList) {
+            AppDataResourceInfoRespVO appDataResourceInfoRespVO = new AppDataResourceInfoRespVO();
+            BeanUtil.copyProperties(appDataResourceInfo, appDataResourceInfoRespVO);
+            respVOList.add(appDataResourceInfoRespVO);
+        }
+        return respVOList;
+    }
+
+    @Override
+    public AppDataResourceInfoRespVO findByResourceCode(String resourceCode) {
+        AppDataResourceInfo appDataResourceInfo = appDataResourceInfoService.findByResourceCode(resourceCode);
+        if (appDataResourceInfo == null) {
+            return null;
+        }
+        AppDataResourceInfoRespVO appDataResourceInfoRespVO = new AppDataResourceInfoRespVO();
+        BeanUtil.copyProperties(appDataResourceInfo, appDataResourceInfoRespVO);
+        return appDataResourceInfoRespVO;
+    }
+}

+ 8 - 8
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/sub/DataSecFacade.java

@@ -1,7 +1,7 @@
 package com.dragoninfo.dcuc.app.facade.sub;
 
-import com.dragoninfo.dcuc.app.dto.sub.DataSecDTO;
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
+import com.dragoninfo.dcuc.app.dto.sub.FieldSecDTO;
+import com.dragoninfo.dcuc.app.entity.sub.FieldSec;
 import com.dragoninfo.dcuc.app.service.sub.IDataSecService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
@@ -24,15 +24,15 @@ public class DataSecFacade implements IDataSecFacade {
 
 
     @Override
-    public ResponseStatus dataLevelAdd(DataSecDTO dto) {
+    public ResponseStatus dataLevelAdd(FieldSecDTO dto) {
         return dataSecService.dataLevelAdd(dto);
     }
 
 
     @Override
-    public DataSecDTO detail(String id) {
-        DataSec sec = dataSecService.getById(id);
-        DataSecDTO dto = new DataSecDTO();
+    public FieldSecDTO detail(String id) {
+        FieldSec sec = dataSecService.getById(id);
+        FieldSecDTO dto = new FieldSecDTO();
         BeanUtils.copyProperties(sec, dto);
         return dto;
     }
@@ -43,12 +43,12 @@ public class DataSecFacade implements IDataSecFacade {
     }
 
     @Override
-    public DataSecDTO detailByCode(String secCode) {
+    public FieldSecDTO detailByCode(String secCode) {
         return dataSecService.detailByCode(secCode);
     }
 
     @Override
-    public Page<DataSecDTO> pageSearch(SearchDTO searchDTO) {
+    public Page<FieldSecDTO> pageSearch(SearchDTO searchDTO) {
         return dataSecService.pageSearch(searchDTO);
     }
 

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

@@ -3,9 +3,12 @@ package com.dragoninfo.dcuc.app.facade.sub;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaDTO;
 import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
+import com.dragoninfo.dcuc.app.enumresources.DataAuthTypeCodeEnum;
 import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -13,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author mazq
@@ -62,4 +66,16 @@ public class FieldClaFacade implements IFieldClaFacade {
     public Page<FieldClaAcceptDTO> pageSearch(SearchDTO searchDTO) {
         return fieldClaService.pageSearch(searchDTO);
     }
+
+    @Override
+    public List<FieldClaDTO> getSecLevelColumn(SearchDTO searchDTO) {
+        Searchable searchable = Searchable.toSearchable(searchDTO);
+        searchable.addSearchFilter("dataType", SearchOperator.eq, DataAuthTypeCodeEnum.AUTH_DATA_FIELD_SEC.value);
+        List<FieldCla> list = fieldClaService.findList(searchable);
+        return list.stream().map(e -> {
+            FieldClaDTO dto = new FieldClaDTO();
+            BeanUtils.copyProperties(e, dto);
+            return dto;
+        }).collect(Collectors.toList());
+    }
 }

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

@@ -0,0 +1,15 @@
+package com.dragoninfo.dcuc.app.mapper.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragonsoft.duceap.mybaitsplus.core.BaseMybatisMapper;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface AppColumnRelationMapper extends BaseMybatisMapper<AppColumnRelation> {
+}

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

@@ -0,0 +1,16 @@
+package com.dragoninfo.dcuc.app.mapper.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
+import com.dragonsoft.duceap.mybaitsplus.core.BaseMybatisMapper;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface AppDataItemInfoMapper  extends BaseMybatisMapper<AppDataItemInfo> {
+}

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

@@ -0,0 +1,16 @@
+package com.dragoninfo.dcuc.app.mapper.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
+import com.dragonsoft.duceap.mybaitsplus.core.BaseMybatisMapper;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface AppDataResourceInfoMapper extends BaseMybatisMapper<AppDataResourceInfo> {
+}

+ 2 - 2
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/mapper/sub/DataSecMapper.java

@@ -1,11 +1,11 @@
 package com.dragoninfo.dcuc.app.mapper.sub;
 
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
+import com.dragoninfo.dcuc.app.entity.sub.FieldSec;
 import com.dragonsoft.duceap.mybaitsplus.core.BaseMybatisMapper;
 
 /**
  * @author mazq
  * @date 2021/5/25
  */
-public interface DataSecMapper extends BaseMybatisMapper<DataSec> {
+public interface DataSecMapper extends BaseMybatisMapper<FieldSec> {
 }

+ 9 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/IDataResourceService.java

@@ -6,9 +6,11 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Created by lidr on 2021/4/14
+ * @author lidr
+ * @date 2021/4/14
  */
 public interface IDataResourceService {
+
     List<ResourceClassify> getDataLevelList();
 
     List<ResourceClassify> getSecurityLevelList();
@@ -17,5 +19,11 @@ public interface IDataResourceService {
 
     List<ResourceClassify> getFieldClassifyList();
 
+    /**
+     * 获取字段关系数据
+     * @return 数据
+     */
+    List<ResourceClassify>  getColumnRelationCatalog();
+
 
 }

+ 24 - 17
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/DataResourceServiceImpl.java

@@ -1,6 +1,6 @@
 package com.dragoninfo.dcuc.app.service.impl;
 
-import com.dragoninfo.dcuc.app.business.IResourceBusiness;
+import com.dragoninfo.dcuc.app.business.IDataCatalogBusiness;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceType;
 import com.dragoninfo.dcuc.app.service.IDataResourceService;
@@ -18,34 +18,34 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Created by lidr on 2021/4/14
+ * @author lidr
+ * @date 2021/4/14
  */
-@Transactional(rollbackFor = Exception.class)
 @Service
 public class DataResourceServiceImpl implements IDataResourceService {
 
     Logger logger = LoggerFactory.getLogger(DataResourceServiceImpl.class);
 
     @Autowired
-    private IResourceBusiness resourceBusiness;
+    private IDataCatalogBusiness dataCatalogBusiness;
 
     @Override
     public List<ResourceClassify> getDataLevelList() {
-        Map param = getParamMap(ResourceType.builder().typeCode("DATA_LEVEL").build());
-        return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
+        Map<String, Object> param = getParamMap(ResourceType.builder().typeCode("DATA_LEVEL").build());
+        return dataCatalogBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
     @Override
     public List<ResourceClassify> getSecurityLevelList() {
-        Map param = getParamMap(ResourceType.builder().typeCode("DATA_SECURITY_LEVEL").build());
-        return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
+        Map<String, Object> param = getParamMap(ResourceType.builder().typeCode("DATA_SECURITY_LEVEL").build());
+        return dataCatalogBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
     @Override
     public List<ResourceClassify> getDataClassifyList() {
-        Map param = getParamMap(true,
+        Map<String, Object> param = getParamMap(true,
                 ResourceType.builder().typeCode("RESOURCE_SJZZYJFL").build(),
                 ResourceType.builder().typeCode("RESOURCE_SJZZEJFL").build(),
                 ResourceType.builder().typeCode("RESOURCE_SJZYBQ1").build(),
@@ -54,30 +54,37 @@ public class DataResourceServiceImpl implements IDataResourceService {
                 ResourceType.builder().typeCode("RESOURCE_SJZYBQ4").build(),
                 ResourceType.builder().typeCode("RESOURCE_SJZYBQ5").build()
         );
-        return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
+        return dataCatalogBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
     @Override
     public List<ResourceClassify> getFieldClassifyList() {
-        Map param = getParamMap(true,
+        Map<String, Object> param = getParamMap(true,
                 ResourceType.builder().typeCode("LEVEL_1_COLUMN_CLASSIFY").build(),
                 ResourceType.builder().typeCode("LEVEL_2_COLUMN_CLASSIFY").build()
         );
-        return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
+        return dataCatalogBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
-    private Map getParamMap(ResourceType... typeCodes) {
+    @Override
+    public List<ResourceClassify> getColumnRelationCatalog() {
+        Map<String, Object> param = getParamMap(ResourceType.builder().typeCode("COLUMN_RELATION_CATALOG").build());
+        return dataCatalogBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
+        }.getType());
+    }
+
+    private Map<String, Object> getParamMap(ResourceType... typeCodes) {
         return getParamMap(false, typeCodes);
     }
 
-    private Map getParamMap(boolean isBuildTree, ResourceType... typeCodes) {
-        Map paramMap = new HashMap();
-        List<Map> mapList = new ArrayList<>();
+    private Map<String, Object> getParamMap(boolean isBuildTree, ResourceType... typeCodes) {
+        Map<String, Object> paramMap = new HashMap<>();
+        List<Map<String, String>> mapList = new ArrayList<>();
 
         for (ResourceType typeCode : typeCodes) {
-            Map typeMap = new HashMap();
+            Map<String, String> typeMap = new HashMap<>();
 
             typeMap.put("typeCode", typeCode.getTypeCode());
             if (Strings.isNullOrEmpty(typeCode.getParentCode())) {

+ 80 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppColumnRelationService.java

@@ -0,0 +1,80 @@
+package com.dragoninfo.dcuc.app.service.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragoninfo.dcuc.app.vo.DataLevelVo;
+import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface IAppColumnRelationService {
+    /**
+     * 同步数据
+     *
+     * @param list 列表
+     */
+    void sync(List<AppColumnRelationVO> list);
+
+    /**
+     * 获取所有关系
+     *
+     * @return
+     */
+    List<AppColumnRelation> findAll();
+
+    /**
+     * 获取所有关系的id和code
+     *
+     * @return
+     */
+    List<AppColumnRelation> findAllIdAndCode();
+
+    /**
+     * 分页查询
+     *
+     * @param searchable
+     * @return
+     */
+    Page<AppColumnRelation> pageSearch(Searchable searchable);
+
+    /**
+     * 根据id获取详情
+     *
+     * @param id
+     * @return
+     */
+    AppColumnRelation getById(String id);
+
+    /**
+     * 根据id删除关联关系
+     *
+     * @param id
+     */
+    void deleteById(String id);
+
+    AppColumnRelation getByCode(String code);
+
+    /**
+     * 新增
+     *
+     * @param relation
+     */
+    void save(AppColumnRelation relation);
+
+    /**
+     * 修改
+     *
+     * @param oldRelation
+     */
+    void update(AppColumnRelation oldRelation);
+
+}

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

@@ -0,0 +1,74 @@
+package com.dragoninfo.dcuc.app.service.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppDataItemInfo;
+import com.dragoninfo.dcuc.app.vo.AppDataItemInfoRespVO;
+import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface IAppDataItemInfoService {
+
+    /**
+     * 保存所有
+     *
+     * @param appDataItemInfoList 列表
+     */
+    void saveAll(List<AppDataItemInfo> appDataItemInfoList);
+
+    /**
+     * 删除所有
+     */
+    void deleteAll();
+
+    /**
+     * 根据字段ID查询
+     *
+     * @param dataItemNo 数据项标识
+     * @return 字段信息
+     */
+    AppDataItemInfo selectByDataItemNo(String dataItemNo);
+
+    /**
+     * 更新所有
+     *
+     * @param updateDataItemInfoList 集合
+     */
+    void updateAll(List<AppDataItemInfo> updateDataItemInfoList);
+
+    /**
+     * 获取所有列信息
+     * @return
+     */
+    List<AppDataItemInfo> getHasClassifyColInfos();
+
+
+    /**
+     * 搜索查询列表
+     *
+     * @param searchable 搜索条件
+     * @return 集合
+     */
+    List<AppDataItemInfo> searchList(Searchable searchable);
+
+    /**
+     * 根据表ID查询数据项信息
+     *
+     * @param tableId 表ID
+     * @return 数据项信息
+     */
+    List<AppDataItemInfo> selectByTableId(String tableId);
+
+}

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

@@ -0,0 +1,66 @@
+package com.dragoninfo.dcuc.app.service.sub;
+
+import com.dragoninfo.dcuc.app.entity.sub.AppDataResourceInfo;
+import com.dragonsoft.duceap.core.search.Searchable;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+public interface IAppDataResourceInfoService {
+    /**
+     * 保存所有
+     *
+     * @param resourceInfoList 数据资源列表
+     */
+    void saveAll(List<AppDataResourceInfo> resourceInfoList);
+
+    /**
+     * 删除所有
+     */
+    void deleteAll();
+
+    /**
+     * 更新所有
+     *
+     * @param updateResourceInfoList 集合
+     */
+    void updateAll(List<AppDataResourceInfo> updateResourceInfoList);
+
+    /**
+     * 获取所有表信息
+     *
+     * @return
+     */
+    List<AppDataResourceInfo> getAllTabInfos();
+
+    /**
+     * 获取有表分类信息的所有表数据
+     * @return
+     */
+    List<AppDataResourceInfo> getHasClassifyTables();
+
+
+
+    /**
+     * 根据查询条件查询列表
+     *
+     * @param searchable 查询条件
+     * @return 数据资源列表
+     */
+    List<AppDataResourceInfo> searchList(Searchable searchable);
+
+    /**
+     * 根据数据资源标识符查询数据资源
+     *
+     * @param resourceCode 数据资源标识符
+     * @return 数据资源
+     */
+    AppDataResourceInfo findByResourceCode(String resourceCode);
+}

+ 2 - 2
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IDataClaService.java

@@ -3,7 +3,7 @@ package com.dragoninfo.dcuc.app.service.sub;
 import com.dragoninfo.dcuc.app.dto.sub.DataClaAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.sub.DataClaDTO;
 import com.dragoninfo.dcuc.app.entity.sub.DataCla;
-import com.dragoninfo.dcuc.app.vo.DataResourceTreeVo;
+import com.dragoninfo.dcuc.app.vo.DataResourceSyncTreeVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.data.domain.Page;
@@ -103,7 +103,7 @@ public interface IDataClaService {
      * @param nodes
      * @param path
      */
-    void sync(List<DataResourceTreeVo> nodes, String path);
+    void sync(List<DataResourceSyncTreeVo> nodes, String path);
 
     /**
      * 查询所有列表,只查询第四级,拼接前三级内容

+ 11 - 11
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IDataSecService.java

@@ -1,7 +1,7 @@
 package com.dragoninfo.dcuc.app.service.sub;
 
-import com.dragoninfo.dcuc.app.dto.sub.DataSecDTO;
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
+import com.dragoninfo.dcuc.app.dto.sub.FieldSecDTO;
+import com.dragoninfo.dcuc.app.entity.sub.FieldSec;
 import com.dragoninfo.dcuc.app.vo.DataLevelVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
@@ -21,28 +21,28 @@ public interface IDataSecService {
      * @param dto
      * @return
      */
-    ResponseStatus dataLevelAdd(DataSecDTO dto);
+    ResponseStatus dataLevelAdd(FieldSecDTO dto);
 
     /**
      * 更新
      * @param dto
      * @return
      */
-    DataSec update(DataSecDTO dto);
+    FieldSec update(FieldSecDTO dto);
 
     /**
      * 保存
      * @param dto
      * @return
      */
-    DataSec save(DataSecDTO dto);
+    FieldSec save(FieldSecDTO dto);
 
     /**
      * 获取详情
      * @param id
      * @return
      */
-    DataSec getById(String id);
+    FieldSec getById(String id);
 
     /**
      * 根据id删除
@@ -56,14 +56,14 @@ public interface IDataSecService {
      * @param secCode
      * @return
      */
-    DataSecDTO detailByCode(String secCode);
+    FieldSecDTO detailByCode(String secCode);
 
     /**
      * 分页查询数据安全等级
      * @param searchDTO
      * @return
      */
-    Page<DataSecDTO> pageSearch(SearchDTO searchDTO);
+    Page<FieldSecDTO> pageSearch(SearchDTO searchDTO);
 
     /**
      * 安全等级同步数据保存
@@ -76,18 +76,18 @@ public interface IDataSecService {
      * @param codes
      * @return
      */
-    List<DataSec> getByCodes(List<String> codes);
+    List<FieldSec> getByCodes(List<String> codes);
 
     /**
      * 获取所有数据
      * @return
      */
-    List<DataSec> getAll();
+    List<FieldSec> getAll();
 
     /**
      * 批量获取
      * @param ids
      * @return
      */
-    List<DataSec> getByIds(List<String> ids);
+    List<FieldSec> getByIds(List<String> ids);
 }

+ 10 - 2
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IFieldClaService.java

@@ -3,9 +3,10 @@ package com.dragoninfo.dcuc.app.service.sub;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaDTO;
 import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
-import com.dragoninfo.dcuc.app.vo.DataResourceTreeVo;
+import com.dragoninfo.dcuc.app.vo.DataResourceSyncTreeVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
 import org.springframework.data.domain.Page;
 
 import java.util.List;
@@ -90,12 +91,19 @@ public interface IFieldClaService {
      */
     List<FieldCla> getByIds(List<String> ids);
 
+    /**
+     * 批量查询
+     * @param searchable
+     * @return
+     */
+    List<FieldCla> findList(Searchable searchable);
+
     /**
      * 字段分类数据同步
      * @param nodes
      * @param path
      */
-    void sync(List<DataResourceTreeVo> nodes, String path);
+    void sync(List<DataResourceSyncTreeVo> nodes, String path);
 
     /**
      * 两级字段分级所有列表查询

+ 134 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppColumnRelationServiceImpl.java

@@ -0,0 +1,134 @@
+package com.dragoninfo.dcuc.app.service.sub.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
+import com.dragoninfo.dcuc.app.mapper.sub.AppColumnRelationMapper;
+import com.dragoninfo.dcuc.app.service.sub.IAppColumnRelationService;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Service
+public class AppColumnRelationServiceImpl implements IAppColumnRelationService {
+
+    @Autowired
+    private AppColumnRelationMapper appColumnRelationMapper;
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void sync(List<AppColumnRelationVO> list) {
+        for (AppColumnRelationVO appColumnRelationVO : list) {
+
+            String codeValue = appColumnRelationVO.getCodeValue();
+            String codeName = appColumnRelationVO.getCodeName();
+            AppColumnRelation appColumnRelation = getByCode(codeValue);
+            if (appColumnRelation == null) {
+                appColumnRelation = new AppColumnRelation();
+                appColumnRelation.setDeleted(BooleanEnum.FALSE.value);
+                appColumnRelation.setCodeValue(codeValue);
+                appColumnRelation.setCodeName(codeName);
+
+                String columnOneClassValue = getOneCodeVale(codeValue);
+
+                String columnTwoClassValue = getTwoCodeVale(codeValue);
+                appColumnRelation.setColumnOneClassValue(columnOneClassValue);
+                appColumnRelation.setColumnTwoClassValue(columnTwoClassValue);
+                appColumnRelationMapper.insert(appColumnRelation);
+            } else {
+                appColumnRelation.setCodeName(appColumnRelation.getCodeName());
+                appColumnRelationMapper.updateById(appColumnRelation);
+            }
+        }
+
+    }
+
+    @Override
+    public List<AppColumnRelation> findAll() {
+        return appColumnRelationMapper.selectList(null);
+    }
+
+    @Override
+    public List<AppColumnRelation> findAllIdAndCode() {
+        LambdaQueryWrapper<AppColumnRelation> query = Wrappers.lambdaQuery();
+        query.select(AppColumnRelation::getId, AppColumnRelation::getCodeValue);
+        return appColumnRelationMapper.selectList(query);
+    }
+
+
+
+    @Override
+    public Page<AppColumnRelation> pageSearch(Searchable searchable) {
+        return appColumnRelationMapper.pagingBySearchable(searchable);
+    }
+
+    @Override
+    public AppColumnRelation getById(String id) {
+        if (StringUtils.isBlank(id)) {
+            return null;
+        }
+        return appColumnRelationMapper.selectById(id);
+    }
+
+    @Override
+    public void deleteById(String id) {
+        appColumnRelationMapper.deleteById(id);
+    }
+
+    @Override
+    public AppColumnRelation getByCode(String code) {
+        LambdaQueryWrapper<AppColumnRelation> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(AppColumnRelation::getCodeValue, code);
+        return appColumnRelationMapper.selectOne(lambdaQuery);
+    }
+
+    @Override
+    public void save(AppColumnRelation relation) {
+        appColumnRelationMapper.insert(relation);
+    }
+
+    @Override
+    public void update(AppColumnRelation oldRelation) {
+        appColumnRelationMapper.updateById(oldRelation);
+    }
+
+    public String getOneCodeVale(String relationCodeValue) {
+        if (StrUtil.isBlank(relationCodeValue)) {
+            throw new IllegalArgumentException();
+        }
+        String[] split = relationCodeValue.split("->");
+        String onFullInfo = split[0];
+
+        String[] onFullInfoStrings = onFullInfo.split("_");
+        return onFullInfoStrings[1];
+    }
+
+    public String getTwoCodeVale(String relationCodeValue) {
+        if (StrUtil.isBlank(relationCodeValue)) {
+            throw new IllegalArgumentException();
+        }
+        String[] split = relationCodeValue.split("->");
+        String onFullInfo = split[1];
+
+        String[] onFullInfoStrings = onFullInfo.split("_");
+        return onFullInfoStrings[1];
+    }
+
+}

+ 86 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppDataItemInfoServiceImpl.java

@@ -0,0 +1,86 @@
+package com.dragoninfo.dcuc.app.service.sub.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+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>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Service
+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());
+    }
+
+    @Override
+    public AppDataItemInfo selectByDataItemNo(String dataItemNo) {
+        LambdaQueryWrapper<AppDataItemInfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(AppDataItemInfo::getDataItemNo, dataItemNo);
+        return appDataItemInfoMapper.selectOne(lambdaQueryWrapper);
+    }
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void updateAll(List<AppDataItemInfo> updateDataItemInfoList) {
+        for (AppDataItemInfo appDataItemInfo : updateDataItemInfoList) {
+            appDataItemInfoMapper.updateById(appDataItemInfo);
+        }
+    }
+
+    @Override
+    public List<AppDataItemInfo> searchList(Searchable searchable) {
+        searchable.removePageable();
+        return appDataItemInfoMapper.findBySearchable(searchable);
+    }
+
+    @Override
+    public List<AppDataItemInfo> selectByTableId(String tableId) {
+        LambdaQueryWrapper<AppDataItemInfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(AppDataItemInfo::getResourceTableId, tableId);
+        return appDataItemInfoMapper.selectList(lambdaQueryWrapper);
+    }
+
+    @Override
+    public List<AppDataItemInfo> getHasClassifyColInfos() {
+        LambdaQueryWrapper<AppDataItemInfo> query = Wrappers.lambdaQuery();
+        query.select(AppDataItemInfo::getId, AppDataItemInfo::getColumnName, AppDataItemInfo::getResourceTableId,
+                AppDataItemInfo::getColumnClassify, AppDataItemInfo::getDataSecurityLevel,
+                AppDataItemInfo::getStandardDataItemName);
+        query.isNotNull(AppDataItemInfo::getColumnClassify);
+        List<AppDataItemInfo> appDataItemInfos = appDataItemInfoMapper.selectList(query);
+        return appDataItemInfos
+                .stream()
+                .filter(e -> StringUtils.isNotEmpty(e.getColumnClassify()))
+                .collect(Collectors.toList());
+    }
+}

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

@@ -0,0 +1,95 @@
+package com.dragoninfo.dcuc.app.service.sub.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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 com.dragonsoft.duceap.base.entity.search.SearchDTO;
+import com.dragonsoft.duceap.core.search.Searchable;
+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>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/2
+ */
+@Service
+public class AppDataResourceInfoServiceImpl implements IAppDataResourceInfoService {
+
+    @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());
+    }
+
+
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void updateAll(List<AppDataResourceInfo> updateResourceInfoList) {
+        for (AppDataResourceInfo appDataResourceInfo : updateResourceInfoList) {
+            appDataResourceInfoMapper.updateById(appDataResourceInfo);
+        }
+    }
+
+    @Override
+    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::getStandardDataName);
+        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,
+                AppDataResourceInfo::getStandardDataName);
+        query.isNotNull(AppDataResourceInfo::getDataClassification);
+        List<AppDataResourceInfo> appDataResourceInfos = appDataResourceInfoMapper.selectList(query);
+        return appDataResourceInfos.stream()
+                .filter(e -> StringUtils.isNotBlank(e.getDataClassification()))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<AppDataResourceInfo> searchList(Searchable searchable) {
+        searchable.removePageable();
+        return appDataResourceInfoMapper.findBySearchable(searchable);
+    }
+
+    @Override
+    public AppDataResourceInfo findByResourceCode(String resourceCode) {
+        LambdaQueryWrapper<AppDataResourceInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(AppDataResourceInfo::getResourceCode, resourceCode);
+        return appDataResourceInfoMapper.selectOne(queryWrapper);
+    }
+}

+ 7 - 6
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/DataClaServiceImpl.java

@@ -11,6 +11,7 @@ import com.dragoninfo.dcuc.app.entity.sub.DataCla;
 import com.dragoninfo.dcuc.app.enumresources.sub.DataClaTypeEnum;
 import com.dragoninfo.dcuc.app.mapper.sub.DataClaMapper;
 import com.dragoninfo.dcuc.app.service.sub.IDataClaService;
+import com.dragoninfo.dcuc.app.vo.DataResourceSyncTreeVo;
 import com.dragoninfo.dcuc.app.vo.DataResourceTreeVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
@@ -332,11 +333,11 @@ public class DataClaServiceImpl implements IDataClaService {
      * @param path 上级所有id组成的路径 -分隔
      */
     @Override
-    public void sync(List<DataResourceTreeVo> nodes, String path) {
+    public void sync(List<DataResourceSyncTreeVo> nodes, String path) {
         if(CollectionUtils.isEmpty(nodes)) {
             return;
         }
-        for (DataResourceTreeVo node : nodes) {
+        for (DataResourceSyncTreeVo node : nodes) {
             String code = node.getCode();
             DataCla dataCla = getByCodeAndPath(code, path);
             String localPath = path;
@@ -379,7 +380,7 @@ public class DataClaServiceImpl implements IDataClaService {
      * @param node
      * @param dataCla
      */
-    private void updateNode(DataResourceTreeVo node, DataCla dataCla) {
+    private void updateNode(DataResourceSyncTreeVo node, DataCla dataCla) {
         LambdaUpdateWrapper<DataCla> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(DataCla::getName, node.getLabel())
                 .set(DataCla::getUpdateTime, new Date())
@@ -393,7 +394,7 @@ public class DataClaServiceImpl implements IDataClaService {
      * @param path 上级所有id组成的路径 -分隔
      * @param date
      */
-    private void saveNodeAndChild(DataResourceTreeVo node, String path, Date date) {
+    private void saveNodeAndChild(DataResourceSyncTreeVo node, String path, Date date) {
         DataCla dataCla = new DataCla();
         dataCla.setName(node.getLabel());
         dataCla.setCode(node.getCode());
@@ -421,9 +422,9 @@ public class DataClaServiceImpl implements IDataClaService {
         }
         dataClaMapper.insert(dataCla);
         path = path == null? dataCla.getId():path + CommonCons.PATH_SEP + dataCla.getId();
-        List<DataResourceTreeVo> child = node.getChild();
+        List<DataResourceSyncTreeVo> child = node.getChild();
         if(CollectionUtils.isNotEmpty(child)) {
-            for (DataResourceTreeVo childNode : child) {
+            for (DataResourceSyncTreeVo childNode : child) {
                 saveNodeAndChild(childNode, path, date);
             }
         }

+ 33 - 48
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/DataSecServiceImpl.java

@@ -1,39 +1,24 @@
 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.dragoninfo.dcuc.app.entity.sub.DataLevel;
 import com.dragoninfo.dcuc.app.enumresources.DataAuthTypeCodeEnum;
-import com.dragoninfo.dcuc.app.dto.sub.DataSecDTO;
-import com.dragoninfo.dcuc.app.dto.sub.ExcelDataSec;
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
+import com.dragoninfo.dcuc.app.dto.sub.FieldSecDTO;
+import com.dragoninfo.dcuc.app.entity.sub.FieldSec;
 import com.dragoninfo.dcuc.app.mapper.sub.DataSecMapper;
 import com.dragoninfo.dcuc.app.service.sub.IDataSecService;
-import com.dragoninfo.dcuc.app.util.ImportUtil;
 import com.dragoninfo.dcuc.app.vo.DataLevelVo;
-import com.dragoninfo.dcuc.duceap.facade.IDuceapUploadFacade;
-import com.dragoninfo.dcuc.duceap.upload.dto.DocContentDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
-import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.duceap.core.search.Searchable;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.stereotype.Service;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,14 +34,14 @@ public class DataSecServiceImpl implements IDataSecService {
     private DataSecMapper dataSecMapper;
 
     @Override
-    public ResponseStatus dataLevelAdd(DataSecDTO dto) {
+    public ResponseStatus dataLevelAdd(FieldSecDTO dto) {
         String id = dto.getId();
         String code = dto.getSecCode();
         dto.setDataType(DataAuthTypeCodeEnum.AUTH_DATA_SEC.value);
         if(StringUtils.isBlank(code)) {
             return ResponseStatus.fail("代码不能为空");
         }
-        DataSec exist = getByCode(code);
+        FieldSec exist = getByCode(code);
         if(StringUtils.isBlank(id)) {
             if(null != exist) {
                 return ResponseStatus.fail("代码已存在");
@@ -73,8 +58,8 @@ public class DataSecServiceImpl implements IDataSecService {
     }
 
     @Override
-    public DataSec update(DataSecDTO dto) {
-        DataSec dataSec = dataSecMapper.selectById(dto.getId());
+    public FieldSec update(FieldSecDTO dto) {
+        FieldSec dataSec = dataSecMapper.selectById(dto.getId());
         if (null == dataSec) {
             return null;
         }
@@ -85,8 +70,8 @@ public class DataSecServiceImpl implements IDataSecService {
     }
 
     @Override
-    public DataSec save(DataSecDTO dto) {
-        DataSec dataSec = new DataSec();
+    public FieldSec save(FieldSecDTO dto) {
+        FieldSec dataSec = new FieldSec();
         BeanUtils.copyProperties(dto, dataSec);
         dataSec.setCreateTime(new Date());
         dataSec.setDeleted(BooleanEnum.FALSE.value);
@@ -95,7 +80,7 @@ public class DataSecServiceImpl implements IDataSecService {
     }
 
     @Override
-    public DataSec getById(String id) {
+    public FieldSec getById(String id) {
         return dataSecMapper.selectById(id);
     }
 
@@ -105,11 +90,11 @@ public class DataSecServiceImpl implements IDataSecService {
     }
 
     @Override
-    public DataSecDTO detailByCode(String secCode) {
-        LambdaQueryWrapper<DataSec> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select().eq(DataSec::getSecCode, secCode);
-        DataSec dataSec = dataSecMapper.selectOne(queryWrapper);
-        DataSecDTO dto = new DataSecDTO();
+    public FieldSecDTO detailByCode(String secCode) {
+        LambdaQueryWrapper<FieldSec> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select().eq(FieldSec::getSecCode, secCode);
+        FieldSec dataSec = dataSecMapper.selectOne(queryWrapper);
+        FieldSecDTO dto = new FieldSecDTO();
         if (null == dataSec) {
             return dto;
         }
@@ -118,15 +103,15 @@ public class DataSecServiceImpl implements IDataSecService {
     }
 
     @Override
-    public Page<DataSecDTO> pageSearch(SearchDTO searchDTO) {
-        Page<DataSec> dataSecs = dataSecMapper.pagingBySearchable(Searchable.toSearchable(searchDTO));
-        List<DataSec> pageContent = dataSecs.getContent();
-        List<DataSecDTO> collect = pageContent.stream().map(item -> {
-            DataSecDTO dto = new DataSecDTO();
+    public Page<FieldSecDTO> pageSearch(SearchDTO searchDTO) {
+        Page<FieldSec> dataSecs = dataSecMapper.pagingBySearchable(Searchable.toSearchable(searchDTO));
+        List<FieldSec> pageContent = dataSecs.getContent();
+        List<FieldSecDTO> collect = pageContent.stream().map(item -> {
+            FieldSecDTO dto = new FieldSecDTO();
             BeanUtils.copyProperties(item, dto);
             return dto;
         }).collect(Collectors.toList());
-        Page<DataSecDTO> page = new PageImpl<>(collect, dataSecs.getPageable(), dataSecs.getTotalElements());
+        Page<FieldSecDTO> page = new PageImpl<>(collect, dataSecs.getPageable(), dataSecs.getTotalElements());
         return page;
     }
 
@@ -141,7 +126,7 @@ public class DataSecServiceImpl implements IDataSecService {
                 .collect(Collectors.toMap(DataLevelVo::getLevelCode, item -> item, (old, last) -> last));
         List<DataLevelVo> vos = new ArrayList<>(collect.values());
         for (DataLevelVo vo : vos) {
-            DataSec dataSec = new DataSec();
+            FieldSec dataSec = new FieldSec();
             dataSec.setSecCode(vo.getLevelCode());
             dataSec.setSecName(vo.getLevelName());
             dataSec.setDataType(vo.getTypeCode());
@@ -152,29 +137,29 @@ public class DataSecServiceImpl implements IDataSecService {
 
 
     @Override
-    public List<DataSec> getByCodes(List<String> codes) {
-        LambdaQueryWrapper<DataSec> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select().in(DataSec::getSecCode, codes);
+    public List<FieldSec> getByCodes(List<String> codes) {
+        LambdaQueryWrapper<FieldSec> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select().in(FieldSec::getSecCode, codes);
         return dataSecMapper.selectList(queryWrapper);
     }
 
     @Override
-    public List<DataSec> getAll() {
+    public List<FieldSec> getAll() {
         return dataSecMapper.selectList(null);
     }
 
     @Override
-    public List<DataSec> getByIds(List<String> ids) {
+    public List<FieldSec> getByIds(List<String> ids) {
         if(CollectionUtils.isEmpty(ids)) {
             return new ArrayList<>();
         }
-        LambdaQueryWrapper<DataSec> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select().in(DataSec::getId, ids);
+        LambdaQueryWrapper<FieldSec> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select().in(FieldSec::getId, ids);
         return dataSecMapper.selectList(queryWrapper);
     }
 
-    private void saveByCode(DataSec dataSec) {
-        DataSec exist = this.getByCode(dataSec.getSecCode());
+    private void saveByCode(FieldSec dataSec) {
+        FieldSec exist = this.getByCode(dataSec.getSecCode());
         if(null == exist) {
             dataSec.setDeleted(BooleanEnum.FALSE.value);
             dataSec.setCreateTime(new Date());
@@ -187,9 +172,9 @@ public class DataSecServiceImpl implements IDataSecService {
         }
     }
 
-    private DataSec getByCode(String secCode) {
-        LambdaQueryWrapper<DataSec> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select().eq(DataSec::getSecCode, secCode);
+    private FieldSec getByCode(String secCode) {
+        LambdaQueryWrapper<FieldSec> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select().eq(FieldSec::getSecCode, secCode);
         return dataSecMapper.selectOne(queryWrapper);
     }
 }

+ 12 - 8
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/FieldClaServiceImpl.java

@@ -3,7 +3,6 @@ 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.dragoninfo.dcuc.app.cons.CommonCons;
-import com.dragoninfo.dcuc.app.entity.sub.DataSec;
 import com.dragoninfo.dcuc.app.enumresources.DataAuthTypeCodeEnum;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.sub.FieldClaDTO;
@@ -11,7 +10,7 @@ import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
 import com.dragoninfo.dcuc.app.enumresources.sub.FieldClaTypeEnum;
 import com.dragoninfo.dcuc.app.mapper.sub.FieldClaMapper;
 import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
-import com.dragoninfo.dcuc.app.vo.DataResourceTreeVo;
+import com.dragoninfo.dcuc.app.vo.DataResourceSyncTreeVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
@@ -255,11 +254,16 @@ public class FieldClaServiceImpl implements IFieldClaService {
     }
 
     @Override
-    public void sync(List<DataResourceTreeVo> nodes, String path) {
+    public List<FieldCla> findList(Searchable searchable) {
+        return fieldClaMapper.findBySearchable(searchable);
+    }
+
+    @Override
+    public void sync(List<DataResourceSyncTreeVo> nodes, String path) {
         if(CollectionUtils.isEmpty(nodes)) {
             return;
         }
-        for (DataResourceTreeVo node : nodes) {
+        for (DataResourceSyncTreeVo node : nodes) {
             FieldCla fieldCla = getByCodeAndPath(node.getCode(), path);
             String localPath = path;
             if(null == fieldCla) {
@@ -288,7 +292,7 @@ public class FieldClaServiceImpl implements IFieldClaService {
         return fieldClaMapper.selectList(null);
     }
 
-    private void updateNode(DataResourceTreeVo node, FieldCla fieldCla) {
+    private void updateNode(DataResourceSyncTreeVo node, FieldCla fieldCla) {
         LambdaUpdateWrapper<FieldCla> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(FieldCla::getName, node.getLabel())
                 .set(FieldCla::getUpdateTime, new Date())
@@ -302,7 +306,7 @@ public class FieldClaServiceImpl implements IFieldClaService {
      * @param path 上级所有id组成的路径 -分隔
      * @param date
      */
-    private void saveNodeAndChild(DataResourceTreeVo node, String path, Date date) {
+    private void saveNodeAndChild(DataResourceSyncTreeVo node, String path, Date date) {
         FieldCla fieldCla = new FieldCla();
         fieldCla.setName(node.getLabel());
         fieldCla.setCode(node.getCode());
@@ -324,9 +328,9 @@ public class FieldClaServiceImpl implements IFieldClaService {
         }
         fieldClaMapper.insert(fieldCla);
         path = path == null? fieldCla.getId():path + CommonCons.PATH_SEP + fieldCla.getId();
-        List<DataResourceTreeVo> child = node.getChild();
+        List<DataResourceSyncTreeVo> child = node.getChild();
         if(CollectionUtils.isNotEmpty(child)) {
-            for (DataResourceTreeVo childNode : child) {
+            for (DataResourceSyncTreeVo childNode : child) {
                 String localPath = path;
                 saveNodeAndChild(childNode, localPath, date);
             }

+ 2 - 3
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
@@ -37,7 +37,6 @@ dcuc:
         bus-service-id: S-010000000000-0700-00126
         bus-service-func: customQuery
       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

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

@@ -3,7 +3,7 @@ spring:
     username: dcuc
     password: 123
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://10.254.10.31:3306/dcuc_tjdsj_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
+    url: jdbc:mysql://10.254.10.31:3306/dcuc_xjaks?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
     druid:
       filters: stat,sqlaudit
       max-active: 60
@@ -75,7 +75,7 @@ mybatis-plus:
 duceap:
   flyway:
     # 是否执行flyway
-    enabled: false
+    enabled: true
     # 执行flyway路径
     locations: classpath:/config/mysql
   mybatis-plus:

+ 3 - 3
dcuc-app-service/src/main/resources/config/mysql/V4_1_0007__app_del_orgid.sql

@@ -1,7 +1,7 @@
 -- 历史数据处理
-UPDATE t_apply_info a
-    JOIN t_org_info o ON a.org_id = o.id
-SET a.org_code = o.CODE;
+-- UPDATE t_apply_info a
+--     JOIN t_org_info o ON a.org_id = o.id
+-- SET a.org_code = o.CODE;
 
 ALTER TABLE T_APPLY_INFO
     DROP COLUMN ORG_ID;

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

@@ -0,0 +1,104 @@
+DROP TABLE IF EXISTS t_app_column_relation;
+CREATE TABLE t_app_column_relation
+(
+    id                     VARCHAR(32) NOT NULL COMMENT '编号',
+    code_name              VARCHAR(90) NOT NULL COMMENT '表码名称',
+    code_value             VARCHAR(90) NOT NULL COMMENT '表码值',
+    column_one_class_value VARCHAR(90) NOT NULL COMMENT '字段一分类值',
+    column_two_class_value VARCHAR(90) NOT NULL COMMENT '字段二分类值',
+    deleted                VARCHAR(1)  NOT NULL COMMENT '是否删除',
+    create_time            DATETIME    NOT NULL COMMENT '创建时间',
+    update_time            DATETIME COMMENT '更新时间',
+    create_user            VARCHAR(32) COMMENT '创建用户',
+    update_user            VARCHAR(32) COMMENT '更新用户',
+    PRIMARY KEY (id)
+) COMMENT = '字段关系表';
+
+DROP TABLE IF EXISTS t_app_data_item_info;
+CREATE TABLE t_app_data_item_info
+(
+    id                         VARCHAR(32)  NOT NULL COMMENT '编号',
+    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 '字段中文名称',
+    column_classify            VARCHAR(32) COMMENT '字段分类代码',
+    column_classify_name       VARCHAR(90) COMMENT '字段分类名称',
+    data_security_level        VARCHAR(32) COMMENT '数据安全级别代码',
+    data_security_level_name   VARCHAR(90) COMMENT '数据安全级别名称',
+    data_item_no               VARCHAR(32) COMMENT '数据项编号',
+    data_item_code             VARCHAR(90) COMMENT '数据项标识符',
+    data_source_item_type      VARCHAR(32) COMMENT '数据项类型代码',
+    data_source_item_type_name VARCHAR(90) COMMENT '数据项类型名称',
+    data_element_code          VARCHAR(32) COMMENT '数据元内部标识符',
+    standard_data_item_no      VARCHAR(32) COMMENT '数据项集数据项编号',
+    standard_data_item_name    VARCHAR(90) COMMENT '数据项集数据项中文名',
+    standard_data_item_code    VARCHAR(32) COMMENT '数据项集数据项英文名',
+    standard_data_item_type    VARCHAR(32) COMMENT '数据项集数据项数据类型',
+    standard_data_item_length  VARCHAR(90) COMMENT '数据项集数据项数据长度',
+    remark                     VARCHAR(900) COMMENT '备注',
+    invalid_status             VARCHAR(32) COMMENT '是否失效,true/false',
+    column_register_time       DATETIME COMMENT '注册时间,格式:yyyy-MM-dd HH:mm:ss',
+    column_update_time         DATETIME COMMENT '更新时间,格式:yyyy-MM-dd HH:mm:ss',
+    deleted                    VARCHAR(1)   NOT NULL COMMENT '是否删除',
+    create_time                DATETIME     NOT NULL COMMENT '创建时间',
+    update_time                DATETIME COMMENT '更新时间',
+    create_user                VARCHAR(32) COMMENT '创建用户',
+    update_user                VARCHAR(32) COMMENT '更新用户',
+    PRIMARY KEY (id)
+) COMMENT = '数据项(字段)信息';
+
+DROP TABLE IF EXISTS t_app_data_resource_info;
+CREATE TABLE t_app_data_resource_info
+(
+    id                       VARCHAR(32) NOT NULL COMMENT '编号',
+    data_object_id           VARCHAR(32) NOT NULL COMMENT '数据对象ID',
+    resource_code            VARCHAR(90) NOT NULL COMMENT '数据资源标识符',
+    resource_name            VARCHAR(90) NOT NULL COMMENT '资源名称',
+    resource_version         VARCHAR(32) COMMENT '数据资源版本号',
+    resource_description     VARCHAR(900) COMMENT '数据资源描述',
+    table_code               VARCHAR(90) COMMENT '数据对象英文名',
+    table_name               VARCHAR(90) COMMENT '数据对象中文名',
+    catalog_cod              VARCHAR(90) COMMENT '数据资源目录编号',
+    application_code         VARCHAR(32) COMMENT '应用系统编号',
+    application_code_name    VARCHAR(90) COMMENT '应用系统名称',
+    data_source_one_code     VARCHAR(32) COMMENT '一级数据来源编号',
+    data_source_one_name     VARCHAR(90) COMMENT '一级数据来源名称',
+    data_source_two_code     VARCHAR(32) COMMENT '二级数据来源编号',
+    data_source_two_name     VARCHAR(90) COMMENT '二级数据来源名称',
+    data_classification      VARCHAR(32) COMMENT '数据分级代码',
+    data_classification_name VARCHAR(90) COMMENT '数据分级名称',
+    standard_data_code       VARCHAR(32) COMMENT '标准数据项集编码',
+    standard_data_name       VARCHAR(90) COMMENT '标准数据项集名称',
+    data_classify_one_code   VARCHAR(32) COMMENT '数据组织一级分类代码',
+    data_classify_one_name   VARCHAR(90) COMMENT '数据组织一级分类名称',
+    data_classify_two_code   VARCHAR(32) COMMENT '数据组织二级分类代码',
+    data_classify_two_name   VARCHAR(90) COMMENT '数据组织二级分类名称',
+    data_label_one_code      VARCHAR(32) COMMENT '数据标签1代码',
+    data_label_one_name      VARCHAR(90) COMMENT '数据标签1名称',
+    data_label_two_code      VARCHAR(32) COMMENT '数据标签2代码',
+    data_label_two_name      VARCHAR(90) COMMENT '数据标签2名称',
+    data_label_three_code    VARCHAR(32) COMMENT '数据标签3代码',
+    data_label_three_name    VARCHAR(90) COMMENT '数据标签3名称',
+    data_label_four_code     VARCHAR(32) COMMENT '数据标签4代码',
+    data_label_four_name     VARCHAR(90) COMMENT '数据标签4名称',
+    data_label_five_code     VARCHAR(32) COMMENT '数据标签5代码',
+    data_label_five_name     VARCHAR(90) COMMENT '数据标签5名称',
+    resource_service_code    VARCHAR(90) COMMENT '数据资源服务编号',
+    resource_status          VARCHAR(255) COMMENT '资源状态代码',
+    resource_status_name     VARCHAR(32) COMMENT '资源状态名称1启动0停用2注销',
+    resource_register_time   DATETIME COMMENT '注册时间,格式:yyyy-MM-dd HH:mm:ss',
+    resource_update_time     DATETIME COMMENT '更新时间,格式:yyyy-MM-dd HH:mm:ss',
+    authority_dept_code      VARCHAR(255) COMMENT '数据资源事权单位编号',
+    authority_dept_name      VARCHAR(255) COMMENT '数据资源事权单位名称',
+    manage_dept_code         VARCHAR(255) COMMENT '数据资源管理单位编号',
+    manage_dept_name         VARCHAR(255) COMMENT '数据资源管理单位名称',
+    is_access                VARCHAR(1) COMMENT '否开发服务1是0否',
+    deleted                  VARCHAR(1)  NOT NULL COMMENT '是否删除',
+    create_time              DATETIME    NOT NULL COMMENT '创建时间',
+    update_time              DATETIME COMMENT '更新时间',
+    create_user              VARCHAR(32) COMMENT '创建用户',
+    update_user              VARCHAR(32) COMMENT '更新用户',
+    PRIMARY KEY (id)
+) COMMENT = '数据资源(表)信息';
+

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

@@ -0,0 +1,194 @@
+CREATE TABLE t_app_column_relation
+(
+    id VARCHAR2 (32) NOT NULL,
+    code_name VARCHAR2 (90) NOT NULL,
+    code_value VARCHAR2 (90) NOT NULL,
+    column_one_class_value VARCHAR2 (90) NOT NULL,
+    column_two_class_value VARCHAR2 (90) NOT NULL,
+    deleted VARCHAR2 (1) NOT NULL,
+    create_time DATE NOT NULL,
+    update_time DATE,
+    create_user VARCHAR2 (32),
+    update_user VARCHAR2 (32),
+    PRIMARY KEY (id)
+);
+
+COMMENT ON TABLE t_app_column_relation IS '字段关系表';
+COMMENT ON COLUMN t_app_column_relation.id IS '编号';
+COMMENT ON COLUMN t_app_column_relation.code_name IS '表码名称';
+COMMENT ON COLUMN t_app_column_relation.code_value IS '表码值';
+COMMENT ON COLUMN t_app_column_relation.column_one_class_value IS '字段一分类值';
+COMMENT ON COLUMN t_app_column_relation.column_two_class_value IS '字段二分类值';
+COMMENT ON COLUMN t_app_column_relation.deleted IS '是否删除';
+COMMENT ON COLUMN t_app_column_relation.create_time IS '创建时间';
+COMMENT ON COLUMN t_app_column_relation.update_time IS '更新时间';
+COMMENT ON COLUMN t_app_column_relation.create_user IS '创建用户';
+COMMENT ON COLUMN t_app_column_relation.update_user IS '更新用户';
+
+CREATE TABLE t_app_data_item_info
+(
+    id VARCHAR2 (32) 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,
+    column_classify VARCHAR2 (32),
+    column_classify_name VARCHAR2 (90),
+    data_security_level VARCHAR2 (32),
+    data_security_level_name VARCHAR2 (90),
+    data_item_no VARCHAR2 (32),
+    data_item_code VARCHAR2 (90),
+    data_source_item_type VARCHAR2 (32),
+    data_source_item_type_name VARCHAR2 (90),
+    data_element_code VARCHAR2 (32),
+    standard_data_item_no VARCHAR2 (32),
+    standard_data_item_name VARCHAR2 (90),
+    standard_data_item_code VARCHAR2 (32),
+    standard_data_item_type VARCHAR2 (32),
+    standard_data_item_length VARCHAR2 (90),
+    remark VARCHAR2 (900),
+    invalid_status VARCHAR2 (32),
+    column_register_time DATE,
+    column_update_time   DATE,
+    deleted VARCHAR2 (1) NOT NULL,
+    create_time          DATE NOT NULL,
+    update_time          DATE,
+    create_user VARCHAR2 (32),
+    update_user VARCHAR2 (32),
+    PRIMARY KEY (id)
+);
+
+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_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 '字段中文名称';
+COMMENT ON COLUMN t_app_data_item_info.column_classify IS '字段分类代码';
+COMMENT ON COLUMN t_app_data_item_info.column_classify_name IS '字段分类名称';
+COMMENT ON COLUMN t_app_data_item_info.data_security_level IS '数据安全级别代码';
+COMMENT ON COLUMN t_app_data_item_info.data_security_level_name IS '数据安全级别名称';
+COMMENT ON COLUMN t_app_data_item_info.data_item_no IS '数据项编号';
+COMMENT ON COLUMN t_app_data_item_info.data_item_code IS '数据项标识符';
+COMMENT ON COLUMN t_app_data_item_info.data_source_item_type IS '数据项类型代码';
+COMMENT ON COLUMN t_app_data_item_info.data_source_item_type_name IS '数据项类型名称';
+COMMENT ON COLUMN t_app_data_item_info.data_element_code IS '数据元内部标识符';
+COMMENT ON COLUMN t_app_data_item_info.standard_data_item_no IS '数据项集数据项编号';
+COMMENT ON COLUMN t_app_data_item_info.standard_data_item_name IS '数据项集数据项中文名';
+COMMENT ON COLUMN t_app_data_item_info.standard_data_item_code IS '数据项集数据项英文名';
+COMMENT ON COLUMN t_app_data_item_info.standard_data_item_type IS '数据项集数据项数据类型';
+COMMENT ON COLUMN t_app_data_item_info.standard_data_item_length IS '数据项集数据项数据长度';
+COMMENT ON COLUMN t_app_data_item_info.remark IS '备注';
+COMMENT ON COLUMN t_app_data_item_info.invalid_status IS '是否失效,true/false';
+COMMENT ON COLUMN t_app_data_item_info.column_register_time IS '注册时间,格式:yyyy-MM-dd HH:mm:ss';
+COMMENT ON COLUMN t_app_data_item_info.column_update_time IS '更新时间,格式:yyyy-MM-dd HH:mm:ss';
+COMMENT ON COLUMN t_app_data_item_info.deleted IS '是否删除';
+COMMENT ON COLUMN t_app_data_item_info.create_time IS '创建时间';
+COMMENT ON COLUMN t_app_data_item_info.update_time IS '更新时间';
+COMMENT ON COLUMN t_app_data_item_info.create_user IS '创建用户';
+COMMENT ON COLUMN t_app_data_item_info.update_user IS '更新用户';
+
+
+CREATE TABLE t_app_data_resource_info
+(
+    id VARCHAR2 (32) NOT NULL,
+    data_object_id VARCHAR2 (32) NOT NULL,
+    resource_code VARCHAR2 (90) NOT NULL,
+    resource_name VARCHAR2 (90) NOT NULL,
+    resource_version VARCHAR2 (32),
+    resource_description VARCHAR2 (900),
+    table_code VARCHAR2 (90),
+    table_name VARCHAR2 (90),
+    catalog_cod VARCHAR2 (90),
+    application_code VARCHAR2 (32),
+    application_code_name VARCHAR2 (90),
+    data_source_one_code VARCHAR2 (32),
+    data_source_one_name VARCHAR2 (90),
+    data_source_two_code VARCHAR2 (32),
+    data_source_two_name VARCHAR2 (90),
+    data_classification VARCHAR2 (32),
+    data_classification_name VARCHAR2 (90),
+    standard_data_code VARCHAR2 (32),
+    standard_data_name VARCHAR2 (90),
+    data_classify_one_code VARCHAR2 (32),
+    data_classify_one_name VARCHAR2 (90),
+    data_classify_two_code VARCHAR2 (32),
+    data_classify_two_name VARCHAR2 (90),
+    data_label_one_code VARCHAR2 (32),
+    data_label_one_name VARCHAR2 (90),
+    data_label_two_code VARCHAR2 (32),
+    data_label_two_name VARCHAR2 (90),
+    data_label_three_code VARCHAR2 (32),
+    data_label_three_name VARCHAR2 (90),
+    data_label_four_code VARCHAR2 (32),
+    data_label_four_name VARCHAR2 (90),
+    data_label_five_code VARCHAR2 (32),
+    data_label_five_name VARCHAR2 (90),
+    resource_service_code VARCHAR2 (90),
+    resource_status VARCHAR2 (255),
+    resource_status_name VARCHAR2 (32),
+    resource_register_time DATE,
+    resource_update_time   DATE,
+    authority_dept_code VARCHAR2 (255),
+    authority_dept_name VARCHAR2 (255),
+    manage_dept_code VARCHAR2 (255),
+    manage_dept_name VARCHAR2 (255),
+    is_access VARCHAR2 (1),
+    deleted VARCHAR2 (1) NOT NULL,
+    create_time            DATE NOT NULL,
+    update_time            DATE,
+    create_user VARCHAR2 (32),
+    update_user VARCHAR2 (32),
+    PRIMARY KEY (id)
+);
+
+COMMENT ON TABLE t_app_data_resource_info IS '数据资源(表)信息';
+COMMENT ON COLUMN t_app_data_resource_info.id IS '编号';
+COMMENT ON COLUMN t_app_data_resource_info.data_object_id IS '数据对象ID';
+COMMENT ON COLUMN t_app_data_resource_info.resource_code IS '数据资源标识符';
+COMMENT ON COLUMN t_app_data_resource_info.resource_name IS '资源名称';
+COMMENT ON COLUMN t_app_data_resource_info.resource_version IS '数据资源版本号';
+COMMENT ON COLUMN t_app_data_resource_info.resource_description IS '数据资源描述';
+COMMENT ON COLUMN t_app_data_resource_info.table_code IS '数据对象英文名';
+COMMENT ON COLUMN t_app_data_resource_info.table_name IS '数据对象中文名';
+COMMENT ON COLUMN t_app_data_resource_info.catalog_cod IS '数据资源目录编号';
+COMMENT ON COLUMN t_app_data_resource_info.application_code IS '应用系统编号';
+COMMENT ON COLUMN t_app_data_resource_info.application_code_name IS '应用系统名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_source_one_code IS '一级数据来源编号';
+COMMENT ON COLUMN t_app_data_resource_info.data_source_one_name IS '一级数据来源名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_source_two_code IS '二级数据来源编号';
+COMMENT ON COLUMN t_app_data_resource_info.data_source_two_name IS '二级数据来源名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_classification IS '数据分级代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_classification_name IS '数据分级名称';
+COMMENT ON COLUMN t_app_data_resource_info.standard_data_code IS '标准数据项集编码';
+COMMENT ON COLUMN t_app_data_resource_info.standard_data_name IS '标准数据项集名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_classify_one_code IS '数据组织一级分类代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_classify_one_name IS '数据组织一级分类名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_classify_two_code IS '数据组织二级分类代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_classify_two_name IS '数据组织二级分类名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_one_code IS '数据标签1代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_one_name IS '数据标签1名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_two_code IS '数据标签2代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_two_name IS '数据标签2名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_three_code IS '数据标签3代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_three_name IS '数据标签3名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_four_code IS '数据标签4代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_four_name IS '数据标签4名称';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_five_code IS '数据标签5代码';
+COMMENT ON COLUMN t_app_data_resource_info.data_label_five_name IS '数据标签5名称';
+COMMENT ON COLUMN t_app_data_resource_info.resource_service_code IS '数据资源服务编号';
+COMMENT ON COLUMN t_app_data_resource_info.resource_status IS '资源状态代码';
+COMMENT ON COLUMN t_app_data_resource_info.resource_status_name IS '资源状态名称1启动0停用2注销';
+COMMENT ON COLUMN t_app_data_resource_info.resource_register_time IS '注册时间,格式:yyyy-MM-dd HH:mm:ss';
+COMMENT ON COLUMN t_app_data_resource_info.resource_update_time IS '更新时间,格式:yyyy-MM-dd HH:mm:ss';
+COMMENT ON COLUMN t_app_data_resource_info.authority_dept_code IS '数据资源事权单位编号';
+COMMENT ON COLUMN t_app_data_resource_info.authority_dept_name IS '数据资源事权单位名称';
+COMMENT ON COLUMN t_app_data_resource_info.manage_dept_code IS '数据资源管理单位编号';
+COMMENT ON COLUMN t_app_data_resource_info.manage_dept_name IS '数据资源管理单位名称';
+COMMENT ON COLUMN t_app_data_resource_info.is_access IS '否开发服务1是0否';
+COMMENT ON COLUMN t_app_data_resource_info.deleted IS '是否删除';
+COMMENT ON COLUMN t_app_data_resource_info.create_time IS '创建时间';
+COMMENT ON COLUMN t_app_data_resource_info.update_time IS '更新时间';
+COMMENT ON COLUMN t_app_data_resource_info.create_user IS '创建用户';
+COMMENT ON COLUMN t_app_data_resource_info.update_user IS '更新用户';
+

+ 0 - 13
dcuc-app-service/src/test/java/com/dragoninfo/dcuc/app/business/ResourceBusinessTest.java

@@ -67,19 +67,6 @@ public class ResourceBusinessTest {
         mapList.add(typeMap);
         paramMap.put("resourceTypes", mapList);
 
-        // 构建header
-        String busSraId = resourceConfig.getBusSraId();
-        busSraId = "Y-120000000000-0037";//原有身份没有权限 测试数据
-        String busSreIdcard = resourceConfig.getBusSreIdcard();
-        String busServiceId = resourceConfig.getDataResource().getBusServiceId();
-        String busServiceFunc = resourceConfig.getDataResource().getBusServiceFunc();
-        List<Header> heards = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
-        String url = resourceConfig.getResourceUrl();
-        String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), heards, null);
-
-        Map resultMap = (Map)JSON.parse(response);
-        List<Map> resultData = (List)resultMap.get("resultData");
-        List<Map> resultList = (List)resultData.get(0).get("dataList");
 
     }
 

+ 2 - 2
pom.xml

@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.dragoninfo</groupId>
     <artifactId>dcuc-app</artifactId>
-    <version>2.2.4-tjdsj-SNAPSHOT</version>
+    <version>2.2.4-xjaks-SNAPSHOT</version>
     <packaging>pom</packaging>
     <modules>
         <module>dcuc-app-api</module>
@@ -18,7 +18,7 @@
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
         <!--revisions需写死,用于标识打包的版本号,不可删除-->
-        <revision>2.2.4-tjdsj-SNAPSHOT</revision>
+        <revision>2.2.4-xjaks-SNAPSHOT</revision>
         <duceap.version>2.1.0-SNAPSHOT</duceap.version>
         <oracle.version>11.2.0.1.0</oracle.version>
         <mysql.version>5.1.49</mysql.version>