自动化立体仓库 - WMS系统
zhou zhou
2025-12-19 061753c5c014862564e56f22af0a685f0efd0fde
src/main/java/com/zy/asrs/controller/OutController.java
@@ -17,6 +17,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -46,6 +47,9 @@
    @Resource
    private OrderPakoutService orderPakOutService;
    @Autowired
    private InventoryReserveService inventoryReserveService;
    @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -122,12 +126,41 @@
            }
        } else {
            for (OrderDetlPakout orderDetl : orderDetlPakouts) {
                List<InventoryReserve> inventoryReserves = inventoryReserveService.selectList(new EntityWrapper<InventoryReserve>()
                        .eq("matnr", orderDetl.getMatnr())
                        .eq("batch", orderDetl.getBatch())
                        //如果订单号不为空,则查询订单号不为orderDetl.getOrderNo()的库存预留记录,否则查询所有库存预留记录
                        .ne(!Cools.isEmpty(orderDetl.getOrderNo()), "order_no", orderDetl.getOrderNo())
                        .eq(!Cools.isEmpty(orderDetl.getBrand()), "brand", orderDetl.getBrand())
                        .eq(!Cools.isEmpty(orderDetl.getStandby1()), "standby1", orderDetl.getStandby1())
                        .eq(!Cools.isEmpty(orderDetl.getStandby2()), "standby2", orderDetl.getStandby2())
                        .eq(!Cools.isEmpty(orderDetl.getStandby3()), "standby3", orderDetl.getStandby3())
                        .eq(!Cools.isEmpty(orderDetl.getBoxType1()), "box_type1", orderDetl.getBoxType1())
                        .eq(!Cools.isEmpty(orderDetl.getBoxType2()), "box_type2", orderDetl.getBoxType2())
                        .eq(!Cools.isEmpty(orderDetl.getBoxType3()), "box_type3", orderDetl.getBoxType3())
                );
                // 如果库存预留记录不为空,使用steam将库存预留记录中的库存数量全部加起来,字段为quantity,类型为BigDecimal
                BigDecimal inventoryReserveQuantity = inventoryReserves.stream().map(InventoryReserve::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
                //获取库存中的库存数量
                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                // 使用steam将locDetls中的库存数量全部加起来,字段为quantity,Double类型
                BigDecimal locDetlQuantity = locDetls.stream().map(LocDetl::getAnfme).map(BigDecimal::valueOf).reduce(BigDecimal.ZERO, BigDecimal::add);
                if (locDetlQuantity.subtract(new BigDecimal(orderDetl.getAnfme())).compareTo(inventoryReserveQuantity) < 0) {
                    return R.parse("库存预留数量大于库存数量");
                }
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
                if (issued <= 0.0D) {
                    continue;
                }
                List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                for (LocDetl locDetl : locDetls) {
                    if (issued > 0) {
                        LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),