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 c3454e19..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工单处理人提交 */ diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java index 8e6b57d3..31c6b7c5 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiTaskRecordControllerService.java @@ -472,8 +472,13 @@ public class QmsPdiTaskRecordControllerService { page.getRecords().forEach(vo -> { if (StrUtil.isNotBlank(vo.getInspectionItemImage())) { List files = new ArrayList<>(); - String[] imgIds = vo.getInspectionItemImage().split(","); - for (String imgId : imgIds) { + // String[] imgIds = vo.getInspectionItemImage().split(","); + List imgIds = Arrays.stream(vo.getInspectionItemImage().split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(Long::parseLong) + .collect(Collectors.toList()); + for (Long imgId : imgIds) { FileUploadRecord fileUploadRecord = fileUploadRecordService. lambdaQuery(). eq(FileUploadRecord::getId, imgId).one();