From d2010502505bee095fa873fc9f9d6dc543bb06ee Mon Sep 17 00:00:00 2001 From: fjj <–1066869486@qq.com> Date: Sun, 24 Dec 2023 22:19:18 +0800 Subject: [PATCH 1/3] fjj7.0 --- .../java/net/srt/GovernanceApplication.java | 1 + .../StandardStopwatchController.java | 70 ++++++++++++++++++ .../srt/convert/StandardStopwatchConvert.java | 25 +++++++ .../net/srt/dao/StandardStopwatchDao.java | 17 +++++ .../srt/entity/StandardStopwatchEntity.java | 37 ++++++++++ .../net/srt/query/StandardStopwatchQuery.java | 21 ++++++ .../srt/service/StandardStopwatchService.java | 25 +++++++ .../impl/StandardStopwatchServiceImpl.java | 67 +++++++++++++++++ .../java/net/srt/vo/StandardStopwatchVo.java | 56 +++++++++++++++ .../mapper/StandardStopwatchMapper.xml | 14 ++++ srt-cloud-data-service/pom.xml | 6 ++ .../controller/DataServiceAppController.java | 55 ++++++++++++-- .../srt/convert/DataServiceAppConvert.java | 10 +-- .../java/net/srt/dao/DataServiceAppDao.java | 6 +- .../srt/entity/DataServiceApiAuthEnitiy.java | 70 ++++++++++++++++++ ...pEntity.java => DataServiceAppEntity.java} | 37 +++++++--- .../srt/service/DataServiceAppService.java | 18 ++++- .../impl/DataServiceAppServiceImpl.java | 72 +++++++++++++------ .../java/net/srt/vo/DataServiceApiAuthVo.java | 70 ++++++++++++++++++ .../resources/mapper/DataServiceAppMapper.xml | 2 +- .../disposition/vo/DataProductionTreeVo.java | 4 +- 21 files changed, 632 insertions(+), 51 deletions(-) create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/controller/StandardStopwatchController.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/convert/StandardStopwatchConvert.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/dao/StandardStopwatchDao.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/entity/StandardStopwatchEntity.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/query/StandardStopwatchQuery.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/StandardStopwatchService.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/impl/StandardStopwatchServiceImpl.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/vo/StandardStopwatchVo.java create mode 100644 srt-cloud-data-governance/src/main/resources/mapper/StandardStopwatchMapper.xml create mode 100644 srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApiAuthEnitiy.java rename srt-cloud-data-service/src/main/java/net/srt/entity/{DataServiceApppEntity.java => DataServiceAppEntity.java} (62%) create mode 100644 srt-cloud-data-service/src/main/java/net/srt/vo/DataServiceApiAuthVo.java diff --git a/srt-cloud-data-governance/src/main/java/net/srt/GovernanceApplication.java b/srt-cloud-data-governance/src/main/java/net/srt/GovernanceApplication.java index 00deed4..65f1dee 100644 --- a/srt-cloud-data-governance/src/main/java/net/srt/GovernanceApplication.java +++ b/srt-cloud-data-governance/src/main/java/net/srt/GovernanceApplication.java @@ -1,5 +1,6 @@ package net.srt; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; diff --git a/srt-cloud-data-governance/src/main/java/net/srt/controller/StandardStopwatchController.java b/srt-cloud-data-governance/src/main/java/net/srt/controller/StandardStopwatchController.java new file mode 100644 index 0000000..8ce3bd2 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/controller/StandardStopwatchController.java @@ -0,0 +1,70 @@ +package net.srt.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import net.srt.convert.StandardStopwatchConvert; +import net.srt.entity.StandardStopwatchEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.Result; +import net.srt.query.StandardStopwatchQuery; +import net.srt.service.StandardStopwatchService; +import net.srt.vo.StandardStopwatchVo; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @ClassName : StandardStopwatchController + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:32 + */ +@RestController +@RequestMapping("/standard-code") +@Tag(name="数据治理-标准码表数据") +@AllArgsConstructor +public class StandardStopwatchController { + private final StandardStopwatchService standardStopwatchService; + + @GetMapping("page") + @Operation(summary = "分页") + public Result> page(@Valid StandardStopwatchQuery query){ + PageResult page = standardStopwatchService.page(query); + + return Result.ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + public Result get(@PathVariable("id") Long id){ + StandardStopwatchEntity entity = standardStopwatchService.getById(id); + + return Result.ok(StandardStopwatchConvert.INSTANCE.convert(entity)); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody StandardStopwatchVo vo){ + standardStopwatchService.save(vo); + + return Result.ok(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody @Valid StandardStopwatchVo vo){ + standardStopwatchService.update(vo); + + return Result.ok(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody List idList){ + standardStopwatchService.delete(idList); + + return Result.ok(); + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/convert/StandardStopwatchConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/StandardStopwatchConvert.java new file mode 100644 index 0000000..367d57e --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/StandardStopwatchConvert.java @@ -0,0 +1,25 @@ +package net.srt.convert; + +import net.srt.entity.StandardStopwatchEntity; +import net.srt.vo.StandardStopwatchVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * @ClassName : StandardStopwatchConvert + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:33 + */ +@Mapper +public interface StandardStopwatchConvert { + StandardStopwatchConvert INSTANCE = Mappers.getMapper(StandardStopwatchConvert.class); + + StandardStopwatchEntity convert(StandardStopwatchVo vo); + + StandardStopwatchVo convert(StandardStopwatchEntity entity); + + List convertList(List list); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/dao/StandardStopwatchDao.java b/srt-cloud-data-governance/src/main/java/net/srt/dao/StandardStopwatchDao.java new file mode 100644 index 0000000..018f5a0 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/dao/StandardStopwatchDao.java @@ -0,0 +1,17 @@ +package net.srt.dao; + +import net.srt.entity.StandardStopwatchEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @ClassName : StandardStopwatchDao + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:33 + */ +@Mapper +public interface StandardStopwatchDao extends BaseDao { + void updateCodeNumByStandardId(@Param("standardId") Long standardId); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/entity/StandardStopwatchEntity.java b/srt-cloud-data-governance/src/main/java/net/srt/entity/StandardStopwatchEntity.java new file mode 100644 index 0000000..bbc0670 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/entity/StandardStopwatchEntity.java @@ -0,0 +1,37 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.srt.framework.mybatis.entity.BaseEntity; + +/** + * @ClassName : StandardStopwatchEntity + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:30 + */ +@EqualsAndHashCode(callSuper = false) +@Data +@TableName("data_standard_stopwatch") +public class StandardStopwatchEntity extends BaseEntity { + + /** + * 标准码表id + */ + private Long standardId; + + /** + * 码表数据的id + */ + private String dataId; + + /** + * 码表数据的name + */ + private String dataName; + + + private Long projectId; + +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/query/StandardStopwatchQuery.java b/srt-cloud-data-governance/src/main/java/net/srt/query/StandardStopwatchQuery.java new file mode 100644 index 0000000..24ce0b3 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/query/StandardStopwatchQuery.java @@ -0,0 +1,21 @@ +package net.srt.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.srt.framework.common.query.Query; + +/** + * @ClassName : StandardStopwatchQuery + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Schema(description = "数据治理-标准码表数据查询") +public class StandardStopwatchQuery extends Query { + private Integer standardId; + private String dataId; + private String dataName; +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/StandardStopwatchService.java b/srt-cloud-data-governance/src/main/java/net/srt/service/StandardStopwatchService.java new file mode 100644 index 0000000..add6057 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/StandardStopwatchService.java @@ -0,0 +1,25 @@ +package net.srt.service; + +import net.srt.entity.StandardStopwatchEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.query.StandardStopwatchQuery; +import net.srt.vo.StandardStopwatchVo; + +import java.util.List; + +/** + * @ClassName : StandardStopwatchService + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:32 + */ +public interface StandardStopwatchService extends BaseService { + PageResult page(StandardStopwatchQuery query); + + void save(StandardStopwatchVo vo); + + void update(StandardStopwatchVo vo); + + void delete(List idList); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/impl/StandardStopwatchServiceImpl.java b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/StandardStopwatchServiceImpl.java new file mode 100644 index 0000000..ce7c0f5 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/StandardStopwatchServiceImpl.java @@ -0,0 +1,67 @@ +package net.srt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; +import net.srt.convert.StandardStopwatchConvert; +import net.srt.dao.StandardStopwatchDao; +import net.srt.entity.StandardStopwatchEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.query.StandardStopwatchQuery; +import net.srt.service.StandardStopwatchService; +import net.srt.vo.StandardStopwatchVo; +import org.springframework.stereotype.Service; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +import java.util.List; + +/** + * @ClassName : StandardStopwatchServiceImpl + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:32 + */ +@Service +@AllArgsConstructor +public class StandardStopwatchServiceImpl extends BaseServiceImpl implements StandardStopwatchService { + private final StandardStopwatchDao standardStopwatchDao; + @Override + public PageResult page(StandardStopwatchQuery query) { + IPage page = baseMapper.selectPage(getPage(query), getWrapper(query)); + + return new PageResult<>(StandardStopwatchConvert.INSTANCE.convertList(page.getRecords()), page.getTotal()); + } + + private LambdaQueryWrapper getWrapper(StandardStopwatchQuery query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(query.getStandardId() != null, StandardStopwatchEntity::getStandardId, query.getStandardId()) + .eq(StringUtil.isNotBlank(query.getDataId()), StandardStopwatchEntity::getDataId, query.getDataId()) + .eq(StringUtil.isNotBlank(query.getDataName()), StandardStopwatchEntity::getDataName, query.getDataName()); + return wrapper; + } + + @Override + public void save(StandardStopwatchVo vo) { + StandardStopwatchEntity entity =StandardStopwatchConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + baseMapper.insert(entity); + standardStopwatchDao.updateCodeNumByStandardId(vo.getStandardId()); + } + + @Override + public void update(StandardStopwatchVo vo) { + StandardStopwatchEntity entity = StandardStopwatchConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + updateById(entity); + } + + @Override + public void delete(List idList) { + Long id = idList.get(0); + StandardStopwatchEntity standardCodeEntity = baseMapper.selectById(id); + removeByIds(idList); + standardStopwatchDao.updateCodeNumByStandardId(standardCodeEntity.getStandardId()); + } +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/vo/StandardStopwatchVo.java b/srt-cloud-data-governance/src/main/java/net/srt/vo/StandardStopwatchVo.java new file mode 100644 index 0000000..cee9474 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/vo/StandardStopwatchVo.java @@ -0,0 +1,56 @@ +package net.srt.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.srt.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ClassName : StandardStopwatchVo + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 10:26 + */ +@Data +@Schema(description = "数据治理-标准码表数据") +public class StandardStopwatchVo implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "主键id") + private Long id; + + @Schema(description = "标准码表id") + private Long standardId; + + @Schema(description = "码表数据的id") + private String dataId; + + @Schema(description = "码表数据的name") + private String dataName; + + private Long projectId; + + @Schema(description = "版本号") + private Integer version; + + @Schema(description = "删除标识 0:正常 1:已删除") + private Integer deleted; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createTime; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateTime; + +} diff --git a/srt-cloud-data-governance/src/main/resources/mapper/StandardStopwatchMapper.xml b/srt-cloud-data-governance/src/main/resources/mapper/StandardStopwatchMapper.xml new file mode 100644 index 0000000..445ce80 --- /dev/null +++ b/srt-cloud-data-governance/src/main/resources/mapper/StandardStopwatchMapper.xml @@ -0,0 +1,14 @@ + + + + + + + UPDATE data_governance_standard SET code_num=(SELECT COUNT(1) + FROM data_governance_standard_code + WHERE standard_id=#{standardId} AND deleted=0) + WHERE id=#{standardId} + + diff --git a/srt-cloud-data-service/pom.xml b/srt-cloud-data-service/pom.xml index f1b90b9..9f5a8d8 100644 --- a/srt-cloud-data-service/pom.xml +++ b/srt-cloud-data-service/pom.xml @@ -79,6 +79,12 @@ io.minio minio + + org.apache.ant + ant + 1.9.1 + compile + diff --git a/srt-cloud-data-service/src/main/java/net/srt/controller/DataServiceAppController.java b/srt-cloud-data-service/src/main/java/net/srt/controller/DataServiceAppController.java index 333fe3a..e138804 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/controller/DataServiceAppController.java +++ b/srt-cloud-data-service/src/main/java/net/srt/controller/DataServiceAppController.java @@ -3,18 +3,16 @@ package net.srt.controller; import io.swagger.v3.oas.annotations.Operation; import lombok.AllArgsConstructor; import net.srt.convert.DataServiceAppConvert; -import net.srt.entity.DataServiceApppEntity; +import net.srt.entity.DataServiceAppEntity; import net.srt.framework.common.page.PageResult; import net.srt.framework.common.utils.Result; import net.srt.query.DataServiceAppQuery; import net.srt.service.DataServiceAppService; import net.srt.vo.DataServiceAppVo; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; /** * @ClassName : DataServiceAppController @@ -37,7 +35,50 @@ public class DataServiceAppController { @GetMapping("{id}") @Operation(summary = "信息") public Result get(@PathVariable("id") Long id){ - DataServiceApppEntity dataServiceApppEntity = dataServiceAppService.getById(id); - return Result.ok(DataServiceAppConvert.INSTANCE.convert(dataServiceApppEntity)); + DataServiceAppEntity dataServiceAppEntity = dataServiceAppService.getById(id); + return Result.ok(DataServiceAppConvert.INSTANCE.convert(dataServiceAppEntity)); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody DataServiceAppVo vo){ + dataServiceAppService.save1(vo); + return Result.ok(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody @Valid DataServiceAppVo vo){ + dataServiceAppService.update1(vo); + return Result.ok(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody List idList){ + dataServiceAppService.delete(idList); + + return Result.ok(); + } + + @PostMapping("/auth") + @Operation(summary = "添加授权") + public Result addAuth(@RequestBody DataServiceAppVo authVO){ + dataServiceAppService.addAuth(authVO); + return Result.ok(); + } + + @PutMapping("/auth") + @Operation(summary = "修改授权") + public Result upAuth(@RequestBody DataServiceAppVo authVO){ + dataServiceAppService.upAuth(authVO); + return Result.ok(); + } + + @DeleteMapping("/cancel-auth/{authId}") + @Operation(summary = "取消授权") + public Result cancelAuth(@PathVariable Long authId){ + dataServiceAppService.cancelAuth(authId); + return Result.ok(); } } diff --git a/srt-cloud-data-service/src/main/java/net/srt/convert/DataServiceAppConvert.java b/srt-cloud-data-service/src/main/java/net/srt/convert/DataServiceAppConvert.java index 4a8d8bd..3abbab9 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/convert/DataServiceAppConvert.java +++ b/srt-cloud-data-service/src/main/java/net/srt/convert/DataServiceAppConvert.java @@ -1,8 +1,8 @@ package net.srt.convert; -import net.srt.entity.DataServiceApppEntity; +import net.srt.entity.DataServiceAppEntity; import net.srt.vo.DataServiceAppVo; -import org.apache.ibatis.annotations.Mapper; +import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; @@ -17,9 +17,9 @@ import java.util.List; public interface DataServiceAppConvert { DataServiceAppConvert INSTANCE = Mappers.getMapper(DataServiceAppConvert.class); - DataServiceApppEntity convert(DataServiceAppVo vo); + DataServiceAppEntity convert(DataServiceAppVo vo); - DataServiceAppVo convert(DataServiceApppEntity entity); + DataServiceAppVo convert(DataServiceAppEntity entity); - List convertList(List list); + List convertList(List list); } diff --git a/srt-cloud-data-service/src/main/java/net/srt/dao/DataServiceAppDao.java b/srt-cloud-data-service/src/main/java/net/srt/dao/DataServiceAppDao.java index 6b1f886..f93a261 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/dao/DataServiceAppDao.java +++ b/srt-cloud-data-service/src/main/java/net/srt/dao/DataServiceAppDao.java @@ -1,6 +1,6 @@ package net.srt.dao; -import net.srt.entity.DataServiceApppEntity; +import net.srt.entity.DataServiceAppEntity; import net.srt.framework.mybatis.dao.BaseDao; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -12,6 +12,6 @@ import org.apache.ibatis.annotations.Param; * @Date: 2023-12-23 08:59 */ @Mapper -public interface DataServiceAppDao extends BaseDao { - DataServiceApppEntity selectByApplyId(@Param("applyId") Long applyId); +public interface DataServiceAppDao extends BaseDao { + DataServiceAppEntity selectByApplyId(@Param("applyId") Long applyId); } diff --git a/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApiAuthEnitiy.java b/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApiAuthEnitiy.java new file mode 100644 index 0000000..852114f --- /dev/null +++ b/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApiAuthEnitiy.java @@ -0,0 +1,70 @@ +//package net.srt.entity; +// +//import com.baomidou.mybatisplus.annotation.FieldFill; +//import com.baomidou.mybatisplus.annotation.FieldStrategy; +//import com.baomidou.mybatisplus.annotation.TableField; +//import com.baomidou.mybatisplus.annotation.TableName; +//import lombok.Data; +//import lombok.EqualsAndHashCode; +//import net.srt.framework.mybatis.entity.BaseEntity; +// +//import java.util.Date; +// +///** +// * @ClassName : DataServiceApiAuthEnitiy +// * @Description : +// * @Author : FJJ +// * @Date: 2023-12-24 11:30 +// */ +//@EqualsAndHashCode(callSuper=false) +//@Data +//@TableName("data_service_api_auth1") +//public class DataServiceApiAuthEnitiy extends BaseEntity { +// +// /** +// * app的id +// */ +// private Long appId; +// +// /** +// * 分组id +// */ +// private Long groupId; +// +// /** +// * api的id +// */ +// private Long apiId; +// +// /** +// * 调用次数 不限次数为-1 +// */ +// private Integer requestTimes; +// +// @TableField(updateStrategy = FieldStrategy.IGNORED) +// private Date startTime; +// @TableField(updateStrategy = FieldStrategy.IGNORED) +// private Date endTime; +// +// /** +// * 已调用次数 +// */ +// @TableField(updateStrategy = FieldStrategy.NEVER) +// private Integer requestedTimes; +// @TableField(updateStrategy = FieldStrategy.NEVER) +// private Integer requestedSuccessTimes; +// @TableField(updateStrategy = FieldStrategy.NEVER) +// private Integer requestedFailedTimes; +// +// /** +// * 所属项目id +// */ +// private Long projectId; +// +// /** +// * 真删 +// */ +// @TableField(fill = FieldFill.INSERT) +// private Integer deleted; +// +//} diff --git a/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApppEntity.java b/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceAppEntity.java similarity index 62% rename from srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApppEntity.java rename to srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceAppEntity.java index 116252b..0049b7e 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceApppEntity.java +++ b/srt-cloud-data-service/src/main/java/net/srt/entity/DataServiceAppEntity.java @@ -1,11 +1,16 @@ package net.srt.entity; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import net.srt.framework.mybatis.entity.BaseEntity; +import java.util.Date; + /** * @ClassName : DataServiceApppEntity * @Description : @@ -15,21 +20,30 @@ import net.srt.framework.mybatis.entity.BaseEntity; @EqualsAndHashCode(callSuper = false) @Data @TableName("data_service_app") -public class DataServiceApppEntity extends BaseEntity { - - @Schema(description = "名称") +public class DataServiceAppEntity extends BaseEntity { + /** + * 名称 + */ private String name; - @Schema(description = "备注") + /** + * 备注 + */ private String note; - @Schema(description = "app_key") + /** + * app_key + */ private String appKey; - @Schema(description = "app_secret") + /** + * app_secret + */ private String appSecret; - @Schema(description = "过期描述") + /** + * 过期描述 + */ private String expireDesc; /** @@ -39,6 +53,13 @@ public class DataServiceApppEntity extends BaseEntity { private Integer ifMarket; - @Schema(description = "所属项目id") + /** + * 所属项目id + */ private Long projectId; + + + + + } diff --git a/srt-cloud-data-service/src/main/java/net/srt/service/DataServiceAppService.java b/srt-cloud-data-service/src/main/java/net/srt/service/DataServiceAppService.java index ee05f4d..d0c4606 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/service/DataServiceAppService.java +++ b/srt-cloud-data-service/src/main/java/net/srt/service/DataServiceAppService.java @@ -1,17 +1,31 @@ package net.srt.service; -import net.srt.entity.DataServiceApppEntity; +import net.srt.entity.DataServiceAppEntity; import net.srt.framework.common.page.PageResult; import net.srt.framework.mybatis.service.BaseService; import net.srt.query.DataServiceAppQuery; import net.srt.vo.DataServiceAppVo; +import java.util.List; + /** * @ClassName : DataServiceAppService * @Description : * @Author : FJJ * @Date: 2023-12-23 08:53 */ -public interface DataServiceAppService extends BaseService { +public interface DataServiceAppService extends BaseService { PageResult page(DataServiceAppQuery query); + + void save1(DataServiceAppVo vo); + + void update1(DataServiceAppVo vo); + + void delete(List idList); + + void addAuth(DataServiceAppVo authVO); + + void upAuth(DataServiceAppVo authVO); + + void cancelAuth(Long authId); } diff --git a/srt-cloud-data-service/src/main/java/net/srt/service/impl/DataServiceAppServiceImpl.java b/srt-cloud-data-service/src/main/java/net/srt/service/impl/DataServiceAppServiceImpl.java index a605d3a..a4e251c 100644 --- a/srt-cloud-data-service/src/main/java/net/srt/service/impl/DataServiceAppServiceImpl.java +++ b/srt-cloud-data-service/src/main/java/net/srt/service/impl/DataServiceAppServiceImpl.java @@ -6,7 +6,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import net.srt.convert.DataServiceAppConvert; import net.srt.dao.DataServiceAppDao; -import net.srt.entity.DataServiceApppEntity; +import net.srt.entity.DataServiceAppEntity; +import net.srt.framework.common.exception.ServerException; import net.srt.framework.common.page.PageResult; import net.srt.framework.mybatis.service.impl.BaseServiceImpl; import net.srt.framework.security.user.SecurityUser; @@ -27,32 +28,57 @@ import java.util.List; */ @Service @AllArgsConstructor -public class DataServiceAppServiceImpl extends BaseServiceImpl implements DataServiceAppService { +public class DataServiceAppServiceImpl extends BaseServiceImpl implements DataServiceAppService { + private final DataServiceAppDao dataServiceAppDao; @Override public PageResult page(DataServiceAppQuery query) { - if (query.getApplyId()!=null){ - DataServiceApppEntity dataServiceApppEntity=baseMapper.selectByApplyId(query.getApplyId()); - List list=new ArrayList<>(1); - if (dataServiceApppEntity!=null){ - list.add(dataServiceApppEntity); - return new PageResult<>(DataServiceAppConvert.INSTANCE.convertList(list),1); - } - return new PageResult<>(new ArrayList<>(),0); - - } - IPage page=baseMapper.selectPage(getPage(query),getWrapper(query)); + IPage page=baseMapper.selectPage(getPage(query),null); return new PageResult<>(DataServiceAppConvert.INSTANCE.convertList(page.getRecords()),page.getTotal()); } - - private LambdaQueryWrapper getWrapper(DataServiceAppQuery query) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.like(StringUtil.isNotBlank(query.getName()), DataServiceApppEntity::getName, query.getName()) - .eq(DataServiceApppEntity::getIfMarket, query.getIfMarket() != null ? query.getIfMarket() : 0) - .eq(query.getIfMarket() != null, DataServiceApppEntity::getCreator, SecurityUser.getUserId()) - .eq(StringUtil.isNotBlank(query.getAppKey()), DataServiceApppEntity::getAppKey, query.getAppKey()) - .orderByDesc(DataServiceApppEntity::getCreateTime).orderByDesc(DataServiceApppEntity::getId); - dataScopeWithoutOrgId(wrapper); - return wrapper; + @Override + public void save1(DataServiceAppVo vo) { + DataServiceAppEntity app = DataServiceAppConvert.INSTANCE.convert(vo); + baseMapper.insert(app); } + + + + @Override + public void update1(DataServiceAppVo vo) { + DataServiceAppEntity app = DataServiceAppConvert.INSTANCE.convert(vo); + updateById(app); + } + + @Override + public void delete(List idList) { + removeByIds(idList); + } + + @Override + public void addAuth(DataServiceAppVo authVO) { + authVO.setProjectId(getProjectId()); + dataServiceAppDao.insert(DataServiceAppConvert.INSTANCE.convert(authVO)); + } + + @Override + public void upAuth(DataServiceAppVo authVO) { + dataServiceAppDao.updateById(DataServiceAppConvert.INSTANCE.convert(authVO)); + } + + @Override + public void cancelAuth(Long authId) { + dataServiceAppDao.deleteById(authId); + } + + +// private LambdaQueryWrapper getWrapper(DataServiceAppQuery query) { +// LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); +// wrapper.like(StringUtil.isNotBlank(query.getName()), DataServiceAppEntity::getName, query.getName()) +// .eq(DataServiceAppEntity::getIfMarket, query.getIfMarket() != null ? query.getIfMarket() : 0) +// .eq(query.getIfMarket() != null, DataServiceAppEntity::getCreator, SecurityUser.getUserId()) +// .eq(StringUtil.isNotBlank(query.getAppKey()), DataServiceAppEntity::getAppKey, query.getAppKey()) +// .orderByDesc(DataServiceAppEntity::getCreateTime).orderByDesc(DataServiceAppEntity::getId); +// return wrapper; +// } } diff --git a/srt-cloud-data-service/src/main/java/net/srt/vo/DataServiceApiAuthVo.java b/srt-cloud-data-service/src/main/java/net/srt/vo/DataServiceApiAuthVo.java new file mode 100644 index 0000000..bd53d79 --- /dev/null +++ b/srt-cloud-data-service/src/main/java/net/srt/vo/DataServiceApiAuthVo.java @@ -0,0 +1,70 @@ +package net.srt.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.srt.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ClassName : DataServiceApiAuthVo + * @Description : + * @Author : FJJ + * @Date: 2023-12-24 11:29 + */ +@Data +@Schema(description = "数据服务-权限关联表") +public class DataServiceApiAuthVo implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "主键id") + private Long id; + + @Schema(description = "app的id") + private Long appId; + + @Schema(description = "分组id") + private Long groupId; + + @Schema(description = "api的id") + private Long apiId; + + @Schema(description = "调用次数 不限次数为-1") + private Integer requestTimes; + + @Schema(description = "已调用次数") + private Integer requestedTimes; + private Integer requestedSuccessTimes; + private Integer requestedFailedTimes; + + @Schema(description = "所属项目id") + private Long projectId; + + @Schema(description = "版本号") + private Integer version; + + @Schema(description = "删除标识 0:正常 1:已删除") + private Integer deleted; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createTime; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateTime; + + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date startTime; + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date endTime; + +} diff --git a/srt-cloud-data-service/src/main/resources/mapper/DataServiceAppMapper.xml b/srt-cloud-data-service/src/main/resources/mapper/DataServiceAppMapper.xml index 82cb89d..6271392 100644 --- a/srt-cloud-data-service/src/main/resources/mapper/DataServiceAppMapper.xml +++ b/srt-cloud-data-service/src/main/resources/mapper/DataServiceAppMapper.xml @@ -5,7 +5,7 @@ - SELECT dsa.* FROM data_service_app dsa INNER JOIN data_market_resource_apply dmra ON dsa.id=dmra.app_id WHERE dmra.id=#{applyId} diff --git a/srt-data-development/src/main/java/net/srt/disposition/vo/DataProductionTreeVo.java b/srt-data-development/src/main/java/net/srt/disposition/vo/DataProductionTreeVo.java index 24b24c1..d1e4ae4 100644 --- a/srt-data-development/src/main/java/net/srt/disposition/vo/DataProductionTreeVo.java +++ b/srt-data-development/src/main/java/net/srt/disposition/vo/DataProductionTreeVo.java @@ -11,8 +11,8 @@ import java.util.List; @Data public class DataProductionTreeVo { - private Integer id; - private Integer parentId; + private Long id; + private Long parentId; private Integer ifLeaf; private Long taskId; private String taskType; From ab139edf83bf5db818c9a7c595abe08db8931669 Mon Sep 17 00:00:00 2001 From: jpz <3185133571@qq.com> Date: Sun, 24 Dec 2023 22:24:28 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E8=A7=84=E5=88=99=E9=85=8D=E7=BD=AE=E7=9B=AE=E5=BD=95=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../governance/DataMetadataCollectApi.java | 88 +++++++ .../srt/controller/MetadataController.java | 96 ++++++++ .../controller/QualityConfigController.java | 82 +++++++ .../java/net/srt/convert/MetadataConvert.java | 22 ++ .../net/srt/convert/QualityConfigConvert.java | 25 ++ .../main/java/net/srt/dao/MetadataDao.java | 15 ++ .../java/net/srt/dao/MetadataPropertyDao.java | 20 ++ .../java/net/srt/entity/MetadataEntity.java | 74 ++++++ .../srt/entity/MetadataPropertyEntity.java | 38 +++ .../net/srt/query/QualityConfigQuery.java | 22 ++ .../java/net/srt/service/MetadataService.java | 38 +++ .../net/srt/service/QualityConfigService.java | 34 +++ .../srt/service/impl/MetadataServiceimpl.java | 232 ++++++++++++++++++ .../impl/QualityConfigServiceimpl.java | 134 ++++++++++ .../src/main/java/net/srt/vo/MetadataVo.java | 84 +++++++ .../main/java/net/srt/vo/QualityConfigVo.java | 81 ++++++ .../resources/mapper/MetadataPropertyDao.xml | 12 + ...zDataGovernanceMetadataCollectApiImpl.java | 67 +++++ .../QuartzDataGovernanceQualityApiImpl.java | 67 +++++ .../QuartzDataProductionScheduleApiImpl.java | 57 +++++ .../dto/DataProductionTreeDto.java | 33 +-- .../impl/DataProductionServiceImpl.java | 2 +- 22 files changed, 1295 insertions(+), 28 deletions(-) create mode 100644 srt-cloud-api/src/main/java/net/srt/api/module/data/governance/DataMetadataCollectApi.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/convert/MetadataConvert.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataDao.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataPropertyDao.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataEntity.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataPropertyEntity.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/query/QualityConfigQuery.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/QualityConfigService.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceimpl.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/vo/MetadataVo.java create mode 100644 srt-cloud-data-governance/src/main/java/net/srt/vo/QualityConfigVo.java create mode 100644 srt-cloud-data-governance/src/main/resources/mapper/MetadataPropertyDao.xml create mode 100644 srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceMetadataCollectApiImpl.java create mode 100644 srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceQualityApiImpl.java create mode 100644 srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataProductionScheduleApiImpl.java diff --git a/srt-cloud-api/src/main/java/net/srt/api/module/data/governance/DataMetadataCollectApi.java b/srt-cloud-api/src/main/java/net/srt/api/module/data/governance/DataMetadataCollectApi.java new file mode 100644 index 0000000..3b7fb67 --- /dev/null +++ b/srt-cloud-api/src/main/java/net/srt/api/module/data/governance/DataMetadataCollectApi.java @@ -0,0 +1,88 @@ +package net.srt.api.module.data.governance; + +import net.srt.api.ServerNames; +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.framework.common.utils.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @ClassName DataAccessApi + * @Author zrx + * @Date 2022/10/26 11:39 + */ +@FeignClient(name = ServerNames.DATA_GOVERNANCE_NAME, contextId = "data-governance-metadata-collect") +public interface DataMetadataCollectApi { + /** + * 根据id获取采集任务 + */ + @GetMapping(value = "api/data/governance/metadata-collect/{id}") + Result getById(@PathVariable Long id); + + /** + * 根据id获取采集任务 + */ + @PostMapping(value = "api/data/governance/metadata-collect-record") + DataGovernanceMetadataCollectRecordDto addCollectRecord(@RequestBody DataGovernanceMetadataCollectRecordDto collectRecordDto); + + /** + * 根据id获取采集任务 + */ + @PutMapping(value = "api/data/governance/metadata-collect-record") + void upCollectRecord(@RequestBody DataGovernanceMetadataCollectRecordDto collectRecordDto); + + /** + * 根据父级id和数据源id获取 + */ + @GetMapping(value = "api/data/governance/metadata/datasource") + Result getByParentIdAndDatasourceId(@RequestParam Long parnetId, @RequestParam Long datasourceId); + + /** + * 根据父级id和数据源id获取 + */ + @GetMapping(value = "api/data/governance/metadata/info") + Result getMetadataById(@RequestParam Long metadataId); + + /** + * 根据父级id和code以及modelId获取 + */ + @GetMapping(value = "api/data/governance/metadata/child-info") + Result getByParentIdAndOtherInfo(@RequestParam Long parnetId, @RequestParam Long datasourceId, @RequestParam String code, @RequestParam Long metamodelId); + + /** + * 添加元数据 + */ + @PostMapping(value = "api/data/governance/metadata") + DataGovernanceMetadataDto addOrUpdateMetadata(@RequestBody DataGovernanceMetadataDto metadataDto); + + + /** + * 获取元数据属性 + */ + @GetMapping(value = "api/data/governance/metadata-property") + Result getByPropertyIdAndMetadataId(@RequestParam Long propertyId, @RequestParam Long metadataId); + + /** + * 添加元数据属性 + */ + @PostMapping(value = "api/data/governance/metadata-prpperty") + void addOrUpdateMetadataProperty(@RequestBody DataGovernanceMetadataPropertyDto metadataPropertyDto); + + @GetMapping(value = "api/data/governance/metadata/list") + Result> listParentIdAndDatasourceId(@RequestParam Long parentId, @RequestParam Long datasourceId, @RequestParam Long metamodelId); + + @DeleteMapping(value = "api/data/governance/metadata") + void deleteMetadata(@RequestParam Long id); + + @GetMapping(value = "api/data/governance/by-datasourceId") + Result getByDatasourceId(Long id); + + @GetMapping(value = "api/data/governance/metadata/by-datasourceId") + Result getMetadataByDatasourceId(Long id); + +} 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 new file mode 100644 index 0000000..5ee1dc7 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/controller/MetadataController.java @@ -0,0 +1,96 @@ +package net.srt.controller; + +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.TreeNodeVo; +import net.srt.service.MetadataService; +import net.srt.vo.MetadataVo; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.controller + * @Author: jpz + * @CreateTime: 2023/12/24 14:24 + */ +@RestController +@RequestMapping("metadata") +@Tag(name = "数据治理-元数据") +@AllArgsConstructor +public class MetadataController { + private final MetadataService metadataService; + @GetMapping("/list-chlid") + @Operation(summary = "根据父类id获取信息") + public Result> listByPatenId(@RequestParam Long parentId){ + List list=metadataService.listByPatenId(parentId); + return Result.ok(list); + } + @GetMapping("/list-floder") + @Operation(summary = "获取目录树") + public Result> listFloder(){ + List list=metadataService.listFloder(); + return Result.ok(list); + } + @GetMapping("/list-db") + @Operation(summary = "获取库表目录树") + public Result> listDb() { + List list=metadataService.listDb(); + return Result.ok(list); + } + + @GetMapping("/list-keyword") + @Operation(summary = "模糊查询") + public Result> listKeyword( String keyword) { + List list=metadataService.listKeyword(keyword); + return Result.ok(list); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + public Result get(@PathVariable("id") Long id){ + return Result.ok(metadataService.get(id)); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody MetadataVo vo){ + metadataService.save(vo); + return Result.ok(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody @Valid MetadataVo vo){ + metadataService.update(vo); + return Result.ok(); + } + + @DeleteMapping("{id}") + @Operation(summary = "删除") + public Result delete(@PathVariable Long id){ + metadataService.delete(id); + return Result.ok(); + } + + @PostMapping("{neo4j}") + @Operation(summary = "更新neo4路径") + public Result updateNeo4j(@PathVariable Neo4jInfo neo4jInfo){ + metadataService.updateNeo4j(neo4jInfo); + return Result.ok(); + } + + @GetMapping("/neo4j") + @Operation(summary = "获取neo4的路径") + public Result getNeo4j(){ + return Result.ok(metadataService.getNeo4j()); + } + + + +} 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 new file mode 100644 index 0000000..66dc26b --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/controller/QualityConfigController.java @@ -0,0 +1,82 @@ +package net.srt.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.Result; +import net.srt.query.QualityConfigQuery; +import net.srt.service.QualityConfigService; +import net.srt.vo.QualityConfigVo; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.controller + * @Author: jpz + * @CreateTime: 2023/12/24 19:31 + */ +@RestController +@RequestMapping("/quality-config") +@Tag(name = "数据治理-质量规则配置") +@AllArgsConstructor +public class QualityConfigController { + private final QualityConfigService qualityConfigService; + @GetMapping("page") + @Operation(summary = "分页") + public Result> page(@Valid QualityConfigQuery query){ + PageResult page= qualityConfigService.page(query); + return Result.ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + public Result get(@PathVariable("id") Long id){ + return Result.ok(qualityConfigService.get(id)); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody QualityConfigVo vo){ + qualityConfigService.save(vo); + return Result.ok(); + } + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody @Valid QualityConfigVo vo){ + qualityConfigService.update(vo); + return Result.ok(); + } + + @PutMapping("/online/{id}") + @Operation(summary = "启用") + public Result online(@PathVariable Long id){ + qualityConfigService.online(id); + return Result.ok(); + } + + @PutMapping("/offline/{id}") + @Operation(summary = "关闭") + public Result offline(@PathVariable Long id){ + qualityConfigService.offline(id); + return Result.ok(); + } + + @PutMapping("/hand-run/{id}") + @Operation(summary = "手动执行") + public Result handRun(@PathVariable Long id){ + qualityConfigService.handRun(id); + return Result.ok(); + } + + @DeleteMapping + @Operation(summary = "删除") + 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/MetadataConvert.java b/srt-cloud-data-governance/src/main/java/net/srt/convert/MetadataConvert.java new file mode 100644 index 0000000..86c6cc9 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/MetadataConvert.java @@ -0,0 +1,22 @@ +package net.srt.convert; + +import net.srt.entity.MetadataEntity; +import net.srt.vo.MetadataVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.convert + * @Author: jpz + * @CreateTime: 2023/12/24 15:42 + */ +@Mapper +public interface MetadataConvert { + + MetadataConvert INSTANCE = Mappers.getMapper(MetadataConvert.class); + + MetadataVo convert(MetadataEntity entity); + + MetadataEntity convert(MetadataVo vo); +} 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 new file mode 100644 index 0000000..9e07e73 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/convert/QualityConfigConvert.java @@ -0,0 +1,25 @@ +package net.srt.convert; + +import net.srt.entity.QualityConfigEntity; +import net.srt.vo.QualityConfigVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.convert + * @Author: jpz + * @CreateTime: 2023/12/24 19:57 + */ +@Mapper +public interface QualityConfigConvert { + QualityConfigConvert INSTANCE = Mappers.getMapper(QualityConfigConvert.class); + + QualityConfigVo convert(QualityConfigEntity entity); + + QualityConfigEntity convert(QualityConfigVo vo); + + List convertList(List list); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataDao.java b/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataDao.java new file mode 100644 index 0000000..9a7e8d1 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataDao.java @@ -0,0 +1,15 @@ +package net.srt.dao; + +import net.srt.entity.MetadataEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.dao + * @Author: jpz + * @CreateTime: 2023/12/24 14:39 + */ +@Mapper +public interface MetadataDao extends BaseDao { +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataPropertyDao.java b/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataPropertyDao.java new file mode 100644 index 0000000..5253481 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/dao/MetadataPropertyDao.java @@ -0,0 +1,20 @@ +package net.srt.dao; + +import net.srt.entity.MetadataPropertyEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import net.srt.vo.MetamodelPropertyVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.dao + * @Author: jpz + * @CreateTime: 2023/12/24 15:49 + */ +@Mapper +public interface MetadataPropertyDao extends BaseDao { + List listPropertyById(@Param("id") Long id, Long metamodelId); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataEntity.java b/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataEntity.java new file mode 100644 index 0000000..f345f72 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataEntity.java @@ -0,0 +1,74 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.srt.framework.mybatis.entity.BaseEntity; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.entity + * @Author: jpz + * @CreateTime: 2023/12/24 14:36 + */ +@EqualsAndHashCode(callSuper = false) +@Data +@TableName("data_governance_metadata") +public class MetadataEntity extends BaseEntity { + /** + * 父级id(默认0为顶级) + */ + private Long parentId; + + /** + * 树状节点的路径 + */ + private String path; + + /** + * 节点名称 + */ + private String name; + + /** + * 节点英文名称 + */ + private String code; + + private Integer ifLeaf; + /** + * 对应的元模型id + */ + private Long metamodelId; + + private String icon; + + /** + * 详情 + */ + private String description; + + /** + * 数据库类型(1-数据库 2-中台库) + */ + private Integer dbType; + + /** + * 如果是外部系统接入的库表,需要此字段 + */ + private Long datasourceId; + + /** + * 采集任务id + */ + private Long collectTaskId; + + /** + * 项目id(租户id) + */ + private Long projectId; + + + private Integer orderNo; + +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataPropertyEntity.java b/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataPropertyEntity.java new file mode 100644 index 0000000..7131f44 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/entity/MetadataPropertyEntity.java @@ -0,0 +1,38 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.srt.framework.mybatis.entity.BaseEntity; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.entity + * @Author: jpz + * @CreateTime: 2023/12/24 15:50 + */ +@EqualsAndHashCode(callSuper=false) +@Data +@TableName("data_governance_metadata_property") +public class MetadataPropertyEntity extends BaseEntity { + /** + * 属性id + */ + private Long metamodelPropertyId; + + /** + * 元数据id + */ + private Long metadataId; + + /** + * 属性值 + */ + private String property; + + /** + * 项目id(租户id) + */ + private Long projectId; + +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/query/QualityConfigQuery.java b/srt-cloud-data-governance/src/main/java/net/srt/query/QualityConfigQuery.java new file mode 100644 index 0000000..5055b32 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/query/QualityConfigQuery.java @@ -0,0 +1,22 @@ +package net.srt.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.srt.framework.common.query.Query; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.query + * @Author: jpz + * @CreateTime: 2023/12/24 19:39 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Schema(description = "数据治理-质量规则配置查询") +public class QualityConfigQuery extends Query { + private Long categoryId; + private String name; + private Long status; + private Long taskType; +} 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 new file mode 100644 index 0000000..4273356 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/MetadataService.java @@ -0,0 +1,38 @@ +package net.srt.service; + +import net.srt.entity.MetadataEntity; +import net.srt.framework.common.cache.bean.Neo4jInfo; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.vo.MetadataVo; + +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.service + * @Author: jpz + * @CreateTime: 2023/12/24 14:35 + */ + +public interface MetadataService extends BaseService { + List listByPatenId(Long parentId); + + List listFloder(); + + List listDb(); + + List listKeyword(String keyword); + + MetadataVo get(Long id); + + void save(MetadataVo vo); + + void update(MetadataVo vo); + + void delete(Long id); + + void updateNeo4j(Neo4jInfo neo4jInfo); + + Neo4jInfo getNeo4j(); +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/service/QualityConfigService.java b/srt-cloud-data-governance/src/main/java/net/srt/service/QualityConfigService.java new file mode 100644 index 0000000..553e11e --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/QualityConfigService.java @@ -0,0 +1,34 @@ +package net.srt.service; + +import net.srt.entity.QualityConfigEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.query.QualityConfigQuery; +import net.srt.vo.QualityConfigVo; + +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.service + * @Author: jpz + * @CreateTime: 2023/12/24 19:33 + */ +public interface QualityConfigService extends BaseService { + PageResult page(QualityConfigQuery query); + + QualityConfigVo get(Long id); + + void save(QualityConfigVo vo); + + void update(QualityConfigVo vo); + + void online(Long id); + + void offline(Long id); + + void handRun(Long id); + + + void delete(List idList); +} 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 new file mode 100644 index 0000000..8609811 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/MetadataServiceimpl.java @@ -0,0 +1,232 @@ +package net.srt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import io.minio.messages.Metadata; +import io.swagger.v3.oas.annotations.Operation; +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.srt.api.module.data.governance.constant.BuiltInMetamodel; +import net.srt.convert.MetadataConvert; +import net.srt.dao.MetadataDao; +import net.srt.dao.MetadataPropertyDao; +import net.srt.dao.MetamodelDao; +import net.srt.entity.MetadataEntity; +import net.srt.entity.MetadataPropertyEntity; +import net.srt.framework.common.cache.bean.Neo4jInfo; +import net.srt.framework.common.exception.ServerException; +import net.srt.framework.common.utils.BeanUtil; +import net.srt.framework.common.utils.BuildTreeUtils; +import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.framework.security.cache.TokenStoreCache; +import net.srt.service.MetadataService; +import net.srt.vo.MetadataVo; +import net.srt.vo.MetamodelPropertyVO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.GetMapping; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.service.impl + * @Author: jpz + * @CreateTime: 2023/12/24 14:38 + */ +@Service +@AllArgsConstructor +public class MetadataServiceimpl extends BaseServiceImplimplements MetadataService { + private final MetamodelDao metamodelDao; + private final MetadataPropertyDao metadataPropertyDao; + private final TokenStoreCache tokenStoreCache; + @Override + public List listByPatenId(Long parentId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MetadataEntity::getParentId,parentId).orderByAsc(MetadataEntity::getOrderNo); + dataScopeWithOrgId(wrapper); + List list = baseMapper.selectList(wrapper); + return BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ + newItm.setLabel(oldItm.getName()); + newItm.setValue(oldItm.getId()); + newItm.setLeaf(BuiltInMetamodel.COLUMN.getId().equals(oldItm.getMetamodelId())); + newItm.setDisabled(!BuiltInMetamodel.COLUMN.getId().equals(oldItm.getMetamodelId())); + if (newItm.getPath().contains("/")){ + newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); + } + }); + } + + @Override + public List listFloder() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MetadataEntity::getIfLeaf,1).orderByAsc(MetadataEntity::getOrderNo).orderByAsc(MetadataEntity::getId); + dataScopeWithOrgId(wrapper); + List list = baseMapper.selectList(wrapper); + List treeNodeVos=BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ + newItm.setLabel(oldItm.getName()); + newItm.setValue(oldItm.getId()); + if (newItm.getPath().contains("/")){ + newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); + } + }); + return BuildTreeUtils.buildTree(treeNodeVos); + } + + @Override + public List listDb() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(MetadataEntity::getMetamodelId,BuiltInMetamodel.SCHEMA.getId(),BuiltInMetamodel.TABLE.getId()) + .or().isNull(MetadataEntity::getMetamodelId) + .orderByAsc(MetadataEntity::getOrderNo); + dataScopeWithOrgId(wrapper); + List list = baseMapper.selectList(wrapper); + List treeNodeVos=BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ + newItm.setLabel(oldItm.getName()); + newItm.setValue(oldItm.getId()); + if (newItm.getPath().contains("/")){ + newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); + } + }); + return BuildTreeUtils.buildTree(treeNodeVos); + } + + @Override + public List listKeyword(String keyword) { + if (StringUtil.isBlank(keyword)){ + return listByPatenId(0L); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(MetadataEntity::getName,keyword).or().like(MetadataEntity::getCode,keyword).orderByAsc(MetadataEntity::getOrderNo); + ArrayList arrayList = new ArrayList<>(); + //递归获取父级 + for (MetadataEntity metadataEntity : arrayList) { + recursionAddParent(metadataEntity,arrayList); + } + return null; + } + + @Override + public MetadataVo get(Long id) { + MetadataEntity metadataEntity = getById(id); + MetadataVo metadataVo = MetadataConvert.INSTANCE.convert(metadataEntity); + //获取元数据属性信息 + metadataVo.setProperties(metadataPropertyDao.listPropertyById(id,metadataVo.getMetamodelId())); + return metadataVo; + } + + @Override + public void save(MetadataVo vo) { + MetadataEntity entity=MetadataConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + entity.setPath(recursionPath(entity, null)); + buildField(entity); + MetadataEntity metadataEntity=baseMapper.selectById(vo.getParentId()); + if (metadataEntity!=null){ + entity.setDbType(metadataEntity.getDbType()); + entity.setDatasourceId(metadataEntity.getDatasourceId()); + entity.setCollectTaskId(metadataEntity.getCollectTaskId()); + } + baseMapper.insert(entity); + buildProperties(entity,vo.getProperties()); + } + + @Override + public void update(MetadataVo vo) { + MetadataEntity entity=MetadataConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + entity.setPath(recursionPath(entity,null)); + buildField(entity); + updateById(entity); + buildProperties(entity,vo.getProperties()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + //判断是否有子节点 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MetadataEntity::getParentId,id).last("limit 1"); + if (baseMapper.selectOne(wrapper)!=null){ + throw new ServerException("存在子节点,不可以进行删除"); + } + removeById(id); + //删除属性 + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(MetadataPropertyEntity::getMetadataId,id); + metadataPropertyDao.delete(wrapper1); + } + + @Override + public void updateNeo4j(Neo4jInfo neo4jInfo) { + tokenStoreCache.saveNeo4jInfo(getProjectId(),neo4jInfo); + } + + @Override + public Neo4jInfo getNeo4j() { + return tokenStoreCache.getNeo4jInfo(getProjectId()); + } + + private void buildProperties(MetadataEntity entity, List properties) { + if (!CollectionUtils.isEmpty(properties)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MetadataEntity::getMetamodelId,entity.getId()); + for (MetamodelPropertyVO property : properties) { + MetadataPropertyEntity metadataPropertyEntity = new MetadataPropertyEntity(); + metadataPropertyEntity.setMetamodelPropertyId(property.getId()); + metadataPropertyEntity.setMetadataId(entity.getId()); + metadataPropertyEntity.setProperty(property.getValue()); + metadataPropertyEntity.setProjectId(entity.getProjectId()); + if (property.getMetadataPropertyId()!=null){ + metadataPropertyEntity.setId(property.getMetadataPropertyId()); + metadataPropertyDao.updateById(metadataPropertyEntity); + }else { + metadataPropertyDao.insert(metadataPropertyEntity); + } + } + } + } + + private void buildField(MetadataEntity entity) { + if (entity.getMetamodelId() != null) { + entity.setIcon(metamodelDao.selectById(entity.getMetamodelId()).getIcon()); + } + if (entity.getIfLeaf() == 1 && entity.getMetamodelId() == null) { + entity.setIcon("/src/assets/folder.png"); + } + + } + + private String recursionPath(MetadataEntity entity, String path) { + if (StringUtil.isBlank(path)) { + path = entity.getName(); + } + if (entity.getParentId() != 0) { + MetadataEntity parent = getById(entity.getParentId()); + path = parent.getName() + "/" + path; + return recursionPath(parent, path); + } + return path; + } + + + private void recursionAddParent(MetadataEntity metadataEntity, ArrayList arrayList) { + if (arrayList.stream().noneMatch(item->metadataEntity.getId().equals(item.getId()))){ + //添加自己 + arrayList.add(metadataEntity); + } + //如果不是顶级 + if (metadataEntity.getProjectId()!=0){ + //获取父级,继续递归 + MetadataEntity parent = getById(metadataEntity.getParentId()); + recursionAddParent(parent,arrayList); + } + } + + +} 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 new file mode 100644 index 0000000..785a0c7 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/service/impl/QualityConfigServiceimpl.java @@ -0,0 +1,134 @@ +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; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.sun.org.apache.bcel.internal.generic.LADD; +import lombok.AllArgsConstructor; +import net.srt.api.module.data.governance.constant.BuiltInQualityRule; +import net.srt.api.module.data.governance.dto.quality.QualityConfigParam; +import net.srt.api.module.quartz.QuartzDataGovernanceQualityApi; +import net.srt.convert.QualityConfigConvert; +import net.srt.dao.MetadataDao; +import net.srt.dao.QualityConfigDao; +import net.srt.entity.MetadataEntity; +import net.srt.entity.QualityConfigEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.query.QualityConfigQuery; +import net.srt.service.QualityConfigService; +import net.srt.vo.QualityConfigVo; +import org.springframework.security.core.parameters.P; +import org.springframework.stereotype.Service; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.service.impl + * @Author: jpz + * @CreateTime: 2023/12/24 19:42 + */ +@Service +@AllArgsConstructor +public class QualityConfigServiceimpl extends BaseServiceImpl implements QualityConfigService { + private final QuartzDataGovernanceQualityApi quartzDataGovernanceQualityApi; + private final MetadataDao metadataDao; + @Override + public PageResult page(QualityConfigQuery query) { + IPage page=baseMapper.selectPage(getPage(query),getWrapper(query)); + return new PageResult<>(QualityConfigConvert.INSTANCE.convertList(page.getRecords()),page.getTotal()); + } + + @Override + public QualityConfigVo get(Long id) { + QualityConfigVo qualityConfigvo= QualityConfigConvert.INSTANCE.convert(baseMapper.selectById(id)); + List metadataIds=qualityConfigvo.getMetadataIds(); + LambdaQueryWrapper metadataWrapper= Wrappers.lambdaQuery(); + metadataWrapper.in(MetadataEntity::getId,metadataIds); + List metadataEntities=metadataDao.selectList(metadataWrapper); + if (CollectionUtils.isEmpty(metadataEntities)){ + qualityConfigvo.setMetadataStrs("检测字段已删除,请检查数据信息"); + }else { + qualityConfigvo.setMetadataStrs(metadataEntities.stream().map(MetadataEntity::getPath).collect(Collectors.joining(";"))); + } + if (BuiltInQualityRule.ASSOCIATION_CONSISTENCY.getId().equals(qualityConfigvo.getRuleId())){ + QualityConfigParam param = qualityConfigvo.getParam(); + Integer columnMetaId = param.getColumnMetaId(); + MetadataEntity entity = metadataDao.selectById(columnMetaId); + if (entity!= null){ + qualityConfigvo.setRelMetadataStr(entity.getPath()); + }else { + qualityConfigvo.setMetadataStrs("关联字段已被删除,请检查元数据信息"); + } + } + + return qualityConfigvo; + } + + @Override + public void save(QualityConfigVo vo) { + QualityConfigEntity entity=QualityConfigConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + 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); + } + + @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())){ + vo.setParam(null); + } + QualityConfigEntity entity=QualityConfigConvert.INSTANCE.convert(vo); + entity.setProjectId(getProjectId()); + updateById(entity); + } + + @Override + public void online(Long id) { + QualityConfigEntity entity=baseMapper.selectById(id); + entity.setStatus(1); + quartzDataGovernanceQualityApi.release(id); + baseMapper.updateById(entity); + + } + + @Override + public void offline(Long id) { + QualityConfigEntity entity=baseMapper.selectById(id); + entity.setStatus(0); + quartzDataGovernanceQualityApi.cancel(id); + baseMapper.updateById(entity); + } + + @Override + public void handRun(Long id) { + quartzDataGovernanceQualityApi.handRun(id); + } + + @Override + public void delete(List idList) { + for (Long id : idList) { + quartzDataGovernanceQualityApi.cancel(id); + } + removeByIds(idList); + } + + + 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 ); + return wrapper; + } +} + diff --git a/srt-cloud-data-governance/src/main/java/net/srt/vo/MetadataVo.java b/srt-cloud-data-governance/src/main/java/net/srt/vo/MetadataVo.java new file mode 100644 index 0000000..0ba283c --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/vo/MetadataVo.java @@ -0,0 +1,84 @@ +package net.srt.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.srt.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.vo + * @Author: jpz + * @CreateTime: 2023/12/24 15:37 + */ +@Data +@Schema(description = "数据治理-元数据") +public class MetadataVo implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "主键id") + private Long id; + + @Schema(description = "父级id(默认0为顶级)") + private Long parentId; + + @Schema(description = "树状节点的路径") + private String path; + + @Schema(description = "节点名称") + private String name; + + @Schema(description = "节点英文名称") + private String code; + + private String icon; + + private Integer ifLeaf; + + @Schema(description = "对应的元模型id") + private Long metamodelId; + + @Schema(description = "详情") + private String description; + + @Schema(description = "数据库类型(1-数据库 2-中台库)") + private Integer dbType; + + @Schema(description = "如果是外部系统接入的库表,需要此字段") + private Long datasourceId; + + @Schema(description = "采集任务id") + private Long collectTaskId; + + @Schema(description = "项目id(租户id)") + private Long projectId; + + private Integer orderNo; + + @Schema(description = "版本号") + private Integer version; + + @Schema(description = "删除标识 0:正常 1:已删除") + private Integer deleted; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createTime; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateTime; + + @Schema(description = "元数据属性列表") + private List properties; +} diff --git a/srt-cloud-data-governance/src/main/java/net/srt/vo/QualityConfigVo.java b/srt-cloud-data-governance/src/main/java/net/srt/vo/QualityConfigVo.java new file mode 100644 index 0000000..1c10b51 --- /dev/null +++ b/srt-cloud-data-governance/src/main/java/net/srt/vo/QualityConfigVo.java @@ -0,0 +1,81 @@ +package net.srt.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.srt.api.module.data.governance.dto.quality.QualityConfigParam; +import net.srt.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.vo + * @Author: jpz + * @CreateTime: 2023/12/24 19:35 + */ +@Data +@Schema(description = "数据治理-质量规则配置") +public class QualityConfigVo implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "自增id") + private Long id; + + private Long categoryId; + + @Schema(description = "名称") + private String name; + + @Schema(description = "规则id") + private Integer ruleId; + + @Schema(description = "个性化参数json") + private QualityConfigParam param; + @Schema(description = "当选择的规则类型为关联一致性的时候,返回此字段(前台用)") + private String relMetadataStr; + + @Schema(description = "元数据字段列表") + private List metadataIds; + @Schema(description = "检测的元数据字段信息字符串(前台用)") + private String metadataStrs; + + @Schema(description = "状态,1-启用,0-关闭") + private Integer status; + + @Schema(description = "任务类型,1-一次性任务,2-周期任务") + private Integer taskType; + + @Schema(description = "cron表达式") + private String cron; + + @Schema(description = "备注") + private String note; + + @Schema(description = "项目id") + private Long projectId; + + @Schema(description = "版本号") + private Integer version; + + @Schema(description = "删除标识 0:正常 1:已删除") + private Integer deleted; + + @Schema(description = "创建者") + private Long creator; + + @Schema(description = "创建时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createTime; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新时间") + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateTime; + + +} diff --git a/srt-cloud-data-governance/src/main/resources/mapper/MetadataPropertyDao.xml b/srt-cloud-data-governance/src/main/resources/mapper/MetadataPropertyDao.xml new file mode 100644 index 0000000..1b9c111 --- /dev/null +++ b/srt-cloud-data-governance/src/main/resources/mapper/MetadataPropertyDao.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceMetadataCollectApiImpl.java b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceMetadataCollectApiImpl.java new file mode 100644 index 0000000..8b0df62 --- /dev/null +++ b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceMetadataCollectApiImpl.java @@ -0,0 +1,67 @@ +package net.srt.quartz.api; + +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.governance.DataMetadataCollectApi; +import net.srt.api.module.data.governance.constant.MetadataCollectType; +import net.srt.api.module.data.governance.dto.DataGovernanceMetadataCollectDto; +import net.srt.api.module.quartz.QuartzDataGovernanceMetadataCollectApi; +import net.srt.api.module.quartz.constant.QuartzJobType; +import net.srt.framework.common.utils.Result; +import net.srt.quartz.entity.ScheduleJobEntity; +import net.srt.quartz.enums.JobGroupEnum; +import net.srt.quartz.enums.ScheduleConcurrentEnum; +import net.srt.quartz.enums.ScheduleStatusEnum; +import net.srt.quartz.service.ScheduleJobService; +import net.srt.quartz.utils.ScheduleUtils; +import org.quartz.Scheduler; +import org.springframework.web.bind.annotation.RestController; + +/** + * 短信服务API + * + * @author 阿沐 babamu@126.com + */ +@RestController +@RequiredArgsConstructor +public class QuartzDataGovernanceMetadataCollectApiImpl implements QuartzDataGovernanceMetadataCollectApi { + + private final Scheduler scheduler; + private final DataMetadataCollectApi dataMetadataCollectApi; + private final ScheduleJobService jobService; + + @Override + public Result release(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + //判断是否存在,不存在,新增,存在,设置主键 + jobService.buildSystemJob(jobEntity); + ScheduleUtils.createScheduleJob(scheduler, jobEntity); + return Result.ok(); + } + + @Override + public Result cancel(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + jobService.buildSystemJob(jobEntity); + ScheduleUtils.deleteScheduleJob(scheduler, jobEntity); + //更新任务状态为暂停 + jobService.pauseSystemJob(jobEntity); + return Result.ok(); + } + + @Override + public Result handRun(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + jobEntity.setOnce(true); + jobEntity.setSaveLog(false); + ScheduleUtils.run(scheduler, jobEntity); + return Result.ok(); + } + + private ScheduleJobEntity buildJobEntity(Long id) { + DataGovernanceMetadataCollectDto collectDto = dataMetadataCollectApi.getById(id).getData(); + return ScheduleJobEntity.builder().typeId(id).projectId(collectDto.getProjectId()).jobType(QuartzJobType.DATA_GOVERNANCE.getValue()).jobName(String.format("[%s]%s", id.toString(), collectDto.getName())).concurrent(ScheduleConcurrentEnum.NO.getValue()) + .beanName("dataGovernanceMetadataCollectTask").method("run").jobGroup(JobGroupEnum.DATA_GOVERNANCE.getValue()).saveLog(true).cronExpression(collectDto.getCron()).status(ScheduleStatusEnum.NORMAL.getValue()) + .params(String.valueOf(id)).once(MetadataCollectType.ONCE.getValue().equals(collectDto.getTaskType())).build(); + + } +} diff --git a/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceQualityApiImpl.java b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceQualityApiImpl.java new file mode 100644 index 0000000..50a9ce8 --- /dev/null +++ b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataGovernanceQualityApiImpl.java @@ -0,0 +1,67 @@ +package net.srt.quartz.api; + +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.governance.DataQualityApi; +import net.srt.api.module.data.governance.constant.MetadataCollectType; +import net.srt.api.module.data.governance.dto.DataGovernanceQualityConfigDto; +import net.srt.api.module.quartz.QuartzDataGovernanceQualityApi; +import net.srt.api.module.quartz.constant.QuartzJobType; +import net.srt.framework.common.utils.Result; +import net.srt.quartz.entity.ScheduleJobEntity; +import net.srt.quartz.enums.JobGroupEnum; +import net.srt.quartz.enums.ScheduleConcurrentEnum; +import net.srt.quartz.enums.ScheduleStatusEnum; +import net.srt.quartz.service.ScheduleJobService; +import net.srt.quartz.utils.ScheduleUtils; +import org.quartz.Scheduler; +import org.springframework.web.bind.annotation.RestController; + +/** + * 短信服务API + * + * @author 阿沐 babamu@126.com + */ +@RestController +@RequiredArgsConstructor +public class QuartzDataGovernanceQualityApiImpl implements QuartzDataGovernanceQualityApi { + + private final Scheduler scheduler; + private final DataQualityApi dataQualityApi; + private final ScheduleJobService jobService; + + @Override + public Result release(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + //判断是否存在,不存在,新增,存在,设置主键 + jobService.buildSystemJob(jobEntity); + ScheduleUtils.createScheduleJob(scheduler, jobEntity); + return Result.ok(); + } + + @Override + public Result cancel(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + jobService.buildSystemJob(jobEntity); + ScheduleUtils.deleteScheduleJob(scheduler, jobEntity); + //更新任务状态为暂停 + jobService.pauseSystemJob(jobEntity); + return Result.ok(); + } + + @Override + public Result handRun(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + jobEntity.setOnce(true); + jobEntity.setSaveLog(false); + ScheduleUtils.run(scheduler, jobEntity); + return Result.ok(); + } + + private ScheduleJobEntity buildJobEntity(Long id) { + DataGovernanceQualityConfigDto qualityConfigDto = dataQualityApi.getById(id).getData(); + return ScheduleJobEntity.builder().typeId(id).projectId(qualityConfigDto.getProjectId()).jobType(QuartzJobType.DATA_QUALITY.getValue()).jobName(String.format("[%s]%s", id.toString(), qualityConfigDto.getName())).concurrent(ScheduleConcurrentEnum.NO.getValue()) + .beanName("dataQualityTask").method("run").jobGroup(JobGroupEnum.DATA_QUALITY.getValue()).saveLog(true).cronExpression(qualityConfigDto.getCron()).status(ScheduleStatusEnum.NORMAL.getValue()) + .params(String.valueOf(id)).once(MetadataCollectType.ONCE.getValue().equals(qualityConfigDto.getTaskType())).build(); + + } +} diff --git a/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataProductionScheduleApiImpl.java b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataProductionScheduleApiImpl.java new file mode 100644 index 0000000..7866bed --- /dev/null +++ b/srt-cloud-module/srt-cloud-quartz/src/main/java/net/srt/quartz/api/QuartzDataProductionScheduleApiImpl.java @@ -0,0 +1,57 @@ +package net.srt.quartz.api; + +import lombok.RequiredArgsConstructor; +import net.srt.api.module.data.development.DataProductionScheduleApi; +import net.srt.api.module.data.development.dto.DataProductionScheduleDto; +import net.srt.api.module.quartz.QuartzDataProductionScheduleApi; +import net.srt.api.module.quartz.constant.QuartzJobType; +import net.srt.framework.common.utils.Result; +import net.srt.quartz.entity.ScheduleJobEntity; +import net.srt.quartz.enums.JobGroupEnum; +import net.srt.quartz.enums.ScheduleConcurrentEnum; +import net.srt.quartz.enums.ScheduleStatusEnum; +import net.srt.quartz.service.ScheduleJobService; +import net.srt.quartz.utils.ScheduleUtils; +import org.quartz.Scheduler; +import org.springframework.web.bind.annotation.RestController; + +/** + * 短信服务API + * + * @author 阿沐 babamu@126.com + */ +@RestController +@RequiredArgsConstructor +public class QuartzDataProductionScheduleApiImpl implements QuartzDataProductionScheduleApi { + + private final Scheduler scheduler; + private final DataProductionScheduleApi scheduleApi; + private final ScheduleJobService jobService; + + @Override + public Result release(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + //判断是否存在,不存在,新增,存在,设置主键 + jobService.buildSystemJob(jobEntity); + ScheduleUtils.createScheduleJob(scheduler, jobEntity); + return Result.ok(); + } + + @Override + public Result cancle(Long id) { + ScheduleJobEntity jobEntity = buildJobEntity(id); + jobService.buildSystemJob(jobEntity); + ScheduleUtils.deleteScheduleJob(scheduler, jobEntity); + //更新任务状态为暂停 + jobService.pauseSystemJob(jobEntity); + return Result.ok(); + } + + + private ScheduleJobEntity buildJobEntity(Long id) { + DataProductionScheduleDto scheduleDto = scheduleApi.getById(id).getData(); + return ScheduleJobEntity.builder().typeId(id).projectId(scheduleDto.getProjectId()).jobType(QuartzJobType.DATA_PRODUCTION.getValue()).jobName(String.format("[%s]%s", id.toString(), scheduleDto.getName())).concurrent(ScheduleConcurrentEnum.NO.getValue()) + .beanName("dataProductionScheduleTask").method("run").jobGroup(JobGroupEnum.DATA_PRODUCTION.getValue()).saveLog(true).cronExpression(scheduleDto.getCron()).status(ScheduleStatusEnum.NORMAL.getValue()) + .params(String.valueOf(id)).once(scheduleDto.getIfCycle() == 0).build(); + } +} diff --git a/srt-data-development/src/main/java/net/srt/disposition/dto/DataProductionTreeDto.java b/srt-data-development/src/main/java/net/srt/disposition/dto/DataProductionTreeDto.java index cbfa2ed..4ab7101 100644 --- a/srt-data-development/src/main/java/net/srt/disposition/dto/DataProductionTreeDto.java +++ b/srt-data-development/src/main/java/net/srt/disposition/dto/DataProductionTreeDto.java @@ -1,31 +1,10 @@ package net.srt.disposition.dto; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -@Data +/** + * @BelongsProject: srt_cloud + * @BelongsPackage: net.srt.disposition.dto + * @Author: jpz + * @CreateTime: 2023/12/23 9:09 + */ public class DataProductionTreeDto { - private Integer id; - private Integer parentId; - private Integer ifLeaf; - private Long taskId; - private String taskType; - private String parentPath; - private String path; - private Integer orderNo; - private String label; - private Long metamodelId; - private String name; - private String icon; - private String code; - private Boolean builtin; - private String description; - private Long projectId; - private Integer creator; - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") - private Date creatTime; } diff --git a/srt-data-development/src/main/java/net/srt/disposition/service/impl/DataProductionServiceImpl.java b/srt-data-development/src/main/java/net/srt/disposition/service/impl/DataProductionServiceImpl.java index 4fb19ed..3446078 100644 --- a/srt-data-development/src/main/java/net/srt/disposition/service/impl/DataProductionServiceImpl.java +++ b/srt-data-development/src/main/java/net/srt/disposition/service/impl/DataProductionServiceImpl.java @@ -56,7 +56,7 @@ public class DataProductionServiceImpl extends BaseServiceImpl getChild(Long id, List nodeVos) { + private static List getChild(Integer id, List nodeVos) { // 子菜单 List childList = new ArrayList<>(10); for (DataProductionTreeVo node : nodeVos) { From 4b33d46b792fba67d3e8cf5404eb4ae3d596e77a Mon Sep 17 00:00:00 2001 From: jpz <3185133571@qq.com> Date: Sun, 24 Dec 2023 22:28:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E8=A7=84=E5=88=99=E9=85=8D=E7=BD=AE=E7=9B=AE=E5=BD=95=E6=A0=91?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QualityConfigController.java | 1 + .../srt/service/impl/MetadataServiceimpl.java | 226 +----------------- 2 files changed, 4 insertions(+), 223 deletions(-) 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 66dc26b..1bc216a 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,6 +25,7 @@ import java.util.List; @AllArgsConstructor public class QualityConfigController { private final QualityConfigService qualityConfigService; + @GetMapping("page") @Operation(summary = "分页") public Result> page(@Valid QualityConfigQuery query){ 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 8609811..1e64ca1 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 @@ -1,232 +1,12 @@ package net.srt.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import io.minio.messages.Metadata; -import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.servers.Server; import lombok.AllArgsConstructor; -import lombok.Getter; -import net.srt.api.module.data.governance.constant.BuiltInMetamodel; -import net.srt.convert.MetadataConvert; import net.srt.dao.MetadataDao; -import net.srt.dao.MetadataPropertyDao; -import net.srt.dao.MetamodelDao; import net.srt.entity.MetadataEntity; -import net.srt.entity.MetadataPropertyEntity; -import net.srt.framework.common.cache.bean.Neo4jInfo; -import net.srt.framework.common.exception.ServerException; -import net.srt.framework.common.utils.BeanUtil; -import net.srt.framework.common.utils.BuildTreeUtils; -import net.srt.framework.common.utils.Result; -import net.srt.framework.common.utils.TreeNodeVo; import net.srt.framework.mybatis.service.impl.BaseServiceImpl; -import net.srt.framework.security.cache.TokenStoreCache; import net.srt.service.MetadataService; -import net.srt.vo.MetadataVo; -import net.srt.vo.MetamodelPropertyVO; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.GetMapping; -import srt.cloud.framework.dbswitch.common.util.StringUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * @BelongsProject: srt_cloud - * @BelongsPackage: net.srt.service.impl - * @Author: jpz - * @CreateTime: 2023/12/24 14:38 - */ -@Service +@Server @AllArgsConstructor -public class MetadataServiceimpl extends BaseServiceImplimplements MetadataService { - private final MetamodelDao metamodelDao; - private final MetadataPropertyDao metadataPropertyDao; - private final TokenStoreCache tokenStoreCache; - @Override - public List listByPatenId(Long parentId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(MetadataEntity::getParentId,parentId).orderByAsc(MetadataEntity::getOrderNo); - dataScopeWithOrgId(wrapper); - List list = baseMapper.selectList(wrapper); - return BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ - newItm.setLabel(oldItm.getName()); - newItm.setValue(oldItm.getId()); - newItm.setLeaf(BuiltInMetamodel.COLUMN.getId().equals(oldItm.getMetamodelId())); - newItm.setDisabled(!BuiltInMetamodel.COLUMN.getId().equals(oldItm.getMetamodelId())); - if (newItm.getPath().contains("/")){ - newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); - } - }); - } - - @Override - public List listFloder() { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(MetadataEntity::getIfLeaf,1).orderByAsc(MetadataEntity::getOrderNo).orderByAsc(MetadataEntity::getId); - dataScopeWithOrgId(wrapper); - List list = baseMapper.selectList(wrapper); - List treeNodeVos=BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ - newItm.setLabel(oldItm.getName()); - newItm.setValue(oldItm.getId()); - if (newItm.getPath().contains("/")){ - newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); - } - }); - return BuildTreeUtils.buildTree(treeNodeVos); - } - - @Override - public List listDb() { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(MetadataEntity::getMetamodelId,BuiltInMetamodel.SCHEMA.getId(),BuiltInMetamodel.TABLE.getId()) - .or().isNull(MetadataEntity::getMetamodelId) - .orderByAsc(MetadataEntity::getOrderNo); - dataScopeWithOrgId(wrapper); - List list = baseMapper.selectList(wrapper); - List treeNodeVos=BeanUtil.copyListProperties(list,TreeNodeVo::new,(oldItm,newItm)->{ - newItm.setLabel(oldItm.getName()); - newItm.setValue(oldItm.getId()); - if (newItm.getPath().contains("/")){ - newItm.setParentPath(newItm.getPath().substring(0,newItm.getPath().lastIndexOf("/"))); - } - }); - return BuildTreeUtils.buildTree(treeNodeVos); - } - - @Override - public List listKeyword(String keyword) { - if (StringUtil.isBlank(keyword)){ - return listByPatenId(0L); - } - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.like(MetadataEntity::getName,keyword).or().like(MetadataEntity::getCode,keyword).orderByAsc(MetadataEntity::getOrderNo); - ArrayList arrayList = new ArrayList<>(); - //递归获取父级 - for (MetadataEntity metadataEntity : arrayList) { - recursionAddParent(metadataEntity,arrayList); - } - return null; - } - - @Override - public MetadataVo get(Long id) { - MetadataEntity metadataEntity = getById(id); - MetadataVo metadataVo = MetadataConvert.INSTANCE.convert(metadataEntity); - //获取元数据属性信息 - metadataVo.setProperties(metadataPropertyDao.listPropertyById(id,metadataVo.getMetamodelId())); - return metadataVo; - } - - @Override - public void save(MetadataVo vo) { - MetadataEntity entity=MetadataConvert.INSTANCE.convert(vo); - entity.setProjectId(getProjectId()); - entity.setPath(recursionPath(entity, null)); - buildField(entity); - MetadataEntity metadataEntity=baseMapper.selectById(vo.getParentId()); - if (metadataEntity!=null){ - entity.setDbType(metadataEntity.getDbType()); - entity.setDatasourceId(metadataEntity.getDatasourceId()); - entity.setCollectTaskId(metadataEntity.getCollectTaskId()); - } - baseMapper.insert(entity); - buildProperties(entity,vo.getProperties()); - } - - @Override - public void update(MetadataVo vo) { - MetadataEntity entity=MetadataConvert.INSTANCE.convert(vo); - entity.setProjectId(getProjectId()); - entity.setPath(recursionPath(entity,null)); - buildField(entity); - updateById(entity); - buildProperties(entity,vo.getProperties()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - //判断是否有子节点 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(MetadataEntity::getParentId,id).last("limit 1"); - if (baseMapper.selectOne(wrapper)!=null){ - throw new ServerException("存在子节点,不可以进行删除"); - } - removeById(id); - //删除属性 - LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); - wrapper1.eq(MetadataPropertyEntity::getMetadataId,id); - metadataPropertyDao.delete(wrapper1); - } - - @Override - public void updateNeo4j(Neo4jInfo neo4jInfo) { - tokenStoreCache.saveNeo4jInfo(getProjectId(),neo4jInfo); - } - - @Override - public Neo4jInfo getNeo4j() { - return tokenStoreCache.getNeo4jInfo(getProjectId()); - } - - private void buildProperties(MetadataEntity entity, List properties) { - if (!CollectionUtils.isEmpty(properties)){ - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(MetadataEntity::getMetamodelId,entity.getId()); - for (MetamodelPropertyVO property : properties) { - MetadataPropertyEntity metadataPropertyEntity = new MetadataPropertyEntity(); - metadataPropertyEntity.setMetamodelPropertyId(property.getId()); - metadataPropertyEntity.setMetadataId(entity.getId()); - metadataPropertyEntity.setProperty(property.getValue()); - metadataPropertyEntity.setProjectId(entity.getProjectId()); - if (property.getMetadataPropertyId()!=null){ - metadataPropertyEntity.setId(property.getMetadataPropertyId()); - metadataPropertyDao.updateById(metadataPropertyEntity); - }else { - metadataPropertyDao.insert(metadataPropertyEntity); - } - } - } - } - - private void buildField(MetadataEntity entity) { - if (entity.getMetamodelId() != null) { - entity.setIcon(metamodelDao.selectById(entity.getMetamodelId()).getIcon()); - } - if (entity.getIfLeaf() == 1 && entity.getMetamodelId() == null) { - entity.setIcon("/src/assets/folder.png"); - } - - } - - private String recursionPath(MetadataEntity entity, String path) { - if (StringUtil.isBlank(path)) { - path = entity.getName(); - } - if (entity.getParentId() != 0) { - MetadataEntity parent = getById(entity.getParentId()); - path = parent.getName() + "/" + path; - return recursionPath(parent, path); - } - return path; - } - - - private void recursionAddParent(MetadataEntity metadataEntity, ArrayList arrayList) { - if (arrayList.stream().noneMatch(item->metadataEntity.getId().equals(item.getId()))){ - //添加自己 - arrayList.add(metadataEntity); - } - //如果不是顶级 - if (metadataEntity.getProjectId()!=0){ - //获取父级,继续递归 - MetadataEntity parent = getById(metadataEntity.getParentId()); - recursionAddParent(parent,arrayList); - } - } - - +public class MetadataServiceImpl extends BaseServiceImpl implements MetadataService { }