From a7156333c1c431cdcc12314aa74ea63daa77832a Mon Sep 17 00:00:00 2001 From: lsymicc Date: Thu, 8 Oct 2026 15:19:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=8B=E5=8A=A8=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=87=BA=E5=BA=93=E8=A7=A6=E5=8F=91=E7=A7=BB=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/api/service/impl/ApiWcsService.java | 100 ++++++++++++++++-- .../service/impl/OutStockoutServiceImpl.java | 12 ++- 2 files changed, 100 insertions(+), 12 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java index 59f81dc..af5d81a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java @@ -77,6 +77,7 @@ public class ApiWcsService implements IApiWcsService { IRequestLogService requestLogService; + /** * 呼叫可用容器出库 * @return @@ -428,13 +429,14 @@ public class ApiWcsService implements IApiWcsService { String cargoSpaceId = params.get("cargoSpaceId"); - BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); - if (ObjUtil.isNull(cargoSpace)){ + //当前货位 + BasCargoSpace cargoSpaceCurrent = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); + if (ObjUtil.isNull(cargoSpaceCurrent)){ log.warn("【操作失败】找不到该货位,可能是货位异常或参数错误,请联系管理员,货位号:", cargoSpaceId); return AjaxResult.error("找不到该货位信息"); } - if (!cargoSpace.getLocked().equals(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL)){ + if (!cargoSpaceCurrent.getLocked().equals(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL)){ log.warn("【操作失败】当前货位已经锁定或禁用,不能执行<指定货位出库>该操作,货位号:", cargoSpaceId); return AjaxResult.error("当前货位已经锁定或禁用,不能执行<指定货位出库>该操作"); } @@ -445,6 +447,88 @@ public class ApiWcsService implements IApiWcsService { // } // MydoJob job = mydoJobService.selectMydoJobBy(cargoSpace.getTrayCode()); + + + + //todo 移库判断 + if(cargoSpaceCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){ + //双伸货位出库判断单伸位置是否有货 + BasCargoSpace cargoSpaceSingle = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoSpaceCurrent); + + //单伸位非空闲状态 - 触发移库任务 + if (cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){ + String moveJobId = basJobIdService.getId(JobIdType.MYDOJOB_MOVE); + String moveTaskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT); + BasCargoSpace targetCargo = basCargoSpaceService.selectBasCargoSpaceForStockin( + new BasCargoSpace().builder().theType(cargoSpaceCurrent.getTheType()).roadwayId(cargoSpaceCurrent.getRoadwayId()).build() + ); + + //生成并推送移库 + MydoJob moveJob = new MydoJob().builder() + .jobId(moveJobId) + .taskNo(moveTaskNo) + .status(TaskStatusEnum.READY.getCode()) + .inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE) + .executionPhase("0") + .trayCode(cargoSpaceSingle.getTrayCode()) + .trayType(cargoSpaceSingle.getTheType()) + .roadwayId(cargoSpaceSingle.getRoadwayId()) + .cargoSpaceId(cargoSpaceSingle.getCargoSpaceId()) + .targetCargoSpaceId(targetCargo.getCargoSpaceId()) + .priority(0) + .build(); + + log.info("【手动指定出库】出库双伸货位外侧有货,生成移库作业,作业号:{},移库货位:{},目标货位:{}", moveJobId, cargoSpaceSingle.getCargoSpaceId(), targetCargo.getCargoSpaceId()); + + //推送移库 + AjaxResult ajaxResult; + + /*-----------------推送wcs移库任务----------------- */ + HashMap paramMap = new HashMap<>(); + paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 + paramMap.put("jobId", moveJob.getJobId());//容器编号 + paramMap.put("trayCode", moveJob.getTrayCode().trim());//容器编号 + paramMap.put("cargoSpaceId", moveJob.getCargoSpaceId());//货位 + paramMap.put("targetCargoSpaceId", moveJob.getTargetCargoSpaceId());//目标货位 + paramMap.put("inOrOut", moveJob.getInOrOut());//任务类型 + paramMap.put("priority", 0);//任务优先级 + + ajaxResult = sendMoveMydoJob(paramMap); + log.info( + "【手动出库-移库】推送wcs移库作业,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId() + ); + if (ajaxResult.isSuccess()){ + //生成托盘主作业 + mydoJobService.insertMydoJob(moveJob); + + List stocks = basStockService.selectBasStockListByTrayCode(moveJob.getTrayCode()); + if (!stocks.isEmpty()){ + for(BasStock stock : stocks){ + //更新库存表货位【占用】状态 + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + } + + //更新货位表【预占用】状态 + basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpaceSingle.getCargoSpaceId(),cargoSpaceSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); + basCargoSpaceService.updateBasCargoSpaceStatus(targetCargo.getCargoSpaceId(),cargoSpaceSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); + + log.info( + "【手动出库-移库】推送成功,货位和库存更为<占用>状态,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId() + ); + }else{ + return AjaxResult.error("【手动出库-移库】推送失败,请查看接口错误信息"); + } + + }else if (cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN) || + cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT)){ + return AjaxResult.error("【手动出库-移库】推送失败,操作中止,对应的单伸货位状态不符合移库条件"); + } + + } + + List jobs = mydoJobService.selectMydoJobList( new MydoJob().builder().cargoSpaceId(cargoSpaceId).build() ); @@ -458,16 +542,16 @@ public class ApiWcsService implements IApiWcsService { .jobId(jobId) .taskNo(taskNo) .status(TaskStatusEnum.READY.getCode()) - .warehouseId(cargoSpace.getWarehouseId()) + .warehouseId(cargoSpaceCurrent.getWarehouseId()) .warehouseName("立体库") .executionPhase("0") .inOrOut(taskType) - .trayCode(cargoSpace.getTrayCode()) + .trayCode(cargoSpaceCurrent.getTrayCode()) // .exitId() - .roadwayId(cargoSpace.getRoadwayId()) + .roadwayId(cargoSpaceCurrent.getRoadwayId()) .cargoSpaceId(cargoSpaceId) - .cargoSpaceName(cargoSpace.getCargoSpaceName()) - .trayType(cargoSpace.getTheType()) + .cargoSpaceName(cargoSpaceCurrent.getCargoSpaceName()) + .trayType(cargoSpaceCurrent.getTheType()) .build(); mydoJobService.insertMydoJob(mydoJob); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java index 7efaf82..18bd14e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImpl.java @@ -307,10 +307,6 @@ public class OutStockoutServiceImpl implements IOutStockoutService //生成主任务后子任务明细重新计数 num = 1; - log.info( - "【出库分配-移库】推送成功,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId() - ); - //更新库存表货位【占用】状态 stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); basStockService.updateBasStock(stock); @@ -319,8 +315,16 @@ public class OutStockoutServiceImpl implements IOutStockoutService basCargoSpaceService.updateBasCargoSpaceStatus(cargoSingle.getCargoSpaceId(),cargoSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); basCargoSpaceService.updateBasCargoSpaceStatus(targetCargo.getCargoSpaceId(),cargoSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); + log.info( + "【出库分配-移库】推送成功,货位和库存更为<占用>状态,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId() + ); + }else{ + return AjaxResult.error("【出库分配-移库】推送失败,请查看接口错误信息"); } + }else if (cargoSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN) || + cargoSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT)){ + return AjaxResult.error("【出库分配-移库】推送失败,操作中止,对应的单伸货位状态不符合移库条件"); } }//执行完移库判断