From ab5d68a42fc190f915b1a8ab688ba0f80378be96 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 13:59:56 +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 --- .../modules/api/entity/NotifyDataToWcs.java | 2 +- .../check/mapper/PhysicalInventoryMapper.java | 9 + .../impl/PhysicalInventoryServiceImpl.java | 165 ++++++++++++++++-- .../mapper/check/PhysicalInventoryMapper.xml | 8 + 4 files changed, 173 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java b/src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java index 9668732..a4851ad 100644 --- a/src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java +++ b/src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java @@ -13,6 +13,6 @@ public class NotifyDataToWcs { private Integer itemNo; //任务行号 private String orderNo;//生产订单 private String orderPartNo;//订单料号 - private Integer orderType;//订单类型 1-生产订单 2-分切订单 3-销售发货 + private Integer orderType;//订单类型 1-生产订单 2-分切订单 3-销售发货 4-手工盘点 5-循环盘点 6-委外订单 private List materialRequisitions; } 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 b8b7f07..daa0eb7 100644 --- a/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java +++ b/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java @@ -589,4 +589,13 @@ public interface PhysicalInventoryMapper extends BaseMapper { void updateLastPandianHU(@Param("site") String site,@Param("lastPandian") Date lastPandian); void updateSysIfCount(@Param("site") String site,@Param("value") String value); + + /** + * @Description 统计该盘点单已有的任务单数量(用于计算流水号)- rqrq + * @param site 工厂编码 + * @param countNo 盘点单号 + * @return int 任务单数量 + * @author rqrq + */ + int countOrderTaskByCountNo(@Param("site") String site, @Param("countNo") String countNo); } 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 dceb8ea..f258ea2 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 @@ -13,6 +13,9 @@ import com.gaotao.modules.check.mapper.PhysicalInventoryMapper; import com.gaotao.modules.check.service.PhysicalInventoryService; import com.gaotao.modules.trans.entity.TransNoControl; import com.gaotao.modules.trans.service.TransNoControlService; +import com.gaotao.modules.api.entity.NotifyDataToWcs; +import com.gaotao.modules.api.entity.NotifyDataToWcsPalletList; +import com.gaotao.modules.api.service.WcsApiService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,6 +44,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImplTODO: WCS接口待确认,暂时留空

* + *

参数说明:

+ *
    + *
  • notifyNo = 盘点单号 + "-" + 流水号(流水号是这个盘点单的第几个任务单)
  • + *
  • taskNo = 方法里创建的任务单单号
  • + *
  • itemNo = 任务单行号(固定为1)
  • + *
  • orderNo = 盘点单号
  • + *
  • orderPartNo = 空字符串
  • + *
  • orderType = 循环盘点是5,手工盘点是4
  • + *
  • materialRequisitions = 栈板列表,每个栈板一条,materials传空集合
  • + *
+ * + * @param site 工厂编码 + * @param countNo 盘点单号 * @param taskNo 任务号 * @param pallets 栈板列表 + * @author rqrq + */ + private void pushToWcs(String site, String countNo, String taskNo, List pallets) { + log.info("推送给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}", site, countNo, taskNo, pallets.size()); + + try { + // 1. 查询盘点类型,确定orderType - rqrq + String countType = baseMapper.getCountType(site, countNo); + int orderType = CountHeader.COUNT_TYPE_CYCLE.equals(countType) ? 5 : 4; // 循环盘点=5,手工盘点=4 + log.info("盘点类型: {}, orderType: {}", countType, orderType); + + // 2. 计算流水号(查询该盘点单已有多少个任务单)- rqrq + int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo); + String notifyNo = countNo + "-" + taskCount; + log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo); + + // 3. 构建WCS数据 - rqrq + NotifyDataToWcs wcsData = new NotifyDataToWcs(); + wcsData.setSite(site != null ? site.trim() : null); + wcsData.setNotifyNo(notifyNo); + wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null); + wcsData.setItemNo(1); // 任务单行号固定为1 + wcsData.setOrderNo(countNo != null ? countNo.trim() : null); + wcsData.setOrderPartNo(""); // 传空 + wcsData.setOrderType(orderType); + + // 4. 构建栈板列表 - rqrq + List palletList = new ArrayList<>(); + for (CountPalletData pallet : pallets) { + NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList(); + palletData.setPalletCode(pallet.getPalletId() != null ? pallet.getPalletId().trim() : null); + palletData.setMaterials(new ArrayList<>()); // materials传空集合 + palletList.add(palletData); + } + wcsData.setMaterialRequisitions(palletList); + log.info("构建WCS数据完成,栈板数:{}", palletList.size()); + + // 5. 调用WCS接口 - rqrq + log.info("开始调用WCS接口 - rqrq"); + wcsApiService.pushNotifyToWcsApi(wcsData); + log.info("WCS接口调用成功 - rqrq"); + + } catch (Exception e) { + String errorMsg = e.getMessage(); + log.error("WCS接口调用失败:{} - rqrq", errorMsg); + + // 超时错误直接抛出 - rqrq + if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) { + throw new RuntimeException("WCS接口调用超时:" + errorMsg); + } + + // 其他错误也抛出,让调用方处理 - rqrq + throw new RuntimeException("WCS接口调用失败:" + errorMsg); + } + + log.info("推送给WCS结束"); + } + + /** + * @Description 推送复核任务给WCS - rqrq + * + *

参数说明:

+ *
    + *
  • notifyNo = 盘点单号 + "-" + 流水号(流水号是这个盘点单的第几个任务单)
  • + *
  • taskNo = 方法里创建的任务单单号
  • + *
  • itemNo = 任务单行号(固定为1)
  • + *
  • orderNo = 盘点单号
  • + *
  • orderPartNo = 空字符串
  • + *
  • orderType = 循环复核是5,手工复核是4
  • + *
  • materialRequisitions = 栈板列表,每个栈板一条,materials传空集合
  • + *
+ * + * @param site 工厂编码 + * @param countNo 盘点单号 + * @param taskNo 任务号 + * @param palletIds 栈板ID列表 + * @param reviewType 复核类型(MANUAL/CYCLE) + * @author rqrq */ - private void pushToWcs(String taskNo, List pallets) { - log.info("推送给WCS开始,taskNo: {}, 栈板数量: {}", taskNo, pallets.size()); - // TODO: WCS接口待确认 - rqrq - // 调用WCS接口推送出库任务 - log.info("推送给WCS结束(接口待实现)"); + private void pushReviewToWcs(String site, String countNo, String taskNo, List palletIds, String reviewType) { + log.info("推送复核任务给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}, reviewType: {}", + site, countNo, taskNo, palletIds.size(), reviewType); + + try { + // 1. 根据复核类型确定orderType - rqrq + int orderType = "MANUAL".equals(reviewType) ? 4 : 5; // 循环复核=5,手工复核=4 + log.info("复核类型: {}, orderType: {}", reviewType, orderType); + + // 2. 计算流水号(查询该盘点单已有多少个任务单)- rqrq + int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo); + String notifyNo = countNo + "-" + taskCount; + log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo); + + // 3. 构建WCS数据 - rqrq + NotifyDataToWcs wcsData = new NotifyDataToWcs(); + wcsData.setSite(site != null ? site.trim() : null); + wcsData.setNotifyNo(notifyNo); + wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null); + wcsData.setItemNo(1); // 任务单行号固定为1 + wcsData.setOrderNo(countNo != null ? countNo.trim() : null); + wcsData.setOrderPartNo(""); // 传空 + wcsData.setOrderType(orderType); + + // 4. 构建栈板列表 - rqrq + List palletList = new ArrayList<>(); + for (String palletId : palletIds) { + NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList(); + palletData.setPalletCode(palletId != null ? palletId.trim() : null); + palletData.setMaterials(new ArrayList<>()); // materials传空集合 + palletList.add(palletData); + } + wcsData.setMaterialRequisitions(palletList); + log.info("构建WCS数据完成,栈板数:{}", palletList.size()); + + // 5. 调用WCS接口 - rqrq + log.info("开始调用WCS接口 - rqrq"); + wcsApiService.pushNotifyToWcsApi(wcsData); + log.info("WCS接口调用成功 - rqrq"); + + } catch (Exception e) { + String errorMsg = e.getMessage(); + log.error("WCS接口调用失败:{} - rqrq", errorMsg); + + // 超时错误直接抛出 - rqrq + if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) { + throw new RuntimeException("WCS接口调用超时:" + errorMsg); + } + + // 其他错误也抛出,让调用方处理 - rqrq + throw new RuntimeException("WCS接口调用失败:" + errorMsg); + } + + log.info("推送复核任务给WCS结束"); } /** @@ -1572,8 +1717,8 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl update sysParameters set paraValue=#{value} where site=#{site} and parameterId='10001' + + +