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));
}