From 264c3a5dcbef34a6693bf0bc2381e14283e3cf04 Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Tue, 20 Oct 2026 10:56:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BC=96=E8=BE=91=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E8=B7=9F=E8=B8=AA=E5=8F=B7=E6=94=B9=E4=B8=BA=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=20Upsert=EF=BC=8C=E4=B8=8D=E5=86=8D=E5=8F=91=20Outbox=20?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../Services/Orders/OrderService.OrderEdit.cs | 7 ++---- .../Orders/OrderService.ParcelBilling.cs | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs b/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs index 88b9ece..88a1ad6 100644 --- a/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs +++ b/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs @@ -1,7 +1,5 @@ -using System.Data; using System.Globalization; using Fake.Application; -using Fake.UnitOfWork; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Oms.Application.Dtos.Channels; @@ -26,10 +24,9 @@ public partial class OrderService /// /// 编辑订单详情(基本信息、发件人、收件人)。 - /// 跟踪号变更时会写轨迹 Upsert Outbox,须事务性 UoW。 + /// 跟踪号变更时同步调用轨迹 Upsert(不走 Outbox)。 /// [HttpPost("/order/update")] - [UnitOfWork(IsTransactional = true, IsolationLevel = IsolationLevel.ReadCommitted)] public async Task UpdateOrderDetailAsync(OrderUpdateInput input) { var order = await GetOrderOrThrowAsync(input.Id); @@ -162,7 +159,7 @@ public partial class OrderService if (input.TrackNo != null) { - await EnqueueSmallBagTrackUpsertWhenTrackNoChangedAsync(order, previousTrackNo); + await SyncSmallBagTrackUpsertWhenTrackNoChangedAsync(order, previousTrackNo); } return (await MapOrderOutputsAsync([order])).First(); diff --git a/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs b/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs index abaa68f..33d7ea0 100644 --- a/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs +++ b/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs @@ -3234,6 +3234,30 @@ public partial class OrderService await EnqueueSmallBagTrackUpsertAsync(order, customer: null, receiver: null, appendInitialTrack); } + /// + /// 跟踪号变更时同步 Upsert 轨迹(编辑订单详情用,避免依赖 Outbox/事务 UoW)。 + /// 失败仅记日志,不阻断订单保存。 + /// + private async Task SyncSmallBagTrackUpsertWhenTrackNoChangedAsync( + Order order, + string? previousTrackNo, + bool appendInitialTrack = true) + { + var next = order.TrackNo?.Trim() ?? string.Empty; + var prev = previousTrackNo?.Trim() ?? string.Empty; + if (string.IsNullOrWhiteSpace(next) + || string.Equals(next, prev, StringComparison.Ordinal) + || string.IsNullOrWhiteSpace(order.ServiceNo)) + { + return; + } + + var request = await BuildSmallBagTrackUpsertRequestAsync(order); + request.AppendInitialTrackOnSuccess = appendInitialTrack; + ApplyTrackAuthorization(request); + await SmallBagTrackOrderClient.UpsertAsync(request); + } + private async Task EnqueueLifecycleTrackAppendAsync(Order order, string trackCode) { if (string.IsNullOrWhiteSpace(order.ServiceNo))