自动化立体仓库 - WMS系统
chen.lin
2026-02-14 371462edc6b3ee1de97c235d4a019b544badda0d
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -207,20 +207,6 @@
                    throw new CoolException("条码组托档已存在:" + barcode);
                }
                
                // 检查是否有任何工作档(空托盘不应该有任何工作档,包括已完成的工作档)
                int wrkMastCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode));
                if (wrkMastCount != 0) {
                    log.warn("条码任务档已存在,不是空托盘:{}", barcode);
                    throw new CoolException("条码任务档已存在:" + barcode);
                }
                // 检查库位上是否有该条码
                if (locCache != null && !Cools.isEmpty(locCache.getBarcode()) && locCache.getBarcode().equals(barcode)) {
                    log.warn("空托盘入库时,库位上已有该条码,不允许呼叫AGV:库位={},条码={}", sourceSite, barcode);
                    throw new CoolException("条码在库,请更换条码" + barcode);
                }
                // 通过所有检查,确认为空托盘,设置为空托入库
                ioType = 10;
                log.info("确认为空托盘,设置为空托入库,条码:{},ioType:{}", barcode, ioType);
@@ -228,8 +214,6 @@
            default:
                throw new CoolException("入库类型错误,type:" + type);
        }
        // 统一校验:在所有AGV呼叫场景中都需要检查以下条件,有任何一个满足则不允许呼叫AGV
        
        // 1. 校验库位上的条码是否在库:检查LocCache表上是否有该条码,且该条码在LocDetl库存中
        // 注意:空托盘入库(type=3)不校验库存明细,只在校验库位上是否有条码(已在case 3中处理)
@@ -243,26 +227,26 @@
                    throw new CoolException("条码在库,请更换条码" + barcode);
                }
            }
        }else {
            // 检查库位上是否有该条码
            if (locCache != null && !Cools.isEmpty(locCache.getBarcode()) && locCache.getBarcode().equals(barcode)) {
                log.warn("空托盘入库时,库位上已有该条码,不允许呼叫AGV:库位={},条码={}", sourceSite, barcode);
                throw new CoolException("条码在库,请更换条码" + barcode);
            }
        }
        // 2. 校验工作档中运行中的托盘码:检查是否有未完成的工作档(wrk_sts不等于4、14和15)
        // 4=入库完成,14=已出库未确认,15=出库更新完成
        int runningWrkMastCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
                .eq("barcode", barcode)
                .notIn("wrk_sts", Arrays.asList(4L, 14L, 15L))); // 不等于入库完成(4)和出库完成(14,15)
        if (runningWrkMastCount > 0) {
            log.warn("AGV呼叫时,托盘码在工作档中运行中,不允许呼叫AGV:{}", barcode);
        // 2. 校验工作档中运行中的托盘码
        int wrkMastCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (wrkMastCount != 0) {
            log.warn("条码在工作档已存在:{}", barcode);
            throw new CoolException("条码在工作档,请更换条码:" + barcode);
        }
        // 3. 校验AGV任务列表中未完成的托盘码:检查是否有未完成的AGV任务(is_deleted=0且wrk_sts不等于4、14和15)
        // 4=入库完成,14=已出库未确认,15=出库更新完成
        // 3. 校验AGV任务列表中未完成的托盘码:检查是否有未完成的AGV任务(is_deleted=0)
        int unfinishedTaskCount = taskService.selectCount(new EntityWrapper<Task>()
                .eq("barcode", barcode)
                .eq("is_deleted", 0)
                .notIn("wrk_sts", Arrays.asList(4L, 14L, 15L))); // 不等于入库完成(4)和出库完成(14,15)
                .eq("is_deleted", 0));
        if (unfinishedTaskCount > 0) {
            log.warn("AGV呼叫时,托盘码在AGV任务列表中未完成,不允许呼叫AGV:{}", barcode);
            log.warn("AGV呼叫时,条码在AGV任务档,不允许呼叫AGV:{}", barcode);
            throw new CoolException("条码在AGV任务档,请更换条码:" + barcode);
        }