| | |
| | | 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; |
| | |
| | | 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)); |
| | |
| | | if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) { |
| | | itemParameter.setBsm("0"); |
| | | } |
| | | int insert = structureItemParameterMapper.insert(itemParameter); |
| | | return insert; |
| | | return structureItemParameterMapper.insert(itemParameter); |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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: 预处理车间信息 |
| | |
| | | |
| | | 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( |