From 615cb30f087c4c88374a0fe588f9528ae45b86ed 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, 11 Nov 2026 13:15:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8site=E7=A7=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CrossSiteHuTransferServiceImpl.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gaotao/modules/warehouse/service/impl/CrossSiteHuTransferServiceImpl.java b/src/main/java/com/gaotao/modules/warehouse/service/impl/CrossSiteHuTransferServiceImpl.java index 78a44bbb..e1eab1e2 100644 --- a/src/main/java/com/gaotao/modules/warehouse/service/impl/CrossSiteHuTransferServiceImpl.java +++ b/src/main/java/com/gaotao/modules/warehouse/service/impl/CrossSiteHuTransferServiceImpl.java @@ -220,7 +220,9 @@ public class CrossSiteHuTransferServiceImpl implements CrossSiteHuTransferServic final String revisionToWrite = destRevision; String[] transNos = groupTransaction.execute(status -> { String[] numbers = persistSuccessfulGroup(request, group, groupIds, revisionToWrite, userId, userName); - callCrossSiteTransferApi(request, first, quantity, revisionToWrite, ifsAttempted); + // 发给IFS的是标签当前版本。目的版本要等接口明确成功后再回写,失败由本组事务回滚。- rqrq + callCrossSiteTransferApi(request, first, quantity, ifsAttempted); + applyDestinationRevision(request, groupIds, revisionToWrite); ifsConfirmed.set(true); return numbers; }); @@ -294,7 +296,7 @@ public class CrossSiteHuTransferServiceImpl implements CrossSiteHuTransferServic * @param request 含来源、目标与操作人;写失败时不调用IFS - rqrq * @param group 来源标签快照;写前加锁验证 - rqrq * @param unitIds 当前组主键;写入行数必须完全匹配 - rqrq - * @param destRevision IFS查询的目标合同版本;仅入库单和目标标签使用 - rqrq + * @param destRevision 目的合同工程版本。入库单和入库子明细记这个版本;标签表要等IFS成功后再改。- rqrq * @return 当前组STO、STI单号 - rqrq */ private String[] persistSuccessfulGroup(CrossSiteHuTransferRequest request, List group, @@ -352,12 +354,19 @@ public class CrossSiteHuTransferServiceImpl implements CrossSiteHuTransferServic throw new XJException("更新标签site数量不符,期望" + unitIds.size() + ",实际" + siteRows); } syncHaiAnPalletDetailSubSite(request, unitIds); + return new String[]{stoNo, stiNo}; + } + + /** + * IFS移库已返回成功后,把本组标签工程版本改成目的合同版本。site已在本组事务内改到目标site,所以按目标site更新。行数不符则回滚,避免标签仍停留在来源版本。- rqrq + */ + private void applyDestinationRevision(CrossSiteHuTransferRequest request, List unitIds, String destRevision) { + // 入参是目标site、目的版本和本组标签号。0行或行数不符说明标签状态变了,整组回滚。- rqrq int revisionRows = crossSiteHuTransferMapper.updateHandlingUnitEngChgLevel( request.getToSite(), destRevision, request.getCreatedBy(), unitIds); if (revisionRows != unitIds.size()) { throw new XJException("更新标签工程版本数量不符,期望" + unitIds.size() + ",实际" + revisionRows); } - return new String[]{stoNo, stiNo}; } /** @@ -665,14 +674,14 @@ public class CrossSiteHuTransferServiceImpl implements CrossSiteHuTransferServic /** * 按托盘自动移库的接口字段调用IFS;明确返回IFSUpdated才允许提交当前组WMS事务。- rqrq * 有内容的业务错误响应使本组回滚后继续;超时、网络异常或空响应结果不明,调用方停止后续组。- rqrq + * EngChgLevel 用来源标签 handling_unit.eng_chg_level。空版本按分组口径记成 1。目的合同版本不放进这个报文。- rqrq * @param request 来源与目标小site;两侧库位均保持标签原库位 - rqrq - * @param first 当前库存主键分组的首张标签;批次、WDR、失效日期取自本组 - rqrq + * @param first 当前库存主键分组的首张标签;批次、WDR、失效日期和当前版本取自本组 - rqrq * @param quantity 当前组数量合计;必须大于0 - rqrq - * @param destRevision 目标合同工程版本,来自GetPartRevision - rqrq * @param ifsAttempted 发起HTTP调用前置true;回滚异常掩盖原始异常时用于保守判定 - rqrq */ private void callCrossSiteTransferApi(CrossSiteHuTransferRequest request, HandlingUnit first, - BigDecimal quantity, String destRevision, AtomicBoolean ifsAttempted) { + BigDecimal quantity, AtomicBoolean ifsAttempted) { String wdr = first.getWdr() == null ? "*" : first.getWdr(); Map params = new LinkedHashMap<>(); params.put("ifsDBName", ifsDBName); @@ -690,7 +699,8 @@ public class CrossSiteHuTransferServiceImpl implements CrossSiteHuTransferServic params.put("SerialNo", "*"); params.put("ConfigurationID", "*"); params.put("ActivitySequenceNo", 0); - params.put("EngChgLevel", destRevision); + // 移库报文带标签当前版本。目的版本 destRevision 只在接口成功后回写标签。- rqrq + params.put("EngChgLevel", normalizedRevision(first.getEngChgLevel())); params.put("HandlingUntiID", 0); params.put("ToWdrNo", wdr); params.put("AvailabilityControlID", "");