From cf0b5589d4c0a7ed6c90b38b083a1cb273dcc617 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Mon, 23 Dec 2024 17:00:35 +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 --- backend/docs/deploy-ease-workflow.md | 4 +- backend/docs/frontend-guide.md | 2 +- ...er.java => ProjectGroupApiController.java} | 12 +-- .../deploy/converter/ProjectConverter.java | 10 -- .../converter/ProjectGroupConverter.java | 10 ++ .../backend/deploy/dto/ApplicationDTO.java | 2 +- .../backend/deploy/dto/EnvironmentDTO.java | 4 - .../{ProjectDTO.java => ProjectGroupDTO.java} | 18 ++-- .../backend/deploy/entity/Application.java | 4 +- .../backend/deploy/entity/Environment.java | 8 +- .../deploy/backend/deploy/entity/Project.java | 53 ----------- .../backend/deploy/entity/ProjectGroup.java | 53 +++++++++++ .../entity/ProjectGroupEnvironment.java | 35 +++++++ .../deploy/query/ProjectGroupQuery.java | 24 +++++ .../backend/deploy/query/ProjectQuery.java | 24 ----- .../repository/IApplicationRepository.java | 2 +- .../repository/IProjectGroupRepository.java | 9 ++ .../deploy/repository/IProjectRepository.java | 10 -- .../deploy/service/IEnvironmentService.java | 19 +++- .../deploy/service/IProjectGroupService.java | 8 ++ .../deploy/service/IProjectService.java | 8 -- .../service/impl/EnvironmentServiceImpl.java | 48 ++++++++++ .../service/impl/ProjectGroupServiceImpl.java | 12 +++ .../service/impl/ProjectServiceImpl.java | 12 --- .../framework/repository/IBaseRepository.java | 3 +- .../db/migration/V1.0.0__init_schema.sql | 92 ++++++++++++------- .../db/migration/V1.0.1__init_data.sql | 10 +- .../src/main/resources/messages.properties | 6 +- 28 files changed, 306 insertions(+), 196 deletions(-) rename backend/src/main/java/com/qqchen/deploy/backend/deploy/api/{ProjectApiController.java => ProjectGroupApiController.java} (60%) delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectConverter.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectGroupConverter.java rename backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/{ProjectDTO.java => ProjectGroupDTO.java} (51%) delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroup.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroupEnvironment.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectGroupQuery.java delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectQuery.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectGroupRepository.java delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectRepository.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectGroupService.java delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectService.java create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectGroupServiceImpl.java delete mode 100644 backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectServiceImpl.java diff --git a/backend/docs/deploy-ease-workflow.md b/backend/docs/deploy-ease-workflow.md index 1b25f2b7..446c55b8 100644 --- a/backend/docs/deploy-ease-workflow.md +++ b/backend/docs/deploy-ease-workflow.md @@ -278,7 +278,7 @@ CREATE TABLE sys_approval_record ( #### 3.1.1 项目集管理 ```yaml -/api/v1/project-group: +/api/v1/projectGroup-group: post: summary: 创建项目集 description: | @@ -329,7 +329,7 @@ CREATE TABLE sys_approval_record ( #### 3.1.2 项目管理 ```yaml -/api/v1/project: +/api/v1/projectGroup: post: summary: 创建项目 description: | diff --git a/backend/docs/frontend-guide.md b/backend/docs/frontend-guide.md index 07c46ca7..8bb3ba45 100644 --- a/backend/docs/frontend-guide.md +++ b/backend/docs/frontend-guide.md @@ -601,7 +601,7 @@ const JenkinsNodeConfig = { name: 'Jenkins构建', executor: 'JENKINS', config: { - jenkinsJob: 'my-project-build', + jenkinsJob: 'my-projectGroup-build', parameters: { BRANCH: 'master', ENV: 'prod' 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/ProjectGroupApiController.java similarity index 60% rename from backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectApiController.java rename to backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ProjectGroupApiController.java index a9d5a039..2b9e4411 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/ProjectGroupApiController.java @@ -1,8 +1,8 @@ package com.qqchen.deploy.backend.deploy.api; -import com.qqchen.deploy.backend.deploy.dto.ProjectDTO; -import com.qqchen.deploy.backend.deploy.entity.Project; -import com.qqchen.deploy.backend.deploy.query.ProjectQuery; +import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO; +import com.qqchen.deploy.backend.deploy.entity.ProjectGroup; +import com.qqchen.deploy.backend.deploy.query.ProjectGroupQuery; import com.qqchen.deploy.backend.framework.controller.BaseController; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; @@ -13,11 +13,11 @@ import java.util.List; @Tag(name = "项目管理", description = "项目管理相关接口") @RestController -@RequestMapping("/api/v1/projects") -public class ProjectApiController extends BaseController { +@RequestMapping("/api/v1/project-group") +public class ProjectGroupApiController extends BaseController { @Override - protected void exportData(HttpServletResponse response, List data) { + 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/converter/ProjectConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectConverter.java deleted file mode 100644 index 502cf312..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectConverter.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.qqchen.deploy.backend.deploy.converter; - -import com.qqchen.deploy.backend.deploy.dto.ProjectDTO; -import com.qqchen.deploy.backend.deploy.entity.Project; -import com.qqchen.deploy.backend.framework.converter.BaseConverter; -import org.mapstruct.Mapper; - -@Mapper(config = BaseConverter.class) -public interface ProjectConverter extends BaseConverter { -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectGroupConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectGroupConverter.java new file mode 100644 index 00000000..79326288 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/ProjectGroupConverter.java @@ -0,0 +1,10 @@ +package com.qqchen.deploy.backend.deploy.converter; + +import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO; +import com.qqchen.deploy.backend.deploy.entity.ProjectGroup; +import com.qqchen.deploy.backend.framework.converter.BaseConverter; +import org.mapstruct.Mapper; + +@Mapper(config = BaseConverter.class) +public interface ProjectGroupConverter 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 9e04dd95..e911e62a 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 @@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode; public class ApplicationDTO extends BaseDTO { @NotNull(message = "项目ID不能为空") - private Long projectId; + private Long projectGroupId; @NotBlank(message = "应用编码不能为空") private String appCode; 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 index 70be8bfb..db4cfdd2 100644 --- 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 @@ -20,10 +20,6 @@ public class EnvironmentDTO extends BaseDTO { @Schema(description = "租户编码") private String tenantCode; - @Schema(description = "项目ID") - @NotNull(message = "项目ID不能为空") - private Long projectId; - @Schema(description = "环境编码") @NotBlank(message = "环境编码不能为空") private String envCode; 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/ProjectGroupDTO.java similarity index 51% rename from backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectDTO.java rename to backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/ProjectGroupDTO.java index 4e638eca..bbb07146 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/ProjectGroupDTO.java @@ -8,21 +8,21 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -public class ProjectDTO extends BaseDTO { +public class ProjectGroupDTO extends BaseDTO { // @NotNull(message = "租户ID不能为空") - private Long tenantId; + private Long tenantCode; - @NotBlank(message = "项目编码不能为空") - private String projectCode; + @NotBlank(message = "项目组编码不能为空") + private String projectGroupCode; - @NotBlank(message = "项目名称不能为空") - private String projectName; + @NotBlank(message = "项目组名称不能为空") + private String projectGroupName; - private String projectDesc; + private String projectGroupDesc; - @NotBlank(message = "项目状态不能为空") - private String projectStatus; + @NotBlank(message = "项目组状态不能为空") + private String projectGroupStatus; @NotNull(message = "排序号不能为空") private Integer sort; 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 d0c77163..ec84f118 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 @@ -18,8 +18,8 @@ public class Application extends Entity { /** * 所属项目ID */ - @Column(name = "project_id", nullable = false) - private Long projectId; + @Column(name = "project_group_id", nullable = false) + private Long projectGroupId; /** * 应用编码 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 index d1e8672f..b4a4b69b 100644 --- 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 @@ -25,12 +25,6 @@ public class Environment extends Entity { @Column(name = "tenant_code") private String tenantCode; - /** - * 项目ID - */ - @Column(name = "project_id", nullable = false) - private Long projectId; - /** * 环境编码 */ @@ -68,4 +62,4 @@ public class Environment extends Entity { */ @Column(name = "sort", nullable = false) private Integer sort; -} \ No newline at end of file +} \ 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 deleted file mode 100644 index 88a87bee..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/Project.java +++ /dev/null @@ -1,53 +0,0 @@ -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_project") -public class Project extends Entity { - - /** - * 租户ID - */ - @Column(name = "tenant_id") - private Long tenantId; - - /** - * 项目编码 - */ - @Column(name = "project_code", nullable = false) - private String projectCode; - - /** - * 项目名称 - */ - @Column(name = "project_name", nullable = false) - private String projectName; - - /** - * 项目描述 - */ - @Column(name = "project_desc") - private String projectDesc; - - /** - * 项目状态 - */ - @Column(name = "project_status", nullable = false) - private String projectStatus; - - /** - * 排序号 - */ - @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/ProjectGroup.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroup.java new file mode 100644 index 00000000..ab3619eb --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroup.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_project_group") +public class ProjectGroup extends Entity { + + /** + * 租户ID + */ + @Column(name = "tenant_code") + private Long tenantCode; + + /** + * 项目组状态 + */ + @Column(name = "project_group_code", nullable = false) + private String projectGroupCode; + + /** + * 项目组状态 + */ + @Column(name = "project_group_name", nullable = false) + private String projectGroupName; + + /** + * 项目组状态 + */ + @Column(name = "project_group_desc") + private String projectGroupDesc; + + /** + * 项目组状态 + */ + @Column(name = "project_group_status", nullable = false) + private String projectGroupStatus; + + /** + * 排序号 + */ + @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/ProjectGroupEnvironment.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroupEnvironment.java new file mode 100644 index 00000000..28ad6bab --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/ProjectGroupEnvironment.java @@ -0,0 +1,35 @@ +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_project_group_environment") +public class ProjectGroupEnvironment extends Entity { + + /** + * 项目ID + */ + @Column(name = "project_group_id", nullable = false) + private Long projectGroupId; + + /** + * 环境ID + */ + @Column(name = "environment_id", nullable = false) + private Long environmentId; + + /** + * 是否启用 + */ + @Column(name = "enabled", nullable = false) + private Boolean enabled = true; +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectGroupQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectGroupQuery.java new file mode 100644 index 00000000..4c21241f --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectGroupQuery.java @@ -0,0 +1,24 @@ +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 lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class ProjectGroupQuery extends BaseQuery { + + @QueryField(field = "projectGroupCode", type = QueryType.LIKE) + private String projectGroupCode; + + @QueryField(field = "projectGroupName", type = QueryType.LIKE) + private String projectGroupName; + + @QueryField(field = "projectGroupStatus") + private String projectGroupStatus; + + @QueryField(field = "tenantCode") + private Long tenantCode; +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectQuery.java deleted file mode 100644 index 6819052b..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/query/ProjectQuery.java +++ /dev/null @@ -1,24 +0,0 @@ -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 lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@EqualsAndHashCode(callSuper = true) -public class ProjectQuery extends BaseQuery { - - @QueryField(field = "projectCode", type = QueryType.LIKE) - private String projectCode; - - @QueryField(field = "projectName", type = QueryType.LIKE) - private String projectName; - - @QueryField(field = "projectStatus") - private String projectStatus; - - @QueryField(field = "tenantId") - private Long tenantId; -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java index 500bd038..2629cc1a 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IApplicationRepository.java @@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository; @Repository public interface IApplicationRepository extends IBaseRepository { - boolean existsByAppCodeAndProjectIdAndDeletedFalse(String appCode, Long projectId); + boolean existsByAppCodeAndProjectGroupIdAndDeletedFalse(String appCode, Long projectId); } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectGroupRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectGroupRepository.java new file mode 100644 index 00000000..a59bf36b --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectGroupRepository.java @@ -0,0 +1,9 @@ +package com.qqchen.deploy.backend.deploy.repository; + +import com.qqchen.deploy.backend.deploy.entity.ProjectGroup; +import com.qqchen.deploy.backend.framework.repository.IBaseRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface IProjectGroupRepository extends IBaseRepository { +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectRepository.java deleted file mode 100644 index cd69bfc7..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IProjectRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.qqchen.deploy.backend.deploy.repository; - -import com.qqchen.deploy.backend.deploy.entity.Project; -import com.qqchen.deploy.backend.framework.repository.IBaseRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface IProjectRepository extends IBaseRepository { - boolean existsByProjectCodeAndTenantIdAndDeletedFalse(String projectCode, Long tenantId); -} \ 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 index c1f146a7..d47e8dfb 100644 --- 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 @@ -2,11 +2,28 @@ 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; +import java.util.List; + /** * 环境服务接口 */ public interface IEnvironmentService extends IBaseService { + + /** + * 获取项目的环境列表 + * + * @param projectGroupId 项目ID + * @return 环境列表 + */ + List getProjectEnvironments(Long projectGroupId); + + /** + * 更新项目的环境配置 + * + * @param projectId 项目ID + * @param environmentIds 环境ID列表 + */ + void updateProjectEnvironments(Long projectId, List environmentIds); } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectGroupService.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectGroupService.java new file mode 100644 index 00000000..a71ec439 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectGroupService.java @@ -0,0 +1,8 @@ +package com.qqchen.deploy.backend.deploy.service; + +import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO; +import com.qqchen.deploy.backend.deploy.entity.ProjectGroup; +import com.qqchen.deploy.backend.framework.service.IBaseService; + +public interface IProjectGroupService extends IBaseService { +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectService.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectService.java deleted file mode 100644 index 2e3d4403..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IProjectService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.qqchen.deploy.backend.deploy.service; - -import com.qqchen.deploy.backend.deploy.dto.ProjectDTO; -import com.qqchen.deploy.backend.deploy.entity.Project; -import com.qqchen.deploy.backend.framework.service.IBaseService; - -public interface IProjectService 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 index 4c334ba8..dcefa8ec 100644 --- 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 @@ -1,14 +1,62 @@ package com.qqchen.deploy.backend.deploy.service.impl; +import com.qqchen.deploy.backend.deploy.converter.EnvironmentConverter; import com.qqchen.deploy.backend.deploy.dto.EnvironmentDTO; import com.qqchen.deploy.backend.deploy.entity.Environment; +import com.qqchen.deploy.backend.deploy.entity.QEnvironment; +import com.qqchen.deploy.backend.deploy.entity.QProjectGroup; +import com.qqchen.deploy.backend.deploy.entity.QProjectGroupEnvironment; +import com.qqchen.deploy.backend.deploy.repository.IEnvironmentRepository; import com.qqchen.deploy.backend.deploy.service.IEnvironmentService; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; +import com.querydsl.jpa.impl.JPAQueryFactory; import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import jakarta.persistence.EntityManager; +import java.util.List; +import java.util.stream.Collectors; /** * 环境服务实现类 */ @Service public class EnvironmentServiceImpl extends BaseServiceImpl implements IEnvironmentService { + + @Resource + private IEnvironmentRepository environmentRepository; + + @Resource + private EnvironmentConverter environmentConverter; + + @Resource + private EntityManager entityManager; + + @Override + public List getProjectEnvironments(Long projectGroupId) { + QEnvironment environment = QEnvironment.environment; + QProjectGroupEnvironment projectEnvironment = QProjectGroupEnvironment.projectGroupEnvironment; + + JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); + + List environments = queryFactory + .select(environment) + .from(environment) + .innerJoin(projectEnvironment) + .on(projectEnvironment.environmentId.eq(environment.id)) + .where( + projectEnvironment.projectGroupId.eq(projectGroupId), + projectEnvironment.enabled.isTrue() + ) + .orderBy(environment.sort.asc()) + .fetch(); + + return environments.stream() + .map(environmentConverter::toDto) + .collect(Collectors.toList()); + } + + @Override + public void updateProjectEnvironments(Long projectId, List environmentIds) { + // TODO: 实现更新逻辑 + } } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectGroupServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectGroupServiceImpl.java new file mode 100644 index 00000000..270065a0 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectGroupServiceImpl.java @@ -0,0 +1,12 @@ +package com.qqchen.deploy.backend.deploy.service.impl; + +import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO; +import com.qqchen.deploy.backend.deploy.entity.ProjectGroup; +import com.qqchen.deploy.backend.deploy.service.IProjectGroupService; +import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class ProjectGroupServiceImpl extends BaseServiceImpl implements IProjectGroupService { + +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectServiceImpl.java deleted file mode 100644 index 347e9f3f..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ProjectServiceImpl.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.qqchen.deploy.backend.deploy.service.impl; - -import com.qqchen.deploy.backend.deploy.dto.ProjectDTO; -import com.qqchen.deploy.backend.deploy.entity.Project; -import com.qqchen.deploy.backend.deploy.service.IProjectService; -import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; -import org.springframework.stereotype.Service; - -@Service -public class ProjectServiceImpl extends BaseServiceImpl implements IProjectService { - -} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/framework/repository/IBaseRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/framework/repository/IBaseRepository.java index bda49972..82b94321 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/framework/repository/IBaseRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/framework/repository/IBaseRepository.java @@ -20,8 +20,7 @@ import java.util.Collection; import java.time.LocalDateTime; @NoRepositoryBean -public interface IBaseRepository, ID extends Serializable> - extends JpaRepository, QuerydslPredicateExecutor { +public interface IBaseRepository, ID extends Serializable> extends JpaRepository, QuerydslPredicateExecutor { // 基础查询方法 @Override 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 d4306afa..c186b83b 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 @@ -540,7 +540,7 @@ CREATE TABLE workflow_log -- -------------------------------------------------------------------------------------- -- 项目组表 -CREATE TABLE deploy_project +CREATE TABLE deploy_project_group ( -- 基础字段 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', @@ -552,19 +552,19 @@ CREATE TABLE deploy_project deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除', -- 业务字段 - 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 '项目描述', - project_status VARCHAR(50) NOT NULL DEFAULT 'ENABLED' COMMENT '项目状态:ENABLED-启用,DISABLED-禁用', + tenant_code BIGINT DEFAULT NULL COMMENT '租户CODE', + project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码', + project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称', + project_group_desc VARCHAR(255) NULL COMMENT '项目组描述', + project_group_status VARCHAR(50) NOT NULL DEFAULT 'ENABLED' COMMENT '项目组状态:ENABLED-启用,DISABLED-禁用', sort INT NOT NULL DEFAULT 0 COMMENT '排序号', -- 索引 - INDEX idx_tenant_id (tenant_id) COMMENT '租户ID索引', - UNIQUE INDEX uk_project_code (tenant_id, project_code) COMMENT '租户下项目编码唯一', + INDEX idx_tenant_id (tenant_code) COMMENT '租户ID索引', + UNIQUE INDEX uk_project_group_code (tenant_code, project_group_code) COMMENT '租户下项目组编码唯一', -- 外键约束 - CONSTRAINT fk_project_tenant FOREIGN KEY (tenant_id) + CONSTRAINT fk_project_tenant FOREIGN KEY (tenant_code) REFERENCES sys_tenant (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目组表'; @@ -581,7 +581,7 @@ CREATE TABLE deploy_application deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除', -- 业务字段 - project_id BIGINT NOT NULL COMMENT '所属项目ID', + project_group_id BIGINT NOT NULL COMMENT '所属项目组ID', app_code VARCHAR(50) NOT NULL COMMENT '应用编码', app_name VARCHAR(100) NOT NULL COMMENT '应用名称', app_desc VARCHAR(255) NULL COMMENT '应用描述', @@ -595,41 +595,63 @@ CREATE TABLE deploy_application sort INT NOT NULL DEFAULT 0 COMMENT '排序号', -- 索引 - INDEX idx_project_id (project_id) COMMENT '项目ID索引', - UNIQUE INDEX uk_app_code (project_id, app_code) COMMENT '项目下应用编码唯一', + INDEX idx_project_group_id (project_group_id) COMMENT '项目ID索引', + UNIQUE INDEX uk_app_code (project_group_id, app_code) COMMENT '项目下应用编码唯一', -- 外键约束 - CONSTRAINT fk_application_project FOREIGN KEY (project_id) - REFERENCES deploy_project (id) + CONSTRAINT fk_application_project_group FOREIGN KEY (project_group_id) + REFERENCES deploy_project_group (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用表'; -- 环境表 CREATE TABLE deploy_environment ( -- 业务字段 - tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户编码', - build_type VARCHAR(50) NULL COMMENT '构建方式:JENKINS-Jenkins构建,GITLAB_RUNNER-GitLab Runner构建,GITHUB_ACTION-GitHub Action构建', - deploy_type VARCHAR(50) NULL COMMENT '部署方式:K8S-Kubernetes集群部署,DOCKER-Docker容器部署,VM-虚拟机部署', - 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 '排序号', + tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户编码', + build_type VARCHAR(50) NULL COMMENT '构建方式:JENKINS-Jenkins构建,GITLAB_RUNNER-GitLab Runner构建,GITHUB_ACTION-GitHub Action构建', + deploy_type VARCHAR(50) NULL COMMENT '部署方式:K8S-Kubernetes集群部署,DOCKER-Docker容器部署,VM-虚拟机部署', + 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 '是否删除', + -- 基础字段 + 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) + UNIQUE INDEX uk_env_code (env_code) COMMENT '环境编码唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='环境表'; +-- 项目环境关联表 +CREATE TABLE deploy_project_group_environment +( + -- 业务字段 + project_group_id BIGINT NOT NULL COMMENT '项目ID', + environment_id BIGINT NOT NULL COMMENT '环境ID', + enabled BIT NOT NULL DEFAULT 1 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 '是否删除', + + -- 索引 + UNIQUE INDEX uk_project_group_environment (project_group_id, environment_id) COMMENT '项目组环境关联唯一', + + -- 外键约束 + CONSTRAINT fk_project_env_project FOREIGN KEY (project_group_id) + REFERENCES deploy_project_group (id), + CONSTRAINT fk_project_env_environment FOREIGN KEY (environment_id) + REFERENCES deploy_environment (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 17df0df3..7a1ed007 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 @@ -75,11 +75,11 @@ VALUES (200, '部署管理', '/deploy', '', 'DeploymentUnitOutlined', 2, 0, 50, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), -(201, '环境管理', '/deploy/environments', '/src/pages/Deploy/Environment/List/index', 'CloudOutlined', 2, 200, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), +(201, '环境管理', '/deploy/environments', '/src/pages/Deploy/Environment/List/index', 'CloudOutlined', 2, 200, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), -(203, '项目组管理', '/deploy/projects', '/src/pages/Deploy/Project/List/index', 'ProjectOutlined', 2, 200, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), +(203, '项目组管理', '/deploy/project-group', '/src/pages/Deploy/ProjectGroup/List/index', 'ProjectOutlined', 2, 200, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE), -(202, '应用管理', '/deploy/applications', '/src/pages/Deploy/Application/List/index', 'AppstoreOutlined', 2, 200, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE); +(202, '应用管理', '/deploy/applications', '/src/pages/Deploy/Application/List/index', 'AppstoreOutlined', 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) @@ -854,7 +854,7 @@ INSERT INTO workflow_definition ( -- -------------------------------------------------------------------------------------- -- 初始化项目组数据 -INSERT INTO deploy_project (id, create_by, create_time, tenant_id, project_code, project_name, project_desc, project_status, sort) +INSERT INTO deploy_project_group (id, create_by, create_time, tenant_code, project_group_code, project_group_name, project_group_desc, project_group_status, sort) VALUES (1, 'admin', NOW(), 1, 'DEMO', '示例项目组', '用于演示的项目组', 'ENABLED', 1), (2, 'admin', NOW(), 1, 'PLATFORM', '平台项目组', '平台相关的项目组', 'ENABLED', 2); @@ -862,7 +862,7 @@ VALUES -- 初始化应用数据 INSERT INTO deploy_application ( id, create_by, create_time, - project_id, app_code, app_name, app_desc, app_status, + project_group_id, app_code, app_name, app_desc, app_status, repo_url, repo_branch, repo_type, build_type, dev_language, dev_framework, sort ) VALUES diff --git a/backend/src/main/resources/messages.properties b/backend/src/main/resources/messages.properties index 7e668ff3..769dedfa 100644 --- a/backend/src/main/resources/messages.properties +++ b/backend/src/main/resources/messages.properties @@ -80,9 +80,9 @@ external.system.git.token.required=Git\u7CFB\u7EDF\u5FC5\u987B\u63D0\u4F9BToken repository.group.not.found=\u4ED3\u5E93\u7EC4\u4E0D\u5B58\u5728 repository.group.name.exists=\u4ED3\u5E93\u7EC4\u540D\u79F0"{0}"\u5DF2\u5B58\u5728 repository.group.path.exists=\u4ED3\u5E93\u7EC4\u8DEF\u5F84"{0}"\u5DF2\u5B58\u5728 -repository.project.not.found=\u4ED3\u5E93\u9879\u76EE\u4E0D\u5B58\u5728 -repository.project.name.exists=\u4ED3\u5E93\u9879\u76EE\u540D\u79F0"{0}"\u5DF2\u5B58\u5728 -repository.project.path.exists=\u4ED3\u5E93\u9879\u76EE\u8DEF\u5F84"{0}"\u5DF2\u5B58\u5728 +repository.projectGroup.not.found=\u4ED3\u5E93\u9879\u76EE\u4E0D\u5B58\u5728 +repository.projectGroup.name.exists=\u4ED3\u5E93\u9879\u76EE\u540D\u79F0"{0}"\u5DF2\u5B58\u5728 +repository.projectGroup.path.exists=\u4ED3\u5E93\u9879\u76EE\u8DEF\u5F84"{0}"\u5DF2\u5B58\u5728 repository.branch.not.found=\u5206\u652F\u4E0D\u5B58\u5728 repository.branch.name.exists=\u5206\u652F\u540D\u79F0"{0}"\u5DF2\u5B58\u5728 repository.sync.in.progress=\u4ED3\u5E93\u540C\u6B65\u6B63\u5728\u8FDB\u884C\u4E2D