From be895c76637a86f6d05739bda32e2b72f174e7a9 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 31 三月 2025 17:50:15 +0800
Subject: [PATCH] 标准库功能开发

---
 basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java |  162 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 150 insertions(+), 12 deletions(-)

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 4b436aa..c58580b 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
@@ -2,23 +2,28 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.excel.StructureTestObjectData;
+import com.ruoyi.basic.service.*;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.basic.dto.PageTestObjectDto;
 import com.ruoyi.basic.dto.TestItemDto;
 import com.ruoyi.basic.mapper.*;
 import com.ruoyi.basic.pojo.*;
-import com.ruoyi.basic.service.CapacityScopeService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StructureItemParameterService;
+import com.ruoyi.common.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -39,6 +44,10 @@
 
     private ProductMapper productMapper;
 
+    private ProductService productService;
+
+    private StructureTestObjectService structureTestObjectService;
+
     private StructureTestObjectPartMapper structureTestObjectPartMapper;
 
     private ProductPartMapper productPartMapper;
@@ -49,14 +58,16 @@
 
     private StructureItemParameterService structureItemParameterService;
 
+    private WorkShopMapper workShopMapper;
+    
     @Override
     public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
-       return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
+        return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
     }
 
     @Override
     public int addItemParameter(StructureItemParameter itemParameter) {
-        if (itemParameter.getBsm().equals("")||itemParameter.getBsm()==null){
+        if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) {
             itemParameter.setBsm("0");
         }
         int insert = structureItemParameterMapper.insert(itemParameter);
@@ -75,15 +86,15 @@
 
     @Override
     public IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) {
-        String partNo = pageTestObjectDto.getPartNo();
-        pageTestObjectDto.setPartNo(null);
-        return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto),partNo);
+        String specimenName = pageTestObjectDto.getSample();
+        pageTestObjectDto.setSample(null);
+        return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto), specimenName);
     }
 
     @Override
     public int addTestObject(StructureTestObject testObject) {
         Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()));
-        if(count.compareTo(0L) > 0){
+        if (count.compareTo(0L) > 0) {
             throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
         }
 
@@ -121,7 +132,7 @@
             // 鏌ヨ鎵�鏈夊璞′竴鏍风殑妫�楠岄」鐩�
             List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
                     .eq(StandardProductList::getSampleType, oldTestObject.getSpecimenName()));
-            if (CollectionUtils.isNotEmpty(standardProductLists)){
+            if (CollectionUtils.isNotEmpty(standardProductLists)) {
                 for (StandardProductList standardProductList : standardProductLists) {
                     // 淇敼鎵�鏈夌殑瀵硅薄鍚嶇О鍜屾暟鍨嬬粨鏋�
                     standardProductList.setSampleType(testObject.getSpecimenName());
@@ -159,7 +170,7 @@
         Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery()
                 .eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName())
                 .ne(StructureTestObject::getId, testObject.getId()));
-        if(count.compareTo(0L) > 0){
+        if (count.compareTo(0L) > 0) {
             throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
         }
 
@@ -168,7 +179,7 @@
 
     @Override
     public List<StructureTestObject> selectTestObjectByName() {
-        return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName,StructureTestObject::getId));
+        return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName, StructureTestObject::getId));
     }
 
     //璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
@@ -181,5 +192,132 @@
     public List<TestItemDto> getItemTree() {
         return structureItemParameterMapper.getItemTree();
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void importPartExcel(List<StructureTestObjectData> list) {
+        // 鎵归噺鏌ヨ StructureTestObject
+        Map<String, StructureTestObject> structureTestObjectMap = getStructureTestObjectMap(list);
+        // 鎵归噺鏌ヨ WorkShop
+        Map<String, WorkShop> workShopMap = getWorkShopMap(list);
+
+        List<StructureTestObject> insertStructureTestObjects = new ArrayList<>();
+        List<StructureTestObject> updateStructureTestObjects = new ArrayList<>();
+        List<Product> insertProducts = new ArrayList<>();
+        List<Product> updateProducts = new ArrayList<>();
+
+        for (StructureTestObjectData data : list) {
+            String key = data.getSpecimenName() + "_" + data.getSpecimenNameEn();
+            StructureTestObject structureTestObject = structureTestObjectMap.get(key);
+
+            if (ObjectUtils.isEmpty(structureTestObject)) {
+                structureTestObject = createStructureTestObject(data);
+                insertStructureTestObjects.add(structureTestObject);
+            } else {
+                updateStructureTestObject(structureTestObject, data);
+                updateStructureTestObjects.add(structureTestObject);
+            }
+
+            String productKey = data.getName() + "_" + data.getNameEn();
+            Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
+                    .eq(Product::getName, data.getName())
+                    .eq(Product::getNameEn, data.getNameEn()));
+
+            if (ObjectUtils.isEmpty(product)) {
+                product = createProduct(data, structureTestObject.getId(), workShopMap);
+                insertProducts.add(product);
+            } else {
+                updateProduct(product, data, structureTestObject.getId(), workShopMap);
+                updateProducts.add(product);
+            }
+        }
+
+        // 鎵归噺鎻掑叆鍜屾洿鏂�
+        if (!insertStructureTestObjects.isEmpty()) {
+            structureTestObjectService.saveOrUpdateBatch(insertStructureTestObjects);
+        }
+        if (!updateStructureTestObjects.isEmpty()) {
+            structureTestObjectService.updateBatchById(updateStructureTestObjects);
+        }
+        if (!insertProducts.isEmpty()) {
+            productService.saveOrUpdateBatch(insertProducts);
+        }
+        if (!updateProducts.isEmpty()) {
+            productService.updateBatchById(updateProducts);
+        }
+    }
+
+    private Map<String, StructureTestObject> getStructureTestObjectMap(List<StructureTestObjectData> list) {
+        List<String> specimenNames = list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toList());
+        List<String> specimenNamesEn = list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toList());
+        List<StructureTestObject> structureTestObjects = structureTestObjectMapper.selectList(new LambdaQueryWrapper<StructureTestObject>()
+                .in(StructureTestObject::getSpecimenName, specimenNames)
+                .in(StructureTestObject::getSpecimenNameEn, specimenNamesEn));
+        Map<String, StructureTestObject> map = new HashMap<>();
+        for (StructureTestObject obj : structureTestObjects) {
+            map.put(obj.getSpecimenName() + "_" + obj.getSpecimenNameEn(), obj);
+        }
+        return map;
+    }
+
+    private Map<String, WorkShop> getWorkShopMap(List<StructureTestObjectData> list) {
+        List<String> workShopNames = list.stream()
+                .map(StructureTestObjectData::getWorkShopName)
+                .filter(StringUtils::isNotEmpty)
+                .distinct()
+                .collect(Collectors.toList());
+        List<WorkShop> workShops = workShopMapper.selectList(new LambdaQueryWrapper<WorkShop>()
+                .in(WorkShop::getName, workShopNames));
+        Map<String, WorkShop> map = new HashMap<>();
+        for (WorkShop workShop : workShops) {
+            map.put(workShop.getName(), workShop);
+        }
+        return map;
+    }
+
+    private StructureTestObject createStructureTestObject(StructureTestObjectData data) {
+        StructureTestObject structureTestObject = new StructureTestObject();
+        structureTestObject.setLaboratoryId(9);
+        structureTestObject.setSpecimenName(data.getSpecimenName());
+        structureTestObject.setSpecimenNameEn(data.getSpecimenNameEn());
+        structureTestObject.setCode(data.getCode());
+        structureTestObject.setWorkShopName("");
+        return structureTestObject;
+    }
+
+    private void updateStructureTestObject(StructureTestObject structureTestObject, StructureTestObjectData data) {
+        structureTestObject.setCode(data.getCode());
+        structureTestObject.setLaboratoryId(9);
+    }
+
+    private Product createProduct(StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopMap) {
+        Product product = new Product();
+        product.setName(data.getName());
+        product.setNameEn(data.getNameEn());
+        if (StringUtils.isNotEmpty(data.getWorkShopName())) {
+            WorkShop workShop = workShopMap.get(data.getWorkShopName());
+            if (workShop == null) {
+                throw new BaseException("璇峰厛缁存姢杞﹂棿淇℃伅");
+            }
+            product.setWorkShopId(workShop.getId());
+        }
+        product.setWorkShopName(data.getWorkShopName());
+        product.setObjectId(objectId);
+        return product;
+    }
+
+    private void updateProduct(Product product, StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopMap) {
+        if (StringUtils.isNotEmpty(data.getWorkShopName())) {
+            WorkShop workShop = workShopMap.get(data.getWorkShopName());
+            if (workShop == null) {
+                throw new BaseException("璇峰厛缁存姢杞﹂棿淇℃伅");
+            }
+            product.setWorkShopId(workShop.getId());
+        }
+        product.setWorkShopName(data.getWorkShopName());
+        product.setName(data.getName());
+        product.setNameEn(data.getNameEn());
+        product.setObjectId(objectId);
+    }
 }
 

--
Gitblit v1.9.3