From 7d1092e7487381593c2ee4aae92a6b08fbf57e07 Mon Sep 17 00:00:00 2001 From: Lenovo Date: Fri, 18 Sep 2026 20:55:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=BA=E8=BF=90=E8=A1=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pda/pages/warehouse/outbound/container.vue | 2 +- .../job/service/impl/MydoJobServiceImpl.java | 3 +- .../service/impl/OutStockoutServiceImpl.java | 67 +++++------ .../pda/service/impl/PdaServiceImpl.java | 19 ++- .../ruoyi/scheduleTask/MydoJobHandler.java | 4 +- .../ruoyi/scheduleTask/RequestWcsHandler.java | 108 +++++++++++++++++- 6 files changed, 158 insertions(+), 45 deletions(-) diff --git a/pda/pages/warehouse/outbound/container.vue b/pda/pages/warehouse/outbound/container.vue index 2864c54..cbe84bc 100644 --- a/pda/pages/warehouse/outbound/container.vue +++ b/pda/pages/warehouse/outbound/container.vue @@ -85,7 +85,7 @@ callStockOutForContainer(this.selectedCargoArea, this.selectedPalletType) .then(res => { uni.hideLoading() - this.$modal.msgSuccess('呼叫空托出库成功') + this.$modal.msgSuccess('呼叫成功') }) .catch(err => { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java index 5738fad..404c3de 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java @@ -405,7 +405,8 @@ public class MydoJobServiceImpl implements IMydoJobService .stockId(stockId) .stockDetailId(stockId + "-" + num) .stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE) - .trayCode(detail.getTrayCode()) + .productStatus(BasStockCode.PRODUCT_STATUS_NORMAL) + .trayCode(inTrayMsg.getTrayCode()) .jobId(jobId) .jobDetailId(jobId + "-" + num++) .stockinId(inTrayMsg.getStockinId())//获取单据号需要从托盘绑定信息表获取 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 78e342e..6dcf7a3 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 @@ -318,11 +318,11 @@ public class OutStockoutServiceImpl implements IOutStockoutService //2.生成辊号库存对应托盘的出库作业 MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(stock.getTrayCode()); + if (ObjUtil.isNull(mydoJob)){ String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT); String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT); - //判断出库类型,用于确定完成后是否生成回流任务 //---1.遍历子单明细的辊号集合是否包含出库托盘库存的辊号集合 //---2.如果全部匹配,则任务类型为整托出库,否则为拣选出库 @@ -348,39 +348,40 @@ public class OutStockoutServiceImpl implements IOutStockoutService .priority(10) .build(); + //生成托盘主作业 + mydoJobService.insertMydoJob(mydoJob); - //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< - //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< - //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< - AjaxResult ajaxResult; - /*-----------------推送wcs任务----------------- */ - HashMap paramMap = new HashMap<>(); - paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 - paramMap.put("jobId", mydoJob.getJobId());//作业号 - paramMap.put("taskNo", mydoJob.getTaskNo());//任务号 - paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号 - paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId());//货位 - paramMap.put("inOrOut", mydoJob.getInOrOut());//任务类型 - - ajaxResult = apiWcsService.sendOutMydoJob(paramMap); - - log.info("【推送出库】推送wcs出库作业,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); - - if (ajaxResult.isSuccess()){ - - //生成托盘主作业 - mydoJobService.insertMydoJob(mydoJob); - - //生成主任务后子任务明细重新计数 - num = 1; - - log.info("【推送出库】生成并推送wcs作业成功,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); - - //更新货位【预占用】 - cargoCurrent.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); - basCargoSpaceService.updateBasCargoSpace(cargoCurrent); - - } + log.info("【出库分配】生成出库作业,作业号:{},托盘号:{}", mydoJob.getJobId(), stock.getTrayCode()); +// +// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< +// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< +// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<< +// AjaxResult ajaxResult; +// /*-----------------推送wcs任务----------------- */ +// HashMap paramMap = new HashMap<>(); +// paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 +// paramMap.put("jobId", mydoJob.getJobId());//作业号 +// paramMap.put("taskNo", mydoJob.getTaskNo());//任务号 +// paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号 +// paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId());//货位 +// paramMap.put("inOrOut", mydoJob.getInOrOut());//任务类型 +// +// ajaxResult = apiWcsService.sendOutMydoJob(paramMap); +// +// log.info("【推送出库】推送wcs出库作业,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); +// +// if (ajaxResult.isSuccess()){ +// +// //生成主任务后子任务明细重新计数 +// num = 1; +// +// log.info("【推送出库】生成并推送wcs作业成功,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); +// +// //更新货位【预占用】 +// cargoCurrent.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); +// basCargoSpaceService.updateBasCargoSpace(cargoCurrent); +// +// } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java index 124cae6..8b06a90 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java @@ -716,16 +716,23 @@ public class PdaServiceImpl implements IPdaService { //>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<< //获取托盘剩余库存 List stocks = basStockService.selectBasStockListByTrayCode(trayCode); - int trayType = mydoJobService.getTrayTypeByTrayCode(trayCode); //检查当前条码是否已经生成作业 MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode); if (ObjUtil.isEmpty(mydoJob)) { - String jobId = basJobIdService.getId(JobIdType.MYDOJOB_PICK_RETURN); - String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_BACK); - int taskType = TaskType.TASKTYPE_PICK_BACK; - + String jobId; + String taskNo; + int taskType; + if (stocks.isEmpty()){ + jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKIN_EMPTY_PALLET); + taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_EMPTY_PALLET); + taskType = TaskType.TASKTYPE_STOCKIN_EMPTY_TRAY; + }else{ + jobId = basJobIdService.getId(JobIdType.MYDOJOB_PICK_RETURN); + taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_BACK); + taskType = TaskType.TASKTYPE_PICK_BACK; + } //--------------------------- 入库货位分配 --------------------------- //区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘 @@ -934,7 +941,7 @@ public class PdaServiceImpl implements IPdaService { log.info("【出库确认】移除版辊库存信息,辊号:{}", rollerNumber); //更新分配数量、实际数量、明细状态 - stockoutDetail.setAssignNum(jobDetail.getOutQuantity()); + stockoutDetail.setAssignNum(BigDecimal.ONE); stockoutDetail.setStatus(1); outStockoutDetailService.updateOutStockoutDetail(stockoutDetail); log.info("【出库确认】更新出库单据明细状态,单号:{},辊号:{}", stockoutDetail.getStockoutId(), rollerNumber); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java index c1df2f6..b15326a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java @@ -257,7 +257,7 @@ public class MydoJobHandler { */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void cancelMydoJobHandler_Out(){ - List mydoJobs = mydoJobService.selectOutMydoJobList( + List mydoJobs = mydoJobService.selectMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.CANCEL.getCode()) .build() @@ -672,6 +672,8 @@ public class MydoJobHandler { .stockId(stockId) .stockDetailId(stockId + "-" + num) .stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE) + .productStatus(BasStockCode.PRODUCT_STATUS_NORMAL) + .trayCode(inTrayMsg.getTrayCode()) .jobId(mydoJob.getJobId()) .jobDetailId(mydoJob.getJobId() + "-" + num++) .stockinId(inTrayMsg.getStockinId())//获取单据号需要从托盘绑定信息表获取 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java index 770a6df..3b721d8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java @@ -140,6 +140,106 @@ public class RequestWcsHandler { } + /** + * 推送wcs单据【整托出库】作业 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void sendWcsStockoutTask(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .inOrOut(TaskType.TASKTYPE_STOCKOUT) + .status(TaskStatusEnum.READY.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { + + //初始化参数 + HashMap paramMap = new HashMap<>(); + paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 + paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号 + paramMap.put("taskNo", mydoJob.getTaskNo());//容器编号 + paramMap.put("jobId", mydoJob.getJobId()); + paramMap.put("inOrOut", mydoJob.getInOrOut()); + paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId()); + + AjaxResult ajaxResult = apiWcsService.sendOutMydoJob(paramMap); + + if (ajaxResult.isSuccess()){ + log.info("【推送出库】<整托>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); + mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode()); + mydoJobService.updateMydoJob(mydoJob); + + //更新库存状态【占用中】 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + } + + //更新货位状态【出库预占用】 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); + + } + } + + } + + + /** + * 推送wcs单据【拣选出库】作业 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void sendWcsPickingOutTask(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .inOrOut(TaskType.TASKTYPE_STOCKOUT_PICKING) + .status(TaskStatusEnum.READY.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { + + //初始化参数 + HashMap paramMap = new HashMap<>(); + paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 + paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号 + paramMap.put("taskNo", mydoJob.getTaskNo());//容器编号 + paramMap.put("jobId", mydoJob.getJobId()); + paramMap.put("inOrOut", mydoJob.getInOrOut()); + paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId()); + + AjaxResult ajaxResult = apiWcsService.sendOutMydoJob(paramMap); + + if (ajaxResult.isSuccess()){ + log.info("【推送出库】<拣选>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); + mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode()); + mydoJobService.updateMydoJob(mydoJob); + + //更新库存状态【占用中】 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + } + + //更新货位状态【出库预占用】 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); + + } + } + + } + + /** * 手动操作 - 推送wcs指定货位出库 */ @@ -189,12 +289,13 @@ public class RequestWcsHandler { } + /** * 出库确认完成 - 推送wcs拣选回流任务 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsBackTask(){ - List mydoJobs = mydoJobService.selectOutMydoJobList( + List mydoJobs = mydoJobService.selectMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_PICK_BACK) @@ -213,6 +314,7 @@ public class RequestWcsHandler { paramMap.put("jobId", mydoJob.getJobId()); paramMap.put("inOrOut", mydoJob.getInOrOut()); paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId()); + paramMap.put("priority", mydoJob.getPriority()); AjaxResult ajaxResult = apiWcsService.sendBackMydoJob(paramMap); @@ -247,7 +349,7 @@ public class RequestWcsHandler { */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsMoveTask(){ - List mydoJobs = mydoJobService.selectOutMydoJobList( + List mydoJobs = mydoJobService.selectMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_PICK_BACK) @@ -353,7 +455,7 @@ public class RequestWcsHandler { */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsInventoryBackTask(){ - List mydoJobs = mydoJobService.selectOutMydoJobList( + List mydoJobs = mydoJobService.selectMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_INVENTORY_BACK)