diff --git a/src/TrackCenter.Application/Services/ProvideServices/OrderService.V2.cs b/src/TrackCenter.Application/Services/ProvideServices/OrderService.V2.cs index cbcfc734..af38574f 100644 --- a/src/TrackCenter.Application/Services/ProvideServices/OrderService.V2.cs +++ b/src/TrackCenter.Application/Services/ProvideServices/OrderService.V2.cs @@ -23,7 +23,9 @@ public partial class OrderService x.AppKey == AppKey && x.OrderType == TrackOrderType.小包 && x.OrderNo == input.OrderNo); if (order != null) { + var existing = order; order = await BuiltOrder(input); + ApplyUpsertOntoExisting(order, existing, resetTrackInfoWhenTrackNoChanged: true); await _orderRepository.UpdateOrderAsync(order); @@ -71,7 +73,9 @@ public partial class OrderService x.AppKey == AppKey && x.OrderType == TrackOrderType.大包 && x.OrderNo == input.BagNo); if (order != null) { + var existing = order; order = await BuiltOrder(input); + ApplyUpsertOntoExisting(order, existing, resetTrackInfoWhenTrackNoChanged: false); await _orderRepository.UpdateOrderAsync(order); @@ -119,7 +123,9 @@ public partial class OrderService x.AppKey == AppKey && x.OrderType == TrackOrderType.主单 && x.OrderNo == input.MasterNo); if (order != null) { + var existing = order; order = await BuiltOrder(input); + ApplyUpsertOntoExisting(order, existing, resetTrackInfoWhenTrackNoChanged: false); await _orderRepository.UpdateOrderAsync(order); @@ -260,6 +266,41 @@ public partial class OrderService return order; } + /// + /// 合并到已有订单:保留 Id;跟踪号未变则保留轨迹摘要,变更则清空便于重拉。 + /// + private static void ApplyUpsertOntoExisting( + OrderEntity built, + OrderEntity existing, + bool resetTrackInfoWhenTrackNoChanged) + { + built.Id = existing.Id; + + var previousTrackNo = existing.TrackNo?.Trim() ?? string.Empty; + var nextTrackNo = built.TrackNo?.Trim() ?? string.Empty; + var trackNoChanged = !string.Equals(previousTrackNo, nextTrackNo, StringComparison.Ordinal); + + if (resetTrackInfoWhenTrackNoChanged && trackNoChanged) + { + built.ResetTrackInfo(); + return; + } + + built.IsCompleted = existing.IsCompleted; + built.LatestPushTrackCode = existing.LatestPushTrackCode; + built.LatestPushTime = existing.LatestPushTime; + built.LatestPushError = existing.LatestPushError; + built.LatestTrackStatus = existing.LatestTrackStatus; + built.LatestTrackContent = existing.LatestTrackContent; + built.LatestTrackEnContent = existing.LatestTrackEnContent; + built.LatestTrackTime = existing.LatestTrackTime; + built.LatestTrackTimeZone = existing.LatestTrackTimeZone; + built.LatestTrackPlace = existing.LatestTrackPlace; + built.EstimatedDeliveryDate = existing.EstimatedDeliveryDate; + built.DestinationTimeZone = existing.DestinationTimeZone; + built.QuestionType = existing.QuestionType; + } + private static OrderPullStatusEntity CreateOrderPullStatus(TrackPullConfigEntity config, OrderEntity order) { var status = new OrderPullStatusEntity diff --git a/src/TrackCenter.Repository/Repositories/OrderRepository.cs b/src/TrackCenter.Repository/Repositories/OrderRepository.cs index 672c2402..3f62cdd7 100644 --- a/src/TrackCenter.Repository/Repositories/OrderRepository.cs +++ b/src/TrackCenter.Repository/Repositories/OrderRepository.cs @@ -254,11 +254,34 @@ public class OrderRepository : BasicRepository, IOrderRepository, I { using var tran = TransactionHelper.GetReadCommitted(); - // 更新订单主表 - await UpdateAsync(order, x => new + // 注意:UpdateAsync(entity, cols) 的 cols 是 IgnoreColumns; + // 指定要更新的列必须用 UpdateColumnAsync。 + await UpdateColumnAsync(order, x => new { x.Customer, x.AppKey, + x.TrackNo, + x.ThirdPartyOrderNumber, + x.Channel, + x.ProductCode, + x.ServiceProviderCode, + x.ArrivalCountry, + x.ArrivalProvince, + x.ArrivalPostCode, + x.ArrivalCity, + x.ArrivalEmail, + x.LeaveCountry, + x.LeaveCity, + x.IsTransit, + x.IsCompleted, + x.LatestTrackStatus, + x.LatestTrackContent, + x.LatestTrackEnContent, + x.LatestTrackTime, + x.LatestTrackTimeZone, + x.LatestTrackPlace, + x.EstimatedDeliveryDate, + x.DestinationTimeZone, }); // 更新订单拉取状态 @@ -280,11 +303,33 @@ public class OrderRepository : BasicRepository, IOrderRepository, I try { - // 更新订单主表 + // 更新订单主表(与 UpdateOrderAsync 字段对齐) await UpdateRangeAsync(orders, x => new { x.Customer, - x.AppKey + x.AppKey, + x.TrackNo, + x.ThirdPartyOrderNumber, + x.Channel, + x.ProductCode, + x.ServiceProviderCode, + x.ArrivalCountry, + x.ArrivalProvince, + x.ArrivalPostCode, + x.ArrivalCity, + x.ArrivalEmail, + x.LeaveCountry, + x.LeaveCity, + x.IsTransit, + x.IsCompleted, + x.LatestTrackStatus, + x.LatestTrackContent, + x.LatestTrackEnContent, + x.LatestTrackTime, + x.LatestTrackTimeZone, + x.LatestTrackPlace, + x.EstimatedDeliveryDate, + x.DestinationTimeZone, }); var orderIds = orders.Select(x => x.Id).ToHashSet();