diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java index 321f941b..c815025d 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/api/DeployApiController.java @@ -70,14 +70,18 @@ public class DeployApiController { /** * 获取当前用户的部署审批任务列表 */ - @Operation(summary = "获取我的部署审批任务", description = "查询当前登录用户待审批的部署任务,包含完整的部署业务上下文信息") + @Operation(summary = "获取我的部署审批任务", description = "查询当前登录用户待审批的部署任务,支持按团队和环境筛选") @GetMapping("/my-approval-tasks") @PreAuthorize("isAuthenticated()") public Response> getMyApprovalTasks( + @Parameter(description = "团队ID(可选,用于筛选指定团队的审批任务)") + @RequestParam(required = false) Long teamId, + @Parameter(description = "环境ID(可选,用于筛选指定环境的审批任务)") + @RequestParam(required = false) Long environmentId, @Parameter(description = "工作流定义Key列表(可选,支持查询多个工作流的待审批任务)") @RequestParam(required = false) List workflowDefinitionKeys ) { - return Response.success(deployService.getMyApprovalTasks(workflowDefinitionKeys)); + return Response.success(deployService.getMyApprovalTasks(teamId, environmentId, workflowDefinitionKeys)); } /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IDeployService.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IDeployService.java index ee237760..51da0629 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IDeployService.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/IDeployService.java @@ -31,10 +31,12 @@ public interface IDeployService { * 获取当前用户的部署审批任务列表 *

查询当前登录用户待审批的部署任务,包含完整的部署业务上下文信息 * + * @param teamId 团队ID(可选,用于筛选指定团队的审批任务) + * @param environmentId 环境ID(可选,用于筛选指定环境的审批任务) * @param workflowDefinitionKeys 工作流定义Key列表(可选,支持查询多个工作流的待审批任务) * @return 部署审批任务列表 */ - List getMyApprovalTasks(List workflowDefinitionKeys); + List getMyApprovalTasks(Long teamId, Long environmentId, List workflowDefinitionKeys); /** * 完成部署审批 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java index 646defcf..6d430403 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java @@ -329,39 +329,24 @@ public class DeployServiceImpl implements IDeployService { List teamApps = teamAppsMap.get(teamId); List environments = new ArrayList<>(); - if (teamApps != null && !teamApps.isEmpty()) { - // 有应用配置:按环境分组 - Map> appsByEnv = teamApps.stream() - .collect(groupingBy(TeamApplication::getEnvironmentId)); - - for (Map.Entry> entry : appsByEnv.entrySet()) { - Long envId = entry.getKey(); - Environment env = envMap.get(envId); - if (env == null) { - continue; - } - - UserDeployableTeamEnvironmentDTO envDTO = buildUserDeployableTeamEnvironmentDTO( - currentUserId, team.getOwnerId(), - teamId, env, entry.getValue(), - appMap, systemMap, workflowMap, - teamEnvConfigMap, approverMap, - statisticsMap, latestRecordMap, recentRecordsMap - ); - environments.add(envDTO); - } - } else { - // 没有应用配置:显示所有可用环境,但应用列表为空 - for (Environment env : envMap.values()) { - UserDeployableTeamEnvironmentDTO envDTO = buildUserDeployableTeamEnvironmentDTO( - currentUserId, team.getOwnerId(), - teamId, env, Collections.emptyList(), // 空的应用列表 - appMap, systemMap, workflowMap, - teamEnvConfigMap, approverMap, - statisticsMap, latestRecordMap, recentRecordsMap - ); - environments.add(envDTO); - } + // 按环境分组应用(如果有应用的话) + Map> appsByEnv = (teamApps != null && !teamApps.isEmpty()) + ? teamApps.stream().collect(groupingBy(TeamApplication::getEnvironmentId)) + : Collections.emptyMap(); + + // 遍历所有团队配置的环境,有应用就显示应用,没应用就显示空列表 + for (Environment env : envMap.values()) { + // 获取该环境的应用列表(没有则为空列表) + List envApps = appsByEnv.getOrDefault(env.getId(), Collections.emptyList()); + + UserDeployableTeamEnvironmentDTO envDTO = buildUserDeployableTeamEnvironmentDTO( + currentUserId, team.getOwnerId(), + teamId, env, envApps, + appMap, systemMap, workflowMap, + teamEnvConfigMap, approverMap, + statisticsMap, latestRecordMap, recentRecordsMap + ); + environments.add(envDTO); } // 按sort排序 @@ -725,10 +710,11 @@ public class DeployServiceImpl implements IDeployService { } @Override - public List getMyApprovalTasks(List workflowDefinitionKeys) { + public List getMyApprovalTasks(Long teamId, Long environmentId, List workflowDefinitionKeys) { // 1. 获取当前登录用户 String currentUsername = SecurityUtils.getCurrentUsername(); - log.info("查询用户 {} 的部署审批任务, workflowDefinitionKeys={}", currentUsername, workflowDefinitionKeys); + log.info("查询用户 {} 的部署审批任务, teamId={}, environmentId={}, workflowDefinitionKeys={}", + currentUsername, teamId, environmentId, workflowDefinitionKeys); // 2. 查询用户的部署工作流待办任务(支持多个工作流) TaskQuery taskQuery = taskService.createTaskQuery() @@ -772,7 +758,22 @@ public class DeployServiceImpl implements IDeployService { // 4. 批量查询团队信息(解决 N+1 查询问题) enrichTeamInfo(result); - log.info("用户 {} 共有 {} 个部署审批任务", currentUsername, result.size()); + // 5. 后置筛选:按团队和环境过滤 + if (teamId != null) { + result = result.stream() + .filter(task -> teamId.equals(task.getTeamId())) + .collect(Collectors.toList()); + log.debug("按团队ID筛选后剩余 {} 个任务", result.size()); + } + + if (environmentId != null) { + result = result.stream() + .filter(task -> environmentId.equals(task.getEnvironmentId())) + .collect(Collectors.toList()); + log.debug("按环境ID筛选后剩余 {} 个任务", result.size()); + } + + log.info("用户 {} 共有 {} 个部署审批任务(筛选后)", currentUsername, result.size()); return result; }