From e69f212359adab92317941ab2391edec5cb2b1b7 Mon Sep 17 00:00:00 2001 From: funny <834502597@qq.com> Date: Fri, 22 May 2026 15:48:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(qms):=20=E6=96=B0=E5=A2=9EPQC=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E5=88=86=E6=B4=BE=E5=8F=8A=E8=AF=A6=E6=83=85=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加接口支持发起PQC工单,更新工单状态为处理中并分配处理人推送待办 - 实现按处理人分组合并不合格项并创建处理记录及待办消息 - 新增查询本人相关PQC工单详情接口,仅返回本人相关处理记录和措施 - 完善PQC工单处理流程,支持处理人提交审批及措施填写校验 - 添加PQC工单结束处理判断,最后一人提交时更新工单状态为已完成 - 新增文件及措施信息的解析和转换辅助方法,丰富详情数据展示 - 新增PQC任务及任务详情相关实体、接口及实现,支持任务管理功能 - 新增PQC任务相关Controller接口,包括查询、暂存和提交功能 - 优化PQC工单流程中的权限校验和异常处理,保障业务流程合理性 --- .../QmsIssueTicketControllerService.java | 17 ++--- ...msIssueTicketProcessControllerService.java | 4 +- .../QmsPqcTaskRecordControllerService.java | 68 ++++++++++++++----- .../common/pojo/vo/CommonFileDetailVO.java | 29 ++++++++ 4 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/CommonFileDetailVO.java 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 6f80af73..91a5907d 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 @@ -244,11 +244,10 @@ public class QmsIssueTicketControllerService { // 创建处理记录 QmsIssueTicketProcess process = new QmsIssueTicketProcess() - .setTicketId(ticket.getId()) + .setIssueTicketId(ticket.getId()) .setHandlerUserId(userId) .setHandlerUserName(user.getUserName()) - .setTaskResultIds(taskResultIdsStr) - .setCreateTime(now); + .setTaskResultIds(taskResultIdsStr); issueTicketProcessService.save(process); // 推送待办消息 @@ -375,10 +374,6 @@ public class QmsIssueTicketControllerService { } } } - - @Resource - private IQmsIssueTicketProcessService issueTicketProcessService; - @Resource private IQmsIssueTicketProcessMeasureService issueTicketProcessMeasureService; @@ -2036,11 +2031,11 @@ public class QmsIssueTicketControllerService { vo.setCreateUserName(ticket.getCreateUserName()); // 5. 解析工单图片 - if (StrUtil.isNotBlank(ticket.getImages())) { - List imageIds = Arrays.stream(ticket.getImages().split(",")) + if (StrUtil.isNotBlank(ticket.getImageIds())) { + List imageIds = Arrays.stream(ticket.getImageIds().split(",")) .filter(StrUtil::isNotBlank) .map(String::trim) - .map(Long::valueOf) + .map(s -> Long.valueOf(s)) .distinct() .collect(Collectors.toList()); List fileRecords = fileUploadRecordService.lambdaQuery() @@ -2150,7 +2145,7 @@ public class QmsIssueTicketControllerService { QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId()); if (item != null) { issueVO.setInspectionContent(item.getInspectionContent()); - issueVO.setInspectionLevel(item.getInspectionLevel()); + issueVO.setInspectionLevel(item.getInspectionLevel() != null ? item.getInspectionLevel().shortValue() : null); issueVO.setInspectionExampleImage(item.getInspectionImgUrl()); } 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 3535272d..5a29f52a 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 @@ -472,7 +472,7 @@ public class QmsIssueTicketProcessControllerService { long temporaryCount = 0; if (temporaryTypeId != null) { temporaryCount = issueTicketProcessMeasureService.lambdaQuery() - .eq(QmsIssueTicketProcessMeasure::getProcessId, processId) + .eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processId) .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeId) .count(); } @@ -482,7 +482,7 @@ public class QmsIssueTicketProcessControllerService { long permanentCount = 0; if (permanentTypeId != null) { permanentCount = issueTicketProcessMeasureService.lambdaQuery() - .eq(QmsIssueTicketProcessMeasure::getProcessId, processId) + .eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processId) .eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeId) .count(); } 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 92bf0bbb..fe0bcec7 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 @@ -85,7 +85,7 @@ public class QmsPqcTaskRecordControllerService { .throwMessage("未找到机型[" + modelNo + "]的检验规则"); // 2. 生成任务编号(单号生成ID=42) - String taskNo = basdeSerialNumberControllerService.getSerialNumber(42L); + String taskNo = basdeSerialNumberControllerService.generateSerialNumber(42); // 3. 创建任务记录 QmsPqcTaskRecord taskRecord = new QmsPqcTaskRecord() @@ -235,7 +235,12 @@ public class QmsPqcTaskRecordControllerService { } } - return PageData.restPage(page.getCurrent(), page.getSize(), page.getTotal(), voList); + PageData pageData = new PageData<>(); + pageData.setPage((int) page.getCurrent()); + pageData.setPageSize((int) page.getSize()); + pageData.setTotal((int) page.getTotal()); + pageData.setItems(voList); + return pageData; } // 其他5个功能将在后续实现... @@ -283,7 +288,8 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordDetailVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordDetailVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); materialVO.setBatchNo(detail.getReviewData()); - materialVO.setFiles(parseFileList(detail.getSelfTestAttachments())); + materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordDetailVO.FileDetailVO.class)); materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); materialCollections.add(materialVO); @@ -297,8 +303,10 @@ public class QmsPqcTaskRecordControllerService { processVO.setSelfTestData(detail.getSelfTestData()); processVO.setReviewData(detail.getReviewData()); processVO.setEnable(detail.getReviewEnable()); - processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments())); - processVO.setReviewFiles(parseFileList(detail.getReviewAttachments())); + processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordDetailVO.FileDetailVO.class)); + processVO.setReviewFiles(convertToFileVO(parseFileList(detail.getReviewAttachments()), + QmsPqcTaskRecordDetailVO.FileDetailVO.class)); processVO.setReviewOpinion(detail.getReviewOpinion()); processInspections.add(processVO); } @@ -374,7 +382,8 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); materialVO.setBatchNo(detail.getReviewData()); - materialVO.setFiles(parseFileList(detail.getSelfTestAttachments())); + materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordRepairSelfVO.FileDetailVO.class)); materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); materialCollections.add(materialVO); @@ -386,7 +395,8 @@ public class QmsPqcTaskRecordControllerService { processVO.setInspectionLevel(item.getInspectionLevel()); processVO.setInspectionExampleImage(item.getInspectionImgUrl()); processVO.setSelfTestData(detail.getSelfTestData()); - processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments())); + processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordRepairSelfVO.FileDetailVO.class)); processInspections.add(processVO); } } @@ -462,7 +472,8 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordReviewVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordReviewVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); materialVO.setBatchNo(detail.getReviewData()); - materialVO.setFiles(parseFileList(detail.getSelfTestAttachments())); + materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordReviewVO.FileDetailVO.class)); materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); materialCollections.add(materialVO); @@ -478,8 +489,10 @@ public class QmsPqcTaskRecordControllerService { processVO.setSelfTestData(detail.getSelfTestData()); processVO.setReviewData(detail.getReviewData()); processVO.setEnable(detail.getReviewEnable()); - processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments())); - processVO.setReviewFiles(parseFileList(detail.getReviewAttachments())); + processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()), + QmsPqcTaskRecordReviewVO.FileDetailVO.class)); + processVO.setReviewFiles(convertToFileVO(parseFileList(detail.getReviewAttachments()), + QmsPqcTaskRecordReviewVO.FileDetailVO.class)); processVO.setReviewOpinion(detail.getReviewOpinion()); processInspections.add(processVO); } else if (item.getInspectionLevel() != null && item.getInspectionLevel() == 3) { @@ -491,7 +504,8 @@ public class QmsPqcTaskRecordControllerService { processVO.setInspectionExampleImage(item.getInspectionImgUrl()); processVO.setQcTestData(detail.getQcTestData()); processVO.setEnable(detail.getReviewEnable()); - processVO.setQcTestFiles(parseFileList(detail.getQcTestAttachments())); + processVO.setQcTestFiles(convertToFileVO(parseFileList(detail.getQcTestAttachments()), + QmsPqcTaskRecordReviewVO.FileDetailVO.class)); processInspectionsLevel3.add(processVO); } } @@ -518,7 +532,7 @@ public class QmsPqcTaskRecordControllerService { /** * 解析文件列表 */ - private List parseFileList(String fileIdsStr) { + private List parseFileList(String fileIdsStr) { if (StrUtil.isBlank(fileIdsStr)) { return new ArrayList<>(); } @@ -526,7 +540,7 @@ public class QmsPqcTaskRecordControllerService { Set fileIds = Arrays.stream(fileIdsStr.split(",")) .filter(StrUtil::isNotBlank) .map(String::trim) - .map(Long::valueOf) + .map(s -> Long.valueOf(s)) .collect(Collectors.toSet()); if (fileIds.isEmpty()) { @@ -543,11 +557,11 @@ public class QmsPqcTaskRecordControllerService { return Arrays.stream(fileIdsStr.split(",")) .filter(StrUtil::isNotBlank) .map(String::trim) - .map(Long::valueOf) + .map(s -> Long.valueOf(s)) .map(fileMap::get) .filter(Objects::nonNull) .map(record -> { - QmsPqcTaskRecordDetailVO.FileDetailVO fileVO = new QmsPqcTaskRecordDetailVO.FileDetailVO(); + CommonFileDetailVO fileVO = new CommonFileDetailVO(); fileVO.setId(record.getId()); fileVO.setFileName(record.getFileName()); fileVO.setFileType(record.getFileType()); @@ -557,6 +571,28 @@ public class QmsPqcTaskRecordControllerService { .collect(Collectors.toList()); } + /** + * 转换文件列表到指定VO类型 + */ + private List convertToFileVO(List sourceList, Class targetClass) { + if (sourceList == null || sourceList.isEmpty()) { + return new ArrayList<>(); + } + + return sourceList.stream() + .map(source -> { + try { + T target = targetClass.getDeclaredConstructor().newInstance(); + org.springframework.beans.BeanUtils.copyProperties(source, target); + return target; + } catch (Exception e) { + return null; + } + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + /** * 6. 暂存 */ @@ -830,7 +866,7 @@ public class QmsPqcTaskRecordControllerService { private String handleUnqualifiedTask(QmsPqcTaskRecord taskRecord, QmsPqcTaskRecordDraftQO request, Long currentUserId, String currentUserName, LocalDateTime now) { // 1. 生成工单(状态为0待流转) - String ticketNo = basdeSerialNumberControllerService.getSerialNumber(41L); + String ticketNo = basdeSerialNumberControllerService.generateSerialNumber(41); QmsPqcInspectionPoint point = pqcInspectionPointService.getById(taskRecord.getInspectionPointId()); String stepName = point != null ? point.getStepName() : ""; String inspectionPointName = point != null ? point.getInspectionPointName() : ""; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/CommonFileDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/CommonFileDetailVO.java new file mode 100644 index 00000000..4d9ecbf4 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/CommonFileDetailVO.java @@ -0,0 +1,29 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +/** + * 通用文件详情VO + */ +@Data +public class CommonFileDetailVO { + /** + * 上传的id + */ + private Long id; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件类型 + */ + private String fileType; + + /** + * URL + */ + private String url; +}