diff --git a/src/Oms.Application/Integrations/SmallBagTrack/SmallBagTrackUpsertRequestBuilder.cs b/src/Oms.Application/Integrations/SmallBagTrack/SmallBagTrackUpsertRequestBuilder.cs index 19eef09..53a5d17 100644 --- a/src/Oms.Application/Integrations/SmallBagTrack/SmallBagTrackUpsertRequestBuilder.cs +++ b/src/Oms.Application/Integrations/SmallBagTrack/SmallBagTrackUpsertRequestBuilder.cs @@ -68,10 +68,18 @@ internal sealed class SmallBagTrackUpsertRequestBuilder( } /// - /// 仅取运单跟踪号;无值则空串,不回落运单号/客户单号等。 + /// 轨迹侧 TrackNo 必填。有真实跟踪号用跟踪号;尚未下发时先用客户单号占位,后续有 TrackNo 再 Upsert 更新。 /// - internal static string ResolveTrackNo(Order order) => - order.TrackNo?.Trim() ?? string.Empty; + internal static string ResolveTrackNo(Order order) + { + var trackNo = order.TrackNo?.Trim() ?? string.Empty; + if (!string.IsNullOrWhiteSpace(trackNo)) + { + return trackNo; + } + + return order.ClientNo?.Trim() ?? string.Empty; + } internal static string? PickSupplierCodeFromProviders( IEnumerable providers, diff --git a/src/Oms.Tests/SmallBagTrackUpsertRequestBuilderTests.cs b/src/Oms.Tests/SmallBagTrackUpsertRequestBuilderTests.cs index df70e79..47147c0 100644 --- a/src/Oms.Tests/SmallBagTrackUpsertRequestBuilderTests.cs +++ b/src/Oms.Tests/SmallBagTrackUpsertRequestBuilderTests.cs @@ -20,14 +20,28 @@ public class SmallBagTrackUpsertRequestBuilderTests } [Fact] - public void ResolveTrackNo_EmptyWhenTrackNoMissing() + public void ResolveTrackNo_FallsBackToClientNoWhenTrackNoMissing() { var order = new Order { ServiceNo = "IDE2607221859123456", + ClientNo = "CNO-001", TrackNo = null }; + Assert.Equal("CNO-001", SmallBagTrackUpsertRequestBuilder.ResolveTrackNo(order)); + } + + [Fact] + public void ResolveTrackNo_EmptyWhenTrackNoAndClientNoMissing() + { + var order = new Order + { + ServiceNo = "IDE2607221859123456", + TrackNo = null, + ClientNo = null + }; + Assert.Equal(string.Empty, SmallBagTrackUpsertRequestBuilder.ResolveTrackNo(order)); }