|
|
|
@ -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<HandlingUnit> 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<String> 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<String, Object> 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", ""); |
|
|
|
|