自动化立体仓库 - WMS系统
zwl
2 天以前 eaa43b12bfe9185b4f0b8f09d9ca081895a4d185
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
@@ -90,7 +89,7 @@
                            List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, detl.getMatnr(), detl.getBatch(),
                                    detl.getBrand(), detl.getStandby1(), detl.getStandby2(), detl.getStandby3(), detl.getBoxType1(), detl.getBoxType2(), detl.getBoxType3());
                            for (LocDetl locDetl : locDetls) {
                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()).eq("loc_sts","F"));
                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()).eq("loc_sts", "F"));
                                if (locMast != null) {
                                    LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMast.getLocNo()));
                                    if (!Cools.isEmpty(bLocNo)) {
@@ -132,7 +131,9 @@
                        List<TaskDto> taskDtos = new ArrayList<>();
                        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
                        for (LocDto locDto : locDtos) {
                            if (locDto.isLack()) { continue; }
                            if (locDto.isLack()) {
                                continue;
                            }
                            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto, locDto.getStandby1());
                            if (TaskDto.has(taskDtos, taskDto)) {
                                TaskDto dto = TaskDto.find(taskDtos, taskDto);
@@ -143,14 +144,15 @@
                            }
                        }
                        // -----------------------------------------------------------------------------------------------
                        int failCount = 0;
                        for (TaskDto taskDto : taskDtos) {
                            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
                            if (!Objects.isNull(taskDto.getDeviceNo())) {
                                //生成出库任务
                                workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), 9995L);
                            } else  {
                                workService.stockOut(staNo, taskDto, null, 9995L);
                            if (!stockOutSafely(taskDto, 9995L, "自动订单出库")) {
                                failCount++;
                            }
                        }
                        if (failCount > 0) {
                            log.warn("自动订单出库部分失败[orderNo={}],成功{}条,失败{}条",
                                    order.getOrderNo(), taskDtos.size() - failCount, failCount);
                        }
                    }
                }
@@ -201,4 +203,35 @@
            }
        }
    }
    private boolean stockOutSafely(TaskDto taskDto, Long userId, String scene) {
        try {
            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
            workService.stockOut(staNo, taskDto, taskDto.getDeviceNo(), userId);
            return true;
        } catch (Exception e) {
            log.error("{}失败[locNo={}, staNo={}, deviceNo={}, orderNos={}],原因: {}",
                    scene,
                    taskDto.getLocNo(),
                    taskDto.getStaNo(),
                    taskDto.getDeviceNo(),
                    collectOrderNos(taskDto),
                    getErrorMessage(e));
            return false;
        }
    }
    private String collectOrderNos(TaskDto taskDto) {
        Set<String> orderNos = new LinkedHashSet<>();
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (!Cools.isEmpty(locDto.getOrderNo())) {
                orderNos.add(locDto.getOrderNo());
            }
        }
        return orderNos.toString();
    }
    private String getErrorMessage(Exception e) {
        return Cools.isEmpty(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
    }
}