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 6a40be15..53fb6cbe 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 @@ -1546,6 +1546,41 @@ public class QmsIssueTicketControllerService { return rules == null ? null : rules.getModelNo(); } + private boolean hasPendingLeaderReview(List processes, Long currentUserId) { + if (CollectionUtil.isEmpty(processes)) { + return false; + } + for (QmsIssueTicketProcess process : processes) { + if (!Objects.equals(process.getApprovalStatus(), (short) 0) + || process.getLeaderApprovalResult() != null + || !isCurrentUserLeaderOfProcess(process, currentUserId)) { + continue; + } + return true; + } + return false; + } + + private boolean isCurrentUserLeaderOfProcess(QmsIssueTicketProcess process, Long currentUserId) { + if (currentUserId == null || process == null) { + return false; + } + if (currentUserId.equals(process.getLeaderUserId())) { + return true; + } + if (process.getHandlerUserId() == null) { + return false; + } + UserInterior handlerInterior = userInteriorService.lambdaQuery() + .eq(UserInterior::getUserId, process.getHandlerUserId()) + .one(); + if (handlerInterior == null || handlerInterior.getDeptId() == null) { + return false; + } + Department dept = departmentService.getById(handlerInterior.getDeptId()); + return dept != null && currentUserId.equals(dept.getHeadUserId()); + } + private String buildPqcIncidentDescription(List detailList) { if (CollectionUtil.isEmpty(detailList)) { return ""; @@ -2295,8 +2330,8 @@ public class QmsIssueTicketControllerService { } if (isLeader) { - // 领导:仅有审核权限,无编辑权限 - vo.setIsReview(true); + // 领导:仅存在待领导审核的处理记录时有审核权限 + vo.setIsReview(hasPendingLeaderReview(allProcesses, currentUserId)); vo.setIsEdit(false); } else if (isHandler) { // 处理人/审批人 @@ -2304,11 +2339,10 @@ public class QmsIssueTicketControllerService { .filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId())) .anyMatch(p -> p.getApprovalStatus() == null); vo.setIsReview(hasUnapproved); - // isEdit:未提交(approvalStatus为null)或领导驳回(leaderApprovalResult==1)时有编辑权限 + // isEdit:未提交或领导驳回重置后可编辑,提交后关闭编辑权限 boolean canEdit = allProcesses.stream() .filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId())) - .anyMatch(p -> p.getApprovalStatus() == null - || (p.getLeaderApprovalResult() != null && p.getLeaderApprovalResult() == 1)); + .anyMatch(p -> p.getApprovalStatus() == null); vo.setIsEdit(canEdit); } else { // 其他角色:无权限 @@ -2602,10 +2636,10 @@ public class QmsIssueTicketControllerService { // 处理人: // - isDispatch=false(处理人无分派权限) // - isReview=true(状态=1且审批状态为空时) - // - isEdit=true(状态=1时) + // - isEdit=true(状态=1且审批状态为空时) vo.setIsDispatch(false); vo.setIsReview(ticket.getStatus() != null && ticket.getStatus() == 1 && process.getApprovalStatus() == null); - vo.setIsEdit(ticket.getStatus() != null && ticket.getStatus() == 1); + vo.setIsEdit(ticket.getStatus() != null && ticket.getStatus() == 1 && process.getApprovalStatus() == null); } else { // 其他角色:无权限 vo.setIsDispatch(false); @@ -3196,7 +3230,7 @@ public class QmsIssueTicketControllerService { } // 领导权限:只有审核权限 else if (isLeader) { - vo.setIsReview(true); + vo.setIsReview(hasPendingLeaderReview(allProcesses, currentUserId)); vo.setIsEdit(false); vo.setIsDispatch(false); vo.setIsShut(false);