From ad256a82c2b5f7f7b30f93d9479a9675d9e276e1 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Sun, 14 Jun 2026 20:44:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...msIssueTicketProcessControllerService.java | 57 +++++++++++-------- .../QmsPqcTaskRecordControllerService.java | 10 ++++ 2 files changed, 42 insertions(+), 25 deletions(-) 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 9f40e96e..fe3aadd3 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 @@ -222,19 +222,7 @@ public class QmsIssueTicketProcessControllerService { issueTicketToDoService.save(todoItem); } else if (request.getApprovalStatus() != null && request.getApprovalStatus() == 0) { // 通过:推送给处理人所在部门负责人 - UserInterior userInterior = userInteriorService.lambdaQuery() - .eq(UserInterior::getUserId, currentUserId) - .one(); - - if (userInterior != null && userInterior.getDeptId() != null) { - Department department = departmentService.getById(userInterior.getDeptId()); - if (department != null && department.getHeadUserId() != null) { - QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() - .setTicketId(ticket.getId()) - .setHandlerUserId(department.getHeadUserId()); - issueTicketToDoService.save(todoItem); - } - } + pushLeaderTicketTodo(ticket.getId(), process.getId(), currentUserId); } } else { // 领导审批 @@ -402,18 +390,7 @@ public class QmsIssueTicketProcessControllerService { } else if (request.getApprovalStatus() == 0) { // 通过:推送给当前用户所在部门负责人 Long currentUserId = UserUtil.getUserId(); - UserInterior userInterior = userInteriorService.lambdaQuery() - .eq(UserInterior::getUserId, currentUserId) - .one(); - if (userInterior != null && userInterior.getDeptId() != null) { - Department department = departmentService.getById(userInterior.getDeptId()); - if (department != null && department.getHeadUserId() != null) { - QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() - .setTicketId(ticket.getId()) - .setHandlerUserId(department.getHeadUserId()); - issueTicketToDoService.save(todoItem); - } - } + pushLeaderTicketTodo(ticket.getId(), processId, currentUserId); // 推送消息给工单创建人 if (ticket.getCreateUserId() != null) { @@ -428,6 +405,35 @@ public class QmsIssueTicketProcessControllerService { /** * PQC工单处理人提交 */ + private void pushLeaderTicketTodo(Long ticketId, Long processId, Long handlerUserId) { + UserInterior userInterior = userInteriorService.lambdaQuery() + .eq(UserInterior::getUserId, handlerUserId) + .one(); + if (userInterior == null || userInterior.getDeptId() == null) { + return; + } + + Department department = departmentService.getById(userInterior.getDeptId()); + if (department == null || department.getHeadUserId() == null) { + return; + } + + User leaderUser = userService.getById(department.getHeadUserId()); + issueTicketProcessService.lambdaUpdate() + .eq(QmsIssueTicketProcess::getId, processId) + .set(QmsIssueTicketProcess::getLeaderUserId, department.getHeadUserId()) + .set(leaderUser != null, QmsIssueTicketProcess::getLeaderUserName, + leaderUser == null ? null : leaderUser.getUserName()) + .update(); + + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticketId) + .setHandlerUserId(department.getHeadUserId()) + .setHasProcessed(false) + .setIsRead(false); + issueTicketToDoService.save(todoItem); + } + @Transactional(rollbackFor = Exception.class) public void submitPqcHandler(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket, QmsIssueTicketProcess process, LocalDateTime now, @@ -464,6 +470,7 @@ public class QmsIssueTicketProcessControllerService { issueTicketService.lambdaUpdate() .eq(QmsIssueTicket::getId, ticket.getId()) .set(QmsIssueTicket::getStatus, (short) 2) + .set(QmsIssueTicket::getCompleteTime, now) .set(QmsIssueTicket::getUpdateUserId, currentUserId) .set(QmsIssueTicket::getUpdateUserName, currentUserName) .set(QmsIssueTicket::getUpdateTime, now) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java index 868ed4c2..1417814d 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java @@ -64,6 +64,9 @@ public class QmsPqcTaskRecordControllerService { @Resource private IQmsIssueTicketToDoService issueTicketToDoService; + @Resource + private IQmsIssueTicketProcessService issueTicketProcessService; + @Resource private IUserService userService; @@ -1552,6 +1555,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcInspectionPoint point = pqcInspectionPointService.getById(taskRecord.getInspectionPointId()); String stepName = point != null ? point.getStepName() : ""; String inspectionPointName = point != null ? point.getInspectionPointName() : ""; + VUtil.trueThrowBusinessError(taskRecord.getReviewerId() == null).throwMessage("PQC工单处理人不能为空"); QmsIssueTicket ticket = new QmsIssueTicket() .setSourceType((short) 3) // PQC @@ -1566,6 +1570,12 @@ public class QmsPqcTaskRecordControllerService { issueTicketService.save(ticket); + QmsIssueTicketProcess ticketProcess = new QmsIssueTicketProcess() + .setIssueTicketId(ticket.getId()) + .setHandlerUserId(taskRecord.getReviewerId()) + .setHandlerUserName(taskRecord.getReviewerName()); + issueTicketProcessService.save(ticketProcess); + QmsIssueTicketToDo ticketTodo = new QmsIssueTicketToDo() .setTicketId(ticket.getId()) .setHandlerUserId(taskRecord.getReviewerId()) From 40d34676ed8e963c726dca83470403f22bf11dba Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Sun, 14 Jun 2026 20:53:11 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=B4=9F=E8=B4=A3?= =?UTF-8?q?=E4=BA=BA=E9=A9=B3=E5=9B=9E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qms/admin/service/QmsIssueTicketControllerService.java | 3 +++ .../wms/common/pojo/qo/QmsIssueTicketDispatchMultipleQO.java | 2 -- 2 files changed, 3 insertions(+), 2 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 fec01ad9..b21aa71e 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 @@ -382,6 +382,9 @@ public class QmsIssueTicketControllerService { issueTicketToDoService.save(todoItem); } else { // 通过:按现有流程处理 + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getHandlerUserIds())) + .throwMessage("处理人列表不能为空"); + // 校验不能分配给自己 if (request.getHandlerUserIds().contains(currentUserId)) { throw new NflgException(STATE.BusinessError, "不能将工单分配给自己"); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketDispatchMultipleQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketDispatchMultipleQO.java index ea65f9ce..03b5e468 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketDispatchMultipleQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsIssueTicketDispatchMultipleQO.java @@ -1,6 +1,5 @@ package com.nflg.wms.common.pojo.qo; -import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -21,7 +20,6 @@ public class QmsIssueTicketDispatchMultipleQO { /** * 处理人ID列表 */ - @NotEmpty(message = "处理人列表不能为空") private List handlerUserIds; /** From aa42f0b58d1a6ea41aade461c81e484b227b8266 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Sun, 14 Jun 2026 21:05:50 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=B4=9F=E8=B4=A3?= =?UTF-8?q?=E4=BA=BA=E9=A9=B3=E5=9B=9E=E4=BF=AE=E6=94=B9=20pqc=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E5=AE=8C=E6=88=90=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...msIssueTicketProcessControllerService.java | 50 +++++++++++++++++-- ...TicketProcessMeasureControllerService.java | 12 +++-- 2 files changed, 55 insertions(+), 7 deletions(-) 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 fe3aadd3..d26903cd 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 @@ -149,6 +149,13 @@ public class QmsIssueTicketProcessControllerService { QmsIssueTicket ticket = issueTicketService.getById(request.getId()); VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); + if (Objects.equals(ticket.getSourceType(), (short) 2) + && Objects.equals(ticket.getApprovalUserId(), currentUserId) + && Objects.equals(request.getApprovalStatus(), (short) 1)) { + rejectInspectionByResponsible(request, ticket, now, currentUserId, currentUserName); + return; + } + // 2. 通过工单ID + 当前登录人查找处理记录 QmsIssueTicketProcess process = issueTicketProcessService.lambdaQuery() .eq(QmsIssueTicketProcess::getIssueTicketId, request.getId()) @@ -244,6 +251,29 @@ public class QmsIssueTicketProcessControllerService { /** * 领导审批统一处理(PDI和巡检共用) */ + private void rejectInspectionByResponsible(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket, + LocalDateTime now, Long currentUserId, String currentUserName) { + issueTicketToDoService.processed(ticket.getId()); + + issueTicketService.lambdaUpdate() + .eq(QmsIssueTicket::getId, ticket.getId()) + .set(QmsIssueTicket::getStatus, (short) 2) + .set(QmsIssueTicket::getApprovalStatus, request.getApprovalStatus()) + .set(request.getApprovalOpinion() != null, + QmsIssueTicket::getApprovalOpinion, request.getApprovalOpinion()) + .set(QmsIssueTicket::getUpdateUserId, currentUserId) + .set(QmsIssueTicket::getUpdateUserName, currentUserName) + .set(QmsIssueTicket::getUpdateTime, now) + .update(); + + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(ticket.getCreateUserId()) + .setHasProcessed(false) + .setIsRead(false); + issueTicketToDoService.save(todoItem); + } + private void leaderSubmitUnified(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket, QmsIssueTicketProcess process, LocalDateTime now, Long currentUserId, String currentUserName) { @@ -464,7 +494,7 @@ public class QmsIssueTicketProcessControllerService { } // 判断是否是最后一个处理人 - boolean isLastHandler = isLastPqcHandler(ticket.getId()); + boolean isLastHandler = isLastPqcHandler(ticket.getId(), currentUserId); if (isLastHandler) { // 最后一个处理人提交,工单状态改为2(已完成) issueTicketService.lambdaUpdate() @@ -518,14 +548,26 @@ public class QmsIssueTicketProcessControllerService { * 判断是否是PQC工单最后一个处理人 * @return true=是最后一个,false=不是 */ - private boolean isLastPqcHandler(Long ticketId) { + private boolean isLastPqcHandler(Long ticketId, Long currentUserId) { // 查询该工单所有处理记录 List processes = issueTicketProcessService.lambdaQuery() .eq(QmsIssueTicketProcess::getIssueTicketId, ticketId) .list(); - // 检查是否所有人的approval_time都不为空 + Map> processMap = processes.stream() + .filter(p -> p.getHandlerUserId() != null) + .collect(Collectors.groupingBy(QmsIssueTicketProcess::getHandlerUserId)); + if (processMap.isEmpty()) { + return false; + } + + // 按处理人去重判断,避免同一个处理人存在重复处理记录时一直卡在处理中 return processes.stream() - .allMatch(p -> p.getApprovalTime() != null); + .filter(p -> p.getHandlerUserId() != null) + .collect(Collectors.groupingBy(QmsIssueTicketProcess::getHandlerUserId)) + .values() + .stream() + .allMatch(list -> list.stream() + .anyMatch(p -> p.getApprovalTime() != null || currentUserId.equals(p.getHandlerUserId()))); } } 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 7884c21a..c150261d 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 @@ -126,14 +126,20 @@ public class QmsIssueTicketProcessMeasureControllerService { public void draftUnified(@Valid QmsIssueTicketProcessDraftQO request) { Long currentUserId = UserUtil.getUserId(); + QmsIssueTicket ticket = issueTicketService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); + + if (Objects.equals(ticket.getSourceType(), (short) 2) + && Objects.equals(ticket.getApprovalUserId(), currentUserId) + && Objects.equals(request.getApprovalStatus(), (short) 1)) { + return; + } + // 1. 通过工单ID + 当前登录人查找处理记录 QmsIssueTicketProcess process = findProcessByTicketAndUser(request.getId(), currentUserId); Long processId = process.getId(); // 2. 查询工单获取source_type - QmsIssueTicket ticket = issueTicketService.getById(request.getId()); - VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); - Short sourceType = ticket.getSourceType(); Long handlerUserId = process.getHandlerUserId(); String mergedRootCause = mergeRootCause(process.getRootCause(), request.getRootCause());