From 6d63c20b7f9b27e8ae10db997fece534b02cd040 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Thu, 21 Nov 2024 00:11:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E5=A2=9E=E5=8A=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=B5=84=E6=BA=90=E5=88=9B=E5=BB=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/jpa.xml | 2 +- .../components/resource/dialog-resource.js | 2 +- .../controller/DataResourceController.java | 71 ++++++++++++++++++- .../domain/resource/entity/DataResource.java | 5 +- .../entity/format/CsvResourceFormat.java | 4 ++ .../entity/format/JsonLineResourceFormat.java | 4 ++ .../entity/format/JsonResourceFormat.java | 4 ++ .../resource/entity/type/ApiResourceType.java | 4 ++ .../entity/type/DatabaseResourceType.java | 4 ++ .../entity/type/FileResourceType.java | 4 ++ .../resource/entity/type/FtpResourceType.java | 5 ++ .../entity/type/HDFSResourceType.java | 4 ++ .../repository/DataResourceRepository.java | 10 +++ .../repository/ResourceFormatRepository.java | 11 +++ .../repository/ResourceTypeRepository.java | 11 +++ .../resource/service/DataResourceService.java | 51 +++++++++++++ .../user/repository/UserRepository.java | 5 -- 17 files changed, 189 insertions(+), 12 deletions(-) create mode 100644 gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java create mode 100644 gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceFormatRepository.java create mode 100644 gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceTypeRepository.java create mode 100644 gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java diff --git a/.idea/jpa.xml b/.idea/jpa.xml index 898e07a..27db4c4 100644 --- a/.idea/jpa.xml +++ b/.idea/jpa.xml @@ -1,6 +1,6 @@ - + diff --git a/gringotts-frontend/components/resource/dialog-resource.js b/gringotts-frontend/components/resource/dialog-resource.js index deb03cd..0cb660b 100644 --- a/gringotts-frontend/components/resource/dialog-resource.js +++ b/gringotts-frontend/components/resource/dialog-resource.js @@ -191,7 +191,7 @@ export function resourceAddDialog() { { type: 'input-text', label: '文件筛选', - name: 'ftpRegex', + name: 'ftpRegexFilter', description: '正则表达式,用于匹配文件的路径,只有符合筛选条件的文件才会被采集;若为空则默认采集全部文件', ...clearable, }, diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/controller/DataResourceController.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/controller/DataResourceController.java index 71ef70c..e8d5616 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/controller/DataResourceController.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/controller/DataResourceController.java @@ -1,9 +1,26 @@ package com.eshore.gringotts.web.domain.resource.controller; +import cn.hutool.core.util.EnumUtil; +import com.eshore.gringotts.web.domain.resource.entity.format.CsvResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.format.JsonLineResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.format.JsonResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.format.LineResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.format.NoneResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.type.ApiResourceType; +import com.eshore.gringotts.web.domain.resource.entity.type.DatabaseResourceType; +import com.eshore.gringotts.web.domain.resource.entity.type.FileResourceType; +import com.eshore.gringotts.web.domain.resource.entity.type.FtpResourceType; +import com.eshore.gringotts.web.domain.resource.entity.type.HDFSResourceType; +import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType; +import com.eshore.gringotts.web.domain.resource.service.DataResourceService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -20,9 +37,59 @@ import org.springframework.web.bind.annotation.RestController; public class DataResourceController { private static final Logger logger = LoggerFactory.getLogger(DataResourceController.class); + private final ObjectMapper mapper; + private final DataResourceService dataResourceService; + + public DataResourceController(Jackson2ObjectMapperBuilder builder, DataResourceService dataResourceService) { + this.mapper = builder.build(); + this.dataResourceService = dataResourceService; + } + @PostMapping("/create") - public void create(@RequestBody CreateRequest request) { + public void create(@RequestBody CreateRequest request) throws JsonProcessingException { logger.info("Create request: {}", request); + ResourceType type = null; + switch (request.resourceType) { + case "api": + type = new ApiResourceType(request.apiUrl, request.apiUsername, request.apiPassword); + break; + case "file": + type = new FileResourceType(request.filePath); + break; + case "database": + type = new DatabaseResourceType( + request.databaseJdbc, + request.databaseUsername, + request.databasePassword, + EnumUtil.fromString(DatabaseResourceType.Type.class, request.databaseType) + ); + break; + case "hdfs": + type = new HDFSResourceType(request.coreSiteFile, request.hdfsSiteFile); + break; + case "ftp": + type = new FtpResourceType(request.ftpUrl, request.ftpUsername, request.ftpPassword, request.ftpPath, request.ftpRegexFilter); + break; + } + ResourceFormat format = null; + switch (request.formatType) { + case "NONE": + format = new NoneResourceFormat(); + break; + case "LINE": + format = new LineResourceFormat(); + break; + case "JSON": + format = new JsonResourceFormat(mapper.writeValueAsString(request.jsonSchema)); + break; + case "JSON_LINE": + format = new JsonLineResourceFormat(mapper.writeValueAsString(request.jsonLineSchema)); + break; + case "CSV": + format = new CsvResourceFormat(mapper.writeValueAsString(request.csvSchema)); + break; + } + dataResourceService.create(request.name, request.description, format, type); } @Data @@ -44,7 +111,7 @@ public class DataResourceController { private String ftpUsername; private String ftpPassword; private String ftpPath; - private String ftpRegex; + private String ftpRegexFilter; private String formatType; private Map jsonSchema; private Map jsonLineSchema; diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/DataResource.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/DataResource.java index 1321d50..881db23 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/DataResource.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/DataResource.java @@ -5,8 +5,9 @@ import com.eshore.gringotts.web.domain.entity.SimpleEntity; import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat; import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType; import javax.persistence.Column; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import lombok.Getter; import lombok.Setter; @@ -15,8 +16,6 @@ import org.hibernate.annotations.DynamicUpdate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.Entity; import javax.persistence.EntityListeners; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; import javax.persistence.Table; @Getter diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/CsvResourceFormat.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/CsvResourceFormat.java index 561c39e..2b03d39 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/CsvResourceFormat.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/CsvResourceFormat.java @@ -2,7 +2,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -15,6 +17,8 @@ import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @DiscriminatorValue("CSV") public class CsvResourceFormat extends ResourceFormat{ diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonLineResourceFormat.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonLineResourceFormat.java index dbf04e0..2f6d65c 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonLineResourceFormat.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonLineResourceFormat.java @@ -2,7 +2,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -15,6 +17,8 @@ import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @DiscriminatorValue("JSON_LINE") public class JsonLineResourceFormat extends ResourceFormat{ diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonResourceFormat.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonResourceFormat.java index 31b9506..47e71db 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonResourceFormat.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/format/JsonResourceFormat.java @@ -3,7 +3,9 @@ package com.eshore.gringotts.web.domain.resource.entity.format; import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -16,6 +18,8 @@ import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @DiscriminatorValue("JSON") public class JsonResourceFormat extends ResourceFormat{ diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/ApiResourceType.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/ApiResourceType.java index 1aea3fa..ba18215 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/ApiResourceType.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/ApiResourceType.java @@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = Constants.TABLE_PREFIX + "resource_type_api") public class ApiResourceType extends ResourceType { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/DatabaseResourceType.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/DatabaseResourceType.java index fb88aed..1f6542a 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/DatabaseResourceType.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/DatabaseResourceType.java @@ -6,13 +6,17 @@ import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Table; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = Constants.TABLE_PREFIX + "resource_type_database") public class DatabaseResourceType extends ResourceType { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FileResourceType.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FileResourceType.java index 7611a9d..9b54a3b 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FileResourceType.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FileResourceType.java @@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = Constants.TABLE_PREFIX + "resource_type_file") public class FileResourceType extends ResourceType { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FtpResourceType.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FtpResourceType.java index 6e6eb6e..f1a4c48 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FtpResourceType.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/FtpResourceType.java @@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = Constants.TABLE_PREFIX + "resource_type_ftp") public class FtpResourceType extends ResourceType { @@ -19,4 +23,5 @@ public class FtpResourceType extends ResourceType { private String username; private String password; private String path; + private String regexFilter; } diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/HDFSResourceType.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/HDFSResourceType.java index 26ce01a..63530ed 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/HDFSResourceType.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/entity/type/HDFSResourceType.java @@ -4,13 +4,17 @@ import com.eshore.gringotts.core.Constants; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = Constants.TABLE_PREFIX + "resource_type_hdfs") public class HDFSResourceType extends ResourceType { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java new file mode 100644 index 0000000..4841b01 --- /dev/null +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java @@ -0,0 +1,10 @@ +package com.eshore.gringotts.web.domain.resource.repository; + +import com.blinkfox.fenix.jpa.FenixJpaRepository; +import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor; +import com.eshore.gringotts.web.domain.resource.entity.DataResource; +import org.springframework.stereotype.Repository; + +@Repository +public interface DataResourceRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor { +} diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceFormatRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceFormatRepository.java new file mode 100644 index 0000000..9b67a80 --- /dev/null +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceFormatRepository.java @@ -0,0 +1,11 @@ +package com.eshore.gringotts.web.domain.resource.repository; + +import com.blinkfox.fenix.jpa.FenixJpaRepository; +import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor; +import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface ResourceFormatRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor { +} \ No newline at end of file diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceTypeRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceTypeRepository.java new file mode 100644 index 0000000..4214458 --- /dev/null +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/ResourceTypeRepository.java @@ -0,0 +1,11 @@ +package com.eshore.gringotts.web.domain.resource.repository; + +import com.blinkfox.fenix.jpa.FenixJpaRepository; +import com.blinkfox.fenix.specification.FenixJpaSpecificationExecutor; +import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +@Repository +public interface ResourceTypeRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor { +} \ No newline at end of file diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java new file mode 100644 index 0000000..e68a384 --- /dev/null +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java @@ -0,0 +1,51 @@ +package com.eshore.gringotts.web.domain.resource.service; + +import com.eshore.gringotts.web.domain.resource.entity.DataResource; +import com.eshore.gringotts.web.domain.resource.entity.format.ResourceFormat; +import com.eshore.gringotts.web.domain.resource.entity.type.ResourceType; +import com.eshore.gringotts.web.domain.resource.repository.DataResourceRepository; +import com.eshore.gringotts.web.domain.resource.repository.ResourceFormatRepository; +import com.eshore.gringotts.web.domain.resource.repository.ResourceTypeRepository; +import com.eshore.gringotts.web.domain.user.entity.User; +import com.eshore.gringotts.web.domain.user.service.UserService; +import javax.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 数据资源服务 + * + * @author lanyuanxiaoyao + */ +@Service +public class DataResourceService { + private static final Logger log = LoggerFactory.getLogger(DataResourceService.class); + + private final DataResourceRepository dataResourceRepository; + private final ResourceTypeRepository resourceTypeRepository; + private final ResourceFormatRepository resourceFormatRepository; + private final UserService userService; + + public DataResourceService(DataResourceRepository dataResourceRepository, ResourceTypeRepository resourceTypeRepository, ResourceFormatRepository resourceFormatRepository, UserService userService) { + this.dataResourceRepository = dataResourceRepository; + this.resourceTypeRepository = resourceTypeRepository; + this.resourceFormatRepository = resourceFormatRepository; + this.userService = userService; + } + + @Transactional + public void create(String name, String description, ResourceFormat format, ResourceType type) { + resourceFormatRepository.save(format); + resourceTypeRepository.save(type); + DataResource resource = new DataResource(); + resource.setName(name); + resource.setDescription(description); + resource.setFormat(format); + resource.setType(type); + User user = userService.currentLoginUser(); + resource.setCreatedUser(user); + resource.setModifiedUser(user); + dataResourceRepository.save(resource); + } +} diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/repository/UserRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/repository/UserRepository.java index 811ab47..a414dda 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/repository/UserRepository.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/repository/UserRepository.java @@ -19,9 +19,4 @@ import org.springframework.transaction.annotation.Transactional; public interface UserRepository extends FenixJpaRepository, FenixJpaSpecificationExecutor { Boolean existsByUsername(String username); Optional findByUsername(String username); - - @Transactional - @Modifying - @Query("update User u set u.state = ?2 where u.username = ?1") - void updateStateByUsername(String username, User.State state); }