From a53438ba7e092ce279c8204329953c94179320a9 Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Tue, 15 Sep 2026 11:23:09 +0800 Subject: [PATCH] fix: reject blocked outbound jobs at WCS intake --- ruoyi-admin/pom.xml | 11 ++ .../api/service/impl/ApiServiceImpl.java | 28 +++++ .../mapper/BasCargoSpaceMapper.java | 5 + .../mapper/bas/BasCargoSpaceMapper.xml | 20 ++++ .../api/service/impl/ApiServiceImplTest.java | 113 ++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/api/service/impl/ApiServiceImplTest.java diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index ae294d5..3aad0ad 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -83,6 +83,12 @@ slf4j-api + + org.springframework.boot + spring-boot-starter-test + test + + org.apache.plc4x @@ -106,6 +112,11 @@ + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + org.springframework.boot spring-boot-maven-plugin diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java index 6e76e54..b824bfb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java @@ -18,6 +18,7 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.PositionCodeData; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.ReceiveJob; import com.ruoyi.api.service.IApiService; +import com.ruoyi.bas.cargospace.mapper.BasCargoSpaceMapper; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.job.domain.MydoJob; @@ -54,6 +55,8 @@ public class ApiServiceImpl implements IApiService { @Autowired private IMydoJobService mydoJobService; @Autowired + private BasCargoSpaceMapper basCargoSpaceMapper; + @Autowired private IAgvContainerTaskService agvContainerTaskService; @@ -359,6 +362,20 @@ public class ApiServiceImpl implements IApiService { @Override public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) { + Integer jobType = parseOutboundJobType(receiveOutJob); + if (jobType == null || jobType < 20) { + String rawType = receiveOutJob == null ? null : receiveOutJob.getInOrOut(); + return AjaxResult.error("WCS 无法识别作业类型 " + rawType + ",任务未接收"); + } + if (jobType != 30) { + String cargoSpaceId = receiveOutJob.getCargoSpaceId(); + if (basCargoSpaceMapper.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId) == null) { + return AjaxResult.error("WCS 未找到出库货位 " + cargoSpaceId + ",任务未接收"); + } + if (basCargoSpaceMapper.countOutboundBlockingPositions(cargoSpaceId) > 0) { + return AjaxResult.error("同通道外侧货位尚未清空,等待前置移库完成"); + } + } MydoJob mydoJob = new MydoJob(); mydoJob.setJobId(receiveOutJob.getJobId()); mydoJob.setTaskNo(receiveOutJob.getTaskNo()); @@ -382,6 +399,17 @@ public class ApiServiceImpl implements IApiService { } + private Integer parseOutboundJobType(ReceiveJob job) { + if (job == null || job.getInOrOut() == null) { + return null; + } + try { + return Integer.valueOf(job.getInOrOut()); + } catch (NumberFormatException ignored) { + return null; + } + } + @Override public AjaxResult receiveInMydoJob(ReceiveJob receiveInJob) { MydoJob mydoJob = new MydoJob(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java index 48faa42..0711635 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java @@ -20,6 +20,11 @@ public interface BasCargoSpaceMapper */ public BasCargoSpace selectBasCargoSpaceByCargoSpaceId(String cargoSpaceId); + /** + * Count occupied positions or unfinished outbound jobs outside the requested position. + */ + int countOutboundBlockingPositions(@Param("cargoSpaceId") String cargoSpaceId); + /** * 查询库存信息列表 * diff --git a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml index 1cb55ca..4d848f4 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml @@ -60,6 +60,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where cargo_space_id = #{cargoSpaceId} + +