From f96613cdab86b0ac58b76540291f231ac5ff7c60 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Fri, 26 Jun 2026 16:58:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A1=E6=A3=80=E5=B7=A5=E5=8D=95=E6=9D=83?= =?UTF-8?q?=E9=99=90=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QmsIssueTicketControllerService.java | 78 +++++++++---------- ...msIssueTicketProcessControllerService.java | 12 ++- .../pojo/qo/QmsIssueTicketSearchQO.java | 2 +- .../pojo/qo/QmsIssueTicketTabletSearchQO.java | 2 +- .../pojo/vo/QmsInspectionTicketDetailVO.java | 7 +- .../pojo/vo/QmsIssueTicketDetailVO.java | 2 +- .../pojo/vo/QmsIssueTicketTabletPageData.java | 2 +- .../common/pojo/vo/QmsIssueTicketToDoVO.java | 2 +- .../wms/common/pojo/vo/QmsIssueTicketVO.java | 2 +- .../wms/repository/entity/QmsIssueTicket.java | 2 +- 10 files changed, 59 insertions(+), 52 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 63a9c286..7c004ffa 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 @@ -237,7 +237,7 @@ public class QmsIssueTicketControllerService { // 6. 设置负责人信息,未分派处理人前保持待流转 issueTicketService.lambdaUpdate() .eq(QmsIssueTicket::getId, request.getId()) - .set(QmsIssueTicket::getStatus, (short) 0) + .set(QmsIssueTicket::getStatus, (short) 5) .set(QmsIssueTicket::getApprovalUserId, request.getHandlerUserId()) .set(QmsIssueTicket::getApprovalUserName, handlerUser.getUserName()) .set(QmsIssueTicket::getApprovalTime, LocalDateTime.now()) @@ -443,18 +443,20 @@ public class QmsIssueTicketControllerService { throw new NflgException(STATE.BusinessError, "只能分派巡检工单"); } + boolean firstChargeReview = Objects.equals(ticket.getStatus(), (short) 5); + boolean redispatchAfterHandlerReject = Objects.equals(ticket.getStatus(), (short) 1); + Short approvalStatus = request.getApprovalStatus(); if (approvalStatus == null) { - VUtil.trueThrowBusinessError(!Objects.equals(ticket.getStatus(), (short) 0)) - .throwMessage("审批状态不能为空"); + VUtil.trueThrowBusinessError(!firstChargeReview && !redispatchAfterHandlerReject) + .throwMessage("当前工单状态不允许分派"); approvalStatus = 0; } issueTicketToDoService.processed(ticket.getId()); - // 3. 根据审批状态分支处理 if (approvalStatus == 1) { - // 驳回:不创建处理记录,巡检工单直接报废 + VUtil.trueThrowBusinessError(!firstChargeReview).throwMessage("当前工单状态不允许负责人驳回"); issueTicketService.lambdaUpdate() .eq(QmsIssueTicket::getId, ticket.getId()) .set(QmsIssueTicket::getStatus, (short) 4) @@ -467,11 +469,12 @@ public class QmsIssueTicketControllerService { .set(QmsIssueTicket::getUpdateTime, now) .update(); } else { - // 通过:按现有流程处理 - VUtil.trueThrowBusinessError(request.getIncidentType() == null) - .throwMessage("事件类型不能为空"); - VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getExceptionCode())) - .throwMessage("异常代码不能为空"); + if (firstChargeReview) { + VUtil.trueThrowBusinessError(request.getIncidentType() == null) + .throwMessage("事件类型不能为空"); + VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getExceptionCode())) + .throwMessage("异常代码不能为空"); + } VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getHandlerUserIds())) .throwMessage("处理人列表不能为空"); @@ -480,13 +483,12 @@ public class QmsIssueTicketControllerService { throw new NflgException(STATE.BusinessError, "不能将工单分配给自己"); } - // 更新工单审批状态和意见 issueTicketService.lambdaUpdate() .eq(QmsIssueTicket::getId, ticket.getId()) .set(QmsIssueTicket::getApprovalStatus, approvalStatus) - .set(QmsIssueTicket::getIncidentType, request.getIncidentType()) - .set(QmsIssueTicket::getExceptionCode, request.getExceptionCode()) - .set(QmsIssueTicket::getIncidentConsequence, request.getIncidentConsequence()) + .set(request.getIncidentType() != null, QmsIssueTicket::getIncidentType, request.getIncidentType()) + .set(StrUtil.isNotBlank(request.getExceptionCode()), QmsIssueTicket::getExceptionCode, request.getExceptionCode()) + .set(request.getIncidentConsequence() != null, QmsIssueTicket::getIncidentConsequence, request.getIncidentConsequence()) .set(request.getApprovalOpinion() != null, QmsIssueTicket::getApprovalOpinion, request.getApprovalOpinion()) .set(QmsIssueTicket::getUpdateUserId, currentUserId) @@ -531,8 +533,7 @@ public class QmsIssueTicketControllerService { // 批量推送待办消息 issueTicketToDoService.saveBatch(todoItems); - // 如果工单状态是待流转(0),更新为处理中(1) - if (ticket.getStatus() != null && ticket.getStatus() == 0) { + if (firstChargeReview) { issueTicketService.lambdaUpdate() .eq(QmsIssueTicket::getId, ticket.getId()) .set(QmsIssueTicket::getStatus, (short) 1) @@ -1119,7 +1120,7 @@ public class QmsIssueTicketControllerService { : StrUtil.join(",", request.getImages().stream().map(FileUploadVO::getId).toList()) ) .setRemark(request.getRemark()) - .setStatus((short) 0) + .setStatus((short) 5) .setApprovalUserId(request.getHandlerUserId()) .setApprovalUserName(handlerUser.getUserName()) .setApprovalTime(now) @@ -1264,7 +1265,7 @@ public class QmsIssueTicketControllerService { Long pendingCount = issueTicketService.lambdaQuery() .eq(QmsIssueTicket::getSourceType, (short) 2) .eq(QmsIssueTicket::getCreateUserId, currentUserId) - .eq(QmsIssueTicket::getStatus, (short) 0) + .in(QmsIssueTicket::getStatus, Arrays.asList((short) 0, (short) 5)) .count(); Long processingCount = issueTicketService.lambdaQuery() @@ -3439,29 +3440,34 @@ public class QmsIssueTicketControllerService { } // 负责人权限:工单状态为处理中时有审批和分配权限,有了审批状态后失去审批权限 - boolean isProcessingStatus = status != null && (status == 0 || status == 1); - - boolean responsibleCanReview = isResponsiblePerson - && status != null - && status == 1 - && ticket.getApprovalStatus() == null; - boolean responsibleCanDispatch = isResponsiblePerson && isProcessingStatus; + boolean chargeCanReview = isResponsiblePerson && Objects.equals(status, (short) 5); + boolean responsibleCanDispatch = isResponsiblePerson + && Objects.equals(status, (short) 1) + && issueTicketToDoService.lambdaQuery() + .eq(QmsIssueTicketToDo::getTicketId, ticket.getId()) + .eq(QmsIssueTicketToDo::getHandlerUserId, currentUserId) + .eq(QmsIssueTicketToDo::getHasProcessed, false) + .exists(); boolean handlerCanReview = allProcesses.stream() + .filter(p -> currentUserId.equals(p.getHandlerUserId())) + .anyMatch(p -> p.getApprovalStatus() == null + && p.getLeaderApprovalResult() == null + && p.getApprovalUserId() == null); + boolean handlerCanEdit = allProcesses.stream() .filter(p -> currentUserId.equals(p.getHandlerUserId())) .anyMatch(p -> p.getApprovalStatus() == null && p.getLeaderApprovalResult() == null); - boolean handlerCanEdit = handlerCanReview; boolean leaderCanReview = isLeader && hasPendingLeaderReview(allProcesses, currentUserId); boolean creatorCanDispatch = isCreator && status != null && status == 0; - boolean creatorCanShut = isCreator && !Objects.equals(ticket.getSourceType(), (short) 2) && isCompletedStatus; boolean responsibleCanShut = isResponsiblePerson && isCompletedStatus; - vo.setIsReview(responsibleCanReview || handlerCanReview || leaderCanReview); + vo.setIsChargeReview(chargeCanReview); + vo.setIsReview(handlerCanReview || leaderCanReview); vo.setIsDispatch((responsibleCanDispatch && !leaderCanReview) || creatorCanDispatch); vo.setIsEdit(handlerCanEdit); - vo.setIsShut(creatorCanShut || responsibleCanShut); + vo.setIsShut(responsibleCanShut); return vo; } @@ -3484,8 +3490,6 @@ public class QmsIssueTicketControllerService { if (inspectionTicket) { VUtil.trueThrowBusinessError(!currentUserId.equals(ticket.getApprovalUserId())) .throwMessage("只有工单负责人才能审核"); - VUtil.trueThrowBusinessError(request.getCreateApproval() != 0) - .throwMessage("巡检工单只允许关闭"); } else { VUtil.trueThrowBusinessError(!currentUserId.equals(ticket.getCreateUserId())) .throwMessage("只有工单创建人才能审核"); @@ -3510,15 +3514,7 @@ public class QmsIssueTicketControllerService { .set(QmsIssueTicket::getUpdateTime, now) .update(); - if (Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) { - issueTicketToDoService.processed(ticket.getId()); - } else { - issueTicketToDoService.lambdaUpdate() - .eq(QmsIssueTicketToDo::getTicketId, ticket.getId()) - .eq(QmsIssueTicketToDo::getHasProcessed, false) - .set(QmsIssueTicketToDo::getHasProcessed, true) - .update(); - } + issueTicketToDoService.processed(ticket.getId()); // PDI工单关闭时:创建新任务单,复制内容,不合格项改为合格 if (ticket.getSourceType() != null && ticket.getSourceType() == 1 && ticket.getSourceId() != null) { @@ -3566,7 +3562,7 @@ public class QmsIssueTicketControllerService { .set(QmsIssueTicket::getUpdateTime, now) .update(); - if (Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) { + if (inspectionTicket || Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) { issueTicketToDoService.processed(ticket.getId()); } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java index 7856fba8..7336726e 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsIssueTicketProcessControllerService.java @@ -194,6 +194,7 @@ public class QmsIssueTicketProcessControllerService { if (Objects.equals(ticket.getSourceType(), (short) 2) && Objects.equals(ticket.getApprovalUserId(), currentUserId) + && Objects.equals(ticket.getStatus(), (short) 5) && Objects.equals(request.getApprovalStatus(), (short) 1)) { rejectInspectionByResponsible(request, ticket, now, currentUserId, currentUserName); return; @@ -327,6 +328,9 @@ public class QmsIssueTicketProcessControllerService { private void rejectInspectionByResponsible(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket, LocalDateTime now, Long currentUserId, String currentUserName) { + VUtil.trueThrowBusinessError(!Objects.equals(ticket.getStatus(), (short) 5)) + .throwMessage("当前工单状态不允许负责人驳回"); + issueTicketToDoService.processed(ticket.getId()); issueTicketService.lambdaUpdate() @@ -452,11 +456,13 @@ public class QmsIssueTicketProcessControllerService { .set(QmsIssueTicket::getUpdateTime, now) .update(); - // 推送消息给工单创建人 - if (ticket.getCreateUserId() != null) { + Long nextTodoUserId = Objects.equals(ticket.getSourceType(), (short) 2) + ? ticket.getApprovalUserId() + : ticket.getCreateUserId(); + if (nextTodoUserId != null) { QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() .setTicketId(issueTicketId) - .setHandlerUserId(ticket.getCreateUserId()); + .setHandlerUserId(nextTodoUserId); issueTicketToDoService.save(todoItem); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java index f6d26dad..30100b39 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketSearchQO.java @@ -38,7 +38,7 @@ public class QmsIssueTicketSearchQO extends PageQO { private Short ticketType; /** - * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java index c9c2eb88..fa13cf57 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketTabletSearchQO.java @@ -13,7 +13,7 @@ import lombok.experimental.Accessors; public class QmsIssueTicketTabletSearchQO extends PageQO { /** - * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废(可选) + * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核(可选) */ private Short status; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java index 5d9fecd5..92760b29 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionTicketDetailVO.java @@ -22,6 +22,11 @@ public class QmsInspectionTicketDetailVO { */ private Boolean isReview; + /** + * 是否有负责人审核权限 + */ + private Boolean isChargeReview; + /** * 是否有分派权限 */ @@ -78,7 +83,7 @@ public class QmsInspectionTicketDetailVO { private Long directorId; /** - * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 工单状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java index 3fbaa667..889e3689 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketDetailVO.java @@ -84,7 +84,7 @@ public class QmsIssueTicketDetailVO { private String remark; /** - * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketTabletPageData.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketTabletPageData.java index 631c1e78..ce4b702d 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketTabletPageData.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketTabletPageData.java @@ -17,7 +17,7 @@ public class QmsIssueTicketTabletPageData extends PageData { private Long totalCount; /** - * 待处理数(status=0) + * 待处理数(status=0或5) */ private Long pendingCount; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java index cfb12449..e6c592d0 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketToDoVO.java @@ -53,7 +53,7 @@ public class QmsIssueTicketToDoVO { private LocalDateTime completeTime; /** - * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java index 40fba4ed..a131ef0e 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIssueTicketVO.java @@ -79,7 +79,7 @@ public class QmsIssueTicketVO { private String incidentLocation; /** - * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status; diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicket.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicket.java index 1844d44f..ada0e95c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicket.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsIssueTicket.java @@ -105,7 +105,7 @@ public class QmsIssueTicket implements Serializable { private String remark; /** - * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废 + * 状态:0=待流转,1=处理中,2=已完成,3=已关闭,4=报废,5=待审核 */ private Short status;