应用迁移到团队应用里配置GIT

This commit is contained in:
dengqichen 2025-11-11 15:34:16 +08:00
parent 9d42dd1ba3
commit 4f28a9d3e5
7 changed files with 80 additions and 63 deletions

View File

@ -2,7 +2,6 @@ package com.qqchen.deploy.backend.deploy.dto;
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum; import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
import com.qqchen.deploy.backend.framework.dto.BaseDTO; import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.system.model.ExternalSystemDTO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@ -24,27 +23,17 @@ public class ApplicationDTO extends BaseDTO {
@NotNull(message = "开发语言") @NotNull(message = "开发语言")
private DevelopmentLanguageTypeEnum language; private DevelopmentLanguageTypeEnum language;
@Schema(description = "代码仓库项目ID")
private Long repoProjectId;
@Schema(description = "应用分类ID") @Schema(description = "应用分类ID")
private Long applicationCategoryId; private Long applicationCategoryId;
@Schema(description = "三方系统ID")
private Long externalSystemId;
@Schema(description = "是否启用") @Schema(description = "是否启用")
private Boolean enabled; private Boolean enabled;
@NotNull(message = "排序号不能为空") @NotNull(message = "排序号不能为空")
private Integer sort; private Integer sort;
private RepositoryProjectDTO repositoryProject;
private ApplicationCategoryDTO applicationCategory; private ApplicationCategoryDTO applicationCategory;
private ExternalSystemDTO externalSystem;
@Schema(description = "关联的团队数量") @Schema(description = "关联的团队数量")
private Long teamCount; private Long teamCount;

View File

@ -26,6 +26,18 @@ public class TeamApplicationDTO extends BaseDTO {
@Schema(description = "分支名称", example = "develop") @Schema(description = "分支名称", example = "develop")
private String branch; private String branch;
@Schema(description = "代码源系统IDGit系统")
private Long codeSourceSystemId;
@Schema(description = "代码源系统名称")
private String codeSourceSystemName;
@Schema(description = "代码源项目IDGit项目ID")
private Long codeSourceProjectId;
@Schema(description = "代码源项目名称")
private String codeSourceProjectName;
@Schema(description = "部署系统IDJenkins系统") @Schema(description = "部署系统IDJenkins系统")
private Long deploySystemId; private Long deploySystemId;

View File

@ -42,24 +42,12 @@ public class Application extends Entity<Long> {
@Column(name = "language") @Column(name = "language")
private DevelopmentLanguageTypeEnum language; private DevelopmentLanguageTypeEnum language;
/**
* 代码仓库项目ID
*/
@Column(name = "repo_project_id")
private Long repoProjectId;
/** /**
* 应用分类ID * 应用分类ID
*/ */
@Column(name = "application_category_id") @Column(name = "application_category_id")
private Long applicationCategoryId; private Long applicationCategoryId;
/**
* 三方系统ID关联外部系统
*/
@Column(name = "external_system_id")
private Long externalSystemId;
/** /**
* 排序号 * 排序号
*/ */

View File

@ -44,6 +44,18 @@ public class TeamApplication extends Entity<Long> {
@Column(name = "branch", length = 100) @Column(name = "branch", length = 100)
private String branch; private String branch;
/**
* 代码源系统ID关联sys_external_systemtype=GIT
*/
@Column(name = "code_source_system_id")
private Long codeSourceSystemId;
/**
* 代码源项目IDGit项目ID
*/
@Column(name = "code_source_project_id")
private Long codeSourceProjectId;
/** /**
* 部署系统ID关联sys_external_systemtype=JENKINS * 部署系统ID关联sys_external_systemtype=JENKINS
*/ */

View File

@ -86,32 +86,6 @@ public class ApplicationServiceImpl extends BaseServiceImpl<Application, Applica
); );
} }
// 批量查询代码仓库项目
List<Long> repoProjectIds = content.stream()
.map(ApplicationDTO::getRepoProjectId)
.filter(java.util.Objects::nonNull)
.distinct()
.collect(toList());
java.util.Map<Long, RepositoryProjectDTO> repoProjectMap = new java.util.HashMap<>();
if (!repoProjectIds.isEmpty()) {
repositoryProjectRepository.findByRepoProjectIdIn(repoProjectIds).forEach(repoProject ->
repoProjectMap.put(repoProject.getRepoProjectId(), repositoryProjectConverter.toDto(repoProject))
);
}
// 批量查询三方系统
List<Long> externalSystemIds = content.stream()
.map(ApplicationDTO::getExternalSystemId)
.filter(java.util.Objects::nonNull)
.distinct()
.collect(toList());
java.util.Map<Long, ExternalSystemDTO> externalSystemMap = new java.util.HashMap<>();
if (!externalSystemIds.isEmpty()) {
externalSystemRepository.findAllById(externalSystemIds).forEach(externalSystem ->
externalSystemMap.put(externalSystem.getId(), externalSystemConverter.toDto(externalSystem))
);
}
// 批量统计团队数量 // 批量统计团队数量
List<Long> applicationIds = content.stream() List<Long> applicationIds = content.stream()
.map(ApplicationDTO::getId) .map(ApplicationDTO::getId)
@ -131,12 +105,6 @@ public class ApplicationServiceImpl extends BaseServiceImpl<Application, Applica
if (application.getApplicationCategoryId() != null) { if (application.getApplicationCategoryId() != null) {
application.setApplicationCategory(categoryMap.get(application.getApplicationCategoryId())); application.setApplicationCategory(categoryMap.get(application.getApplicationCategoryId()));
} }
if (application.getRepoProjectId() != null) {
application.setRepositoryProject(repoProjectMap.get(application.getRepoProjectId()));
}
if (application.getExternalSystemId() != null) {
application.setExternalSystem(externalSystemMap.get(application.getExternalSystemId()));
}
application.setTeamCount(teamCountMap.getOrDefault(application.getId(), 0L)); application.setTeamCount(teamCountMap.getOrDefault(application.getId(), 0L));
}); });

View File

@ -9,8 +9,10 @@ import com.qqchen.deploy.backend.deploy.entity.Team;
import com.qqchen.deploy.backend.deploy.entity.TeamApplication; import com.qqchen.deploy.backend.deploy.entity.TeamApplication;
import com.qqchen.deploy.backend.deploy.query.TeamApplicationQuery; import com.qqchen.deploy.backend.deploy.query.TeamApplicationQuery;
import com.qqchen.deploy.backend.deploy.entity.ExternalSystem; import com.qqchen.deploy.backend.deploy.entity.ExternalSystem;
import com.qqchen.deploy.backend.deploy.entity.RepositoryProject;
import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository; import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository;
import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository; import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository;
import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository;
import com.qqchen.deploy.backend.deploy.repository.IDeployRecordRepository; import com.qqchen.deploy.backend.deploy.repository.IDeployRecordRepository;
import com.qqchen.deploy.backend.deploy.repository.IEnvironmentRepository; import com.qqchen.deploy.backend.deploy.repository.IEnvironmentRepository;
import com.qqchen.deploy.backend.deploy.repository.ITeamApplicationRepository; import com.qqchen.deploy.backend.deploy.repository.ITeamApplicationRepository;
@ -56,6 +58,9 @@ public class TeamApplicationServiceImpl extends BaseServiceImpl<TeamApplication,
@Resource @Resource
private IExternalSystemRepository externalSystemRepository; private IExternalSystemRepository externalSystemRepository;
@Resource
private IRepositoryProjectRepository repositoryProjectRepository;
@Resource @Resource
private TeamApplicationConverter teamApplicationConverter; private TeamApplicationConverter teamApplicationConverter;
@ -120,6 +125,16 @@ public class TeamApplicationServiceImpl extends BaseServiceImpl<TeamApplication,
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
Set<Long> codeSourceSystemIds = teamApps.stream()
.map(TeamApplicationDTO::getCodeSourceSystemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Set<Long> codeSourceProjectIds = teamApps.stream()
.map(TeamApplicationDTO::getCodeSourceProjectId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 2. 批量查询团队信息 // 2. 批量查询团队信息
Map<Long, Team> teamMap = new HashMap<>(); Map<Long, Team> teamMap = new HashMap<>();
if (!teamIds.isEmpty()) { if (!teamIds.isEmpty()) {
@ -152,15 +167,31 @@ public class TeamApplicationServiceImpl extends BaseServiceImpl<TeamApplication,
); );
} }
// 6. 批量查询部系统信息 // 6. 批量查询系统信息Jenkins
Map<Long, ExternalSystem> externalSystemMap = new HashMap<>(); Map<Long, ExternalSystem> deploySystemMap = new HashMap<>();
if (!deploySystemIds.isEmpty()) { if (!deploySystemIds.isEmpty()) {
externalSystemRepository.findAllById(deploySystemIds).forEach(system -> externalSystemRepository.findAllById(deploySystemIds).forEach(system ->
externalSystemMap.put(system.getId(), system) deploySystemMap.put(system.getId(), system)
); );
} }
// 7. 填充扩展字段 // 7. 批量查询代码源系统信息Git
Map<Long, ExternalSystem> codeSourceSystemMap = new HashMap<>();
if (!codeSourceSystemIds.isEmpty()) {
externalSystemRepository.findAllById(codeSourceSystemIds).forEach(system ->
codeSourceSystemMap.put(system.getId(), system)
);
}
// 8. 批量查询代码源项目信息
Map<Long, RepositoryProject> codeSourceProjectMap = new HashMap<>();
if (!codeSourceProjectIds.isEmpty()) {
repositoryProjectRepository.findAllById(codeSourceProjectIds).forEach(project ->
codeSourceProjectMap.put(project.getId(), project)
);
}
// 9. 填充扩展字段
teamApps.forEach(teamApp -> { teamApps.forEach(teamApp -> {
// 填充团队名称 // 填充团队名称
if (teamApp.getTeamId() != null) { if (teamApp.getTeamId() != null) {
@ -197,11 +228,27 @@ public class TeamApplicationServiceImpl extends BaseServiceImpl<TeamApplication,
// 填充部署系统名称 // 填充部署系统名称
if (teamApp.getDeploySystemId() != null) { if (teamApp.getDeploySystemId() != null) {
ExternalSystem system = externalSystemMap.get(teamApp.getDeploySystemId()); ExternalSystem system = deploySystemMap.get(teamApp.getDeploySystemId());
if (system != null) { if (system != null) {
teamApp.setDeploySystemName(system.getName()); teamApp.setDeploySystemName(system.getName());
} }
} }
// 填充代码源系统名称
if (teamApp.getCodeSourceSystemId() != null) {
ExternalSystem system = codeSourceSystemMap.get(teamApp.getCodeSourceSystemId());
if (system != null) {
teamApp.setCodeSourceSystemName(system.getName());
}
}
// 填充代码源项目名称
if (teamApp.getCodeSourceProjectId() != null) {
RepositoryProject project = codeSourceProjectMap.get(teamApp.getCodeSourceProjectId());
if (project != null) {
teamApp.setCodeSourceProjectName(project.getName());
}
}
}); });
} }

View File

@ -701,9 +701,7 @@ CREATE TABLE deploy_application
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 '应用描述',
language VARCHAR(50) NULL COMMENT '开发语言JAVA、PYTHON、NODEJS', language VARCHAR(50) NULL COMMENT '开发语言JAVA、PYTHON、NODEJS',
repo_project_id BIGINT NULL COMMENT '代码仓库项目ID',
application_category_id BIGINT NULL COMMENT '所属应用分类ID', application_category_id BIGINT NULL COMMENT '所属应用分类ID',
external_system_id BIGINT NULL COMMENT '三方系统ID关联外部系统',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用', enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
sort INT NOT NULL DEFAULT 0 COMMENT '排序号', sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
-- 基础字段 -- 基础字段
@ -810,6 +808,8 @@ CREATE TABLE deploy_team_application
application_id BIGINT NOT NULL COMMENT '应用ID', application_id BIGINT NOT NULL COMMENT '应用ID',
environment_id BIGINT NOT NULL COMMENT '环境ID', environment_id BIGINT NOT NULL COMMENT '环境ID',
branch VARCHAR(100) NULL COMMENT '分支名称', branch VARCHAR(100) NULL COMMENT '分支名称',
code_source_system_id BIGINT NULL COMMENT '代码源系统ID关联sys_external_systemtype=GIT',
code_source_project_id BIGINT NULL COMMENT '代码源项目IDGit项目ID',
deploy_system_id BIGINT NULL COMMENT '部署系统ID关联sys_external_systemtype=JENKINS', deploy_system_id BIGINT NULL COMMENT '部署系统ID关联sys_external_systemtype=JENKINS',
deploy_job VARCHAR(100) NULL COMMENT '部署任务ID关联deploy_jenkins_job', deploy_job VARCHAR(100) NULL COMMENT '部署任务ID关联deploy_jenkins_job',
workflow_definition_id BIGINT NULL COMMENT '工作流定义ID关联workflow_definition', workflow_definition_id BIGINT NULL COMMENT '工作流定义ID关联workflow_definition',
@ -818,12 +818,13 @@ CREATE TABLE deploy_team_application
INDEX idx_team (team_id), INDEX idx_team (team_id),
INDEX idx_application (application_id), INDEX idx_application (application_id),
INDEX idx_environment (environment_id), INDEX idx_environment (environment_id),
INDEX idx_code_source_system (code_source_system_id),
INDEX idx_deploy_system (deploy_system_id), INDEX idx_deploy_system (deploy_system_id),
INDEX idx_deploy_job (deploy_job), INDEX idx_deploy_job (deploy_job),
INDEX idx_workflow_definition (workflow_definition_id), INDEX idx_workflow_definition (workflow_definition_id),
CONSTRAINT fk_team_app_team FOREIGN KEY (team_id) REFERENCES deploy_team (id), CONSTRAINT fk_team_app_team FOREIGN KEY (team_id) REFERENCES deploy_team (id),
CONSTRAINT fk_team_app_application FOREIGN KEY (application_id) REFERENCES deploy_application (id) CONSTRAINT fk_team_app_application FOREIGN KEY (application_id) REFERENCES deploy_application (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队应用关联表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队应用关联表(包含代码源和部署配置)';
-- 团队配置表 -- 团队配置表
CREATE TABLE deploy_team_environment_config CREATE TABLE deploy_team_environment_config