反序列化问题。
This commit is contained in:
parent
8dbc917ff3
commit
cf0b5589d4
@ -278,7 +278,7 @@ CREATE TABLE sys_approval_record (
|
|||||||
|
|
||||||
#### 3.1.1 项目集管理
|
#### 3.1.1 项目集管理
|
||||||
```yaml
|
```yaml
|
||||||
/api/v1/project-group:
|
/api/v1/projectGroup-group:
|
||||||
post:
|
post:
|
||||||
summary: 创建项目集
|
summary: 创建项目集
|
||||||
description: |
|
description: |
|
||||||
@ -329,7 +329,7 @@ CREATE TABLE sys_approval_record (
|
|||||||
|
|
||||||
#### 3.1.2 项目管理
|
#### 3.1.2 项目管理
|
||||||
```yaml
|
```yaml
|
||||||
/api/v1/project:
|
/api/v1/projectGroup:
|
||||||
post:
|
post:
|
||||||
summary: 创建项目
|
summary: 创建项目
|
||||||
description: |
|
description: |
|
||||||
|
|||||||
@ -601,7 +601,7 @@ const JenkinsNodeConfig = {
|
|||||||
name: 'Jenkins构建',
|
name: 'Jenkins构建',
|
||||||
executor: 'JENKINS',
|
executor: 'JENKINS',
|
||||||
config: {
|
config: {
|
||||||
jenkinsJob: 'my-project-build',
|
jenkinsJob: 'my-projectGroup-build',
|
||||||
parameters: {
|
parameters: {
|
||||||
BRANCH: 'master',
|
BRANCH: 'master',
|
||||||
ENV: 'prod'
|
ENV: 'prod'
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
package com.qqchen.deploy.backend.deploy.api;
|
package com.qqchen.deploy.backend.deploy.api;
|
||||||
|
|
||||||
import com.qqchen.deploy.backend.deploy.dto.ProjectDTO;
|
import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO;
|
||||||
import com.qqchen.deploy.backend.deploy.entity.Project;
|
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
|
||||||
import com.qqchen.deploy.backend.deploy.query.ProjectQuery;
|
import com.qqchen.deploy.backend.deploy.query.ProjectGroupQuery;
|
||||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
@ -13,11 +13,11 @@ import java.util.List;
|
|||||||
|
|
||||||
@Tag(name = "项目管理", description = "项目管理相关接口")
|
@Tag(name = "项目管理", description = "项目管理相关接口")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/v1/projects")
|
@RequestMapping("/api/v1/project-group")
|
||||||
public class ProjectApiController extends BaseController<Project, ProjectDTO, Long, ProjectQuery> {
|
public class ProjectGroupApiController extends BaseController<ProjectGroup, ProjectGroupDTO, Long, ProjectGroupQuery> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void exportData(HttpServletResponse response, List<ProjectDTO> data) {
|
protected void exportData(HttpServletResponse response, List<ProjectGroupDTO> data) {
|
||||||
// TODO: 实现导出逻辑
|
// TODO: 实现导出逻辑
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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<Project, ProjectDTO> {
|
|
||||||
}
|
|
||||||
@ -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<ProjectGroup, ProjectGroupDTO> {
|
||||||
|
}
|
||||||
@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
public class ApplicationDTO extends BaseDTO {
|
public class ApplicationDTO extends BaseDTO {
|
||||||
|
|
||||||
@NotNull(message = "项目ID不能为空")
|
@NotNull(message = "项目ID不能为空")
|
||||||
private Long projectId;
|
private Long projectGroupId;
|
||||||
|
|
||||||
@NotBlank(message = "应用编码不能为空")
|
@NotBlank(message = "应用编码不能为空")
|
||||||
private String appCode;
|
private String appCode;
|
||||||
|
|||||||
@ -20,10 +20,6 @@ public class EnvironmentDTO extends BaseDTO {
|
|||||||
@Schema(description = "租户编码")
|
@Schema(description = "租户编码")
|
||||||
private String tenantCode;
|
private String tenantCode;
|
||||||
|
|
||||||
@Schema(description = "项目ID")
|
|
||||||
@NotNull(message = "项目ID不能为空")
|
|
||||||
private Long projectId;
|
|
||||||
|
|
||||||
@Schema(description = "环境编码")
|
@Schema(description = "环境编码")
|
||||||
@NotBlank(message = "环境编码不能为空")
|
@NotBlank(message = "环境编码不能为空")
|
||||||
private String envCode;
|
private String envCode;
|
||||||
|
|||||||
@ -8,21 +8,21 @@ import lombok.EqualsAndHashCode;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class ProjectDTO extends BaseDTO {
|
public class ProjectGroupDTO extends BaseDTO {
|
||||||
|
|
||||||
// @NotNull(message = "租户ID不能为空")
|
// @NotNull(message = "租户ID不能为空")
|
||||||
private Long tenantId;
|
private Long tenantCode;
|
||||||
|
|
||||||
@NotBlank(message = "项目编码不能为空")
|
@NotBlank(message = "项目组编码不能为空")
|
||||||
private String projectCode;
|
private String projectGroupCode;
|
||||||
|
|
||||||
@NotBlank(message = "项目名称不能为空")
|
@NotBlank(message = "项目组名称不能为空")
|
||||||
private String projectName;
|
private String projectGroupName;
|
||||||
|
|
||||||
private String projectDesc;
|
private String projectGroupDesc;
|
||||||
|
|
||||||
@NotBlank(message = "项目状态不能为空")
|
@NotBlank(message = "项目组状态不能为空")
|
||||||
private String projectStatus;
|
private String projectGroupStatus;
|
||||||
|
|
||||||
@NotNull(message = "排序号不能为空")
|
@NotNull(message = "排序号不能为空")
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
@ -18,8 +18,8 @@ public class Application extends Entity<Long> {
|
|||||||
/**
|
/**
|
||||||
* 所属项目ID
|
* 所属项目ID
|
||||||
*/
|
*/
|
||||||
@Column(name = "project_id", nullable = false)
|
@Column(name = "project_group_id", nullable = false)
|
||||||
private Long projectId;
|
private Long projectGroupId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应用编码
|
* 应用编码
|
||||||
|
|||||||
@ -25,12 +25,6 @@ public class Environment extends Entity<Long> {
|
|||||||
@Column(name = "tenant_code")
|
@Column(name = "tenant_code")
|
||||||
private String tenantCode;
|
private String tenantCode;
|
||||||
|
|
||||||
/**
|
|
||||||
* 项目ID
|
|
||||||
*/
|
|
||||||
@Column(name = "project_id", nullable = false)
|
|
||||||
private Long projectId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境编码
|
* 环境编码
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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<Long> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 租户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;
|
|
||||||
}
|
|
||||||
@ -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<Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户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;
|
||||||
|
}
|
||||||
@ -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<Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目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;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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;
|
|
||||||
}
|
|
||||||
@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository;
|
|||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface IApplicationRepository extends IBaseRepository<Application, Long> {
|
public interface IApplicationRepository extends IBaseRepository<Application, Long> {
|
||||||
boolean existsByAppCodeAndProjectIdAndDeletedFalse(String appCode, Long projectId);
|
boolean existsByAppCodeAndProjectGroupIdAndDeletedFalse(String appCode, Long projectId);
|
||||||
}
|
}
|
||||||
@ -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<ProjectGroup, Long> {
|
||||||
|
}
|
||||||
@ -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<Project, Long> {
|
|
||||||
boolean existsByProjectCodeAndTenantIdAndDeletedFalse(String projectCode, Long tenantId);
|
|
||||||
}
|
|
||||||
@ -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.dto.EnvironmentDTO;
|
||||||
import com.qqchen.deploy.backend.deploy.entity.Environment;
|
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 com.qqchen.deploy.backend.framework.service.IBaseService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境服务接口
|
* 环境服务接口
|
||||||
*/
|
*/
|
||||||
public interface IEnvironmentService extends IBaseService<Environment, EnvironmentDTO, Long> {
|
public interface IEnvironmentService extends IBaseService<Environment, EnvironmentDTO, Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目的环境列表
|
||||||
|
*
|
||||||
|
* @param projectGroupId 项目ID
|
||||||
|
* @return 环境列表
|
||||||
|
*/
|
||||||
|
List<EnvironmentDTO> getProjectEnvironments(Long projectGroupId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新项目的环境配置
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param environmentIds 环境ID列表
|
||||||
|
*/
|
||||||
|
void updateProjectEnvironments(Long projectId, List<Long> environmentIds);
|
||||||
}
|
}
|
||||||
@ -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<ProjectGroup, ProjectGroupDTO, Long> {
|
||||||
|
}
|
||||||
@ -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<Project, ProjectDTO, Long> {
|
|
||||||
}
|
|
||||||
@ -1,14 +1,62 @@
|
|||||||
package com.qqchen.deploy.backend.deploy.service.impl;
|
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.dto.EnvironmentDTO;
|
||||||
import com.qqchen.deploy.backend.deploy.entity.Environment;
|
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.deploy.service.IEnvironmentService;
|
||||||
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
||||||
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环境服务实现类
|
* 环境服务实现类
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class EnvironmentServiceImpl extends BaseServiceImpl<Environment, EnvironmentDTO, Long> implements IEnvironmentService {
|
public class EnvironmentServiceImpl extends BaseServiceImpl<Environment, EnvironmentDTO, Long> implements IEnvironmentService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IEnvironmentRepository environmentRepository;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private EnvironmentConverter environmentConverter;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<EnvironmentDTO> getProjectEnvironments(Long projectGroupId) {
|
||||||
|
QEnvironment environment = QEnvironment.environment;
|
||||||
|
QProjectGroupEnvironment projectEnvironment = QProjectGroupEnvironment.projectGroupEnvironment;
|
||||||
|
|
||||||
|
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
|
||||||
|
|
||||||
|
List<Environment> 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<Long> environmentIds) {
|
||||||
|
// TODO: 实现更新逻辑
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -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<ProjectGroup, ProjectGroupDTO, Long> implements IProjectGroupService {
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<Project, ProjectDTO, Long> implements IProjectService {
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -20,8 +20,7 @@ import java.util.Collection;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@NoRepositoryBean
|
@NoRepositoryBean
|
||||||
public interface IBaseRepository<T extends Entity<ID>, ID extends Serializable>
|
public interface IBaseRepository<T extends Entity<ID>, ID extends Serializable> extends JpaRepository<T, ID>, QuerydslPredicateExecutor<T> {
|
||||||
extends JpaRepository<T, ID>, QuerydslPredicateExecutor<T> {
|
|
||||||
|
|
||||||
// 基础查询方法
|
// 基础查询方法
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -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',
|
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-已删除',
|
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
|
||||||
|
|
||||||
-- 业务字段
|
-- 业务字段
|
||||||
tenant_id BIGINT DEFAULT NULL COMMENT '租户ID',
|
tenant_code BIGINT DEFAULT NULL COMMENT '租户CODE',
|
||||||
project_code VARCHAR(50) NOT NULL COMMENT '项目编码',
|
project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码',
|
||||||
project_name VARCHAR(100) NOT NULL COMMENT '项目名称',
|
project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称',
|
||||||
project_desc VARCHAR(255) NULL COMMENT '项目描述',
|
project_group_desc VARCHAR(255) NULL COMMENT '项目组描述',
|
||||||
project_status VARCHAR(50) NOT NULL DEFAULT 'ENABLED' COMMENT '项目状态:ENABLED-启用,DISABLED-禁用',
|
project_group_status VARCHAR(50) NOT NULL DEFAULT 'ENABLED' COMMENT '项目组状态:ENABLED-启用,DISABLED-禁用',
|
||||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
|
||||||
-- 索引
|
-- 索引
|
||||||
INDEX idx_tenant_id (tenant_id) COMMENT '租户ID索引',
|
INDEX idx_tenant_id (tenant_code) COMMENT '租户ID索引',
|
||||||
UNIQUE INDEX uk_project_code (tenant_id, project_code) COMMENT '租户下项目编码唯一',
|
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)
|
REFERENCES sys_tenant (id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目组表';
|
) 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-已删除',
|
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_code VARCHAR(50) NOT NULL COMMENT '应用编码',
|
||||||
app_name VARCHAR(100) NOT NULL COMMENT '应用名称',
|
app_name VARCHAR(100) NOT NULL COMMENT '应用名称',
|
||||||
app_desc VARCHAR(255) NULL COMMENT '应用描述',
|
app_desc VARCHAR(255) NULL COMMENT '应用描述',
|
||||||
@ -595,41 +595,63 @@ CREATE TABLE deploy_application
|
|||||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
|
||||||
-- 索引
|
-- 索引
|
||||||
INDEX idx_project_id (project_id) COMMENT '项目ID索引',
|
INDEX idx_project_group_id (project_group_id) COMMENT '项目ID索引',
|
||||||
UNIQUE INDEX uk_app_code (project_id, app_code) COMMENT '项目下应用编码唯一',
|
UNIQUE INDEX uk_app_code (project_group_id, app_code) COMMENT '项目下应用编码唯一',
|
||||||
|
|
||||||
-- 外键约束
|
-- 外键约束
|
||||||
CONSTRAINT fk_application_project FOREIGN KEY (project_id)
|
CONSTRAINT fk_application_project_group FOREIGN KEY (project_group_id)
|
||||||
REFERENCES deploy_project (id)
|
REFERENCES deploy_project_group (id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用表';
|
||||||
|
|
||||||
-- 环境表
|
-- 环境表
|
||||||
CREATE TABLE deploy_environment
|
CREATE TABLE deploy_environment
|
||||||
(
|
(
|
||||||
-- 业务字段
|
-- 业务字段
|
||||||
tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户编码',
|
tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户编码',
|
||||||
build_type VARCHAR(50) NULL COMMENT '构建方式:JENKINS-Jenkins构建,GITLAB_RUNNER-GitLab Runner构建,GITHUB_ACTION-GitHub Action构建',
|
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-虚拟机部署',
|
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_code VARCHAR(50) NOT NULL COMMENT '环境编码',
|
env_name VARCHAR(100) NOT NULL COMMENT '环境名称',
|
||||||
env_name VARCHAR(100) NOT NULL COMMENT '环境名称',
|
env_desc VARCHAR(255) NULL COMMENT '环境描述',
|
||||||
env_desc VARCHAR(255) NULL COMMENT '环境描述',
|
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
|
||||||
|
|
||||||
-- 基础字段
|
-- 基础字段
|
||||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||||
create_by VARCHAR(100) NULL COMMENT '创建人',
|
create_by VARCHAR(100) NULL COMMENT '创建人',
|
||||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||||
update_by VARCHAR(100) NULL COMMENT '更新人',
|
update_by VARCHAR(100) NULL COMMENT '更新人',
|
||||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||||
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
|
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
|
||||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除',
|
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除',
|
||||||
|
|
||||||
-- 索引
|
-- 索引
|
||||||
INDEX idx_project_id (project_id) COMMENT '项目ID索引',
|
UNIQUE INDEX uk_env_code (env_code) COMMENT '环境编码唯一'
|
||||||
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='环境表';
|
) 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='项目组环境关联表';
|
||||||
|
|
||||||
|
|||||||
@ -75,11 +75,11 @@ VALUES
|
|||||||
|
|
||||||
(200, '部署管理', '/deploy', '', 'DeploymentUnitOutlined', 2, 0, 50, 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),
|
||||||
|
|
||||||
(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)
|
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
|
VALUES
|
||||||
(1, 'admin', NOW(), 1, 'DEMO', '示例项目组', '用于演示的项目组', 'ENABLED', 1),
|
(1, 'admin', NOW(), 1, 'DEMO', '示例项目组', '用于演示的项目组', 'ENABLED', 1),
|
||||||
(2, 'admin', NOW(), 1, 'PLATFORM', '平台项目组', '平台相关的项目组', 'ENABLED', 2);
|
(2, 'admin', NOW(), 1, 'PLATFORM', '平台项目组', '平台相关的项目组', 'ENABLED', 2);
|
||||||
@ -862,7 +862,7 @@ VALUES
|
|||||||
-- 初始化应用数据
|
-- 初始化应用数据
|
||||||
INSERT INTO deploy_application (
|
INSERT INTO deploy_application (
|
||||||
id, create_by, create_time,
|
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
|
repo_url, repo_branch, repo_type, build_type, dev_language, dev_framework, sort
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
|
|||||||
@ -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.not.found=\u4ED3\u5E93\u7EC4\u4E0D\u5B58\u5728
|
||||||
repository.group.name.exists=\u4ED3\u5E93\u7EC4\u540D\u79F0"{0}"\u5DF2\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.group.path.exists=\u4ED3\u5E93\u7EC4\u8DEF\u5F84"{0}"\u5DF2\u5B58\u5728
|
||||||
repository.project.not.found=\u4ED3\u5E93\u9879\u76EE\u4E0D\u5B58\u5728
|
repository.projectGroup.not.found=\u4ED3\u5E93\u9879\u76EE\u4E0D\u5B58\u5728
|
||||||
repository.project.name.exists=\u4ED3\u5E93\u9879\u76EE\u540D\u79F0"{0}"\u5DF2\u5B58\u5728
|
repository.projectGroup.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.path.exists=\u4ED3\u5E93\u9879\u76EE\u8DEF\u5F84"{0}"\u5DF2\u5B58\u5728
|
||||||
repository.branch.not.found=\u5206\u652F\u4E0D\u5B58\u5728
|
repository.branch.not.found=\u5206\u652F\u4E0D\u5B58\u5728
|
||||||
repository.branch.name.exists=\u5206\u652F\u540D\u79F0"{0}"\u5DF2\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
|
repository.sync.in.progress=\u4ED3\u5E93\u540C\u6B65\u6B63\u5728\u8FDB\u884C\u4E2D
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user