自动化立体仓库 - WMS系统
cl
2026-03-30 0983e7a47d882fb81661c2d280d5e06a9f77eb1e
src/main/java/com/zy/asrs/controller/OutController.java
@@ -77,37 +77,41 @@
        List<LocDto> locDtoList = new ArrayList<>();
        for (OrderDetl orderDetl : orderDetlList) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            Order order = orderService.selectByNo(orderDetl.getOrderNo());
            DocType docType = docTypeService.selectById(order.getDocType());
            if("人工补货单".equals(docType.getDocName())){
                if (issued <= 0.0D) { continue; }
                issued = locDetlService.queryStockAndSetLocDto1(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                if (issued > 0) {
                    LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                    locDto.setLack(Boolean.TRUE);
                    locDtoList.add(locDto);
            try {
                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
                Order order = orderService.selectByNo(orderDetl.getOrderNo());
                DocType docType = docTypeService.selectById(order.getDocType());
                if("人工补货单".equals(docType.getDocName())){
                    if (issued <= 0.0D) { continue; }
                    issued = locDetlService.queryStockAndSetLocDto1(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                    if (issued > 0) {
                        LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                        locDto.setLack(Boolean.TRUE);
                        locDtoList.add(locDto);
                    }
                }else {
                    if (issued <= 0.0D) { continue; }
                    //从平库寻找
                    issued = manLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                    //先找AGV的库存,如果返回的issued大于0,则去四项库找
                    issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                    //从四项库的库存里面找,
                    issued = locDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                    if (issued > 0) {
                        LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                        locDto.setLack(Boolean.TRUE);
                        locDtoList.add(locDto);
                    }
                }
            }else {
                if (issued <= 0.0D) { continue; }
                //从平库寻找
                issued = manLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                //先找AGV的库存,如果返回的issued大于0,则去四项库找
                issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                //从四项库的库存里面找,
                issued = locDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
                if (issued > 0) {
                    LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                    locDto.setLack(Boolean.TRUE);
                    locDtoList.add(locDto);
                }
            } catch (Exception e) {
                // 单条明细异常时记录并继续
                log.error("出库预览异常 orderDetlId={} orderNo={} matnr={}", orderDetl.getId(), orderDetl.getOrderNo(), orderDetl.getMatnr(), e);
                e.printStackTrace();
            }
        }
        return R.ok().add(locDtoList);
@@ -138,23 +142,31 @@
        }
        Thread.sleep(500L);
        // 订单预校验  ===>> 1.订单状态; 2.订单带出数量
        List<OrderDto> orderDtos = orderPreVerification(locDtos);
        try {
            // 订单预校验  ===>> 1.订单状态; 2.订单带出数量
            List<OrderDto> orderDtos = orderPreVerification(locDtos);
        List<TaskDto> taskDtos = new ArrayList<>();
        List<TaskDto> agvTaskDtos = new ArrayList<>();
        generateTaskDto(locDtos,taskDtos,agvTaskDtos);
            List<TaskDto> taskDtos = new ArrayList<>();
            List<TaskDto> agvTaskDtos = new ArrayList<>();
            generateTaskDto(locDtos, taskDtos, agvTaskDtos);
        //生成AGV出库任务
        agvWorkService.stockOutWrkMast(agvTaskDtos, getUserId());
            //生成AGV出库任务
            agvWorkService.stockOutWrkMast(agvTaskDtos, getUserId());
        // 生成出库任务
        taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
        for (TaskDto taskDto : taskDtos) {
            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
            workService.stockOut(staNo, taskDto, getUserId());
            // 生成出库任务
            taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
            for (TaskDto taskDto : taskDtos) {
                BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
                workService.stockOut(staNo, taskDto, getUserId());
            }
            return R.ok();
        } catch (CoolException e) {
            throw e;
        } catch (Exception e) {
            log.error("订单出库异常", e);
            String msg = e.getMessage();
            throw new CoolException("订单出库失败" + (Cools.isEmpty(msg) ? "" : ":" + msg));
        }
        return R.ok();
    }