From 58e9832b61f9a3cb4bf3fa3e80a46f885f2facad Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Tue, 15 Sep 2026 11:04:07 +0800 Subject: [PATCH] fix: hold blocked outbound before WCS dispatch --- .../api/service/impl/ToWcsServiceImpl.java | 5 ++ .../job/mydojob/mapper/MydoJobMapper.java | 2 + .../job/mydojob/service/IMydoJobService.java | 3 + .../service/impl/MydoJobServiceImpl.java | 5 ++ .../resources/mapper/job/MydoJobMapper.xml | 27 +++++++ .../service/impl/ToWcsServiceImplTest.java | 72 +++++++++++++++++++ .../dispatch-guard/test-dispatch-guard.ps1 | 44 ++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/api/service/impl/ToWcsServiceImplTest.java create mode 100644 scripts/dispatch-guard/test-dispatch-guard.ps1 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java index 0c5e949..b262f32 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java @@ -51,6 +51,11 @@ public class ToWcsServiceImpl implements IToWcsService { mydoJobParam.setInOut("2"); List outMydoJobs = mydoJobService.selectMydoJobListApi(mydoJobParam); for (MydoJob outMydoJob : outMydoJobs) { + // HTTP success only confirms receipt. A rear outbound stays in status 1 until + // every deeper position in its own lane is physically clear. + if (mydoJobService.isOutboundDispatchBlocked(outMydoJob.getJobId())) { + continue; + } RequestLog requestLog = requestLogService.getRequestLog(PUSH_OUT_MYDO_JOB, JSONUtil.toJsonStr(outMydoJob), "推送出库任务","wms","wcs"); if ("1".equals(requestLog.getIsSuccessful())){ outMydoJob.setStatus("3"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java index ec2f038..635a162 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/mapper/MydoJobMapper.java @@ -95,4 +95,6 @@ public interface MydoJobMapper void updateLedError(HashMap map); Integer selectBySpare4OrCargo(InStockinDetail inStockinDetail); + + int countOutboundDispatchBlockers(@Param("jobId") String jobId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java index 0f60062..74d72e5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java @@ -111,4 +111,7 @@ public interface IMydoJobService List getInJobBySerial(String serial); void ykCompleted(MydoJob outJob); + + /** True while a deeper position in the same lane blocks this outbound. */ + boolean isOutboundDispatchBlocked(String jobId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index 9dd3046..69dd2da 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -540,4 +540,9 @@ public class MydoJobServiceImpl implements IMydoJobService { log.info("移库任务处理成功 jobId:[{}] trayCode:[{}]", outJob.getJobId(), outJob.getTrayCode()); } } + + @Override + public boolean isOutboundDispatchBlocked(String jobId) { + return mydoJobMapper.countOutboundDispatchBlockers(jobId) > 0; + } } diff --git a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml index 82d20fb..c112314 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml @@ -271,6 +271,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select * from mydo_job where task_no = #{taskNo} + +