package com.ruoyi.production.service.impl; 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.production.dto.ProductOrderMaterialDto; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.production.mapper.ProcessRouteMapper; import com.ruoyi.production.mapper.ProductOrderMapper; import com.ruoyi.production.mapper.ProductOrderMaterialMapper; import com.ruoyi.production.pojo.ProcessRoute; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.pojo.ProductOrderMaterial; import com.ruoyi.production.service.ProductOrderMaterialService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Transactional(rollbackFor = Exception.class) public class ProductOrderMaterialServiceImpl extends ServiceImpl implements ProductOrderMaterialService { private final ProductOrderMaterialMapper productOrderMaterialmapper; private final ProductOrderMapper productOrderMapper; private final ProcessRouteMapper processRouteMapper; @Override public IPage listPage(Page page, ProductOrderMaterial productOrderMaterial) { return productOrderMaterialmapper.selectPage(page, null); } @Override public List pickMaterial(ProductOrderMaterialDto productOrderMaterialDto) { Long productOrderId = productOrderMaterialDto.getProductOrderId(); ProductOrder productOrder = productOrderMapper.selectById(productOrderId); BigDecimal quantity = productOrder.getQuantity(); ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId()); //查询叶子节点 List productStructureDtoList = productOrderMaterialmapper.selectLeafNode(Long.valueOf(processRoute.getBomId())); List productModelIds = productStructureDtoList.stream() .map(ProductStructureDto::getProductModelId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); if (!productModelIds.isEmpty()) { List productOrderMaterialDtos = productOrderMaterialmapper.selectByProductModelIds(productModelIds); if (!productOrderMaterialDtos.isEmpty()) { return productOrderMaterialDtos; }else { throw new RuntimeException("库存没有对应产品"); } }else { throw new RuntimeException("请先维护BOM"); } } }