package com.ruoyi.quality.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.enums.RawMaterialCheckResult; import com.ruoyi.common.enums.RawMaterialCheckType; import com.ruoyi.common.enums.RawMaterialInspectState; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.inspectiontask.mapper.QualityInspectItemMapper; import com.ruoyi.inspectiontask.pojo.QualityInspectItem; import com.ruoyi.quality.dto.RawMaterialDto; import com.ruoyi.quality.mapper.RawMaterialMapper; import com.ruoyi.quality.pojo.RawMaterial; import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem; import com.ruoyi.quality.service.RawMaterialQualityInspectItemService; import com.ruoyi.quality.service.RawMaterialService; import lombok.AllArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-03-13 02:44:09 */ @AllArgsConstructor @Service public class RawMaterialServiceImpl extends ServiceImpl implements RawMaterialService { private RawMaterialMapper rawMaterialMapper; private RawMaterialQualityInspectItemService rawMaterialQualityInspectItemService; private QualityInspectItemMapper qualityInspectItemMapper; private ProductModelMapper productModelMapper; private ProductMapper productMapper; @Override public IPage listPage(Page page, RawMaterialDto rawMaterialDto) { IPage pageRes = rawMaterialMapper.listPage(page, rawMaterialDto); List rawMaterials = pageRes.getRecords(); Map productModelMap = new HashMap<>(); Map productMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(rawMaterials)) { List productModelIds = rawMaterials.stream().map(RawMaterialDto::getProductModelId).collect(Collectors.toList()); List productModels = productModelMapper.selectList(new LambdaQueryWrapper() .in(ProductModel::getId, productModelIds)); productModelMap = productModels.stream().collect(Collectors.toMap(ProductModel::getId, productModel -> productModel)); List productIds = productModels.stream().map(ProductModel::getProductId).collect(Collectors.toList()); List products = productMapper.selectList(new LambdaQueryWrapper() .in(Product::getId, productIds)); productMap = products.stream().collect(Collectors.toMap(Product::getId, product -> product)); } for (RawMaterialDto rawMaterial : pageRes.getRecords()) { rawMaterial.setCheckTypeText(RawMaterialCheckType.fromValue(rawMaterial.getCheckType()) == null ? "" : RawMaterialCheckType.fromValue(rawMaterial.getCheckType()).getValue()); rawMaterial.setCheckResultText(RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()) == null ? "" : RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()).getValue()); rawMaterial.setInspectStateText(RawMaterialInspectState.fromValue(rawMaterial.getInspectState()) == null ? "" : RawMaterialInspectState.fromValue(rawMaterial.getInspectState()).getValue()); rawMaterial.setProductName(productMap.get(productModelMap.get(rawMaterial.getProductModelId()).getProductId()).getProductName()); rawMaterial.setModel(productModelMap.get(rawMaterial.getProductModelId()).getModel()); rawMaterial.setProductId(productModelMap.get(rawMaterial.getProductModelId()).getProductId()); } return pageRes; } @Override public RawMaterialDto detail(Long id) { RawMaterial rawMaterial = rawMaterialMapper.selectById(id); RawMaterialDto rawMaterialDto = new RawMaterialDto(); BeanUtils.copyBeanProp(rawMaterialDto, rawMaterial); // 获取检测项关联关系 List rawQualityList = rawMaterialQualityInspectItemService.list(new LambdaQueryWrapper() .eq(RawMaterialQualityInspectItem::getRawMaterialId, id)); Map map = rawQualityList.stream().collect(Collectors.toMap(RawMaterialQualityInspectItem::getQualityInspectItemId, qualityInspectItem -> qualityInspectItem)); // 获取检验项目 List qualityInspectItems = new ArrayList<>(); if (CollectionUtils.isNotEmpty(rawQualityList)) { List qualityInspectItemIds = rawQualityList.stream().map(RawMaterialQualityInspectItem::getQualityInspectItemId).collect(Collectors.toList()); qualityInspectItems = qualityInspectItemMapper.selectList(new LambdaQueryWrapper() .in(QualityInspectItem::getId, qualityInspectItemIds)); } // 替换化验值 qualityInspectItems.forEach(qualityInspectItem -> { qualityInspectItem.setTestValue(map.get(qualityInspectItem.getId()).getTestValue()); }); rawMaterialDto.setQualityInspectItem(qualityInspectItems); // 查询产品id ProductModel productModel = productModelMapper.selectById(rawMaterialDto.getProductModelId()); rawMaterialDto.setProductId(productModel.getProductId()); rawMaterialDto.setUnit(productModel.getUnit()); return rawMaterialDto; } @Override @Transactional(rollbackFor = Exception.class) public boolean add(RawMaterialDto rawMaterialDto) { rawMaterialDto.setInspectState(RawMaterialInspectState.RawMaterialInspectStateUnsubmitted.getCode()); // 新增原料 int i = rawMaterialMapper.insert(rawMaterialDto); // 新增检测项关联关系 if (CollectionUtils.isNotEmpty(rawMaterialDto.getQualityInspectItem())) { List rawMaterialQualityInspectItems = rawMaterialDto.getQualityInspectItem().stream() .map(qualityInspectItem -> { RawMaterialQualityInspectItem item = new RawMaterialQualityInspectItem(); item.setRawMaterialId(rawMaterialDto.getId()); item.setQualityInspectItemId(qualityInspectItem.getId()); item.setTestValue(qualityInspectItem.getTestValue()); return item; }) .collect(Collectors.toList()); rawMaterialQualityInspectItemService.saveBatch(rawMaterialQualityInspectItems); } return i > 0; } @Override @Transactional(rollbackFor = Exception.class) public boolean update(RawMaterialDto rawMaterialDto) { // 更新原料 if (rawMaterialMapper.updateById(rawMaterialDto) <= 0) { return false; } Long rawMaterialId = rawMaterialDto.getId(); List newQualityInspectItems = rawMaterialDto.getQualityInspectItem(); // 获取现有检验项关联记录 List existingItems = rawMaterialQualityInspectItemService.list( new LambdaQueryWrapper() .eq(RawMaterialQualityInspectItem::getRawMaterialId, rawMaterialId) ); // 删除不存在的关联记录 if (CollectionUtils.isEmpty(newQualityInspectItems)) { // 如果没有检验项,删除所有现有关联记录 if (CollectionUtils.isNotEmpty(existingItems)) { List existingIds = existingItems.stream() .map(RawMaterialQualityInspectItem::getId) .collect(Collectors.toList()); rawMaterialQualityInspectItemService.removeByIds(existingIds); } return true; } // 获取新检验项的ID集合和测试值映射 Set newItemIds = newQualityInspectItems.stream() .map(QualityInspectItem::getId) .collect(Collectors.toSet()); Map testValueMap = newQualityInspectItems.stream() .collect(Collectors.toMap(QualityInspectItem::getId, QualityInspectItem::getTestValue)); // 删除不存在的关联记录 List toDelete = existingItems.stream() .filter(item -> !newItemIds.contains(item.getQualityInspectItemId())) .map(RawMaterialQualityInspectItem::getId) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(toDelete)) { rawMaterialQualityInspectItemService.removeByIds(toDelete); } // 处理更新数据 List toUpdate = existingItems.stream() .filter(item -> newItemIds.contains(item.getQualityInspectItemId())) .peek(item -> item.setTestValue(testValueMap.get(item.getQualityInspectItemId()))) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(toUpdate)) { rawMaterialQualityInspectItemService.updateBatchById(toUpdate); } // 处理新增数据 Set existingItemIds = existingItems.stream() .map(RawMaterialQualityInspectItem::getQualityInspectItemId) .collect(Collectors.toSet()); List toCreate = newQualityInspectItems.stream() .filter(item -> !existingItemIds.contains(item.getId())) .map(item -> { RawMaterialQualityInspectItem newItem = new RawMaterialQualityInspectItem(); newItem.setRawMaterialId(rawMaterialId); newItem.setQualityInspectItemId(item.getId()); newItem.setTestValue(item.getTestValue()); return newItem; }) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(toCreate)) { rawMaterialQualityInspectItemService.saveBatch(toCreate); } return true; } }