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 1155f804..c174a11a 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 @@ -652,7 +652,7 @@ public class QmsIssueTicketControllerService { .setIncidentDescription(incidentDescription) .setRemark(request.getRemark()) .setUnqualifiedQty(unqualifiedDetails.size()) - .setStatus((short) 1) + .setStatus((short) 0) .setCreateUserId(userId) .setCreateUserName(userName) .setCreateTime(now) @@ -661,6 +661,13 @@ public class QmsIssueTicketControllerService { .setUpdateTime(now); issueTicketService.save(entity); + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(entity.getId()) + .setHandlerUserId(userId) + .setHasProcessed(false) + .setIsRead(false); + issueTicketToDoService.save(todoItem); + Set fileIds = new HashSet<>(); Set itemIds = unqualifiedDetails.stream() .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) 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 c95c75d8..a98ff508 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 @@ -15,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -86,19 +87,39 @@ public class QmsIssueTicketProcessControllerService { Collectors.mapping(QmsIssueTicketProcessAddQO.HandlerItem::getTaskResultId, Collectors.toList()) )); + List handlerUserIds = new ArrayList<>(); + // 为每个处理人创建处理记录 for (Map.Entry> entry : handlerToResultsMap.entrySet()) { doAdd(request.getIssueTicketId(), entry.getKey(), entry.getValue()); + handlerUserIds.add(entry.getKey()); } - if (Objects.equals(ticket.getSourceType(), (short) 3) && !Objects.equals(ticket.getStatus(), (short) 1)) { - issueTicketService.lambdaUpdate() - .eq(QmsIssueTicket::getId, ticket.getId()) - .set(QmsIssueTicket::getStatus, (short) 1) - .set(QmsIssueTicket::getUpdateUserId, currentUserId) - .set(QmsIssueTicket::getUpdateUserName, currentUserName) - .set(QmsIssueTicket::getUpdateTime, now) + if (Objects.equals(ticket.getSourceType(), (short) 3)) { + issueTicketToDoService.lambdaUpdate() + .eq(QmsIssueTicketToDo::getTicketId, ticket.getId()) + .eq(QmsIssueTicketToDo::getHasProcessed, false) + .set(QmsIssueTicketToDo::getHasProcessed, true) .update(); + + for (Long handlerUserId : handlerUserIds) { + QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() + .setTicketId(ticket.getId()) + .setHandlerUserId(handlerUserId) + .setHasProcessed(false) + .setIsRead(false); + issueTicketToDoService.save(todoItem); + } + + if (!Objects.equals(ticket.getStatus(), (short) 1)) { + issueTicketService.lambdaUpdate() + .eq(QmsIssueTicket::getId, ticket.getId()) + .set(QmsIssueTicket::getStatus, (short) 1) + .set(QmsIssueTicket::getUpdateUserId, currentUserId) + .set(QmsIssueTicket::getUpdateUserName, currentUserName) + .set(QmsIssueTicket::getUpdateTime, now) + .update(); + } } } @@ -293,43 +314,44 @@ public class QmsIssueTicketProcessControllerService { VUtil.trueThrowBusinessError(Objects.isNull(request.getApprovalStatus())) .throwMessage("提交时审批状态不能为空"); - // 2. 驳回时校验:handlers和审批意见不能为空 + // 2. 驳回时校验:审批意见不能为空 if (request.getApprovalStatus() == 1) { - VUtil.trueThrowBusinessError(request.getHandlers() == null || request.getHandlers().isEmpty()) - .throwMessage("驳回时处理人列表不能为空"); VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getApprovalOpinion())) .throwMessage("驳回时审批意见不能为空"); } Long processId = process.getId(); - // 3. 保存数据:前端传入approvalStatus/approvalOpinion,数据库填入leaderApprovalResult/leaderApprovalOpinion - issueTicketProcessService.lambdaUpdate() - .eq(QmsIssueTicketProcess::getId, processId) - .set(request.getApprovalOpinion() != null, - QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion()) - .set(request.getApprovalStatus() != null, - QmsIssueTicketProcess::getLeaderApprovalResult, request.getApprovalStatus()) - .set(QmsIssueTicketProcess::getLeaderUserId, currentUserId) - .set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName()) - .set(QmsIssueTicketProcess::getLeaderApprovalTime, now) - .update(); - issueTicketToDoService.processed(ticket.getId()); Short leaderApprovalResult = request.getApprovalStatus(); if (leaderApprovalResult == 1) { - // 驳回:只驳回传入的handlers对应的处理记录 + // 驳回:自动驳回当前领导部门下属的待审批处理记录 Long issueTicketId = ticket.getId(); - List rejectUserIds = request.getHandlers().stream() - .map(QmsIssueTicketProcessDraftQO.RejectHandlerItem::getHandlerUserId) + List rejectProcesses = issueTicketProcessService.lambdaQuery() + .eq(QmsIssueTicketProcess::getIssueTicketId, issueTicketId) + .eq(QmsIssueTicketProcess::getApprovalStatus, (short) 0) + .isNull(QmsIssueTicketProcess::getLeaderApprovalResult) + .list() + .stream() + .filter(p -> isCurrentUserHeadOfHandlerDept(p.getHandlerUserId(), currentUserId)) + .collect(Collectors.toList()); + VUtil.trueThrowBusinessError(rejectProcesses.isEmpty()) + .throwMessage("未找到当前领导可驳回的下属处理记录"); + + List rejectProcessIds = rejectProcesses.stream() + .map(QmsIssueTicketProcess::getId) + .collect(Collectors.toList()); + List rejectUserIds = rejectProcesses.stream() + .map(QmsIssueTicketProcess::getHandlerUserId) + .filter(Objects::nonNull) + .distinct() .collect(Collectors.toList()); // 更新指定处理人的记录:重置审批状态 issueTicketProcessService.lambdaUpdate() - .eq(QmsIssueTicketProcess::getIssueTicketId, issueTicketId) - .in(QmsIssueTicketProcess::getHandlerUserId, rejectUserIds) + .in(QmsIssueTicketProcess::getId, rejectProcessIds) .set(QmsIssueTicketProcess::getApprovalStatus, null) .set(QmsIssueTicketProcess::getApprovalTime, null) .set(QmsIssueTicketProcess::getLeaderApprovalResult, null) @@ -352,10 +374,23 @@ public class QmsIssueTicketProcessControllerService { for (Long userId : rejectUserIds) { QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() .setTicketId(issueTicketId) - .setHandlerUserId(userId); + .setHandlerUserId(userId) + .setHasProcessed(false) + .setIsRead(false); issueTicketToDoService.save(todoItem); } } else if (leaderApprovalResult == 0) { + // 同意:保存领导审批结果 + issueTicketProcessService.lambdaUpdate() + .eq(QmsIssueTicketProcess::getId, processId) + .set(request.getApprovalOpinion() != null, + QmsIssueTicketProcess::getLeaderApprovalOpinion, request.getApprovalOpinion()) + .set(QmsIssueTicketProcess::getLeaderApprovalResult, request.getApprovalStatus()) + .set(QmsIssueTicketProcess::getLeaderUserId, currentUserId) + .set(QmsIssueTicketProcess::getLeaderUserName, UserUtil.getUserName()) + .set(QmsIssueTicketProcess::getLeaderApprovalTime, now) + .update(); + // 同意:检查同一工单下所有处理记录是否都已完成 Long issueTicketId = process.getIssueTicketId(); @@ -444,6 +479,20 @@ public class QmsIssueTicketProcessControllerService { } } + private boolean isCurrentUserHeadOfHandlerDept(Long handlerUserId, Long currentUserId) { + if (handlerUserId == null || currentUserId == null) { + return false; + } + UserInterior handlerInterior = userInteriorService.lambdaQuery() + .eq(UserInterior::getUserId, handlerUserId) + .one(); + if (handlerInterior == null || handlerInterior.getDeptId() == null) { + return false; + } + Department department = departmentService.getById(handlerInterior.getDeptId()); + return department != null && currentUserId.equals(department.getHeadUserId()); + } + /** * PQC工单处理人提交 */ @@ -480,9 +529,10 @@ public class QmsIssueTicketProcessControllerService { public void submitPqcHandler(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket, QmsIssueTicketProcess process, LocalDateTime now, Long currentUserId, String currentUserName) { + QmsIssueTicketProcess latestProcess = issueTicketProcessService.getById(process.getId()); Short approvalStatus = request.getApprovalStatus() != null ? request.getApprovalStatus() - : process.getApprovalStatus(); + : latestProcess.getApprovalStatus(); VUtil.trueThrowBusinessError(approvalStatus == null).throwMessage("提交时审批状态不能为空"); VUtil.trueThrowBusinessError(approvalStatus != 0 && approvalStatus != 1) .throwMessage("不支持的审批状态"); 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 ea2b0ccf..a78fff4f 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 @@ -187,6 +187,18 @@ public class QmsIssueTicketProcessMeasureControllerService { } else if (sourceType == 3) { // PQC工单(无领导审批) if (isHandler) { + if (Objects.equals(request.getApprovalStatus(), (short) 1)) { + issueTicketProcessService.lambdaUpdate() + .eq(QmsIssueTicketProcess::getId, processId) + .set(QmsIssueTicketProcess::getApprovalStatus, request.getApprovalStatus()) + .set(request.getApprovalOpinion() != null, + QmsIssueTicketProcess::getApprovalOpinion, request.getApprovalOpinion()) + .set(QmsIssueTicketProcess::getApprovalUserId, currentUserId) + .set(QmsIssueTicketProcess::getApprovalUserName, UserUtil.getUserName()) + .update(); + return; + } + // 处理人处理:保存根本原因、审批状态和措施 issueTicketProcessService.lambdaUpdate() .eq(QmsIssueTicketProcess::getId, processId) diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaReviewServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaReviewServiceImpl.java index 786d7e9b..7c6653dc 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaReviewServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsCoaReviewServiceImpl.java @@ -623,19 +623,6 @@ public class QmsCoaReviewServiceImpl extends ServiceImpl + AND m.material_no = #{request.materialNo} - + AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%') - + AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%') UNION ALL @@ -163,13 +163,13 @@ WHERE qi.inspection_type=#{request.inspectionType} AND imci.inspector_id = ( SELECT id FROM qms_quality_inspector WHERE user_id = #{userId} LIMIT 1 ) - + AND m.material_no = #{request.materialNo} - + AND m.material_category_code LIKE CONCAT(#{request.materialCategoryCode}, '%') - + AND m.material_desc LIKE CONCAT('%', #{request.materialDesc}, '%') ORDER BY material_id ASC