diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index c53fb367..30feeffa 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -357,8 +357,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe //来源轨迹内容,第一次新增的时候使用轨迹内容表提供的 TrackStatus = trackContent.TrackStatus, TrackStatusCode = trackContent.TrackStatusCode, - TrackContent = trackContent.TrackContent, - TrackEnContent = trackContent.TrackEnContent, + TrackContent = @event.Content?? trackContent.TrackContent, + TrackEnContent = @event.EnStatus?? trackContent.TrackEnContent, //S06新增轨迹明细字段 IsVisibility = @event.IsVisibility, Source = @event.Source, diff --git a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs index 88cc1ad0..8afa7705 100644 --- a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs @@ -41,10 +41,10 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler public ConsumeOptions Options() { - return new ConsumeOptions() - { - Queue = GlobalConst.TrackRefreshSubscribe, - }; + return new ConsumeOptions() + { + Queue = GlobalConst.TrackRefreshSubscribe, + }; } public async Task Handle(IServiceProvider sp, BasicDeliverEventArgs args, ConsumeOptions options) @@ -110,18 +110,18 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler var trackToken = orderToken.SelectToken(paramConfig.TrackDetailsPath); if (trackToken is null) return; - var order = await _orderRepository.GetFirstAsync(x => - x.SubSystemId == attach.SubSystemId && x.OrderType == attach.OrderType && x.OrderNo == orderNo, - x => new - { - x.Id, - x.CustomId - }); - if (order == default) return; + //回传单号可能是主单也可能是外部单号 + //通过平台code和(外部单号/主单号)查询主单 + var order = await _orderRepository.GetTrackOrderByProviderAndOrderNo(attach.ServiceProviderCode, orderNo!); + if (order == default) + { + _logger.LogError($"请求id: {attach.ToJson()},轨迹消费失败,找不到主单,平台code:{attach.ServiceProviderCode},单号:{orderNo}"); + return; + } var context = new TrackRefreshContext { - OrderId = order.Id, + OrderId = order.MainOrderId, OrderType = attach.OrderType, OrderNo = orderNo!, ServiceProviderCode = attach.ServiceProviderCode, diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 42e67fe3..f57dc80c 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -175,7 +175,7 @@ public class TrackOrderService : ApplicationService /// /// /// - [HttpPost("GetDetailTimeline")] + [HttpPost("GetDetailTimeline")] public async Task>> GetDetailTimeline(GetDetailTimelineInput input) { var res = new UnifyResultDto>(true); @@ -242,18 +242,15 @@ public class TrackOrderService : ApplicationService { var eddUnixTimestamp = order.EstimatedDeliveryDate.HasValue ? ToUnixTimestamp(DateTime.Parse(order.EstimatedDeliveryDate.ToString()!)) : 0; - //订单没有预计签收时间,或者订单上有预计签收事件,且预计到达时间大于时间轴上所有轨迹内容的发生时间,则显示签收节点 - if (eddUnixTimestamp == 0 || (eddUnixTimestamp > 0 && res.Data != null && res.Data.All(m => m.TrackTime < eddUnixTimestamp))) + var isShowTime = eddUnixTimestamp > 0 && res.Data != null && res.Data.All(m => m.TrackTime < eddUnixTimestamp); + res.Data.Add(new GetDetailTimelineOutput() { - res.Data.Add(new GetDetailTimelineOutput() - { - Content = "签收", - IsHighlight = false, - TrackTimeZone = order.EstimatedDeliveryDate.HasValue ? $"GMT{(order.DestinationTimeZone >= 0 ? "+" : "-")}{order.DestinationTimeZone}" : "", - TrackTime = eddUnixTimestamp, - TrackTimePrefix = order.EstimatedDeliveryDate.HasValue ? "预计签收时间:" : "", - }); - } + Content = "签收", + IsHighlight = false, + TrackTimeZone = isShowTime ? $"GMT{(order.DestinationTimeZone >= 0 ? "+" : "-")}{order.DestinationTimeZone}" : "", + TrackTime = isShowTime ? eddUnixTimestamp : 0, + TrackTimePrefix = isShowTime ? "预计签收时间:" : "", + }); } return res; diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index ae172fc0..96be07a4 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -12,6 +12,14 @@ public interface IOrderRepository : IBasicRepository /// Task> GetTrackOrderPagedList(GetPageTrackOrderInputVO input); + /// + /// 通过三方平台和三方单号查询订单 + /// + /// 三方平台 + /// 三方平台单号 + /// (主单号id,客户id) + Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo); + /// /// 创建订单 /// diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 0e046330..53f6c327 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -58,6 +58,34 @@ public class OrderRepository : BasicRepository, IOrderRepository, I return pageList; } + public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo) + { + var orderList = await Context.Queryable() + .LeftJoin((a, b) => a.Id == b.OrderId && b.IsDeleted) + .Where((a, b) => a.OrderNo == orderNo + || (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo)) + .Select((a, b) => new + { + a.Id, + a.CustomId, + b.Platform, + b.OrderNumber + }) + .ToListAsync(); + + if (orderList.Count == 0) + { + return default; + } + + var order = orderList.First(); + //当出现了多条记录匹配,优先使用外部单匹配提升精确度 + var matchOrder = orderList.FirstOrDefault(x => x.Platform == serviceProvidrCode && x.OrderNumber == orderNo); + return matchOrder != null + ? (matchOrder.Id, matchOrder.CustomId) + : (order.Id, order.CustomId); + } + public async Task CreateOrderAsync(OrderEntity order) { using var tran = TransactionHelper.GetReadCommitted();