From 283375a3ab07a63966ae7bc65e69ad87ab452147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=BE=99=20=E7=8E=8B?= Date: Thu, 21 Nov 2024 12:00:54 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=9A=E5=9B=9E=E4=BC=A0=E8=BD=A8=E8=BF=B9=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E5=8D=95=E5=8F=B7=E5=8C=B9=E9=85=8D=E4=B8=BB?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Rabbit/TrackRefreshEventHandler.cs | 26 ++++++++--------- .../OrderAggregate/IOrderRepository.cs | 8 ++++++ .../Repositories/OrderRepository.cs | 28 +++++++++++++++++++ 3 files changed, 49 insertions(+), 13 deletions(-) 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();