From b999398ae9b2719d2db15716dd353f7a3855d59e Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 07 四月 2025 17:33:55 +0800
Subject: [PATCH] Merge branch 'radio_frequency' of http://114.132.189.42:9002/r/lims-ruoyi-after into radio_frequency

---
 basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java |   36 ++++++++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java b/basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java
index 281061c..e425cb6 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java
@@ -18,9 +18,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -37,6 +35,9 @@
 
     private final StandardTemplateService standardTemplateService;
 
+    // 鏂板锛氬唴瀛樺幓閲嶉泦鍚堬紙璁板綍鍞竴閿級
+    private Set<String> uniqueKeys = new HashSet<>();
+
     public MultiSheetImportListener(StructureItemParameterService parameterService, StandardTemplateService standardTemplateService,
                                     ISysDictTypeService dictTypeService) {
         this.parameterService = parameterService;
@@ -47,6 +48,18 @@
 
     @Override
     public void invoke(StructureItemParameter data, AnalysisContext context) {
+
+        String uniqueKey = buildUniqueKey(data);
+        if (uniqueKeys.contains(uniqueKey)) {
+            log.warn("鍙戠幇閲嶅鏁版嵁锛屽凡璺宠繃: {} (Sheet: {}, 琛屽彿: {})",
+                    uniqueKey,
+                    currentSheetName,
+                    context.readRowHolder().getRowIndex() + 1
+            );
+            return;
+        }
+        uniqueKeys.add(uniqueKey);
+
         data.setId(null);
         // 娴嬭瘯瀵硅薄
         if (data.getSample() == null) {
@@ -78,8 +91,7 @@
         // 鏌ヨ鏁版嵁搴撲腑鏄惁瀛樺湪鐩稿悓璁板綍
         LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class)
                 .eq(StructureItemParameter::getInspectionItem, data.getInspectionItem())
-                .eq(StructureItemParameter::getSample, data.getSample())
-                .last("limit 1");
+                .eq(StructureItemParameter::getSample, data.getSample());
 
         // 鍒ゆ柇鏄惁鏈夋楠岄」绫诲瀷
         if (ObjectUtils.isNotEmpty(data.getInspectionItemClass())) {
@@ -170,9 +182,6 @@
             data.setManDay(null);
         }
 
-        // 璁剧疆褰撳墠Sheet鍚嶄负鍒嗙被鏍囪瘑
-        data.setInspectionItemClass(currentSheetName);
-
         // 娣诲姞鍒扮紦瀛樺垪琛�
         cachedList.add(data);
 
@@ -221,4 +230,15 @@
         // 鎵撳嵃瀹屾暣閿欒鍫嗘爤锛堣皟璇曟椂寮�鍚級
         log.error("Sheet[{}] 绗瑊}琛岀{}鍒楄В鏋愬け璐�: {}", sheetName, rowIndex, columnIndex, errorMsg);
     }
+
+    private String buildUniqueKey(StructureItemParameter data) {
+        return String.join("|",
+                ObjectUtils.defaultIfNull(data.getInspectionItem(), ""),
+                ObjectUtils.defaultIfNull(data.getInspectionItemEn(),""),
+                ObjectUtils.defaultIfNull(data.getProduct(),""),
+                ObjectUtils.defaultIfNull(data.getInspectionItemSubclass(), ""),
+                ObjectUtils.defaultIfNull(data.getSample(), ""),
+                ObjectUtils.defaultIfNull(data.getInspectionItemClass(), "")
+        );
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3