From 7e5de36bd0bbbba6b689d1576908099f0b0a2d6d Mon Sep 17 00:00:00 2001 From: yf001217 <834502597@qq.com> Date: Sat, 13 Jun 2026 18:29:26 +0800 Subject: [PATCH] =?UTF-8?q?pdi=E5=AF=BC=E5=85=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20pdi=E9=83=A8=E4=BB=B6=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sPdiComponentBindingControllerService.java | 70 +++++++++++++++++-- .../QmsPdiComponentControllerService.java | 39 ++++++++++- .../QmsPdiStatusItemControllerService.java | 48 +++++++++---- .../pojo/qo/QmsPdiComponentBindingSaveQO.java | 3 + 4 files changed, 136 insertions(+), 24 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentBindingControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentBindingControllerService.java index 461ab648..b07b51cf 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentBindingControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentBindingControllerService.java @@ -84,7 +84,11 @@ public class QmsPdiComponentBindingControllerService { continue; } for (QmsPdiComponentBindingSaveQO.ComponentBindingQO component : item.getComponents()) { - List matchedComponents = componentMap.get(component.getComponentName()); + String componentName = appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName()); + List matchedComponents = componentMap.get(componentName); + if (CollectionUtil.isEmpty(matchedComponents)) { + matchedComponents = componentMap.get(component.getComponentName()); + } if (CollectionUtil.isEmpty(matchedComponents)) { throw new NflgException(STATE.BusinessError, "部件名称不存在:" + component.getComponentName()); } @@ -190,7 +194,7 @@ public class QmsPdiComponentBindingControllerService { Map sortMap = new LinkedHashMap<>(); for (QmsPdiComponentAnagement component : components) { - String componentName = component.getComponentName(); + String componentName = appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName()); Integer currentSort = sortMap.get(componentName); if (!sortMap.containsKey(componentName) || currentSort == null @@ -260,13 +264,26 @@ public class QmsPdiComponentBindingControllerService { if (CollectionUtil.isEmpty(componentIds)) { return Collections.emptyMap(); } - return componentService.lambdaQuery() + Set queryNames = componentNames.stream() + .filter(StrUtil::isNotBlank) + .flatMap(componentName -> List.of( + componentName, + appendNewlineIfMixedChineseEnglishEndsWithEnglish(componentName) + ).stream()) + .collect(Collectors.toSet()); + Map> componentMap = new LinkedHashMap<>(); + componentService.lambdaQuery() .eq(QmsPdiComponentAnagement::getDetectionRulesId, detectionRulesId) .in(QmsPdiComponentAnagement::getId, componentIds) - .in(QmsPdiComponentAnagement::getComponentName, componentNames) + .in(QmsPdiComponentAnagement::getComponentName, queryNames) .list() - .stream() - .collect(Collectors.groupingBy(QmsPdiComponentAnagement::getComponentName, LinkedHashMap::new, Collectors.toList())); + .forEach(component -> { + addComponentAlias(componentMap, component.getComponentName(), component); + addComponentAlias(componentMap, + appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName()), + component); + }); + return componentMap; } private List getUsedComponentIds(Long detectionRulesId) { @@ -337,7 +354,8 @@ public class QmsPdiComponentBindingControllerService { List inspectionItems) { QmsPdiComponentBindingSearchVO.ComponentBindingVO componentVO = new QmsPdiComponentBindingSearchVO.ComponentBindingVO(); componentVO.setPdiComponentId(componentId); - componentVO.setPdiComponentName(component == null ? null : component.getComponentName()); + componentVO.setPdiComponentName(component == null ? null + : appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName())); componentVO.setStatus(status); componentVO.setInspectionItems(inspectionItems == null ? new ArrayList<>() : new ArrayList<>(inspectionItems)); return componentVO; @@ -385,6 +403,44 @@ public class QmsPdiComponentBindingControllerService { return new ComponentStatus(Long.valueOf(parts[0]), Short.valueOf(parts[1])); } + private void addComponentAlias(Map> componentMap, + String componentName, + QmsPdiComponentAnagement component) { + if (StrUtil.isBlank(componentName)) { + return; + } + componentMap.computeIfAbsent(componentName, ignored -> new ArrayList<>()).add(component); + } + + private String appendNewlineIfMixedChineseEnglishEndsWithEnglish(String text) { + if (StrUtil.isBlank(text)) { + return text; + } + String value = text.replaceAll("\\s+$", ""); + boolean hasChinese = false; + boolean hasEnglish = false; + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + if (isChinese(c)) { + hasChinese = true; + } else if (isEnglishLetter(c)) { + hasEnglish = true; + } + } + if (hasChinese && hasEnglish && isEnglishLetter(value.charAt(value.length() - 1))) { + return value + "\n"; + } + return value; + } + + private boolean isChinese(char c) { + return c >= '\u4e00' && c <= '\u9fff'; + } + + private boolean isEnglishLetter(char c) { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + } + private static class ComponentStatus { private final Long componentId; private final Short status; diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentControllerService.java index c3ec7f7b..2d04f747 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPdiComponentControllerService.java @@ -50,7 +50,7 @@ public class QmsPdiComponentControllerService { @Transactional public void add(QmsPdiComponentAddQO request) { QmsPdiComponentAnagement entity = new QmsPdiComponentAnagement() - .setComponentName(request.getComponentName()) + .setComponentName(appendNewlineIfMixedChineseEnglishEndsWithEnglish(request.getComponentName())) .setDetectionRulesId(request.getDetectionRulesId()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); @@ -71,7 +71,8 @@ public class QmsPdiComponentControllerService { var updateChain = componentService.lambdaUpdate() .eq(QmsPdiComponentAnagement::getId, request.getId()); if (StrUtil.isNotBlank(request.getComponentName())) { - updateChain.set(QmsPdiComponentAnagement::getComponentName, request.getComponentName()); + updateChain.set(QmsPdiComponentAnagement::getComponentName, + appendNewlineIfMixedChineseEnglishEndsWithEnglish(request.getComponentName())); } updateChain.update(); } @@ -97,7 +98,39 @@ public class QmsPdiComponentControllerService { */ public IPage search(QmsPdiComponentSearchQO request) { Page page = new Page<>(request.getPage(), request.getPageSize()); - return componentMapper.search(request, page); + IPage result = componentMapper.search(request, page); + result.getRecords().forEach(component -> + component.setComponentName(appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName()))); + return result; + } + + private String appendNewlineIfMixedChineseEnglishEndsWithEnglish(String text) { + if (StrUtil.isBlank(text)) { + return text; + } + String value = text.replaceAll("\\s+$", ""); + boolean hasChinese = false; + boolean hasEnglish = false; + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + if (isChinese(c)) { + hasChinese = true; + } else if (isEnglishLetter(c)) { + hasEnglish = true; + } + } + if (hasChinese && hasEnglish && isEnglishLetter(value.charAt(value.length() - 1))) { + return value + "\n"; + } + return value; + } + + private boolean isChinese(char c) { + return c >= '\u4e00' && c <= '\u9fff'; + } + + private boolean isEnglishLetter(char c) { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } // ========================= 查询部件检测项 ========================= 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 43c5b2bb..030cc378 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 @@ -80,8 +80,9 @@ public class QmsPdiStatusItemControllerService { // 处理部件(部件状态复用检测项的status) if (!isSpecialStatus(request.getStatus()) && StrUtil.isNotBlank(request.getComponentsDes())) { // 检查部件是否已存在(按检测规则ID + 名称 + 状态查询) + String componentName = appendNewlineIfMixedChineseEnglishEndsWithEnglish(request.getComponentsDes()); QmsPdiComponentAnagement existingComponent = componentAnagementService.lambdaQuery() - .eq(QmsPdiComponentAnagement::getComponentName, request.getComponentsDes()) + .in(QmsPdiComponentAnagement::getComponentName, request.getComponentsDes(), componentName) .eq(QmsPdiComponentAnagement::getDetectionRulesId, request.getDetectionRulesId()) .eq(QmsPdiComponentAnagement::getStatus, request.getStatus()) .one(); @@ -93,7 +94,7 @@ public class QmsPdiStatusItemControllerService { QmsPdiComponentAnagement component = createComponent( request.getDetectionRulesId(), request.getStatus(), - request.getComponentsDes(), + componentName, operator, now ); @@ -360,20 +361,21 @@ public class QmsPdiStatusItemControllerService { // 处理部件 if (!isSpecialStatus(status) && StrUtil.isNotBlank(dto.getComponentsDes())) { - if (componentNameToIdMap.containsKey(dto.getComponentsDes())) { + String componentName = appendNewlineIfMixedChineseEnglishEndsWithEnglish(dto.getComponentsDes()); + if (componentNameToIdMap.containsKey(componentName)) { // 部件已存在,直接使用 - componentsId = componentNameToIdMap.get(dto.getComponentsDes()); + componentsId = componentNameToIdMap.get(componentName); } else { QmsPdiComponentAnagement component = componentAnagementService.lambdaQuery() .eq(QmsPdiComponentAnagement::getDetectionRulesId, detectionRulesId) .eq(QmsPdiComponentAnagement::getStatus, status) - .eq(QmsPdiComponentAnagement::getComponentName, dto.getComponentsDes()) + .in(QmsPdiComponentAnagement::getComponentName, dto.getComponentsDes(), componentName) .one(); if (component == null) { - component = createComponent(detectionRulesId, status, dto.getComponentsDes(), operator, now); + component = createComponent(detectionRulesId, status, componentName, operator, now); } componentsId = component.getId(); - componentNameToIdMap.put(dto.getComponentsDes(), componentsId); + componentNameToIdMap.put(componentName, componentsId); componentItemCountMap.put(componentsId, getMaxItemSort(detectionRulesId, status, componentsId)); } } else { @@ -381,7 +383,7 @@ public class QmsPdiStatusItemControllerService { } // 处理检查核实内容:如果以英文字母结束,追加换行符 - dto.setInspectionContent(appendNewlineIfEndsWithEnglish(dto.getInspectionContent())); + dto.setInspectionContent(appendNewlineIfMixedChineseEnglishEndsWithEnglish(dto.getInspectionContent())); // 插入检测项 int itemSort = componentItemCountMap.getOrDefault(componentsId, 0) + 1; @@ -405,15 +407,33 @@ public class QmsPdiStatusItemControllerService { /** * 如果文本以英文字母结尾,则追加换行符 */ - private String appendNewlineIfEndsWithEnglish(String text) { + private String appendNewlineIfMixedChineseEnglishEndsWithEnglish(String text) { if (StrUtil.isBlank(text)) { return text; } - char lastChar = text.charAt(text.length() - 1); - if ((lastChar >= 'a' && lastChar <= 'z') || (lastChar >= 'A' && lastChar <= 'Z')) { - return text + "\n"; + String value = text.replaceAll("\\s+$", ""); + boolean hasChinese = false; + boolean hasEnglish = false; + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + if (isChinese(c)) { + hasChinese = true; + } else if (isEnglishLetter(c)) { + hasEnglish = true; + } } - return text; + if (hasChinese && hasEnglish && isEnglishLetter(value.charAt(value.length() - 1))) { + return value + "\n"; + } + return value; + } + + private boolean isChinese(char c) { + return c >= '\u4e00' && c <= '\u9fff'; + } + + private boolean isEnglishLetter(char c) { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } // ========================= 分页查询 ========================= @@ -472,7 +492,7 @@ public class QmsPdiStatusItemControllerService { QmsPdiStatusItemGroupVO groupVO = new QmsPdiStatusItemGroupVO(); groupVO.setDetectionRulesId(request.getDetectionRulesId()); groupVO.setComponentsId(component.getId()); - groupVO.setComponentName(component.getComponentName()); + groupVO.setComponentName(appendNewlineIfMixedChineseEnglishEndsWithEnglish(component.getComponentName())); groupVO.setSort(component.getSort()); // 获取该部件下的检测项 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiComponentBindingSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiComponentBindingSaveQO.java index 17e1e4e0..cf89fccf 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiComponentBindingSaveQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPdiComponentBindingSaveQO.java @@ -1,6 +1,7 @@ package com.nflg.wms.common.pojo.qo; import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -57,6 +58,7 @@ public class QmsPdiComponentBindingSaveQO { * x轴坐标 */ @NotBlank(message = "x轴坐标不能为空") + @JsonProperty("xCoordinatePoint") @JsonAlias({"x_coordinate_point", "XCoordinatePoint"}) private String xCoordinatePoint; @@ -64,6 +66,7 @@ public class QmsPdiComponentBindingSaveQO { * y轴坐标 */ @NotBlank(message = "y轴坐标不能为空") + @JsonProperty("yCoordinatePoint") @JsonAlias({"y_coordinate_point", "YCoordinatePoint"}) private String yCoordinatePoint; }