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

---
 ruoyi-admin/src/main/resources/application-test.yml                                   |   16 ++--
 basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java |    8 +-
 ruoyi-system/src/main/resources/mapper/system/UserMapper.xml                          |    3 
 basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml               |   58 +++++++++-----
 basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java        |   30 ++++++
 basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java  |   80 ++++++++++---------
 6 files changed, 119 insertions(+), 76 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 298b820..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) {
@@ -217,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
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
index c8b730b..3490bf4 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -197,12 +197,12 @@
 
     @Override
     public List<Model> getProductTypes(ModelDto modelDto) {
-        return modelMapper.selectList(Wrappers.<Model>lambdaQuery().eq(Model::getProductId,modelDto.getProductId()));
+        return modelMapper.selectList(Wrappers.<Model>lambdaQuery().eq(Model::getProductId, modelDto.getProductId()));
     }
 
     @Override
     public List<ProductPart> getPartNoList(ProductPartDto productPartDto) {
-        return productPartMapper.selectList(Wrappers.<ProductPart>lambdaQuery().eq(ProductPart::getProductId,productPartDto.getProductId()));
+        return productPartMapper.selectList(Wrappers.<ProductPart>lambdaQuery().eq(ProductPart::getProductId, productPartDto.getProductId()));
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -379,7 +379,7 @@
             List<StructureTestObject> insertedObjects) {
 
         insertedObjects.forEach(obj -> {
-            String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn()+ "|" + obj.getObjectType();
+            String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn() + "|" + obj.getObjectType();
             existStructureTestObjects.get(key).setId(obj.getId()); // 鏇存柊缂撳瓨涓殑ID
         });
     }
@@ -393,7 +393,7 @@
 
         // 闃舵5鍘熸湁浜у搧澶勭悊閫昏緫杩佺Щ鑷虫
         pendingProducts.forEach(i -> {
-            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn()+ "|" + i.getObjectType();
+            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn() + "|" + i.getObjectType();
             StructureTestObject sto = structureTestObjectCache.get(specimenKey);
 
             processProductData(
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
index 3f60b21..ffab8ea 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
@@ -81,21 +81,21 @@
             basicTreeDto.setValue(String.valueOf(model.getId()));
             basicTreeDto.setLabel(model.getModelName());
             basicTreeDto.setChildren(null);
-            if(model.getProductId() != null) {
-                if(CollectionUtils.isEmpty(productModelMap.get(model.getProductId()))){
+            if (model.getProductId() != null) {
+                if (CollectionUtils.isEmpty(productModelMap.get(model.getProductId()))) {
                     List<BasicTreeDto> basicTreeDtoList = new ArrayList<>();
                     basicTreeDtoList.add(basicTreeDto);
-                    productModelMap.put(model.getProductId(),basicTreeDtoList);
-                }else {
+                    productModelMap.put(model.getProductId(), basicTreeDtoList);
+                } else {
                     productModelMap.get(model.getProductId()).add(basicTreeDto);
                 }
             }
-            if(model.getStructureTestObjectId() != null) {
-                if(CollectionUtils.isEmpty(testObjectModelMap.get(model.getStructureTestObjectId()))){
+            if (model.getStructureTestObjectId() != null) {
+                if (CollectionUtils.isEmpty(testObjectModelMap.get(model.getStructureTestObjectId()))) {
                     List<BasicTreeDto> basicTreeDtoList = new ArrayList<>();
                     basicTreeDtoList.add(basicTreeDto);
-                    testObjectModelMap.put(model.getStructureTestObjectId(),basicTreeDtoList);
-                }else {
+                    testObjectModelMap.put(model.getStructureTestObjectId(), basicTreeDtoList);
+                } else {
                     testObjectModelMap.get(model.getStructureTestObjectId()).add(basicTreeDto);
                 }
             }
@@ -122,15 +122,15 @@
                                     StructureTestObjectDto structureTestObjectDto = new StructureTestObjectDto();
                                     BeanUtils.copyProperties(structureTestObject, structureTestObjectDto);
                                     List<BasicTreeDto> children = new ArrayList<>();
-                                    if(!CollectionUtils.isEmpty(productMap.get(structureTestObject.getId()))){
+                                    if (!CollectionUtils.isEmpty(productMap.get(structureTestObject.getId()))) {
                                         children.addAll(productMap.get(structureTestObject.getId()));
                                     }
-                                    if(!CollectionUtils.isEmpty(testObjectModelMap.get(structureTestObject.getId()))){
+                                    if (!CollectionUtils.isEmpty(testObjectModelMap.get(structureTestObject.getId()))) {
                                         children.addAll(testObjectModelMap.get(structureTestObject.getId()));
                                     }
                                     structureTestObjectDto.setChildren(children);
                                     return structureTestObjectDto;
-                                },Collectors.toList())
+                                }, Collectors.toList())
                         )
                 )
         );
@@ -178,7 +178,7 @@
                                 }
                             }
                             workShopTreeDto.setChildren(testObjectChildren);
-                            if(!CollectionUtils.isEmpty(testObjectChildren)){
+                            if (!CollectionUtils.isEmpty(testObjectChildren)) {
                                 workShopTreeDtoList.add(workShopTreeDto);
                             }
                         }
@@ -201,7 +201,7 @@
             return laboratoryTreeDto;
         }).collect(Collectors.toList());
         List<BasicTreeDto> factoryList = new ArrayList<>();
-        factoryList.add(new BasicTreeDto(BasicTreeEnums.FACTORY_TYPE.getCode(),"涓ぉ绉戞妧","1",laboratoryTreeDtoList));
+        factoryList.add(new BasicTreeDto(BasicTreeEnums.FACTORY_TYPE.getCode(), "涓ぉ绉戞妧", "1", laboratoryTreeDtoList));
         return factoryList;
     }
 
@@ -210,27 +210,27 @@
     @Transactional(rollbackFor = Exception.class)
     public int addStandardTree(ModelAddDto modelAddDto) {
         // 鏍¢獙
-        if(StringUtils.isEmpty(modelAddDto.getParentId())){
+        if (StringUtils.isEmpty(modelAddDto.getParentId())) {
             throw new RuntimeException("缂哄皯鐖跺眰绾х粦瀹氬叧绯�");
         }
         Model model = new Model();
         String parentLevel = modelAddDto.getParentLevel();
         // 鍚嶇О閲嶅鎬ф�ф牎楠�
         QueryWrapper<Model> modelQueryWrapper = new QueryWrapper<>();
-        if(BasicTreeEnums.PRODUCT_TYPE.getCode().equals(parentLevel)){
+        if (BasicTreeEnums.PRODUCT_TYPE.getCode().equals(parentLevel)) {
             model.setProductId(Integer.valueOf(modelAddDto.getParentId()));
             modelQueryWrapper.eq("product_id", model.getProductId());
-        }else if(BasicTreeEnums.STRUCTURE_TEST_OBJECT_TYPE.getCode().equals(parentLevel)){
+        } else if (BasicTreeEnums.STRUCTURE_TEST_OBJECT_TYPE.getCode().equals(parentLevel)) {
             model.setStructureTestObjectId(Integer.valueOf(modelAddDto.getParentId()));
             modelQueryWrapper.eq("structure_test_object_id", model.getStructureTestObjectId());
-        }else {
+        } else {
             throw new RuntimeException("鍨嬪彿鍙兘缁戝畾瀵硅薄鍜屼骇鍝�");
         }
         model.setModelName(modelAddDto.getModelName());
         modelQueryWrapper.eq("model_name", model.getModelName());
         Model modelResult = modelMapper.selectOne(modelQueryWrapper);
 
-        if(ObjectUtils.isNotEmpty(modelResult)){
+        if (ObjectUtils.isNotEmpty(modelResult)) {
             throw new RuntimeException("璇峰嬁娣诲姞閲嶅鍨嬪彿");
         }
         return modelMapper.insert(model);
@@ -238,8 +238,8 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int delStandardTree(String level,String id) {
-        if(BasicTreeEnums.MODEL_TYPE.getCode().equals(level)){
+    public int delStandardTree(String level, String id) {
+        if (BasicTreeEnums.MODEL_TYPE.getCode().equals(level)) {
             modelMapper.deleteById(id);
         }
         return 1;
@@ -262,21 +262,21 @@
             basicTreeDto.setValue(model.getModelName());
             basicTreeDto.setLabel(model.getModelName());
             basicTreeDto.setChildren(null);
-            if(model.getProductId() != null) {
-                if(CollectionUtils.isEmpty(productModelMap.get(model.getProductId()))){
+            if (model.getProductId() != null) {
+                if (CollectionUtils.isEmpty(productModelMap.get(model.getProductId()))) {
                     List<BasicTreeDto> basicTreeDtoList = new ArrayList<>();
                     basicTreeDtoList.add(basicTreeDto);
-                    productModelMap.put(model.getProductId(),basicTreeDtoList);
-                }else {
+                    productModelMap.put(model.getProductId(), basicTreeDtoList);
+                } else {
                     productModelMap.get(model.getProductId()).add(basicTreeDto);
                 }
             }
-            if(model.getStructureTestObjectId() != null) {
-                if(CollectionUtils.isEmpty(testObjectModelMap.get(model.getStructureTestObjectId()))){
+            if (model.getStructureTestObjectId() != null) {
+                if (CollectionUtils.isEmpty(testObjectModelMap.get(model.getStructureTestObjectId()))) {
                     List<BasicTreeDto> basicTreeDtoList = new ArrayList<>();
                     basicTreeDtoList.add(basicTreeDto);
-                    testObjectModelMap.put(model.getStructureTestObjectId(),basicTreeDtoList);
-                }else {
+                    testObjectModelMap.put(model.getStructureTestObjectId(), basicTreeDtoList);
+                } else {
                     testObjectModelMap.get(model.getStructureTestObjectId()).add(basicTreeDto);
                 }
             }
@@ -296,8 +296,8 @@
         // 瀵规娴嬪璞″厛鎸夌収瀹為獙瀹ゅ湪鎸夌収妫�鏌ュ璞$被鍒垎绫�
         List<BasicTreeDto> testProjectBasicTreeList = structureTestObjectList.stream().map(structureTestObject -> {
             BasicTreeDto basicTreeDto = new BasicTreeDto();
-            basicTreeDto.setValue(structureTestObject.getSpecimenName());
-            basicTreeDto.setLabel(structureTestObject.getSpecimenName());
+            basicTreeDto.setValue(structureTestObject.getSpecimenName() + "(" + structureTestObject.getObjectType() + ")");
+            basicTreeDto.setLabel(structureTestObject.getSpecimenName() + "(" + structureTestObject.getObjectType() + ")");
             basicTreeDto.setLevel(BasicTreeEnums.STRUCTURE_TEST_OBJECT_TYPE.getCode());
             List<BasicTreeDto> children = new ArrayList<>();
             if (!CollectionUtils.isEmpty(productMap.get(structureTestObject.getId()))) {
@@ -339,6 +339,7 @@
 
     /**
      * 娌冲彛妫�娴嬩腑蹇冨鍏�
+     *
      * @param file
      */
     @Override
@@ -618,37 +619,38 @@
 
     /**
      * 淇敼鏍囧噯鏁�
+     *
      * @param modelAddDto
      * @return
      */
     @Override
     public int updateStandardTree(ModelAddDto modelAddDto) {
-        if(modelAddDto.getId() == null){
+        if (modelAddDto.getId() == null) {
             throw new RuntimeException("缂哄皯鍨嬪彿涓婚敭");
         }
         Model model = modelMapper.selectById(modelAddDto.getId());
-        if(ObjectUtils.isEmpty(model)){
+        if (ObjectUtils.isEmpty(model)) {
             throw new RuntimeException("鍨嬪彿鏌ユ壘澶辫触");
         }
         QueryWrapper<Model> modelQueryWrapper = new QueryWrapper<>();
-        if(model.getStructureTestObjectId() != null){
+        if (model.getStructureTestObjectId() != null) {
             modelQueryWrapper.eq("structure_test_object_id", model.getStructureTestObjectId());
         }
-        if(model.getProductId() != null){
+        if (model.getProductId() != null) {
             modelQueryWrapper.eq("product_id", model.getProductId());
         }
         modelQueryWrapper.eq("model_name", modelAddDto.getModelName());
         model.setModelName(modelAddDto.getModelName());
         List<Model> modelList = modelMapper.selectList(modelQueryWrapper);
-        if(CollectionUtils.isEmpty(modelList)){
+        if (CollectionUtils.isEmpty(modelList)) {
             return modelMapper.updateById(model);
-        }else if (modelList.size() == 1) {
-            if( !model.getId().equals(modelList.get(0).getId())){
+        } else if (modelList.size() == 1) {
+            if (!model.getId().equals(modelList.get(0).getId())) {
                 throw new RuntimeException("鍨嬪彿鍚嶇О閲嶅");
-            }else {
+            } else {
                 return modelMapper.updateById(model);
             }
-        }else {
+        } else {
             throw new RuntimeException("鍨嬪彿鍚嶇О閲嶅");
         }
     }
diff --git a/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml b/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
index ae4ba83..bf8a74d 100644
--- a/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
+++ b/basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
@@ -145,28 +145,46 @@
         <result property="name" column="subclass"/>
     </resultMap>
     <select id="getInsProduction" resultMap="getInsProductions">
-        select distinct id,
-                        CASE
-                            WHEN INSTR(sample, ',') > 0 THEN
-                                SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', 1), '"', -1)
-                            when sample = '[""]' then '*'
-                            ELSE
-                                TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
-                            END
-                                                              as sample,
-                        inspection_item,
-                        case
-                            when inspection_item_subclass is null or inspection_item_subclass = '' then inspection_item
-                            else inspection_item_subclass end as subclass,
-                        case
-                            when inspection_item_class is null or inspection_item_class = '' then inspection_item
-                            else inspection_item_class end as item_class
-        from structure_item_parameter
+        SELECT DISTINCT
+            id,
+            CASE
+                WHEN INSTR(sample, ',') > 0 THEN
+                    TRIM(BOTH '"' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(sample, '","', - 1), '"]]', 1))
+                WHEN sample = '[""]' THEN
+                    '*'
+                ELSE
+                    TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(sample, '[["', ''), '"]]', 1))
+                END AS sample,
+            inspection_item,
+            CASE
+                WHEN inspection_item_subclass IS NULL
+                    OR TRIM(inspection_item_subclass) = '' THEN
+                    inspection_item
+                ELSE
+                    inspection_item_subclass
+                END AS subclass,
+            CASE
+                WHEN inspection_item_class IS NULL
+                    OR TRIM(inspection_item_class) = '' THEN
+                    inspection_item
+                ELSE
+                    inspection_item_class
+                END AS item_class
+        FROM
+            structure_item_parameter;
     </select>
     <select id="getItemTree" resultMap="itemDto">
-        select sto.id sId, sto.specimen_name sName, p.id pId, p.name pName
-        from structure_test_object sto
-                 left join product p on p.object_id = sto.id
+        SELECT
+            sto.id AS sId,
+            CONCAT(sto.specimen_name, ' (', sto.object_type, ')') AS sName,
+            p.id AS pId,
+            p.name AS pName,
+            sto.object_type
+        FROM
+            structure_test_object sto
+                LEFT JOIN
+            product p
+            ON p.object_id = sto.id;
     </select>
 
     <resultMap id="itemDto" type="com.ruoyi.basic.dto.TestItemDto">
diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml
index 72465d6..d7c8033 100644
--- a/ruoyi-admin/src/main/resources/application-test.yml
+++ b/ruoyi-admin/src/main/resources/application-test.yml
@@ -143,16 +143,16 @@
 # 浜轰簨绯荤粺
 personnel:
   # 姝e紡鍦板潃
-  code:
+  code: https://ztt-sso.ztt.cn/oauth2/token
   # 瑁呭浜轰簨姝e紡搴�
-  appId:
-  appSecret:
-  companies:
-  simple:
+  appId: f6f3d70f-3666-4d3d-b9c5-430de3f6007c
+  appSecret: a18923496542302066b0a7bec993a4e2
+  companies: https://ztt-connector.ztt.cn/api/org/v1/companies
+  simple: https://ztt-connector.ztt.cn/api/org/v1/employees/simple?companyId=
   # 浜哄憳瀵嗙爜鑾峰彇
-  password:
-  department:
-  person:
+  password: https://ztt-connector.ztt.cn/api/org/v1/employees/original_pwd/
+  department: https://ztt-connector.ztt.cn/api/org/v1/companies/companyId/departments
+  person: https://ztt-connector.ztt.cn/api/org/v1/employees/simple/
 
 ifs:
   contract:
diff --git a/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
index 8c743c8..ed96594 100644
--- a/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
@@ -24,8 +24,7 @@
         company,
         is_custom
         from user
-        where del_flag = '0'
-        and id != ) a
+        where del_flag = '0') a
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>

--
Gitblit v1.9.3