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 { * 物料明细/作业单/任务/质检单一并软删留痕,台账节点物理删除保持与回退后库存一致 *
  • 写1条入库异常【反审记录】(in_order_abnormal type=3/abnormalType=6) 用于记录跟踪
  • * - *

    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() + .eq(InOrderAbnormal::getInOrderNumber, stockInOrder.getInOrderNumber()) + .eq(InOrderAbnormal::getAbnormalType, 6) + .eq(InOrderAbnormal::getDelFlag, 1)); + if (existing > 0) { + return; + } InOrderAbnormal reverseAbnormal = new InOrderAbnormal(); - reverseAbnormal.setOrganizationId(wmsOrder.getOrganizationId()); - reverseAbnormal.setOrganizationName(wmsOrder.getOrganizationName()); - reverseAbnormal.setTopOrganizationId(wmsOrder.getTopOrganizationId()); - reverseAbnormal.setInOrderNumber(inOrderNumber); - reverseAbnormal.setAbnormalReason(StringUtils.isEmpty(reverseReason) ? "入库业务单反审" : "入库业务单反审:" + reverseReason); - reverseAbnormal.setQuantity(inventoryTotal); - reverseAbnormal.setRemark("入库业务单反审:回退库存" + inventoryTotal.stripTrailingZeros().toPlainString() - + ",清理收货/上架链路数据"); + reverseAbnormal.setOrganizationId(stockInOrder.getOrganizationId()); + reverseAbnormal.setOrganizationName(stockInOrder.getOrganizationName()); + reverseAbnormal.setTopOrganizationId(stockInOrder.getTopOrganizationId()); + reverseAbnormal.setInOrderNumber(stockInOrder.getInOrderNumber()); + reverseAbnormal.setAbnormalReason(StringUtils.isEmpty(stockInOrder.getRemark()) + ? "入库业务单反审" : "入库业务单反审:" + stockInOrder.getRemark()); + reverseAbnormal.setQuantity(quantity == null ? BigDecimal.ZERO : quantity); + reverseAbnormal.setRemark("入库业务单反审:" + (StringUtils.isEmpty(sceneRemark) ? "" : sceneRemark)); reverseAbnormal.setCreateBy(stockInOrder.getUpdateBy() == null ? 0L : stockInOrder.getUpdateBy()); - reverseAbnormal.setCreateByName(StringUtils.isEmpty(reverseByName) ? "system" : reverseByName); + reverseAbnormal.setCreateByName(StringUtils.isEmpty(stockInOrder.getUpdateByName()) ? "system" : stockInOrder.getUpdateByName()); inOrderAbnormalService.genReverseAuditAbnormal(reverseAbnormal); } diff --git a/mhd_wms/src/main/resources/mapper/stockReceiptOrder/StockReceiptOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockReceiptOrder/StockReceiptOrderMapper.xml index 3987b65d0..ef2f4463b 100644 --- a/mhd_wms/src/main/resources/mapper/stockReceiptOrder/StockReceiptOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockReceiptOrder/StockReceiptOrderMapper.xml @@ -167,7 +167,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from stock_receipt_order a - LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number and a.DEL_FLAG = 1 and b.DEL_FLAG = 1 + + LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number + + + and a.DEL_FLAG = 2 and b.DEL_FLAG = 2 + + + and a.DEL_FLAG = 1 and b.DEL_FLAG = 1 + + diff --git a/mhd_wms/src/main/resources/mapper/stockShelfOrder/StockShelfOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockShelfOrder/StockShelfOrderMapper.xml index 00f904ba3..108b25ec3 100644 --- a/mhd_wms/src/main/resources/mapper/stockShelfOrder/StockShelfOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockShelfOrder/StockShelfOrderMapper.xml @@ -158,7 +158,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from stock_shelf_order a - LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number and a.DEL_FLAG = 1 and b.DEL_FLAG = 1 + + LEFT JOIN stock_in_order b ON a.in_order_number = b.in_order_number + + + and a.DEL_FLAG = 2 and b.DEL_FLAG = 2 + + + and a.DEL_FLAG = 1 and b.DEL_FLAG = 1 + +