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.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();