| | |
| | | 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.StructureTestObjectDto; |
| | | import com.ruoyi.basic.excel.StructureTestObjectData; |
| | | import com.ruoyi.basic.service.*; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | |
| | | public List<TestItemDto> getItemTree() { |
| | | return structureItemParameterMapper.getItemTree(); |
| | | } |
| | | |
| | | @Override |
| | | public List<TestItemDto> getItemTreeProduct(StructureTestObjectDto structureTestObjectDto) { |
| | | return structureItemParameterMapper.getItemTreeProduct(structureTestObjectDto.getObjectType()); |
| | | } |
| | | |
| | | @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: 预处理车间信息 |
| | |
| | | |
| | | 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) { |
| | |
| | | obj.setLaboratoryId(9); |
| | | } |
| | | |
| | | // 统一键生成方法 |
| | | private String generateStructureKey(String name, String nameEn, String objectType) { |
| | | return name + "|" + nameEn + "|" + objectType; |
| | | } |
| | | |
| | | // 处理产品数据 |
| | | private void processProductData(StructureTestObjectData data, |
| | | Integer objectId, |
| | |
| | | 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); |
| | |
| | | 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 |
| | | }); |
| | | } |
| | |
| | | |
| | | // 阶段5原有产品处理逻辑迁移至此 |
| | | pendingProducts.forEach(i -> { |
| | | String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn(); |
| | | String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn()+ "|" + i.getObjectType(); |
| | | StructureTestObject sto = structureTestObjectCache.get(specimenKey); |
| | | |
| | | processProductData( |