| | |
| | | if (count == 0) { |
| | | throw new CoolException("条码未组托:" + barcode); |
| | | } |
| | | |
| | | // 注意:托盘码是否在库的校验已在统一校验中处理 |
| | | |
| | | ioType = 1; // AGV容器入库(实托入库) |
| | | |
| | | // 如果库位存在,更新状态为入库预约;不存在则跳过,由定时任务处理 |
| | |
| | | if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 107) { |
| | | throw new CoolException("条码不需要回库:" + barcode); |
| | | } |
| | | |
| | | // 校验拣选回库托盘:当前工作档必须已完成(状态14或15) |
| | | Long wrkSts = wrkMast.getWrkSts(); |
| | | if (wrkSts == null || (wrkSts != 14L && wrkSts != 15L)) { |
| | | log.warn("拣选回库托盘时,当前工作档未完成,状态:{},不允许呼叫AGV:{}", wrkSts, barcode); |
| | | throw new CoolException("条码在库,请更换条码" + barcode); |
| | | } |
| | | |
| | | ioType = wrkMast.getIoType() - 50; // 103->53(拣料入库), 107->57(盘点入库) |
| | | |
| | | // 如果库位存在,更新状态为入库预约;不存在则跳过,由定时任务处理 |
| | |
| | | throw new CoolException("条码组托档已存在:" + barcode); |
| | | } |
| | | |
| | | // 检查是否有任务 |
| | | // 检查是否有任何工作档(空托盘不应该有任何工作档,包括已完成的工作档) |
| | | int wrkMastCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode)); |
| | | if (wrkMastCount != 0) { |
| | | log.warn("条码任务档已存在,不是空托盘:{}", barcode); |
| | | throw new CoolException("条码任务档已存在:" + barcode); |
| | | } |
| | | |
| | | // 检查是否有库存 |
| | | int locDetlCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); |
| | | if (locDetlCount != 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; |
| | |
| | | default: |
| | | throw new CoolException("入库类型错误,type:" + type); |
| | | } |
| | | // 条码存在agv任务 |
| | | int count = taskService.selectCount(new EntityWrapper<Task>().eq("barcode", barcode).eq("is_deleted", 0)); |
| | | if (count > 0) { |
| | | throw new CoolException(barcode+ ":条码存在agv搬运任务!"); |
| | | |
| | | // 统一校验:在所有AGV呼叫场景中都需要检查以下条件,有任何一个满足则不允许呼叫AGV |
| | | |
| | | // 1. 校验库位上的条码是否在库:检查LocCache表上是否有该条码,且该条码在LocDetl库存中 |
| | | // 注意:空托盘入库(type=3)不校验库存明细,只在校验库位上是否有条码(已在case 3中处理) |
| | | if (type != 3 && locCache != null && !Cools.isEmpty(locCache.getBarcode())) { |
| | | String locCacheBarcode = locCache.getBarcode(); |
| | | if (locCacheBarcode.equals(barcode)) { |
| | | // 库位上的条码与当前要呼叫的条码相同,检查是否在库存中 |
| | | int locDetlCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); |
| | | if (locDetlCount > 0) { |
| | | log.warn("AGV呼叫时,库位上的条码在库中,不允许呼叫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); |
| | | throw new CoolException("条码在工作档,请更换条码:" + barcode); |
| | | } |
| | | |
| | | // 3. 校验AGV任务列表中未完成的托盘码:检查是否有未完成的AGV任务(is_deleted=0且wrk_sts不等于4、14和15) |
| | | // 4=入库完成,14=已出库未确认,15=出库更新完成 |
| | | 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) |
| | | if (unfinishedTaskCount > 0) { |
| | | log.warn("AGV呼叫时,托盘码在AGV任务列表中未完成,不允许呼叫AGV:{}", barcode); |
| | | throw new CoolException("条码在AGV任务档,请更换条码:" + barcode); |
| | | } |
| | | |
| | | // 根据whs_type确定机器人组(站点分配完全由定时任务处理) |