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<ProductOrderMaterialMapper, ProductOrderMaterial> implements ProductOrderMaterialService {
|
|
private final ProductOrderMaterialMapper productOrderMaterialmapper;
|
|
private final ProductOrderMapper productOrderMapper;
|
|
private final ProcessRouteMapper processRouteMapper;
|
|
|
@Override
|
public IPage<ProductOrderMaterial> listPage(Page<ProductOrderMaterial> page, ProductOrderMaterial productOrderMaterial) {
|
return productOrderMaterialmapper.selectPage(page, null);
|
}
|
|
@Override
|
public List<ProductOrderMaterialDto> pickMaterial(ProductOrderMaterialDto productOrderMaterialDto) {
|
Long productOrderId = productOrderMaterialDto.getProductOrderId();
|
ProductOrder productOrder = productOrderMapper.selectById(productOrderId);
|
BigDecimal quantity = productOrder.getQuantity();
|
ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId());
|
//查询叶子节点
|
List<ProductStructureDto> productStructureDtoList = productOrderMaterialmapper.selectLeafNode(Long.valueOf(processRoute.getBomId()));
|
List<Long> productModelIds = productStructureDtoList.stream()
|
.map(ProductStructureDto::getProductModelId)
|
.filter(Objects::nonNull)
|
.distinct()
|
.collect(Collectors.toList());
|
|
if (!productModelIds.isEmpty()) {
|
List<ProductOrderMaterialDto> productOrderMaterialDtos = productOrderMaterialmapper.selectByProductModelIds(productModelIds);
|
if (!productOrderMaterialDtos.isEmpty()) {
|
return productOrderMaterialDtos;
|
}else {
|
throw new RuntimeException("库存没有对应产品");
|
}
|
}else {
|
throw new RuntimeException("请先维护BOM");
|
}
|
}
|
}
|