From 7cafe589d3658e3dbca19b301917ebbbb7b585a5 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Mon, 15 Jun 2026 17:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A1=E6=A3=80=E5=B7=A5=E5=8D=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AF=A6=E6=83=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QmsIssueTicketControllerService.java | 59 ++++++++++++++----- ...TicketProcessMeasureControllerService.java | 2 +- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java index c174a11a..def6d114 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketControllerService.java @@ -3148,10 +3148,37 @@ public class QmsIssueTicketControllerService { .filter(p -> p.getApprovalStatus() == null || p.getApprovalStatus() != 1) .collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(validProcesses)) { + Long currentUserId = UserUtil.getUserId(); + Short status = ticket.getStatus(); + boolean isCreator = currentUserId.equals(ticket.getCreateUserId()); + boolean isCompletedStatus = status != null && status == 2; + boolean isClosedStatus = status != null && status == 3; + boolean isVisibleLeader = validProcesses.stream() + .anyMatch(p -> isCurrentUserLeaderOfProcess(p, currentUserId)); + boolean isVisibleHandler = validProcesses.stream() + .anyMatch(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId())); + + List visibleProcesses; + if (isClosedStatus || (isCompletedStatus && isCreator)) { + visibleProcesses = validProcesses; + } else if (isVisibleLeader) { + visibleProcesses = validProcesses.stream() + .filter(p -> isCurrentUserLeaderOfProcess(p, currentUserId)) + .collect(Collectors.toList()); + } else if (isVisibleHandler) { + visibleProcesses = validProcesses.stream() + .filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId())) + .collect(Collectors.toList()); + } else if (isCreator) { + visibleProcesses = validProcesses; + } else { + visibleProcesses = List.of(); + } + + if (CollectionUtil.isNotEmpty(visibleProcesses)) { // 组装处理人列表(按部门合并) Map> handlersByDept = new LinkedHashMap<>(); - for (QmsIssueTicketProcess process : validProcesses) { + for (QmsIssueTicketProcess process : visibleProcesses) { if (StrUtil.isBlank(process.getHandlerUserName())) { continue; } @@ -3180,7 +3207,7 @@ public class QmsIssueTicketControllerService { // 组装领导列表(仅处理人已提交、领导已审批时才展示) Map> leadersByDept = new LinkedHashMap<>(); - for (QmsIssueTicketProcess process : validProcesses) { + for (QmsIssueTicketProcess process : visibleProcesses) { // 领导审批状态为 null 表示处理人尚未提交,不展示 if (process.getLeaderApprovalResult() == null || StrUtil.isBlank(process.getLeaderUserName())) { continue; @@ -3216,10 +3243,17 @@ public class QmsIssueTicketControllerService { } vo.setLeaders(leaders); - // 填充根本原因(取第一条处理记录) - QmsIssueTicketProcess firstProcess = validProcesses.get(0); - if (StrUtil.isNotBlank(firstProcess.getRootCause())) { - vo.setRootCause(firstProcess.getRootCause()); + // 填充当前用户可见的根本原因 + List rootCauseProcesses = visibleProcesses.stream() + .filter(p -> StrUtil.isNotBlank(p.getRootCause())) + .collect(Collectors.toList()); + if (rootCauseProcesses.size() == 1) { + vo.setRootCause(rootCauseProcesses.get(0).getRootCause()); + } else if (rootCauseProcesses.size() > 1) { + String rootCause = rootCauseProcesses.stream() + .map(QmsIssueTicketProcess::getRootCause) + .collect(Collectors.joining("\n")); + vo.setRootCause(rootCause); } // 查询纠正措施 @@ -3229,7 +3263,7 @@ public class QmsIssueTicketControllerService { List temporaryMeasures = new ArrayList<>(); List permanentMeasures = new ArrayList<>(); - for (QmsIssueTicketProcess p : validProcesses) { + for (QmsIssueTicketProcess p : visibleProcesses) { List measures = issueTicketProcessMeasureService.lambdaQuery() .eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, p.getId()) .list(); @@ -3267,13 +3301,8 @@ public class QmsIssueTicketControllerService { } // === 权限判断:isReview / isDispatch / isEdit === - Long currentUserId = UserUtil.getUserId(); // 获取该工单全部处理记录(权限判断用全部记录,不过滤) - List allProcesses = issueTicketProcessService.lambdaQuery() - .eq(QmsIssueTicketProcess::getIssueTicketId, id) - .list(); - - Short status = ticket.getStatus(); + List allProcesses = processes; // 判断当前用户是否为负责人(工单表的 approvalUserId) boolean isResponsiblePerson = currentUserId.equals(ticket.getApprovalUserId()); @@ -3305,9 +3334,7 @@ public class QmsIssueTicketControllerService { } // 负责人权限:工单状态为处理中时有审批和分配权限,有了审批状态后失去审批权限 - boolean isCreator = currentUserId.equals(ticket.getCreateUserId()); boolean isProcessingStatus = status != null && (status == 0 || status == 1); - boolean isCompletedStatus = status != null && status == 2; boolean responsibleCanReview = isResponsiblePerson && status != null diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessMeasureControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessMeasureControllerService.java index a78fff4f..acdfdb60 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessMeasureControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessMeasureControllerService.java @@ -162,7 +162,7 @@ public class QmsIssueTicketProcessMeasureControllerService { // 处理人处理:保存根本原因、审批状态和措施 issueTicketProcessService.lambdaUpdate() .eq(QmsIssueTicketProcess::getId, processId) - .set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, mergedRootCause) + .set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, request.getRootCause()) .set(request.getApprovalStatus() != null, QmsIssueTicketProcess::getApprovalStatus, request.getApprovalStatus()) .set(request.getApprovalOpinion() != null, QmsIssueTicketProcess::getApprovalOpinion, request.getApprovalOpinion()) .set(QmsIssueTicketProcess::getApprovalUserId, currentUserId)