From 5a5e96f8ec272bc6abd6ee6dc5df754e4848fa98 Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Thu, 11 Jun 2026 19:39:20 +0800 Subject: [PATCH] =?UTF-8?q?pqc=E5=B7=A5=E5=8D=95=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QmsIssueTicketController.java | 2 +- .../QmsIssueTicketControllerService.java | 199 +++++++++++++++++- ...msIssueTicketProcessControllerService.java | 12 ++ 3 files changed, 205 insertions(+), 8 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java index bdd0bba7..d6971a69 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIssueTicketController.java @@ -162,7 +162,7 @@ public class QmsIssueTicketController extends BaseController { /** * 查询PQC工单详情(本人相关) - * 校验当前登录人在处理记录中为处理人,仅返回相关的处理记录及措施 + * 创建人可查看全部问题明细和措施,处理人仅查看分配给自己的问题明细和措施 */ @GetMapping("detail/my-pqc-ticket") public ApiResult myPqcTicketDetail(@NotNull(message = "ID不能为空") Long id) { 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 17d4e63d..65e8a027 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 @@ -566,7 +566,7 @@ public class QmsIssueTicketControllerService { .setIncidentDescription(incidentDescription) .setRemark(request.getRemark()) .setUnqualifiedQty(unqualifiedDetails.size()) - .setStatus((short) 0) + .setStatus((short) 1) .setCreateUserId(userId) .setCreateUserName(userName) .setCreateTime(now) @@ -1862,7 +1862,32 @@ public class QmsIssueTicketControllerService { // 判断是否为工单创建者 boolean isCreator = ticket.getCreateUserId() != null && ticket.getCreateUserId().equals(currentUserId); - List processes; + List processes = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(processes)) { + Long temporaryTypeId = dictionaryItemService.getId("工单解决措施", "临时纠正措施"); + Long permanentTypeId = dictionaryItemService.getId("工单解决措施", "永久纠正措施"); + List processIds = processes.stream() + .map(QmsIssueTicketProcess::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (temporaryTypeId != null && CollectionUtil.isNotEmpty(processIds)) { + List temporaryMeasures = issueTicketProcessMeasureService.lambdaQuery() + .in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIds) + .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeId) + .list(); + convertToMeasureVO(temporaryMeasures); + } + + if (permanentTypeId != null && CollectionUtil.isNotEmpty(processIds)) { + List permanentMeasures = issueTicketProcessMeasureService.lambdaQuery() + .in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIds) + .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeId) + .list(); + convertToMeasureVO(permanentMeasures); + } + } + if (isCreator) { // 工单创建者:返回全部处理记录 processes = issueTicketProcessService.lambdaQuery() @@ -2331,12 +2356,17 @@ public class QmsIssueTicketControllerService { // 6. 查询问题详情(不合格项) List issueDetails = new ArrayList<>(); - - // 查询当前登录人的处理记录 - QmsIssueTicketProcess process = issueTicketProcessService.lambdaQuery() + List processes = isCreator + ? issueTicketProcessService.lambdaQuery() + .eq(QmsIssueTicketProcess::getIssueTicketId, id) + .list() + : issueTicketProcessService.lambdaQuery() .eq(QmsIssueTicketProcess::getIssueTicketId, id) .eq(QmsIssueTicketProcess::getHandlerUserId, currentUserId) - .one(); + .list(); + + // 查询当前登录人的处理记录 + QmsIssueTicketProcess process = CollectionUtil.isEmpty(processes) ? null : processes.get(0); if (process != null && StrUtil.isNotBlank(process.getTaskResultIds())) { // 解析不合格项ID @@ -2460,7 +2490,31 @@ public class QmsIssueTicketControllerService { } } } - vo.setIssueDetails(issueDetails); + vo.setIssueDetails(buildPqcIssueDetails(processes)); + if (CollectionUtil.isNotEmpty(processes)) { + Long temporaryTypeIdAll = dictionaryItemService.getId("工单解决措施", "临时纠正措施"); + Long permanentTypeIdAll = dictionaryItemService.getId("工单解决措施", "永久纠正措施"); + List processIdsAll = processes.stream() + .map(QmsIssueTicketProcess::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (temporaryTypeIdAll != null && CollectionUtil.isNotEmpty(processIdsAll)) { + List temporaryMeasuresAll = issueTicketProcessMeasureService.lambdaQuery() + .in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIdsAll) + .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeIdAll) + .list(); + vo.setTemporaryMeasures(convertToMeasureVO(temporaryMeasuresAll)); + } + + if (permanentTypeIdAll != null && CollectionUtil.isNotEmpty(processIdsAll)) { + List permanentMeasuresAll = issueTicketProcessMeasureService.lambdaQuery() + .in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIdsAll) + .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeIdAll) + .list(); + vo.setPermanentMeasures(convertToMeasureVO(permanentMeasuresAll)); + } + } // 7. 查询措施列表 if (process != null) { @@ -2514,6 +2568,137 @@ public class QmsIssueTicketControllerService { /** * 解析文件列表 */ + private List buildPqcIssueDetails(List processes) { + if (CollectionUtil.isEmpty(processes)) { + return new ArrayList<>(); + } + + List orderedTaskResultIds = new ArrayList<>(); + Map taskResultProcessMap = new LinkedHashMap<>(); + for (QmsIssueTicketProcess process : processes) { + for (Long taskResultId : parseTaskResultIds(process.getTaskResultIds())) { + orderedTaskResultIds.add(taskResultId); + taskResultProcessMap.putIfAbsent(taskResultId, process); + } + } + if (CollectionUtil.isEmpty(orderedTaskResultIds)) { + return new ArrayList<>(); + } + + List details = pqcTaskRecordDetailsService.lambdaQuery() + .in(QmsPqcTaskRecordDetails::getId, orderedTaskResultIds) + .list(); + if (CollectionUtil.isEmpty(details)) { + return new ArrayList<>(); + } + + Map sortIndexMap = new HashMap<>(); + for (int i = 0; i < orderedTaskResultIds.size(); i++) { + sortIndexMap.putIfAbsent(orderedTaskResultIds.get(i), i); + } + details.sort(Comparator.comparingInt(detail -> sortIndexMap.getOrDefault(detail.getId(), Integer.MAX_VALUE))); + + Set itemIds = details.stream() + .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map itemMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(itemIds)) { + itemMap = pqcInspectionPointItemsService.listByIds(itemIds).stream() + .collect(Collectors.toMap(QmsPqcInspectionPointItems::getId, item -> item, (a, b) -> a)); + } + + Set taskIds = details.stream() + .map(QmsPqcTaskRecordDetails::getTaskId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map taskMap = new HashMap<>(); + Map pointMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(taskIds)) { + List tasks = pqcTaskRecordService.listByIds(taskIds); + taskMap = tasks.stream() + .collect(Collectors.toMap(QmsPqcTaskRecord::getId, task -> task, (a, b) -> a)); + + Set inspectionPointIds = tasks.stream() + .map(QmsPqcTaskRecord::getInspectionPointId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(inspectionPointIds)) { + pointMap = pqcInspectionPointService.listByIds(inspectionPointIds).stream() + .collect(Collectors.toMap(QmsPqcInspectionPoint::getId, point -> point, (a, b) -> a)); + } + } + + Set allFileIds = new HashSet<>(); + details.forEach(detail -> { + collectFileIds(detail.getSelfTestAttachments(), allFileIds); + collectFileIds(detail.getQcTestAttachments(), allFileIds); + }); + Map fileMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(allFileIds)) { + fileMap = fileUploadRecordService.lambdaQuery() + .in(FileUploadRecord::getId, allFileIds) + .list() + .stream() + .collect(Collectors.toMap(FileUploadRecord::getId, file -> file, (a, b) -> a)); + } + + List issueDetails = new ArrayList<>(); + for (QmsPqcTaskRecordDetails detail : details) { + QmsPqcTicketMyDetailVO.PqcIssueDetailVO issueVO = new QmsPqcTicketMyDetailVO.PqcIssueDetailVO(); + issueVO.setTaskResultId(detail.getId()); + + QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId()); + if (item != null) { + issueVO.setInspectionContent(item.getInspectionContent()); + issueVO.setInspectionLevel(item.getInspectionLevel() != null ? item.getInspectionLevel().shortValue() : null); + issueVO.setInspectionExampleImage(item.getInspectionImgUrl()); + } + + QmsPqcTaskRecord task = taskMap.get(detail.getTaskId()); + if (task != null) { + QmsPqcInspectionPoint point = pointMap.get(task.getInspectionPointId()); + if (point != null) { + issueVO.setInspectionPointName(point.getInspectionPointName()); + } + issueVO.setInspectorId(task.getSelfTesterId()); + issueVO.setInspectorName(task.getSelfTesterName()); + issueVO.setInspectionTime(task.getCompleteTime()); + issueVO.setInspectionResult(task.getEnable()); + } + + issueVO.setSelfTestData(detail.getSelfTestData()); + issueVO.setQcTestData(detail.getQcTestData()); + issueVO.setReviewOpinion(detail.getReviewOpinion()); + issueVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments(), fileMap)); + issueVO.setQcTestFiles(parseFileList(detail.getQcTestAttachments(), fileMap)); + + QmsIssueTicketProcess process = taskResultProcessMap.get(detail.getId()); + if (process != null) { + issueVO.setHandlerUserId(process.getHandlerUserId()); + issueVO.setHandlerUserName(process.getHandlerUserName()); + issueVO.setProcessTime(process.getApprovalTime()); + issueVO.setProcessStatus(process.getApprovalStatus()); + issueVO.setProcessRemark(process.getApprovalOpinion()); + } + + issueDetails.add(issueVO); + } + return issueDetails; + } + + private List parseTaskResultIds(String taskResultIds) { + if (StrUtil.isBlank(taskResultIds)) { + return Collections.emptyList(); + } + return Arrays.stream(taskResultIds.split(",")) + .filter(StrUtil::isNotBlank) + .map(String::trim) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + } + private List parseFileList(String fileIdsStr, Map fileMap) { if (StrUtil.isBlank(fileIdsStr)) { return new ArrayList<>(); 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 8ac8018a..87e7c43a 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 @@ -58,6 +58,8 @@ public class QmsIssueTicketProcessControllerService { */ public void add(QmsIssueTicketProcessAddQO request) { Long currentUserId = UserUtil.getUserId(); + String currentUserName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); // 校验不能分配给自己 boolean containsSelf = request.getHandlers().stream() @@ -88,6 +90,16 @@ public class QmsIssueTicketProcessControllerService { for (Map.Entry> entry : handlerToResultsMap.entrySet()) { doAdd(request.getIssueTicketId(), entry.getKey(), entry.getValue()); } + + 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) + .update(); + } } /**