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 e581fcbe..bb5833ba 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 @@ -11,7 +11,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,23 +30,23 @@ public class ApplicationApiController extends BaseController create(ApplicationDTO dto) { + public Response create(@Validated @RequestBody ApplicationDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, ApplicationDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody ApplicationDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java index 36a80dea..63117b61 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ApplicationCategoryApiController.java @@ -9,6 +9,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -26,23 +29,23 @@ public class ApplicationCategoryApiController extends BaseController create(ApplicationCategoryDTO dto) { + public Response create(@Validated @RequestBody ApplicationCategoryDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, ApplicationCategoryDTO dto) { - return super.update(aLong, dto); + public Response update(Long id, @Validated @RequestBody ApplicationCategoryDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @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 index c3153e93..0b3ffcdd 100644 --- 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 @@ -8,6 +8,9 @@ import com.qqchen.deploy.backend.framework.controller.BaseController; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -24,23 +27,23 @@ public class EnvironmentApiController extends BaseController create(EnvironmentDTO dto) { + public Response create(@Validated @RequestBody EnvironmentDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, EnvironmentDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody EnvironmentDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@Validated @RequestBody Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@Validated @RequestBody Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ExternalSystemApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ExternalSystemApiController.java index 97e46949..b429cbb9 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ExternalSystemApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/ExternalSystemApiController.java @@ -13,6 +13,7 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -39,23 +40,23 @@ public class ExternalSystemApiController extends BaseController create(ExternalSystemDTO dto) { + public Response create(@Validated @RequestBody ExternalSystemDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, ExternalSystemDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody ExternalSystemDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsBuildApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsBuildApiController.java index f6df72b3..7c932768 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsBuildApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsBuildApiController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletResponse; @@ -31,23 +32,23 @@ public class JenkinsBuildApiController extends BaseController create(JenkinsBuildDTO dto) { + public Response create(@Validated @RequestBody JenkinsBuildDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, JenkinsBuildDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody JenkinsBuildDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsJobApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsJobApiController.java index 441247d1..bbe4bb43 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsJobApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsJobApiController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletResponse; @@ -31,23 +32,23 @@ public class JenkinsJobApiController extends BaseController create(JenkinsJobDTO dto) { + public Response create(@Validated @RequestBody JenkinsJobDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, JenkinsJobDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody JenkinsJobDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsViewApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsViewApiController.java index 1008d8c3..3507d74c 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsViewApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/JenkinsViewApiController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletResponse; @@ -31,23 +32,23 @@ public class JenkinsViewApiController extends BaseController create(JenkinsViewDTO dto) { + public Response create(@Validated @RequestBody JenkinsViewDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, JenkinsViewDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody JenkinsViewDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApiController.java index 33031956..688fe6a5 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApiController.java @@ -11,48 +11,40 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.concurrent.CompletableFuture; -/** - * 团队API控制器 - * 继承 BaseController 自动具有基础CRUD权限: - * - deploy:team:create (创建) - * - deploy:team:update (修改) - * - deploy:team:delete (删除) - * - deploy:team:view (详情) - * - deploy:team:list (列表/分页/导出) - */ @Slf4j @RestController @RequestMapping("/api/v1/teams") @Tag(name = "团队管理", description = "团队的增删改查接口") public class TeamApiController extends BaseController { - @Resource - private ITeamService teamService; @Override - public Response create(TeamDTO dto) { + public Response create(@Validated @RequestBody TeamDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, TeamDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody TeamDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApplicationApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApplicationApiController.java index 3e2762cd..e43016cf 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApplicationApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamApplicationApiController.java @@ -11,6 +11,9 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -30,23 +33,23 @@ public class TeamApplicationApiController extends BaseController create(TeamApplicationDTO dto) { + public Response create(@Validated @RequestBody TeamApplicationDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, TeamApplicationDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody TeamApplicationDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamConfigApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamConfigApiController.java index c27366ce..b5a14c7f 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamConfigApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/TeamConfigApiController.java @@ -13,8 +13,10 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -37,23 +39,23 @@ public class TeamConfigApiController extends BaseController create(TeamConfigDTO dto) { + public Response create(@Validated @RequestBody TeamConfigDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, TeamConfigDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody TeamConfigDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override 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 94ad3190..d9aad4af 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 @@ -2,6 +2,7 @@ package com.qqchen.deploy.backend.deploy.dto; import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum; 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 jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -29,6 +30,9 @@ public class ApplicationDTO extends BaseDTO { @Schema(description = "应用分类ID") private Long applicationCategoryId; + @Schema(description = "三方系统ID") + private Long externalSystemId; + @Schema(description = "是否启用") private Boolean enabled; @@ -39,6 +43,8 @@ public class ApplicationDTO extends BaseDTO { private ApplicationCategoryDTO applicationCategory; + private ExternalSystemDTO externalSystem; + @Schema(description = "关联的团队数量") private Long teamCount; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/TeamApplicationDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/TeamApplicationDTO.java index 0a50ffcb..3f13813d 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/TeamApplicationDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/TeamApplicationDTO.java @@ -26,6 +26,12 @@ public class TeamApplicationDTO extends BaseDTO { @Schema(description = "分支名称", example = "develop") private String branch; + @Schema(description = "部署系统ID(Jenkins系统)") + private Long deploySystemId; + + @Schema(description = "部署任务ID(Jenkins Job)") + private Long deployJobId; + @Schema(description = "团队名称") private String teamName; 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 8ef4fae9..80e5bc5c 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 @@ -54,6 +54,12 @@ public class Application extends Entity { @Column(name = "application_category_id") private Long applicationCategoryId; + /** + * 三方系统ID(关联外部系统) + */ + @Column(name = "external_system_id") + private Long externalSystemId; + /** * 排序号 */ diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/TeamApplication.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/TeamApplication.java index 49166094..63af75e5 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/TeamApplication.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/entity/TeamApplication.java @@ -43,5 +43,17 @@ public class TeamApplication extends Entity { */ @Column(name = "branch", length = 100) private String branch; + + /** + * 部署系统ID(关联sys_external_system,type=JENKINS) + */ + @Column(name = "deploy_system_id") + private Long deploySystemId; + + /** + * 部署任务ID(关联deploy_jenkins_job) + */ + @Column(name = "deploy_job_id") + private Long deployJobId; } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IRepositoryProjectRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IRepositoryProjectRepository.java index e53bdf77..fb864b21 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IRepositoryProjectRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/IRepositoryProjectRepository.java @@ -56,6 +56,11 @@ public interface IRepositoryProjectRepository extends IBaseRepository findByRepoProjectId(Long repoProjectId); + /** + * 批量根据仓库项目ID查询 + */ + List findByRepoProjectIdIn(Collection repoProjectIds); + /** * 根据Git系统项目ID、外部系统ID查询项目 */ diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/ITeamApplicationRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/ITeamApplicationRepository.java index a0572c80..a38ca38a 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/ITeamApplicationRepository.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/repository/ITeamApplicationRepository.java @@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.Collection; +import java.util.List; import java.util.Optional; /** @@ -68,5 +70,16 @@ public interface ITeamApplicationRepository extends IBaseRepository countDistinctTeamIdByApplicationIds(@Param("applicationIds") Collection applicationIds); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java index adbcf771..80202078 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/ApplicationServiceImpl.java @@ -1,16 +1,22 @@ package com.qqchen.deploy.backend.deploy.service.impl; import com.qqchen.deploy.backend.deploy.converter.ApplicationCategoryConverter; +import com.qqchen.deploy.backend.deploy.converter.ExternalSystemConverter; import com.qqchen.deploy.backend.deploy.converter.RepositoryProjectConverter; +import com.qqchen.deploy.backend.deploy.dto.ApplicationCategoryDTO; import com.qqchen.deploy.backend.deploy.dto.ApplicationDTO; import com.qqchen.deploy.backend.deploy.dto.DevelopmentLanguageTypeDTO; +import com.qqchen.deploy.backend.deploy.dto.RepositoryProjectDTO; +import com.qqchen.deploy.backend.system.model.ExternalSystemDTO; import com.qqchen.deploy.backend.deploy.entity.Application; import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory; +import com.qqchen.deploy.backend.deploy.entity.ExternalSystem; import com.qqchen.deploy.backend.deploy.entity.RepositoryProject; import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum; import com.qqchen.deploy.backend.deploy.query.ApplicationQuery; import com.qqchen.deploy.backend.deploy.repository.IApplicationCategoryRepository; import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository; +import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository; import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository; import com.qqchen.deploy.backend.deploy.repository.ITeamApplicationRepository; import com.qqchen.deploy.backend.deploy.service.IApplicationService; @@ -48,26 +54,88 @@ public class ApplicationServiceImpl extends BaseServiceImpl page(ApplicationQuery query) { Page page = super.page(query); - List result = page.getContent().stream().peek(application -> { - // 查询并设置应用分类信息 + List content = page.getContent(); + + if (content.isEmpty()) { + return page; + } + + // 批量查询应用分类 + List categoryIds = content.stream() + .map(ApplicationDTO::getApplicationCategoryId) + .filter(java.util.Objects::nonNull) + .distinct() + .collect(toList()); + java.util.Map categoryMap = new java.util.HashMap<>(); + if (!categoryIds.isEmpty()) { + applicationCategoryRepository.findAllById(categoryIds).forEach(category -> + categoryMap.put(category.getId(), applicationCategoryConverter.toDto(category)) + ); + } + + // 批量查询代码仓库项目 + List repoProjectIds = content.stream() + .map(ApplicationDTO::getRepoProjectId) + .filter(java.util.Objects::nonNull) + .distinct() + .collect(toList()); + java.util.Map repoProjectMap = new java.util.HashMap<>(); + if (!repoProjectIds.isEmpty()) { + repositoryProjectRepository.findByRepoProjectIdIn(repoProjectIds).forEach(repoProject -> + repoProjectMap.put(repoProject.getRepoProjectId(), repositoryProjectConverter.toDto(repoProject)) + ); + } + + // 批量查询三方系统 + List externalSystemIds = content.stream() + .map(ApplicationDTO::getExternalSystemId) + .filter(java.util.Objects::nonNull) + .distinct() + .collect(toList()); + java.util.Map externalSystemMap = new java.util.HashMap<>(); + if (!externalSystemIds.isEmpty()) { + externalSystemRepository.findAllById(externalSystemIds).forEach(externalSystem -> + externalSystemMap.put(externalSystem.getId(), externalSystemConverter.toDto(externalSystem)) + ); + } + + // 批量统计团队数量 + List applicationIds = content.stream() + .map(ApplicationDTO::getId) + .collect(toList()); + java.util.Map teamCountMap = new java.util.HashMap<>(); + if (!applicationIds.isEmpty()) { + List teamCountResults = teamApplicationRepository.countDistinctTeamIdByApplicationIds(applicationIds); + teamCountResults.forEach(result -> { + Long applicationId = ((Number) result[0]).longValue(); + Long teamCount = ((Number) result[1]).longValue(); + teamCountMap.put(applicationId, teamCount); + }); + } + + // 设置关联数据 + content.forEach(application -> { if (application.getApplicationCategoryId() != null) { - Optional categoryOptional = applicationCategoryRepository.findById(application.getApplicationCategoryId()); - categoryOptional.ifPresent(category -> application.setApplicationCategory(applicationCategoryConverter.toDto(category))); + application.setApplicationCategory(categoryMap.get(application.getApplicationCategoryId())); } - - // 查询并设置代码仓库项目信息 if (application.getRepoProjectId() != null) { - Optional repositoryProjectOptional = repositoryProjectRepository.findByRepoProjectId(application.getRepoProjectId()); - repositoryProjectOptional.ifPresent(repositoryProject -> application.setRepositoryProject(repositoryProjectConverter.toDto(repositoryProject))); + application.setRepositoryProject(repoProjectMap.get(application.getRepoProjectId())); } + if (application.getExternalSystemId() != null) { + application.setExternalSystem(externalSystemMap.get(application.getExternalSystemId())); + } + application.setTeamCount(teamCountMap.getOrDefault(application.getId(), 0L)); + }); - // 统计该应用被多少个不同团队使用(去重 team_id) - Long teamCount = teamApplicationRepository.countDistinctTeamIdByApplicationId(application.getId()); - application.setTeamCount(teamCount != null ? teamCount : 0L); - }).collect(toList()); - return new PageImpl<>(result, page.getPageable(), page.getTotalElements()); + return new PageImpl<>(content, page.getPageable(), page.getTotalElements()); } diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java index 3eb605c3..9ecf0bbb 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -33,23 +34,23 @@ public class FormDefinitionApiController extends BaseController create(FormDefinitionDTO dto) { + public Response create(@Validated @RequestBody FormDefinitionDTO dto) { return super.create(dto); } @Override - public Response update(Long aLong, FormDefinitionDTO dto) { - return super.update(aLong, dto); + public Response update(@PathVariable Long id, @Validated @RequestBody FormDefinitionDTO dto) { + return super.update(id, dto); } @Override - public Response delete(Long aLong) { - return super.delete(aLong); + public Response delete(@PathVariable Long id) { + return super.delete(id); } @Override - public Response findById(Long aLong) { - return super.findById(aLong); + public Response findById(@PathVariable Long id) { + return super.findById(id); } @Override diff --git a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql index 161c7242..fd5b3e2f 100644 --- a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql +++ b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql @@ -725,6 +725,7 @@ CREATE TABLE deploy_application language VARCHAR(50) NULL COMMENT '开发语言:JAVA、PYTHON、NODEJS', repo_project_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:启用)', sort INT NOT NULL DEFAULT 0 COMMENT '排序号', -- 基础字段 @@ -827,15 +828,19 @@ CREATE TABLE deploy_team_application version INT NOT NULL DEFAULT 1 COMMENT '版本号', deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除', - team_id BIGINT NOT NULL COMMENT '团队ID', - application_id BIGINT NOT NULL COMMENT '应用ID', - environment_id BIGINT NOT NULL COMMENT '环境ID', - branch VARCHAR(100) NULL COMMENT '分支名称', + team_id BIGINT NOT NULL COMMENT '团队ID', + application_id BIGINT NOT NULL COMMENT '应用ID', + environment_id BIGINT NOT NULL COMMENT '环境ID', + branch VARCHAR(100) NULL COMMENT '分支名称', + deploy_system_id BIGINT NULL COMMENT '部署系统ID(关联sys_external_system,type=JENKINS)', + deploy_job_id BIGINT NULL COMMENT '部署任务ID(关联deploy_jenkins_job)', UNIQUE INDEX uk_team_app_env (team_id, application_id, environment_id), INDEX idx_team (team_id), INDEX idx_application (application_id), INDEX idx_environment (environment_id), + INDEX idx_deploy_system (deploy_system_id), + INDEX idx_deploy_job (deploy_job_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) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队应用关联表';