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'
+
+
+