liding
2025-04-07 ecef4e046635a6eb78c92cd72dd96a84401164d9
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -7,12 +7,11 @@
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.dto.*;
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.common.utils.StringUtils;
@@ -56,7 +55,9 @@
    private StructureItemParameterService structureItemParameterService;
    private WorkShopMapper workShopMapper;
    private ModelMapper modelMapper;
    @Override
    public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
        return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
@@ -67,8 +68,7 @@
        if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) {
            itemParameter.setBsm("0");
        }
        int insert = structureItemParameterMapper.insert(itemParameter);
        return insert;
        return structureItemParameterMapper.insert(itemParameter);
    }
    @Override
@@ -189,25 +189,35 @@
    public List<TestItemDto> getItemTree() {
        return structureItemParameterMapper.getItemTree();
    }
    @Override
    public List<TestItemDto> getItemTreeProduct(StructureTestObjectDto structureTestObjectDto) {
        return structureItemParameterMapper.getItemTreeProduct(structureTestObjectDto.getObjectType());
    }
    @Override
    public List<Model> getProductTypes(ModelDto modelDto) {
        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()));
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void importPartExcel(List<StructureTestObjectData> list) {
        // 阶段1: 数据预处理
        // 收集所有需要查询的标本信息
        Set<String> specimenKeys = list.stream()
                .map(i -> i.getSpecimenName() + "|" + i.getSpecimenNameEn())
                .collect(Collectors.toSet());
        // 阶段2: 批量查询现有结构测试对象
        Map<String, StructureTestObject> existStructureTestObjects = structureTestObjectMapper.selectList(
                Wrappers.<StructureTestObject>lambdaQuery()
                        .in(StructureTestObject::getSpecimenName, list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toSet()))
                        .in(StructureTestObject::getSpecimenNameEn, list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toSet()))
                        .in(StructureTestObject::getObjectType, list.stream().map(StructureTestObjectData::getObjectType).collect(Collectors.toSet()))
        ).stream().collect(Collectors.toMap(
                obj -> obj.getSpecimenName() + "|" + obj.getSpecimenNameEn(),
                obj -> generateStructureKey(obj.getSpecimenName(), obj.getSpecimenNameEn(), obj.getObjectType()), // 统一键生成
                Function.identity(),
                (existing, replacement) -> existing  // 处理重复键
                (existing, replacement) -> existing
        ));
        // 阶段3: 预处理车间信息
@@ -234,7 +244,7 @@
        for (StructureTestObjectData i : list) {
            // 处理结构测试对象(逻辑不变)
            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn();
            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn() + "|" + i.getObjectType();
            StructureTestObject structureTestObject = existStructureTestObjects.get(specimenKey);
            if (structureTestObject == null) {
@@ -270,6 +280,11 @@
        obj.setLaboratoryId(9);
    }
    // 统一键生成方法
    private String generateStructureKey(String name, String nameEn, String objectType) {
        return name + "|" + nameEn + "|" + objectType;
    }
    // 处理产品数据
    private void processProductData(StructureTestObjectData data,
                                    Integer objectId,
@@ -277,7 +292,7 @@
                                    List<Product> insertList,
                                    List<Product> updateList) {
        // 构建产品唯一标识
        String productKey = data.getName() + "|" + data.getNameEn();
        String productKey = data.getName() + "|" + data.getNameEn() + "|" + data.getObjectType();
        // 检查内存中是否已处理过该产品
        Optional<Product> existingProduct = findProductInBatchLists(productKey, insertList, updateList);
@@ -364,7 +379,7 @@
            List<StructureTestObject> insertedObjects) {
        insertedObjects.forEach(obj -> {
            String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn();
            String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn() + "|" + obj.getObjectType();
            existStructureTestObjects.get(key).setId(obj.getId()); // 更新缓存中的ID
        });
    }
@@ -378,7 +393,7 @@
        // 阶段5原有产品处理逻辑迁移至此
        pendingProducts.forEach(i -> {
            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn();
            String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn() + "|" + i.getObjectType();
            StructureTestObject sto = structureTestObjectCache.get(specimenKey);
            processProductData(