From ef483e22a03727efe3f7fde30117888e2004a4fc Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Wed, 10 Jun 2026 20:43:59 +0800 Subject: [PATCH] =?UTF-8?q?pdi=E6=9F=A5=E8=AF=A2=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E9=A1=B9=E6=96=B9=E6=B3=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QmsPdiStatusItemControllerService.java | 56 +++++++++++++++---- .../QmsPdiDetectionRulesStatusItemMapper.xml | 2 +- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java index 931a88f3..1d0a92d6 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiStatusItemControllerService.java @@ -51,6 +51,8 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class QmsPdiStatusItemControllerService { + private static final Integer SPECIAL_STATUS = 2; + private final IQmsPdiDetectionRulesStatusItemService statusItemService; private final QmsPdiDetectionRulesStatusItemMapper statusItemMapper; private final IQmsPdiDetectionRulesService pdiDetectionRulesService; @@ -76,7 +78,7 @@ public class QmsPdiStatusItemControllerService { Long componentsId = null; // 处理部件(部件状态复用检测项的status) - if (StrUtil.isNotBlank(request.getComponentsDes())) { + if (!isSpecialStatus(request.getStatus()) && StrUtil.isNotBlank(request.getComponentsDes())) { // 检查部件是否已存在(按检测规则ID + 名称 + 状态查询) QmsPdiComponentAnagement existingComponent = componentAnagementService.lambdaQuery() .eq(QmsPdiComponentAnagement::getComponentName, request.getComponentsDes()) @@ -112,13 +114,7 @@ public class QmsPdiStatusItemControllerService { } // 查询该部件下的最大sort值 - Integer maxItemSort = statusItemService.lambdaQuery() - .eq(QmsPdiDetectionRulesStatusItem::getComponentsId, componentsId) - .orderByDesc(QmsPdiDetectionRulesStatusItem::getSort) - .last("LIMIT 1") - .oneOpt() - .map(QmsPdiDetectionRulesStatusItem::getSort) - .orElse(0); + Integer maxItemSort = getMaxItemSort(request.getDetectionRulesId(), request.getStatus(), componentsId); // 插入检测项 QmsPdiDetectionRulesStatusItem entity = new QmsPdiDetectionRulesStatusItem() @@ -150,7 +146,9 @@ public class QmsPdiStatusItemControllerService { .eq(QmsPdiDetectionRulesStatusItem::getId, request.getId()) .set(QmsPdiDetectionRulesStatusItem::getCreateBy, operator) .set(QmsPdiDetectionRulesStatusItem::getCreateTime, LocalDateTime.now()); - if (request.getComponentsId() != null) { + if (isSpecialStatus(existing.getStatus())) { + updateChain.set(QmsPdiDetectionRulesStatusItem::getComponentsId, null); + } else if (request.getComponentsId() != null) { updateChain.set(QmsPdiDetectionRulesStatusItem::getComponentsId, request.getComponentsId()); } if (StrUtil.isNotBlank(request.getInspectionContent())) { @@ -333,13 +331,16 @@ public class QmsPdiStatusItemControllerService { Map componentNameToIdMap = new java.util.LinkedHashMap<>(); // 记录每个部件下的检测项数量 Map componentItemCountMap = new HashMap<>(); + if (isSpecialStatus(status)) { + componentItemCountMap.put(null, getMaxItemSort(detectionRulesId, status, null)); + } // 按Excel顺序处理 for (QmsPdiStatusItemImportDTO dto : validData) { Long componentsId; // 处理部件 - if (StrUtil.isNotBlank(dto.getComponentsDes())) { + if (!isSpecialStatus(status) && StrUtil.isNotBlank(dto.getComponentsDes())) { if (componentNameToIdMap.containsKey(dto.getComponentsDes())) { // 部件已存在,直接使用 componentsId = componentNameToIdMap.get(dto.getComponentsDes()); @@ -423,6 +424,16 @@ public class QmsPdiStatusItemControllerService { return pd; } + if (isSpecialStatus(request.getStatus())) { + QmsPdiStatusItemGroupVO groupVO = new QmsPdiStatusItemGroupVO(); + groupVO.setDetectionRulesId(request.getDetectionRulesId()); + groupVO.setComponentsId(null); + groupVO.setComponentName("特殊检测项"); + groupVO.setSort(0); + groupVO.setItems(items.stream().map(this::toItemVO).collect(Collectors.toList())); + return pageGroups(request, List.of(groupVO)); + } + // 2. 提取所有componentsId并去重 List componentIds = items.stream() .map(QmsPdiDetectionRulesStatusItem::getComponentsId) @@ -461,7 +472,10 @@ public class QmsPdiStatusItemControllerService { // 6. 按部件sort升序排序 voList.sort(Comparator.comparingInt(QmsPdiStatusItemGroupVO::getSort)); - // 7. 分页(按部件分页) + return pageGroups(request, voList); + } + + private PageData pageGroups(QmsPdiStatusItemSearchQO request, List voList) { int total = voList.size(); int pageNum = request.getPage(); int pageSize = request.getPageSize(); @@ -515,6 +529,26 @@ public class QmsPdiStatusItemControllerService { return vo; } + private boolean isSpecialStatus(Integer status) { + return Objects.equals(status, SPECIAL_STATUS); + } + + private Integer getMaxItemSort(Long detectionRulesId, Integer status, Long componentsId) { + var query = statusItemService.lambdaQuery() + .eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId) + .eq(QmsPdiDetectionRulesStatusItem::getStatus, status); + if (Objects.isNull(componentsId)) { + query.isNull(QmsPdiDetectionRulesStatusItem::getComponentsId); + } else { + query.eq(QmsPdiDetectionRulesStatusItem::getComponentsId, componentsId); + } + return query.orderByDesc(QmsPdiDetectionRulesStatusItem::getSort) + .last("LIMIT 1") + .oneOpt() + .map(QmsPdiDetectionRulesStatusItem::getSort) + .orElse(0); + } + /** * 若主表维护状态为未维护,则更新为已维护 */ diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsPdiDetectionRulesStatusItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsPdiDetectionRulesStatusItemMapper.xml index d476cd2c..b06155c8 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsPdiDetectionRulesStatusItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsPdiDetectionRulesStatusItemMapper.xml @@ -5,7 +5,7 @@