| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | |
| | | .eq(RawMaterialQualityInspectItem::getRawMaterialId, id)); |
| | | Map<Long, RawMaterialQualityInspectItem> map = rawQualityList.stream().collect(Collectors.toMap(RawMaterialQualityInspectItem::getQualityInspectItemId, qualityInspectItem -> qualityInspectItem)); |
| | | // 获取检验项目 |
| | | List<QualityInspectItem> qualityInspectItems = qualityInspectItemMapper.selectList(new LambdaQueryWrapper<QualityInspectItem>() |
| | | .in(QualityInspectItem::getId, rawQualityList.stream().map(RawMaterialQualityInspectItem::getQualityInspectItemId).collect(Collectors.toList()))); |
| | | List<QualityInspectItem> qualityInspectItems = new ArrayList<>(); |
| | | if (CollectionUtils.isNotEmpty(rawQualityList)) { |
| | | List<Long> qualityInspectItemIds = rawQualityList.stream().map(RawMaterialQualityInspectItem::getQualityInspectItemId).collect(Collectors.toList()); |
| | | qualityInspectItems = qualityInspectItemMapper.selectList(new LambdaQueryWrapper<QualityInspectItem>() |
| | | .in(QualityInspectItem::getId, qualityInspectItemIds)); |
| | | } |
| | | // 替换化验值 |
| | | qualityInspectItems.forEach(qualityInspectItem -> { |
| | | qualityInspectItem.setTestValue(map.get(qualityInspectItem.getId()).getTestValue()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean update(RawMaterialDto rawMaterialDto) { |
| | | // 删除所有关联项目重新加载 |
| | | rawMaterialQualityInspectItemService.remove(new LambdaQueryWrapper<RawMaterialQualityInspectItem>() |
| | | .eq(RawMaterialQualityInspectItem::getRawMaterialId, rawMaterialDto.getId())); |
| | | int i = rawMaterialMapper.updateById(rawMaterialDto); |
| | | // 新增检测项关联关系 |
| | | if (CollectionUtils.isNotEmpty(rawMaterialDto.getQualityInspectItem())) { |
| | | List<RawMaterialQualityInspectItem> 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); |
| | | // 更新原料 |
| | | if (rawMaterialMapper.updateById(rawMaterialDto) <= 0) { |
| | | return false; |
| | | } |
| | | return i > 0; |
| | | |
| | | Long rawMaterialId = rawMaterialDto.getId(); |
| | | List<QualityInspectItem> newQualityInspectItems = rawMaterialDto.getQualityInspectItem(); |
| | | |
| | | // 获取现有检验项关联记录 |
| | | List<RawMaterialQualityInspectItem> existingItems = rawMaterialQualityInspectItemService.list( |
| | | new LambdaQueryWrapper<RawMaterialQualityInspectItem>() |
| | | .eq(RawMaterialQualityInspectItem::getRawMaterialId, rawMaterialId) |
| | | ); |
| | | |
| | | // 删除不存在的关联记录 |
| | | if (CollectionUtils.isEmpty(newQualityInspectItems)) { |
| | | // 如果没有检验项,删除所有现有关联记录 |
| | | if (CollectionUtils.isNotEmpty(existingItems)) { |
| | | List<Long> existingIds = existingItems.stream() |
| | | .map(RawMaterialQualityInspectItem::getId) |
| | | .collect(Collectors.toList()); |
| | | rawMaterialQualityInspectItemService.removeByIds(existingIds); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | // 获取新检验项的ID集合和测试值映射 |
| | | Set<Long> newItemIds = newQualityInspectItems.stream() |
| | | .map(QualityInspectItem::getId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | Map<Long, String> testValueMap = newQualityInspectItems.stream() |
| | | .collect(Collectors.toMap(QualityInspectItem::getId, QualityInspectItem::getTestValue)); |
| | | |
| | | // 删除不存在的关联记录 |
| | | List<Long> toDelete = existingItems.stream() |
| | | .filter(item -> !newItemIds.contains(item.getQualityInspectItemId())) |
| | | .map(RawMaterialQualityInspectItem::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | if (CollectionUtils.isNotEmpty(toDelete)) { |
| | | rawMaterialQualityInspectItemService.removeByIds(toDelete); |
| | | } |
| | | |
| | | // 处理更新数据 |
| | | List<RawMaterialQualityInspectItem> 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<Long> existingItemIds = existingItems.stream() |
| | | .map(RawMaterialQualityInspectItem::getQualityInspectItemId) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | List<RawMaterialQualityInspectItem> 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; |
| | | } |
| | | } |
| | | } |