diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java index aada73d53..bde5e11a3 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java @@ -409,7 +409,7 @@ public class ReservationStockOutOrderDomainService { String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null ? loginUser.getUserPo().getUserName() : (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername()); - return stockOutOrderService.update(null, new UpdateWrapper().lambda() + boolean updateResult = stockOutOrderService.update(null, new UpdateWrapper().lambda() .set(ReservationStockOutOrder::getReservationAuditId, loginUser.getUserid()) .set(ReservationStockOutOrder::getReservationAuditName, userRealName) .set(ReservationStockOutOrder::getReservationAuditTime, new Date()) @@ -418,6 +418,67 @@ public class ReservationStockOutOrderDomainService { .set(ReservationStockOutOrder::getUpdateTime, new Date()) .set(ReservationStockOutOrder::getIssueStatus, issueStatus) .in(ReservationStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds())); + + //审核通过时同步线路/车次到关联的运输业务单 + if (issueStatus == 2) { + syncLineInfoToBusinessOrder(stockOutOrderDO.getOutOrderIds()); + } + return updateResult; + } + + /** + * 将出库业务单的线路/车次同步到关联的运输业务单(审核通过/下发/执行并下发时触发): + * 关联链路 出库单号->reservation_delivery_details_link.invoiceNumber + * ->business_delivery_details_link.invoiceNumber->orderId(主单/未拆单)/subOrderId(拆单子单) + * 出库业务单与运输业务单为两张独立表,此前无字段同步逻辑,线路车次以出库业务单为源头覆盖; + * 同步失败仅记日志,不阻断主流程。 + */ + private void syncLineInfoToBusinessOrder(List outOrderIds) { + try { + for (Long outOrderId : outOrderIds) { + ReservationStockOutOrder byId = stockOutOrderService.getById(outOrderId); + if (byId == null || StringUtils.isBlank(byId.getLineCode())) { + continue; + } + List deliveryLinks = reservationDeliveryDetailsLinkService.list( + new LambdaQueryWrapper() + .eq(ReservationDeliveryDetailsLink::getOrderNumber, byId.getOutOrderNumber())); + Set syncedBusinessOrderIds = new HashSet<>(); + for (ReservationDeliveryDetailsLink deliveryLink : deliveryLinks) { + if (StringUtils.isBlank(deliveryLink.getInvoiceNumber())) { + continue; + } + List businessLinks = businessDeliveryDetailsLinkService.list( + new LambdaQueryWrapper() + .eq(BusinessDeliveryDetailsLink::getInvoiceNumber, deliveryLink.getInvoiceNumber())); + //未拆单时orderId即运输业务单本身;拆单后orderId为主单、subOrderId为子单,两者均同步 + //(若只同步subOrderId,出库业务单先于运输业务单拆单时subOrderId为空,同步落空, + // 且主单无值导致后续拆单子单也拷贝不到) + for (BusinessDeliveryDetailsLink businessLink : businessLinks) { + for (Object bizOrderIdObj : new Object[]{businessLink.getOrderId(), businessLink.getSubOrderId()}) { + if (bizOrderIdObj == null) { + continue; + } + String bizOrderId = String.valueOf(bizOrderIdObj); + if (!syncedBusinessOrderIds.add(bizOrderId)) { + continue; + } + BusinessDocumentOrder businessOrder = businessDocumentOrderMapper.selectOne( + new LambdaQueryWrapper() + .eq(BusinessDocumentOrder::getId, bizOrderId)); + if (businessOrder != null) { + businessOrder.setLineCode(byId.getLineCode()); + businessOrder.setLineName(byId.getLineName()); + businessOrder.setShuttleNo(byId.getShuttleNo()); + businessDocumentOrderMapper.updateById(businessOrder); + } + } + } + } + } + } catch (Exception e) { + log.error("同步线路/车次到运输业务单失败, outOrderIds={}, error={}", outOrderIds, e.getMessage(), e); + } } /** @@ -444,6 +505,9 @@ public class ReservationStockOutOrderDomainService { .set(ReservationStockOutOrder::getUpdateTime, new Date()) .in(ReservationStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds())); + //下发时同步线路/车次到关联的运输业务单(与审核通过触发同一同步,覆盖式) + syncLineInfoToBusinessOrder(stockOutOrderDO.getOutOrderIds()); + //todo下发推送到wms List inOrderIds = stockOutOrderDO.getOutOrderIds(); @@ -608,6 +672,9 @@ public class ReservationStockOutOrderDomainService { .set(ReservationStockOutOrder::getUpdateTime, new Date()) .in(ReservationStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds())); + //下发时同步线路/车次到关联的运输业务单(与审核通过触发同一同步,覆盖式) + syncLineInfoToBusinessOrder(stockOutOrderDO.getOutOrderIds()); + //todo下发推送到wms List inOrderIds = stockOutOrderDO.getOutOrderIds();