diff --git a/srt-cloud-api/src/main/java/net/srt/api/ServerNames.java b/srt-cloud-api/src/main/java/net/srt/api/ServerNames.java index 900a829..4891676 100644 --- a/srt-cloud-api/src/main/java/net/srt/api/ServerNames.java +++ b/srt-cloud-api/src/main/java/net/srt/api/ServerNames.java @@ -39,4 +39,6 @@ public interface ServerNames { */ String DATA_GOVERNANCE_NAME = "srt-cloud-data-governance"; String DATA_DATAX = "srt-cloud-datax"; + + String DATA_SERVICE_NAME = "srt-cloud-data-service"; } diff --git a/srt-cloud-api/src/main/java/net/srt/api/module/data/service/DataServiceApi.java b/srt-cloud-api/src/main/java/net/srt/api/module/data/service/DataServiceApi.java new file mode 100644 index 0000000..fa9e002 --- /dev/null +++ b/srt-cloud-api/src/main/java/net/srt/api/module/data/service/DataServiceApi.java @@ -0,0 +1,31 @@ +package net.srt.api.module.data.service; + +import net.srt.api.ServerNames; +import net.srt.api.module.data.service.dto.DataServiceApiAuthDto; +import net.srt.api.module.data.service.dto.DataServiceApiConfigDto; +import net.srt.framework.common.utils.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @ClassName DataAccessApi + * @Author zrx + * @Date 2022/10/26 11:39 + */ +@FeignClient(name = ServerNames.DATA_SERVICE_NAME, contextId = "data-service-api") +public interface DataServiceApi { + /** + * 根据id获取 + */ + @GetMapping(value = "api/api-config/{id}") + Result getById(@PathVariable Long id); + + /** + * 添加授权 + */ + @PostMapping(value = "api/api-auth") + Result auth(@RequestBody DataServiceApiAuthDto apiAuthDto); +} diff --git a/srt-cloud-data-governance/pom.xml b/srt-cloud-data-governance/pom.xml index bc88a35..9365d65 100644 --- a/srt-cloud-data-governance/pom.xml +++ b/srt-cloud-data-governance/pom.xml @@ -12,6 +12,7 @@ jar + net.srt srt-cloud-api diff --git a/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataApiImpl.java b/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataApiImpl.java new file mode 100644 index 0000000..bbf902b --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataApiImpl.java @@ -0,0 +1,25 @@ +package net.srt.api; + +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.governance.DataMetadataApi; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataDto; +import net.srt.convert.MetadataConvert; +import net.srt.framework.common.utils.Result; +import net.srt.service.MetadataService; +import org.springframework.web.bind.annotation.RestController; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.api + * @Author: jpz + * @CreateTime: 2023/12/25 19:38 + */ +@RestController +@RequiredArgsConstructor +public class MetadataApiImpl implements DataMetadataApi { + private final MetadataService metadataService; + @Override + public Result getById(Integer id) { + return Result.ok(MetadataConvert.INSTANCE.convertDto(metadataService.getById(id))); + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataCollectApiImpl.java b/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataCollectApiImpl.java new file mode 100644 index 0000000..a41e9cb --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/api/MetadataCollectApiImpl.java @@ -0,0 +1,139 @@ +package net.srt.api; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.governance.DataMetadataCollectApi; +import net.srt.api.module.data.governance.constant.DbType; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataCollectDto; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataCollectRecordDto; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataDto; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataPropertyDto; +import net.srt.convert.MetadataCollectConvert; +import net.srt.convert.MetadataCollectRecordConvert; +import net.srt.convert.MetadataConvert; +import net.srt.convert.MetadataPropertyConvert; +import net.srt.entity.MetadataCollectEntity; +import net.srt.entity.MetadataCollectRecordEntity; +import net.srt.entity.MetadataEntity; +import net.srt.entity.MetadataPropertyEntity; +import net.srt.framework.common.utils.Result; +import net.srt.service.MetadataCollectRecordService; +import net.srt.service.MetadataCollectService; +import net.srt.service.MetadataPropertyService; +import net.srt.service.MetadataService; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.file.Watchable; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.api + * @Author: jpz + * @CreateTime: 2023/12/25 19:45 + */ +@RestController +@RequiredArgsConstructor +public class MetadataCollectApiImpl implements DataMetadataCollectApi { + private final MetadataService metadataService; + private final MetadataCollectService metadataCollectService; + private final MetadataCollectRecordService metadataCollectRecordService; + private final MetadataPropertyService metadataPropertyService; + @Override + public Result getById(Long id) { + return Result.ok(MetadataCollectConvert.INSTANCE.convertDto(metadataCollectService.getById(id))); + } + + @Override + public DataGovernanceMetadataCollectRecordDto addCollectRecord(DataGovernanceMetadataCollectRecordDto collectRecordDto) { + MetadataCollectRecordEntity convert = MetadataCollectRecordConvert.INSTANCE.convert(collectRecordDto); + metadataCollectRecordService.save(convert); + collectRecordDto.setId(convert.getId()); + return collectRecordDto; + } + + @Override + public void upCollectRecord(DataGovernanceMetadataCollectRecordDto collectRecordDto) { + metadataCollectRecordService.updateById(MetadataCollectRecordConvert.INSTANCE.convert(collectRecordDto)); + } + + @Override + public Result getByParentIdAndDatasourceId(Long parnetId, Long datasourceId) { + LambdaQueryWrapper wrapper= Wrappers.lambdaQuery(); + wrapper.eq(MetadataEntity::getParentId,parnetId).eq(MetadataEntity::getDatasourceId,datasourceId).last("limit 1"); + return Result.ok(MetadataConvert.INSTANCE.convertDto(metadataService.getOne(wrapper))); + } + + @Override + public Result getMetadataById(Long metadataId) { + return Result.ok(MetadataConvert.INSTANCE.convertDto(metadataService.getById(metadataId))); + } + + @Override + public Result getByParentIdAndOtherInfo(Long parnetId, Long datasourceId, String code, Long metamodelId) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(MetadataEntity::getParentId,parnetId).eq(datasourceId!=null,MetadataEntity::getDatasourceId,datasourceId) + .eq(MetadataEntity::getCode,code) + .eq(datasourceId==null,MetadataEntity::getDbType, DbType.MIDDLE_DB.getValue()) + .eq(MetadataEntity::getMetamodelId,metamodelId) + .last("limit 1"); + return Result.ok(MetadataConvert.INSTANCE.convertDto(metadataService.getOne(wrapper))); + } + + @Override + public DataGovernanceMetadataDto addOrUpdateMetadata(DataGovernanceMetadataDto metadataDto) { + MetadataEntity entity=MetadataConvert.INSTANCE.convert(metadataDto); + if (metadataDto.getId()!=null){ + metadataService.updateById(entity); + }else{ + metadataService.save(entity); + } + metadataDto.setId(entity.getId()); + return metadataDto; + } + + @Override + public Result getByPropertyIdAndMetadataId(Long propertyId, Long metadataId) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(MetadataPropertyEntity::getId,propertyId).eq(MetadataPropertyEntity::getMetadataId,metadataId).last("limit 1"); + return Result.ok(MetadataPropertyConvert.INSTANCE.convertDto(metadataPropertyService.getOne(wrapper))); + } + + @Override + public void addOrUpdateMetadataProperty(DataGovernanceMetadataPropertyDto metadataPropertyDto) { + if (metadataPropertyDto.getId()!=null){ + metadataPropertyService .save(MetadataPropertyConvert.INSTANCE.convert(metadataPropertyDto)); + }else { + metadataPropertyService.updateById(MetadataPropertyConvert.INSTANCE.convert(metadataPropertyDto)); + } + } + + @Override + public Result> listParentIdAndDatasourceId(Long parentId, Long datasourceId, Long metamodelId) { + LambdaQueryWrapper wrapper= Wrappers.lambdaQuery(); + wrapper.eq(MetadataEntity::getParentId,parentId).eq(MetadataEntity::getDatasourceId,datasourceId).eq(MetadataEntity::getMetamodelId,metamodelId); + return Result.ok(MetadataConvert.INSTANCE.convertDtoList(metadataService.list(wrapper))); + } + + @Override + public void deleteMetadata(Long id) { + metadataService.delete(id); + + } + + @Override + public Result getByDatasourceId(Long id) { + LambdaQueryWrapper wrapper=Wrappers.lambdaQuery(); + wrapper.eq(MetadataCollectEntity::getDatabaseId,id).last("limit 1"); + return Result.ok(MetadataCollectConvert.INSTANCE.convertDto(metadataCollectService.getOne(wrapper))); + } + + @Override + public Result getMetadataByDatasourceId(Long id) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(MetadataEntity::getDatasourceId,id).last("limit 1"); + return Result.ok(MetadataConvert.INSTANCE.convertDto(metadataService.getOne(wrapper))); + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/api/QualityApiImpl.java b/srt-cloud-data-governance/src/main/java/net/srt/api/QualityApiImpl.java new file mode 100644 index 0000000..94442c8 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/api/QualityApiImpl.java @@ -0,0 +1,79 @@ +package net.srt.api; + +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.governance.DataQualityApi; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityConfigDto; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskColumnDto; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskDto; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskTableDto; +import net.srt.convert.QualityConfigConvert; +import net.srt.convert.QualityTaskColumnConvert; +import net.srt.convert.QualityTaskConvert; +import net.srt.convert.QualityTaskTableConvert; +import net.srt.entity.QualityTaskColumnEntity; +import net.srt.entity.QualityTaskEntity; +import net.srt.entity.QualityTaskTableEntity; +import net.srt.framework.common.utils.Result; +import net.srt.service.QualityConfigService; +import net.srt.service.QualityTaskColumnService; +import net.srt.service.QualityTaskService; +import net.srt.service.QualityTaskTableService; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.api + * @Author: jpz + * @CreateTime: 2023/12/25 21:01 + */ +@RestController +@RequiredArgsConstructor +public class QualityApiImpl implements DataQualityApi { + private final QualityConfigService qualityConfigService; + private final QualityTaskService qualityTaskService; + private final QualityTaskTableService taskTableService; + private final QualityTaskColumnService taskColumnService; + @Override + public Result getById(Long id) { + return Result.ok(QualityConfigConvert.INSTANCE.convertDto(qualityConfigService.getById(id))); + } + + @Override + public Result addQualityTask(DataGovernanceQualityTaskDto qualityTaskDto) { + QualityTaskEntity entity= QualityTaskConvert.INSTANCE.covert(qualityTaskDto); + qualityTaskService.save(entity); + qualityTaskDto.setId(entity.getId()); + return Result.ok(qualityTaskDto); + } + + @Override + public Result updateQualityTask(DataGovernanceQualityTaskDto qualityTaskDto) { + QualityTaskEntity entity=QualityTaskConvert.INSTANCE.covert(qualityTaskDto); + qualityTaskService.updateById(entity); + return Result.ok(); + } + + @Override + public Result addTaskTable(DataGovernanceQualityTaskTableDto qualityTaskTableDto) { + QualityTaskTableEntity entity= QualityTaskTableConvert.INSTANCE.convert(qualityTaskTableDto); + taskTableService.save(entity); + qualityTaskTableDto.setId(entity.getId()); + return Result.ok(qualityTaskTableDto); + } + + @Override + public Result updateQualityTaskTable(DataGovernanceQualityTaskTableDto taskTable) { + QualityTaskTableEntity entity=QualityTaskTableConvert.INSTANCE.convert(taskTable); + taskTableService.updateById(entity); + return Result.ok(); + } + + @Override + public Result addQualityTaskColumns(List columnDtos) { + List columnEntities= QualityTaskColumnConvert.INSTANCE.convertListByDtos(columnDtos); + taskColumnService.saveBatch(columnEntities); + return Result.ok(); + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/constant/StandardDataType.java b/srt-cloud-data-governance/src/main/java/net/srt/constant/StandardDataType.java new file mode 100644 index 0000000..ef65092 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/constant/StandardDataType.java @@ -0,0 +1,79 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package net.srt.constant; + + +/** + * FlinkType + * + * @author zrx + **/ +public enum StandardDataType { + + /** + * 数字 + */ + NUMBER(1, "数字","INT,LONG.NUMBER,BIGINT"), + /** + * 字符串 + */ + STRING(2, "字符串","CHAR,VARCHAR,NVARCHAR,TEXT,LONGTEXT"), + /** + * 日期 + */ + DATE(3, "日期","DATE,DATETIME.TIMESTAMP"), + /** + * 小数 + */ + NUMBER_SACLE(4, "小数","DOUBLE,NUMBER"), + ; + + + private final Integer value; + private final String longValue; + private final String dbDataTypes; + + StandardDataType(Integer value, String longValue,String dbDataTypes) { + this.value = value; + this.longValue = longValue; + this.dbDataTypes = dbDataTypes; + } + + public Integer getValue() { + return value; + } + + public String getLongValue() { + return longValue; + } + + public String getDbDataTypes() { + return dbDataTypes; + } + + public static StandardDataType getByCode(String value) { + for (StandardDataType standardDataType : StandardDataType.values()) { + if (standardDataType.getValue().equals(Integer.parseInt(value))) { + return standardDataType; + } + } + return StandardDataType.STRING; + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java b/srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java index 4d51a62..12bba8d 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java @@ -1,10 +1,12 @@ package net.srt.controller; +import cn.hutool.core.lang.tree.Tree; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import net.srt.framework.common.cache.bean.Neo4jInfo; import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNode; import net.srt.framework.common.utils.TreeNodeVo; import net.srt.service.MetadataService; import net.srt.vo.MetadataVO; @@ -20,6 +22,12 @@ import java.util.List; public class MetadataController { private final MetadataService metadataService; + /** + * 根据父级id获取子节点信息 + * + * @param parentId 父级id + * @return 子节点信息列表 + */ @GetMapping("/list-child") @Operation(summary = "根据父级id获取信息") public Result> listByParentId(@RequestParam Long parentId){ @@ -27,6 +35,11 @@ public class MetadataController { return Result.ok(treeNodeVos); } + + /** + * 获取目录树 + * @return 目录树数据 + */ @GetMapping("/list-floder") @Operation(summary = "获取目录树") public Result> listFloder(){ @@ -34,6 +47,11 @@ public class MetadataController { return Result.ok(treeNodeVos); } + + /** + * 获取库表目录树 + * @return 结果包含库表目录树节点列表 + */ @GetMapping("/list-db") @Operation(summary = "获取库表目录树") public Result> listDb(){ @@ -41,6 +59,8 @@ public class MetadataController { return Result.ok(treeNodeVos); } + + @GetMapping("/list-keyword") @Operation(summary = "模糊查询") public Result> listByKeyword(String keyword){ diff --git a/srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java b/srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java index 1bc216a..94ab7eb 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java @@ -25,7 +25,6 @@ import java.util.List; @AllArgsConstructor public class QualityConfigController { private final QualityConfigService qualityConfigService; - @GetMapping("page") @Operation(summary = "分页") public Result> page(@Valid QualityConfigQuery query){ @@ -75,7 +74,7 @@ public class QualityConfigController { @DeleteMapping @Operation(summary = "删除") - public Result delete(@RequestBody List idList){ + public Result delete(@RequestBody List idList){ qualityConfigService.delete(idList); return Result.ok(); } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java index 9e07e73..f42eba2 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java @@ -1,5 +1,6 @@ package net.srt.convert; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityConfigDto; import net.srt.entity.QualityConfigEntity; import net.srt.vo.QualityConfigVo; import org.mapstruct.Mapper; @@ -22,4 +23,6 @@ public interface QualityConfigConvert { QualityConfigEntity convert(QualityConfigVo vo); List convertList(List list); + + DataGovernanceQualityConfigDto convertDto(QualityConfigEntity entity); } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskColumnConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskColumnConvert.java index 5829068..3f91c05 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskColumnConvert.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskColumnConvert.java @@ -1,5 +1,6 @@ package net.srt.convert; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskColumnDto; import net.srt.entity.QualityTaskColumnEntity; import net.srt.vo.QualityTaskColumnVo; import org.mapstruct.Mapper; @@ -23,4 +24,6 @@ public interface QualityTaskColumnConvert { List convertList(List list); QualityTaskColumnEntity conver(QualityTaskColumnVo vo); + + List convertListByDtos(List dtos); } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskConvert.java index d4ff546..97da29d 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskConvert.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskConvert.java @@ -1,5 +1,6 @@ package net.srt.convert; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskDto; import net.srt.entity.QualityTaskEntity; import net.srt.vo.QualityTaskVo; import org.mapstruct.Mapper; @@ -22,4 +23,6 @@ public interface QualityTaskConvert { List covertList(List list); QualityTaskVo covert(QualityTaskEntity entity); + + QualityTaskEntity covert(DataGovernanceQualityTaskDto dto); } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskTableConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskTableConvert.java index 010b880..14118cc 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskTableConvert.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityTaskTableConvert.java @@ -1,5 +1,6 @@ package net.srt.convert; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityTaskTableDto; import net.srt.entity.QualityTaskTableEntity; import net.srt.vo.QualityTaskTableVo; import org.mapstruct.Mapper; @@ -20,4 +21,6 @@ public interface QualityTaskTableConvert { List convertList(List list); QualityTaskTableVo convert(QualityTaskTableEntity entity); + + QualityTaskTableEntity convert(DataGovernanceQualityTaskTableDto dto); } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/dto/CompareResult.java b/srt-cloud-data-governance/src/main/java/net/srt/dto/CompareResult.java new file mode 100644 index 0000000..b457ecb --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/dto/CompareResult.java @@ -0,0 +1,16 @@ +package net.srt.dto; + +import lombok.Data; + +/** + * @ClassName CompareResult + * @Author zrx + * @Date 2023/5/27 10:16 + */ +@Data +public class CompareResult { + private String property; + private String metadataVal; + private String standardVal; + private boolean standard; +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/dto/StandardCheckDto.java b/srt-cloud-data-governance/src/main/java/net/srt/dto/StandardCheckDto.java new file mode 100644 index 0000000..7e1d434 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/dto/StandardCheckDto.java @@ -0,0 +1,26 @@ +package net.srt.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @ClassName StandardCheckDto + * @Author zrx + * @Date 2023/5/26 11:46 + */ +@Data +public class StandardCheckDto { + //数据属性比对结果 + private List compareResults; + //是否关联了码表 + private Boolean relStandardCode; + //是否有码表数据 + private Boolean hasStandardCode; + private String fillNumSql; + //符合标准数量 + private Object fillNum; + private String notFillNumSql; + //不符合标准数量 + private Object notFullNum; +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java b/srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java index a171909..8a6d3ca 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java @@ -9,6 +9,7 @@ import net.srt.vo.MetadataVO; import java.util.List; public interface MetadataService extends BaseService { + List listByParentId(Long parentId); List listFloder(); @@ -29,4 +30,5 @@ public interface MetadataService extends BaseService { void upNeo4jInfo(Neo4jInfo neo4jInfo); Neo4jInfo getNeo4jInfo(); + } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceImpl.java b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceImpl.java index 9dd5d33..b7b3048 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceImpl.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceImpl.java @@ -39,6 +39,7 @@ public class MetadataServiceImpl extends BaseServiceImpl listByParentId(Long parentId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(MetadataEntity::getParentId,parentId) .orderByAsc(MetadataEntity::getOrderNo); @@ -180,6 +181,8 @@ public class MetadataServiceImpl extends BaseServiceImpl resultList){ if(resultList.stream().noneMatch(item -> metadataEntity.getId().equals(item.getId()))) { resultList.add(metadataEntity); diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java index 785a0c7..ce4c5ba 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java @@ -1,6 +1,5 @@ package net.srt.service.impl; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -22,6 +21,7 @@ import net.srt.service.QualityConfigService; import net.srt.vo.QualityConfigVo; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import srt.cloud.framework.dbswitch.common.util.StringUtil; import java.util.List; @@ -38,97 +38,179 @@ import java.util.stream.Collectors; public class QualityConfigServiceimpl extends BaseServiceImpl implements QualityConfigService { private final QuartzDataGovernanceQualityApi quartzDataGovernanceQualityApi; private final MetadataDao metadataDao; + /** + * 分页查询质量配置 + * + * @param query 质量配置查询对象 + * @return 分页结果 + */ @Override public PageResult page(QualityConfigQuery query) { - IPage page=baseMapper.selectPage(getPage(query),getWrapper(query)); - return new PageResult<>(QualityConfigConvert.INSTANCE.convertList(page.getRecords()),page.getTotal()); + IPage page = baseMapper.selectPage(getPage(query), getWrapper(query)); + return new PageResult<>(QualityConfigConvert.INSTANCE.convertList(page.getRecords()), page.getTotal()); } + + /** + * 根据id获取QualityConfigVo对象 + * + * @param id QualityConfigVo的id值 + * @return QualityConfigVo对象 + */ @Override public QualityConfigVo get(Long id) { + // 根据id从数据库中查询QualityConfigVo对象并转换为QualityConfigVo对象 QualityConfigVo qualityConfigvo= QualityConfigConvert.INSTANCE.convert(baseMapper.selectById(id)); + // 获取QualityConfigVo对象中的metadataIds列表 List metadataIds=qualityConfigvo.getMetadataIds(); + // 创建LambdaQueryWrapper对象用于查询MetadataEntity对象 LambdaQueryWrapper metadataWrapper= Wrappers.lambdaQuery(); + // 在查询中指定MetadataEntity对象的id字段需要在metadataIds列表中 metadataWrapper.in(MetadataEntity::getId,metadataIds); + // 根据metadataWrapper查询MetadataEntity对象列表 List metadataEntities=metadataDao.selectList(metadataWrapper); + // 判断metadataEntities列表是否为空 if (CollectionUtils.isEmpty(metadataEntities)){ + // 若为空,则将提示信息设为"检测字段已删除,请检查数据信息" qualityConfigvo.setMetadataStrs("检测字段已删除,请检查数据信息"); }else { + // 否则,将metadataEntities列表中的path属性按分号连接起来,并将结果设为metadataStrs属性值 qualityConfigvo.setMetadataStrs(metadataEntities.stream().map(MetadataEntity::getPath).collect(Collectors.joining(";"))); } + // 判断qualityConfigvo的ruleId属性是否为ASSOCIATION_CONSISTENCY常量的值 if (BuiltInQualityRule.ASSOCIATION_CONSISTENCY.getId().equals(qualityConfigvo.getRuleId())){ + // 若是,则获取qualityConfigvo的param属性的columnMetaId值 QualityConfigParam param = qualityConfigvo.getParam(); Integer columnMetaId = param.getColumnMetaId(); + // 根据columnMetaId从数据库中查询MetadataEntity对象 MetadataEntity entity = metadataDao.selectById(columnMetaId); + // 判断查询结果是否为空 if (entity!= null){ + // 若不为空,则将entity的path属性设为relMetadataStr属性值 qualityConfigvo.setRelMetadataStr(entity.getPath()); }else { + // 若为空,则将提示信息设为"关联字段已被删除,请检查元数据信息" qualityConfigvo.setMetadataStrs("关联字段已被删除,请检查元数据信息"); } } + // 返回qualityConfigvo对象 return qualityConfigvo; } + @Override public void save(QualityConfigVo vo) { + // 将QualityConfigVo对象转换为QualityConfigEntity对象 QualityConfigEntity entity=QualityConfigConvert.INSTANCE.convert(vo); + + // 设置entity的projectId为当前项目id entity.setProjectId(getProjectId()); + + // 判断ruleId不为UNIQUENESS、LENGTH_CHECK、ASSOCIATION_CONSISTENCY和TIMELINESS时,设置entity的param为null if (!BuiltInQualityRule.UNIQUENESS.getId().equals(entity.getRuleId())&&!BuiltInQualityRule.LENGTH_CHECK.getId().equals(entity.getRuleId())&& !BuiltInQualityRule.ASSOCIATION_CONSISTENCY.getId().equals(entity.getRuleId())&&!BuiltInQualityRule.TIMELINESS.getId().equals(entity.getRuleId())){ entity.setParam(null); } + + // 调用baseMapper的insert方法将entity插入数据库 baseMapper.insert(entity); } + + /** + * 更新质量规则配置 + * + * @param vo 质量规则配置VO对象 + */ @Override public void update(QualityConfigVo vo) { - if (!BuiltInQualityRule.UNIQUENESS.getId().equals(vo.getRuleId())&&!BuiltInQualityRule.LENGTH_CHECK.getId().equals(vo.getRuleId())&&!BuiltInQualityRule.ASSOCIATION_CONSISTENCY.getId().equals(vo.getRuleId())&&!BuiltInQualityRule.TIMELINESS.getId().equals(vo.getRuleId())){ + if (!BuiltInQualityRule.UNIQUENESS.getId().equals(vo.getRuleId()) && + !BuiltInQualityRule.LENGTH_CHECK.getId().equals(vo.getRuleId()) && + !BuiltInQualityRule.ASSOCIATION_CONSISTENCY.getId().equals(vo.getRuleId()) && + !BuiltInQualityRule.TIMELINESS.getId().equals(vo.getRuleId())) { vo.setParam(null); } - QualityConfigEntity entity=QualityConfigConvert.INSTANCE.convert(vo); + QualityConfigEntity entity = QualityConfigConvert.INSTANCE.convert(vo); entity.setProjectId(getProjectId()); updateById(entity); } + @Override public void online(Long id) { - QualityConfigEntity entity=baseMapper.selectById(id); + // 根据id查询实体对象 + QualityConfigEntity entity = baseMapper.selectById(id); + // 设置状态为1 entity.setStatus(1); + // 释放资源 quartzDataGovernanceQualityApi.release(id); + // 更新实体对象 baseMapper.updateById(entity); - } + @Override public void offline(Long id) { - QualityConfigEntity entity=baseMapper.selectById(id); + // 根据id获取QualityConfigEntity对象 + QualityConfigEntity entity = baseMapper.selectById(id); + + // 将entity对象的状态设置为0 entity.setStatus(0); + + // 取消quartzDataGovernanceQualityApi的定时任务 quartzDataGovernanceQualityApi.cancel(id); + + // 更新entity对象的数据 baseMapper.updateById(entity); } + + /** + * 手动运行指定ID的数据治理任务 + * + * @param id 指定的任务ID + */ @Override public void handRun(Long id) { quartzDataGovernanceQualityApi.handRun(id); + System.out.println("==================================="); } + @Override + @Transactional(rollbackFor = Exception.class) public void delete(List idList) { + // 遍历idList列表 for (Long id : idList) { + // 调用quartzDataGovernanceQualityApi的cancel方法取消任务 quartzDataGovernanceQualityApi.cancel(id); } + // 删除指定idList列表的记录 removeByIds(idList); } + + /** + * 根据给定的QualityConfigQuery对象生成LambdaQueryWrapper对象 + * + * @param query QualityConfigQuery对象 + * @return 生成的LambdaQueryWrapper对象 + */ private LambdaQueryWrapper getWrapper(QualityConfigQuery query) { - LambdaQueryWrapper wrapper= Wrappers.lambdaQuery(); - wrapper.eq(query.getCategoryId()!=null,QualityConfigEntity::getCategoryId,query.getCategoryId()) - .like(StringUtil.isNotBlank(query.getName()),QualityConfigEntity::getName,query.getName()) - .eq(query.getStatus()!=null,QualityConfigEntity::getStatus,query.getStatus()) - .eq(query.getTaskType()!=null,QualityConfigEntity::getTaskType,query.getTaskType()) - .orderByDesc(QualityConfigEntity::getId ); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + // 设置类别ID等于给定值的条件 + wrapper.eq(query.getCategoryId() != null, QualityConfigEntity::getCategoryId, query.getCategoryId()) + // 设置名称包含给定值的条件 + .like(StringUtil.isNotBlank(query.getName()), QualityConfigEntity::getName, query.getName()) + // 设置状态等于给定值的条件 + .eq(query.getStatus() != null, QualityConfigEntity::getStatus, query.getStatus()) + // 设置任务类型等于给定值的条件 + .eq(query.getTaskType() != null, QualityConfigEntity::getTaskType, query.getTaskType()) + // 根据质量配置ID降序排序 + .orderByDesc(QualityConfigEntity::getId); return wrapper; } + } diff --git a/srt-cloud-data-governance/src/main/java/net/srt/vo/DatastandardVo.java b/srt-cloud-data-governance/src/main/java/net/srt/vo/DatastandardVo.java index bc4a826..3b14ea0 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/vo/DatastandardVo.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/vo/DatastandardVo.java @@ -18,6 +18,7 @@ import java.util.Date; @Data @Schema(description = "标准管理查询") public class DatastandardVo implements Serializable { + private static final long serialVersionUID = 1L; @TableId("id") private Long id; diff --git a/srt-cloud-data-service/pom.xml b/srt-cloud-data-service/pom.xml index 9f5a8d8..6838154 100644 --- a/srt-cloud-data-service/pom.xml +++ b/srt-cloud-data-service/pom.xml @@ -11,12 +11,6 @@ srt-cloud-data-service - - 8 - 8 - UTF-8 - - net.srt @@ -34,15 +28,24 @@ 2.0.0 - org.springframework.cloud - spring-cloud-starter-bootstrap + net.srt + srt-cloud-dbswitch + 2.0.0 + + jsqlparser + com.github.jsqlparser + spring-boot-starter-logging org.springframework.boot + + org.springframework.cloud + spring-cloud-starter-bootstrap + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery @@ -51,44 +54,14 @@ com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config - - com.github.whvcse - easy-captcha - com.github.xiaoymin knife4j-springdoc-ui - - com.aliyun.oss - aliyun-sdk-oss - - - com.qcloud - cos_api - - - com.qiniu - qiniu-java-sdk - - - com.huaweicloud - esdk-obs-java-bundle - - - io.minio - minio - - - org.apache.ant - ant - 1.9.1 - compile - - + org.codehaus.mojo @@ -126,7 +99,7 @@ ${project.artifactId} - net.srt.SystemApplication + net.net.srt.DataServiceApplication jsw @@ -181,7 +154,7 @@ - net.srt.SystemApplication + net.net.srt.DataServiceApplication ${project.artifactId} @@ -189,24 +162,24 @@ - - maven-assembly-plugin - - - ${project.parent.basedir}/assembly/assembly-win.xml - ${project.parent.basedir}/assembly/assembly-linux.xml - - - - - make-assembly - package - - single - - - - + + + + + + + + + + + + + + + + + +