From 1e852ba818c8016b2d3a48b203aab762a77045a4 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Mon, 23 Dec 2024 15:13:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/api/ApplicationApiController.java | 2 +- .../deploy/api/EnvironmentApiController.java | 26 +++++++++ .../deploy/api/ProjectApiController.java | 2 +- .../converter/EnvironmentConverter.java | 10 ++++ .../backend/deploy/dto/ApplicationDTO.java | 12 ----- .../backend/deploy/dto/EnvironmentDTO.java | 40 ++++++++++++++ .../deploy/backend/deploy/dto/ProjectDTO.java | 2 +- .../backend/deploy/entity/Application.java | 39 ++++++++++++++ .../backend/deploy/entity/Environment.java | 53 +++++++++++++++++++ .../deploy/backend/deploy/entity/Project.java | 2 +- .../deploy/query/EnvironmentQuery.java | 33 ++++++++++++ .../repository/IEnvironmentRepository.java | 12 +++++ .../deploy/service/IEnvironmentService.java | 12 +++++ .../service/impl/EnvironmentServiceImpl.java | 14 +++++ .../db/migration/V1.0.0__init_schema.sql | 30 ++++++++++- .../db/migration/V1.0.1__init_data.sql | 13 ++--- 16 files changed, 277 insertions(+), 25 deletions(-) create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/EnvironmentConverter.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/EnvironmentDTO.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Environment.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/query/EnvironmentQuery.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IEnvironmentRepository.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IEnvironmentService.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/EnvironmentServiceImpl.java diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java index 11af320a..a9529303 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationApiController.java @@ -13,7 +13,7 @@ import java.util.List; @Tag(name = "应用管理", description = "应用管理相关接口") @RestController -@RequestMapping("/api/v1/application") +@RequestMapping("/api/v1/applications") public class ApplicationApiController extends BaseController { @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java new file mode 100644 index 00000000..d7bfff5d --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/EnvironmentApiController.java @@ -0,0 +1,26 @@ +package com.qqchen.deploy.backend.deploy.api; + +import com.qqchen.deploy.backend.deploy.dto.EnvironmentDTO; +import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.deploy.query.EnvironmentQuery; +import com.qqchen.deploy.backend.framework.controller.BaseController; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 环境管理API控制器 + */ +@Tag(name = "环境管理", description = "环境管理相关接口") +@RestController +@RequestMapping("/api/v1/environments") +public class EnvironmentApiController extends BaseController { + + @Override + protected void exportData(HttpServletResponse response, List data) { + // TODO: 实现导出逻辑 + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectApiController.java index 46c3e33d..a9d5a039 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectApiController.java @@ -13,7 +13,7 @@ import java.util.List; @Tag(name = "项目管理", description = "项目管理相关接口") @RestController -@RequestMapping("/api/v1/project") +@RequestMapping("/api/v1/projects") public class ProjectApiController extends BaseController { @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/EnvironmentConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/EnvironmentConverter.java new file mode 100644 index 00000000..b6500191 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/EnvironmentConverter.java @@ -0,0 +1,10 @@ +package com.qqchen.deploy.backend.deploy.converter; + +import com.qqchen.deploy.backend.deploy.dto.EnvironmentDTO; +import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.framework.converter.BaseConverter; +import org.mapstruct.Mapper; + +@Mapper(config = BaseConverter.class) +public interface EnvironmentConverter extends BaseConverter { +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ApplicationDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ApplicationDTO.java index d531a280..9e04dd95 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ApplicationDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ApplicationDTO.java @@ -24,18 +24,6 @@ public class ApplicationDTO extends BaseDTO { @NotBlank(message = "应用状态不能为空") private String appStatus; - private String repoUrl; - - private String repoBranch; - - private String repoType; - - private String buildType; - - private String devLanguage; - - private String devFramework; - @NotNull(message = "排序号不能为空") private Integer sort; } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/EnvironmentDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/EnvironmentDTO.java new file mode 100644 index 00000000..1cbac961 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/EnvironmentDTO.java @@ -0,0 +1,40 @@ +package com.qqchen.deploy.backend.deploy.dto; + +import com.qqchen.deploy.backend.framework.dto.BaseDTO; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 环境DTO + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "环境DTO") +public class EnvironmentDTO extends BaseDTO { + + @Schema(description = "租户编码") + @NotBlank(message = "租户编码不能为空") + private String tenantCode; + + @Schema(description = "项目ID") + @NotNull(message = "项目ID不能为空") + private Long projectId; + + @Schema(description = "环境编码") + @NotBlank(message = "环境编码不能为空") + private String envCode; + + @Schema(description = "环境名称") + @NotBlank(message = "环境名称不能为空") + private String envName; + + @Schema(description = "环境描述") + private String envDesc; + + @Schema(description = "排序号") + @NotNull(message = "排序号不能为空") + private Integer sort; +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectDTO.java index ac1a02fa..4e638eca 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectDTO.java @@ -10,7 +10,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class ProjectDTO extends BaseDTO { - @NotNull(message = "租户ID不能为空") +// @NotNull(message = "租户ID不能为空") private Long tenantId; @NotBlank(message = "项目编码不能为空") diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Application.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Application.java index 2727445f..d0c77163 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Application.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Application.java @@ -6,45 +6,84 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; +/** + * 应用实体 + */ @Data @EqualsAndHashCode(callSuper = true) @jakarta.persistence.Entity @Table(name = "deploy_application") public class Application extends Entity { + /** + * 所属项目ID + */ @Column(name = "project_id", nullable = false) private Long projectId; + /** + * 应用编码 + */ @Column(name = "app_code", nullable = false) private String appCode; + /** + * 应用名称 + */ @Column(name = "app_name", nullable = false) private String appName; + /** + * 应用描述 + */ @Column(name = "app_desc") private String appDesc; + /** + * 应用状态 + */ @Column(name = "app_status", nullable = false) private String appStatus; + /** + * 代码仓库地址 + */ @Column(name = "repo_url") private String repoUrl; + /** + * 代码分支 + */ @Column(name = "repo_branch") private String repoBranch; + /** + * 仓库类型(如:Git/SVN) + */ @Column(name = "repo_type") private String repoType; + /** + * 构建类型(如:Maven/Gradle) + */ @Column(name = "build_type") private String buildType; + /** + * 开发语言 + */ @Column(name = "dev_language") private String devLanguage; + /** + * 开发框架 + */ @Column(name = "dev_framework") private String devFramework; + /** + * 排序号 + */ @Column(name = "sort", nullable = false) private Integer sort; } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Environment.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Environment.java new file mode 100644 index 00000000..7f659105 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Environment.java @@ -0,0 +1,53 @@ +package com.qqchen.deploy.backend.deploy.entity; + +import com.qqchen.deploy.backend.framework.domain.Entity; +import jakarta.persistence.Column; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 环境实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@jakarta.persistence.Entity +@Table(name = "deploy_environment") +public class Environment extends Entity { + + /** + * 租户编码 + */ + @Column(name = "tenant_code", nullable = false) + private String tenantCode; + + /** + * 项目ID + */ + @Column(name = "project_id", nullable = false) + private Long projectId; + + /** + * 环境编码 + */ + @Column(name = "env_code", nullable = false) + private String envCode; + + /** + * 环境名称 + */ + @Column(name = "env_name", nullable = false) + private String envName; + + /** + * 环境描述 + */ + @Column(name = "env_desc") + private String envDesc; + + /** + * 排序号 + */ + @Column(name = "sort", nullable = false) + private Integer sort; +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java index 7b12e871..88a87bee 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java @@ -18,7 +18,7 @@ public class Project extends Entity { /** * 租户ID */ - @Column(name = "tenant_id", nullable = false) + @Column(name = "tenant_id") private Long tenantId; /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/EnvironmentQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/EnvironmentQuery.java new file mode 100644 index 00000000..1c9c87f6 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/EnvironmentQuery.java @@ -0,0 +1,33 @@ +package com.qqchen.deploy.backend.deploy.query; + +import com.qqchen.deploy.backend.framework.annotation.QueryField; +import com.qqchen.deploy.backend.framework.enums.QueryType; +import com.qqchen.deploy.backend.framework.query.BaseQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 环境查询对象 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "环境查询对象") +public class EnvironmentQuery extends BaseQuery { + + @Schema(description = "租户编码") + @QueryField(field = "tenantCode", type = QueryType.LIKE) + private String tenantCode; + + @Schema(description = "项目ID") + @QueryField(field = "projectId", type = QueryType.EQUAL) + private Long projectId; + + @Schema(description = "环境编码") + @QueryField(field = "envCode", type = QueryType.LIKE) + private String envCode; + + @Schema(description = "环境名称") + @QueryField(field = "envName", type = QueryType.LIKE) + private String envName; +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IEnvironmentRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IEnvironmentRepository.java new file mode 100644 index 00000000..f5b53b51 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IEnvironmentRepository.java @@ -0,0 +1,12 @@ +package com.qqchen.deploy.backend.deploy.repository; + +import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.framework.repository.IBaseRepository; +import org.springframework.stereotype.Repository; + +/** + * 环境数据访问接口 + */ +@Repository +public interface IEnvironmentRepository extends IBaseRepository { +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IEnvironmentService.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IEnvironmentService.java new file mode 100644 index 00000000..c1f146a7 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IEnvironmentService.java @@ -0,0 +1,12 @@ +package com.qqchen.deploy.backend.deploy.service; + +import com.qqchen.deploy.backend.deploy.dto.EnvironmentDTO; +import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.deploy.query.EnvironmentQuery; +import com.qqchen.deploy.backend.framework.service.IBaseService; + +/** + * 环境服务接口 + */ +public interface IEnvironmentService extends IBaseService { +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/EnvironmentServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/EnvironmentServiceImpl.java new file mode 100644 index 00000000..4c334ba8 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/EnvironmentServiceImpl.java @@ -0,0 +1,14 @@ +package com.qqchen.deploy.backend.deploy.service.impl; + +import com.qqchen.deploy.backend.deploy.dto.EnvironmentDTO; +import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.deploy.service.IEnvironmentService; +import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 环境服务实现类 + */ +@Service +public class EnvironmentServiceImpl extends BaseServiceImpl implements IEnvironmentService { +} \ No newline at end of file diff --git a/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql b/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql index af67adff..875dfcd5 100644 --- a/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql +++ b/backend/src/main/resources/db/migration/V1.0.0__init_schema.sql @@ -552,7 +552,7 @@ CREATE TABLE deploy_project deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除', -- 业务字段 - tenant_id BIGINT NOT NULL COMMENT '租户ID', + tenant_id BIGINT DEFAULT NULL COMMENT '租户ID', project_code VARCHAR(50) NOT NULL COMMENT '项目编码', project_name VARCHAR(100) NOT NULL COMMENT '项目名称', project_desc VARCHAR(255) NULL COMMENT '项目描述', @@ -603,3 +603,31 @@ CREATE TABLE deploy_application REFERENCES deploy_project (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用表'; +-- 环境表 +CREATE TABLE deploy_environment +( + -- 业务字段 + tenant_code VARCHAR(50) NOT NULL COMMENT '租户编码', + project_id BIGINT NOT NULL COMMENT '项目ID', + env_code VARCHAR(50) NOT NULL COMMENT '环境编码', + env_name VARCHAR(100) NOT NULL COMMENT '环境名称', + env_desc VARCHAR(255) NULL COMMENT '环境描述', + sort INT NOT NULL DEFAULT 0 COMMENT '排序号', + + -- 基础字段 + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', + create_by VARCHAR(100) NULL COMMENT '创建人', + create_time DATETIME(6) NULL COMMENT '创建时间', + update_by VARCHAR(100) NULL COMMENT '更新人', + update_time DATETIME(6) NULL COMMENT '更新时间', + version INT NOT NULL DEFAULT 1 COMMENT '版本号', + deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除', + + -- 索引 + INDEX idx_project_id (project_id) COMMENT '项目ID索引', + UNIQUE INDEX uk_project_env_code (project_id, env_code) COMMENT '项目下环境编码唯一', + + CONSTRAINT fk_environment_project FOREIGN KEY (project_id) + REFERENCES deploy_project (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='环境表'; + diff --git a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql index 07ea914b..faee3e93 100644 --- a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql +++ b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql @@ -73,16 +73,13 @@ VALUES -- 节点管理 (103, '节点管理', '/workflow/node-design', '/src/pages/workflow/nodedesign/design/index', 'ControlOutlined', 2, 100, 40, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), --- 项目管理 -(300, '项目管理', '/project', 'Layout', 'ProjectOutlined', 1, NULL, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), --- 项目组列表 -(301, '项目组列表', '/project/list', '/src/pages/project/list/index', 'UnorderedListOutlined', 2, 300, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), +(200, '部署管理', '/deploy', '', 'DeploymentUnitOutlined', 2, 0, 50, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), --- 应用管理 -(400, '应用管理', '/application', 'Layout', 'AppstoreOutlined', 1, NULL, 5, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), --- 应用列表 -(401, '应用列表', '/application/list', '/src/pages/application/list/index', 'UnorderedListOutlined', 2, 400, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE); +(201, '项目组管理', '/deploy/project', '/src/pages/Deploy/Project/List/index', 'ProjectOutlined', 2, 200, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), +(202, '应用管理', '/deploy/application', '/src/pages/Deploy/Application/List/index', 'AppstoreOutlined', 2, 200, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), + +(203, '环境管理', '/deploy/environment', '/src/pages/Deploy/Environment/List/index', 'CloudOutlined', 2, 200, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE); -- 初始化角色数据 INSERT INTO sys_role (id, create_time, code, name, type, description, sort) VALUES