liding
2025-04-01 b95f460e35a59aa920e27f0f7e29e0fdf0da1c7c
1。检验对象导入优化 2.可靠性计划产品选择
已修改6个文件
53 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/StructureTestObjectDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/CapacityScopeService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java
@@ -143,6 +143,15 @@
        return Result.success(capacityScopeService.getItemTree());
    }
    /**
     * 成品/原辅材
     */
    @ApiOperation(value = "获取检验对象树")
    @GetMapping("/getItemTreeProduct")
    public Result getItemTreeProduct(StructureTestObjectDto structureTestObjectDto) {
        return Result.success(capacityScopeService.getItemTreeProduct(structureTestObjectDto));
    }
    @PostMapping("/importEquipData")
    public Result importData(@RequestParam("file") MultipartFile file) {
        // 调用导入工具
basic-server/src/main/java/com/ruoyi/basic/dto/StructureTestObjectDto.java
@@ -14,5 +14,7 @@
    private String workShopName;
    private String objectType;
    private List<BasicTreeDto> children;
}
basic-server/src/main/java/com/ruoyi/basic/mapper/StructureItemParameterMapper.java
@@ -29,5 +29,7 @@
    int removeNoSample(@Param("sample") String sample);
    List<StructureItemParameter> selectItemParameterBySample(@Param("sample") String sample);
    List<TestItemDto> getItemTreeProduct(@Param("objectType") String objectType);
}
basic-server/src/main/java/com/ruoyi/basic/service/CapacityScopeService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.basic.dto.PageTestObjectDto;
import com.ruoyi.basic.dto.StructureTestObjectDto;
import com.ruoyi.basic.dto.TestItemDto;
import com.ruoyi.basic.excel.StructureTestObjectData;
@@ -45,5 +46,7 @@
    List<TestItemDto> getItemTree();
    void importPartExcel(List<StructureTestObjectData> list);
    List<TestItemDto> getItemTreeProduct(StructureTestObjectDto structureTestObjectDto);
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -7,6 +7,7 @@
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;
@@ -189,25 +190,25 @@
    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: 预处理车间信息
@@ -234,7 +235,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 +271,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 +283,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 +370,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 +384,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(
basic-server/src/main/resources/mapper/StructureItemParameterMapper.xml
@@ -164,4 +164,11 @@
        )
        order by id asc
    </select>
    <select id="getItemTreeProduct" 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
        WHERE sto.object_type = #{objectType}
    </select>
</mapper>