diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java index 59e73f023..c42c28519 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java @@ -847,6 +847,10 @@ public class ReservationStockInOrderDomainService { reverseParam.setRemark("业务单号:" + businessNumber + (StringUtils.isNotEmpty(stockInOrderDO.getReverseAuditRemark()) ? ",反审原因:" + stockInOrderDO.getReverseAuditRemark() : "")); + //组织三字段:WMS幂等跳过分支(未下发单反审)写反审记录时取不到W入库单,需经Feign透传 + reverseParam.setOrganizationId(executionOrder.getOrganizationId()); + reverseParam.setOrganizationName(executionOrder.getOrganizationName()); + reverseParam.setTopOrganizationId(executionOrder.getTopOrganizationId()); reverseParam.setUpdateBy(loginUser.getUserid()); reverseParam.setUpdateByName(userRealName); AjaxResult reverseResult = wmsServiceFeign.omsReverseInOrder(reverseParam); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/service/StockInOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/service/StockInOrderDomainService.java index bfe95a855..c12e66767 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/service/StockInOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/service/StockInOrderDomainService.java @@ -913,7 +913,7 @@ public class StockInOrderDomainService { * 物料明细/作业单/任务/质检单一并软删留痕,台账节点物理删除保持与回退后库存一致 *
WMS无该单数据时幂等返回成功(OMS未下发单反审不产生WMS数据);任何校验失败抛错经 + *
WMS无该单数据时幂等返回成功(OMS未下发单反审仅落1条反审记录留痕,不产生其他WMS数据);任何校验失败抛错经 * Feign 返回,OMS侧整体回滚。反审可重试,本方法幂等。
*/ @Transactional(rollbackFor = Exception.class) @@ -930,7 +930,9 @@ public class StockInOrderDomainService { .eq(StockInOrder::getInOrderNumber, inOrderNumber) .eq(StockInOrder::getDelFlag, 1)); if (CollectionUtils.isEmpty(stockInOrders)) { - //幂等:WMS无该单数据(未下发单反审或已反审过),直接成功,保证OMS反审可重试 + //幂等:WMS无该单数据(未下发单反审或已反审过/重试),直接成功,保证OMS反审可重试; + //反审记录仍落一条留痕(入库异常页面可查),同单号已有反审记录时不再重复写(重试幂等) + saveReverseAuditAbnormalIfAbsent(stockInOrder, BigDecimal.ZERO, "未下发WMS,无WMS链路数据需回退"); return; } StockInOrder wmsOrder = stockInOrders.get(0); @@ -1167,18 +1169,46 @@ public class StockInOrderDomainService { .eq(StockInOrder::getInOrderNumber, inOrderNumber) .eq(StockInOrder::getDelFlag, 1)); - // ========== 4. 写1条入库异常【反审记录】用于记录跟踪 ========== + // ========== 4. 写1条入库异常【反审记录】用于记录跟踪(组织信息取自W入库单) ========== + StockInOrder abnormalParam = new StockInOrder(); + abnormalParam.setInOrderNumber(inOrderNumber); + abnormalParam.setOrganizationId(wmsOrder.getOrganizationId()); + abnormalParam.setOrganizationName(wmsOrder.getOrganizationName()); + abnormalParam.setTopOrganizationId(wmsOrder.getTopOrganizationId()); + abnormalParam.setRemark(reverseReason); + abnormalParam.setUpdateBy(stockInOrder.getUpdateBy()); + abnormalParam.setUpdateByName(reverseByName); + saveReverseAuditAbnormalIfAbsent(abnormalParam, inventoryTotal, + "回退库存" + inventoryTotal.stripTrailingZeros().toPlainString() + ",清理收货/上架链路数据"); + } + + /** + * 写入库异常【反审记录】(type=3/abnormalType=6,FSYC单号)。 + * 同单号已存在有效反审记录时跳过,保证"OMS重试/重复反审"不产生重复记录(幂等)。 + * + * @param stockInOrder 载荷:入库单号/反审原因(remark)/操作人(updateBy,updateByName)/组织三字段 + * @param quantity 本次反审回退的库存量(未下发WMS无库存回退时传0) + * @param sceneRemark 场景补充说明,拼入记录备注 + */ + private void saveReverseAuditAbnormalIfAbsent(StockInOrder stockInOrder, BigDecimal quantity, String sceneRemark) { + long existing = inOrderAbnormalService.count(new LambdaQueryWrapper