From 519b621105fe6b4e13e50f41fe43311171267b79 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: Wed, 24 Dec 2025 16:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=98=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/entity/PushPalletDetailDto.java | 3 +- .../check/mapper/PhysicalInventoryMapper.java | 10 +++ .../impl/PhysicalInventoryServiceImpl.java | 77 +++++++++++++++++++ .../mapper/check/PhysicalInventoryMapper.xml | 9 +++ 4 files changed, 98 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java b/src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java index c43ee67..6293f49 100644 --- a/src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java +++ b/src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java @@ -15,10 +15,11 @@ public class PushPalletDetailDto { private boolean isCommonUsed; //常用料 private boolean autoSort; //自动分拣 private Integer soreType;//分拣方式 0人工 1气胀轴 2抱箱 3直接出库 - private String assemblyPosition;//托盘码 + private String assemblyPosition;//位置码 private boolean endFlag; private List cargoInfos;//明细数据 private PartTypeEnum partType; private Integer count=1;//托盘数量 默认为1 + private Integer isInventoryCompletion=0;//是否为盘点确认的组盘 } diff --git a/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java b/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java index daa0eb7..a537456 100644 --- a/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java +++ b/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java @@ -598,4 +598,14 @@ public interface PhysicalInventoryMapper extends BaseMapper { * @author rqrq */ int countOrderTaskByCountNo(@Param("site") String site, @Param("countNo") String countNo); + + /** + * @Description 根据任务号和栈板号获取任务单行号 - rqrq + * @param site 工厂编码 + * @param taskNo 任务号 + * @param palletId 栈板号 + * @return Integer 任务单行号 + * @author rqrq + */ + Integer getItemNoByTaskAndPallet(@Param("site") String site, @Param("taskNo") String taskNo, @Param("palletId") String palletId); } diff --git a/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java b/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java index 48fb5ab..2084fb1 100644 --- a/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java +++ b/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java @@ -1853,6 +1853,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl业务说明:

+ *
    + *
  • 盘点完成后调用WCS接口,告知立库该托盘已盘点
  • + *
  • 使用 PushPalletDetailDto 构建请求数据
  • + *
  • isInventoryCompletion=1 表示是盘点确认的组盘
  • + *
+ * + * @param site 工厂编码 + * @param countNo 盘点单号 + * @param palletId 栈板号 + * @author rqrq + */ + private void pushCountCompletionToWcs(String site, String countNo, String palletId) { + log.info("开始推送盘点完成数据给WCS - rqrq,site: {}, countNo: {}, palletId: {}", site, countNo, palletId); + + try { + // 1. 查询任务单号和行号 - rqrq + String taskNo = baseMapper.getTaskNoByPallet(site, countNo, palletId); + if (!StringUtils.hasText(taskNo)) { + log.info("该栈板没有关联任务号,跳过WCS推送,palletId: {}", palletId); + return; + } + + Integer itemNo = baseMapper.getItemNoByTaskAndPallet(site, taskNo, palletId); + if (itemNo == null) { + itemNo = 1; // 默认行号1 + } + + // 2. 查询栈板的pallet_type,获取WCS相关配置 - rqrq + com.gaotao.modules.base.entity.PalletType palletTypeInfo = wcsIntegrationMapper.getPalletTypeInfoByPallet(site, palletId); + if (palletTypeInfo == null) { + log.warn("未查询到栈板类型信息,跳过WCS推送,palletId: {}", palletId); + return; + } + + // 3. 构建 PushPalletDetailDto 对象 - rqrq + com.gaotao.modules.api.entity.PushPalletDetailDto dto = new com.gaotao.modules.api.entity.PushPalletDetailDto(); + dto.setSite(site); + dto.setTaskNo(taskNo); + dto.setItemNo(itemNo); + dto.setPalletBarcode(palletId); + dto.setPalletType(palletTypeInfo.getWcsPalletType()); + dto.setBasePalletType(palletTypeInfo.getWcsBasePalletType()); + dto.setCommonUsed(false); // isCommonUsed = false + // autoSort 根据 wcs_auto_sort 的 Y/N 来填 true/false - rqrq + dto.setAutoSort("Y".equals(palletTypeInfo.getWcsAutoSort())); + dto.setSoreType(palletTypeInfo.getWcsSoreType()); + dto.setAssemblyPosition("R1"); // 固定R1 + dto.setEndFlag(true); + dto.setCargoInfos(new java.util.ArrayList<>()); // 空集合 + dto.setPartType(com.gaotao.modules.api.entity.PartTypeEnum.OTHER); // partType = 3 (OTHER) + dto.setCount(1); // 默认1 + dto.setIsInventoryCompletion(1); // 盘点确认的组盘 + + log.info("构建WCS请求数据完成 - rqrq,taskNo: {}, itemNo: {}, palletType: {}, basePalletType: {}", + taskNo, itemNo, palletTypeInfo.getWcsPalletType(), palletTypeInfo.getWcsBasePalletType()); + + // 4. 调用WCS接口 - rqrq + wcsApiService.pushZuPanApi(dto); + log.info("推送盘点完成数据给WCS成功 - rqrq,palletId: {}", palletId); + + } catch (Exception e) { + log.error("推送盘点完成数据给WCS失败 - rqrq,palletId: {}, 错误: {}", palletId, e.getMessage()); + // 失败时抛出异常,让事务回滚 - rqrq + throw new RuntimeException("推送盘点完成数据给WCS失败: " + e.getMessage()); + } + } + private void handleTaskAfterCount(String site, String countNo, String palletId, String username) { // 1. 查询该栈板关联的任务号 - rqrq String taskNo = baseMapper.getTaskNoByPallet(site, countNo, palletId); diff --git a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml index 51a674b..1ae6cd1 100644 --- a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml +++ b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml @@ -1040,5 +1040,14 @@ WHERE site = #{site} AND source_bill_no = #{countNo} + + +