From 9c138595bd12b51b76b3270252b75a1f1f4e460c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Mon, 26 Oct 2026 09:53:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=8B=86=E5=88=86=E5=A4=A7si?= =?UTF-8?q?te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/factory/dao/SiteMapper.java | 8 ++++ .../controller/PdaLabelController.java | 17 ++----- .../service/HandlingUnitService.java | 9 ++++ .../service/impl/HandlingUnitServiceImpl.java | 46 +++++++++++++++++++ .../resources/mapper/factory/SiteMapper.xml | 9 ++++ 5 files changed, 77 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java b/src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java index 017a2886..b5a8821e 100644 --- a/src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java +++ b/src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java @@ -122,4 +122,12 @@ public interface SiteMapper extends BaseMapper { * @return 子site数量 */ int countSubSiteBySiteId(@Param("siteId") String siteId); + + /** + * @author rqrq + * @Description 按登录大工厂取出 site_sub 中全部小工厂。标签 handling_unit.site 记的是小工厂,不能拿大工厂直接等值匹配。- rqrq + * @param siteId 登录大工厂,对应 site_sub.siteid - rqrq + * @return 小工厂编码列表;未配置时返回空列表,由调用方决定是否退回大工厂本身 - rqrq + */ + List listSubSiteIds(@Param("siteId") String siteId); } diff --git a/src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java b/src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java index 5b5ecf59..09e51a97 100644 --- a/src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java +++ b/src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java @@ -62,29 +62,22 @@ public class PdaLabelController extends AbstractController { @PostMapping("query") public R queryLabelInfo(@RequestBody Map params) { try { - String site = (String) params.get("site"); - String labelCode = (String) params.get("labelCode"); + String site = params == null ? null : (String) params.get("site"); + String labelCode = params == null ? null : (String) params.get("labelCode"); log.info("=== 开始查询标签信息 ==="); - //log.info("工厂: {}, 标签编码: {}", site, labelCode); - // 参数验证 if (site == null || site.trim().isEmpty()) { return R.error("工厂编码不能为空"); } - if (labelCode == null || labelCode.trim().isEmpty()) { return R.error("标签编码不能为空"); } - // 查询HandlingUnit信息 - HandlingUnit handlingUnit = handlingUnitService.lambdaQuery() - .eq(HandlingUnit::getSite, site.trim()) - .eq(HandlingUnit::getUnitId, labelCode.trim()) - .one(); - + // 按登录大工厂展开小工厂后查标签。查无返回 null;多小工厂重复时由服务抛出明确异常。- rqrq + HandlingUnit handlingUnit = handlingUnitService.queryPdaLabelByBigSite(site, labelCode); if (handlingUnit == null) { - log.warn("标签不存在: labelCode={}", labelCode); + log.warn("标签不存在: site={}, labelCode={}", site, labelCode); return R.error("标签不存在"); } // 查询只回显真实X/N/Y/Q状态;拆分、发料等写操作各自执行状态准入,Q不会因查询被使用。- rqrq diff --git a/src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java b/src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java index d3fe544c..c57a9351 100644 --- a/src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java +++ b/src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java @@ -30,6 +30,15 @@ public interface HandlingUnitService extends IService { /** 取消预定扫码:保持原标签查询及库存状态判断,仅追加公共栈板绑定校验,不用于拆标签 - rqrq */ HandlingUnit scanLabelForCancelReserve(String site, String unitId); + /** + * @author rqrq + * @Description PDA标签查询:请求 site 是登录大工厂,先取 site_sub 全部小工厂,再按标签号查询。查无返回 null;同一标签落在多个小工厂时抛异常。- rqrq + * @param bigSite 登录大工厂,不能用标签上的小工厂代替 - rqrq + * @param unitId 标签号 - rqrq + * @return 唯一标签;不存在返回 null - rqrq + */ + HandlingUnit queryPdaLabelByBigSite(String bigSite, String unitId); + /** * 对外接口:扫描处理单元标签 */ diff --git a/src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java b/src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java index 006199d6..4c960fe7 100644 --- a/src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java +++ b/src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java @@ -20,6 +20,7 @@ import com.gaotao.modules.trans.service.ValidateInventoryPartInStockService; import com.gaotao.modules.warehouse.entity.InventoryStock; import com.gaotao.modules.warehouse.service.InventoryStockService; import com.gaotao.modules.base.entity.PartData; +import com.gaotao.modules.factory.dao.SiteMapper; import com.gaotao.modules.handlingunit.service.HandlingUnitService; import com.gaotao.modules.warehouse.service.WmsAvailabilityControlIdService; import org.apache.commons.lang3.StringUtils; @@ -32,6 +33,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; import java.util.UUID; @@ -49,6 +51,9 @@ public class HandlingUnitServiceImpl extends ServiceImpl configuredSubSites = siteMapper.listSubSiteIds(site); + LinkedHashSet siteScope = new LinkedHashSet(); + if (configuredSubSites != null) { + for (String subSite : configuredSubSites) { + if (StringUtils.isNotBlank(subSite)) { + siteScope.add(subSite.trim()); + } + } + } + if (siteScope.isEmpty()) { + siteScope.add(site); + } + // 标签号加小工厂范围查询。多条时不能任取一条,否则打印和拆分会用错工厂。- rqrq + List handlingUnits = this.lambdaQuery() + .in(HandlingUnit::getSite, siteScope) + .eq(HandlingUnit::getUnitId, code) + .list(); + if (handlingUnits == null || handlingUnits.isEmpty()) { + return null; + } + if (handlingUnits.size() > 1) { + throw new XJException("同一标签编码在多个小工厂存在,无法确定"); + } + return handlingUnits.get(0); + } + @Override public HandlingUnit getHandlingUnit(String site, String unitId) { return baseMapper.selectByUnitIdNoLock(unitId); diff --git a/src/main/resources/mapper/factory/SiteMapper.xml b/src/main/resources/mapper/factory/SiteMapper.xml index 95aa9664..4c87d3b3 100644 --- a/src/main/resources/mapper/factory/SiteMapper.xml +++ b/src/main/resources/mapper/factory/SiteMapper.xml @@ -291,6 +291,15 @@ AND subsiteid = #{subSiteId} + + +