Browse Source

跨site移库

master
常熟吴彦祖 15 hours ago
parent
commit
615cb30f08
  1. 24
      src/main/java/com/gaotao/modules/warehouse/service/impl/CrossSiteHuTransferServiceImpl.java

24
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<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", "");

Loading…
Cancel
Save