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