chenhj
2026-04-21 2f20856ea3ca6f2f238ba66252164687f47fcd7e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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");
        }
    }
}