From 3fe2b64a764cfc2cf8d3028bdf572b8f455674a7 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Fri, 21 Feb 2025 11:31:15 +0800
Subject: [PATCH] =?UTF-8?q?perf:=E4=BC=98=E5=8C=96=E8=BD=A8=E8=BF=B9?=
=?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=86=97=E4=BD=99=E7=AC=AC=E4=B8=89=E6=96=B9?=
=?UTF-8?q?=E5=8D=95=E5=8F=B7=E4=BB=A5=E6=8F=90=E9=AB=98=E6=80=A7=E8=83=BD?=
=?UTF-8?q?=EF=BC=88=E5=8E=9F=EF=BC=9A=E4=BD=BF=E7=94=A8=E6=9C=AC=E5=9C=B0?=
=?UTF-8?q?=E7=BC=93=E5=AD=98=EF=BC=89=20pref:=E6=8E=A5=E5=8F=A3=E5=8F=8D?=
=?UTF-8?q?=E5=8F=82=E5=A2=9E=E5=8A=A0=EF=BC=8C=E6=9F=A5=E8=AF=A2=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E8=AE=A2=E5=8D=95=E5=A2=9E=E5=8A=A0=E8=BD=A8=E8=BF=B9?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9C=80=E6=96=B0=E8=BD=A8=E8=BF=B9=E6=97=B6?=
=?UTF-8?q?=E5=8C=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/GetPageTrackOrderInput.cs | 10 ++++
.../TrackChangeAfterUpdateOrderEvent.cs | 5 ++
...TrackChangeAfterUpdateOrderEventHandler.cs | 1 +
.../EventHandlers/TrackUpsertEventHandler.cs | 1 +
.../Services/ProvideServices/OrderService.cs | 2 +
.../Aggregates/OrderAggregate/OrderEntity.cs | 37 ++++++++++++
.../Dtos/Order/GetPageTrackOrderInputVO.cs | 10 ++++
.../Repositories/OrderRepository.cs | 58 ++++---------------
8 files changed, 76 insertions(+), 48 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
index 324e9c48..2af82f3e 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
@@ -93,6 +93,11 @@ public class TrackOrderDto
///
public string? OrderDetails { get; set; }
+ ///
+ /// 最新轨迹状态
+ ///
+ public string? NewestTrackStatus { get; set; }
+
///
/// 最新轨迹内容
///
@@ -113,6 +118,11 @@ public class TrackOrderDto
///
public DateTime? NewestTrackTime { get; set; }
+ ///
+ /// 最新轨迹时区
+ ///
+ public float? NewestTrackTimeZone { get; set; }
+
///
/// 是否完结
///
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
index 90c807d0..07242767 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
@@ -12,6 +12,11 @@ public class TrackChangeAfterUpdateOrderEvent
///
public bool IsCompleted { get; set; }
+ ///
+ /// 轨迹状态
+ ///
+ public string TrackStatus { get; set; } = null!;
+
///
/// 轨迹内容
///
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
index e3a98037..5a0986d4 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
@@ -50,6 +50,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
order.IsCompleted = @event.IsCompleted;
}
+ order.LatestTrackStatus = @event.TrackStatus;
order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace;
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 8a657ad2..9bc5140a 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -205,6 +205,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
{
OrderIds = canNextOrderIds.ToArray(),
IsCompleted = trackContent.IsCompleted,
+ TrackStatus = trackContent.TrackStatus,
TrackContent = trackContent.TrackContent,
TrackEnContent = trackContent.TrackEnContent,
TrackPlace = @event.TrackPlace,
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index ed613ffb..eae2c9b3 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -77,6 +77,7 @@ public partial class OrderService : ApplicationService, IOrderService
order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos);
order.OrderPlatformNumbers = BuiltOrderPlatformNumbers(input.PullConfigInfos);
order.TemplateCodes = input.TemplateCodes == null ? null : string.Join(',', input.TemplateCodes);
+ order.SetThirdPartyOrderNumber(order.OrderPlatformNumbers);
var orderId = await _orderRepository.CreateOrderAsync(order);
@@ -132,6 +133,7 @@ public partial class OrderService : ApplicationService, IOrderService
order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos);
order.OrderPlatformNumbers = BuiltOrderPlatformNumbers(input.PullConfigInfos);
order.TemplateCodes = input.TemplateCodes == null ? null : string.Join(',', input.TemplateCodes);
+ order.SetThirdPartyOrderNumber(order.OrderPlatformNumbers);
await _orderRepository.UpdateOrderAsync(order);
}
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index d6248fbe..ce05158f 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -1,3 +1,5 @@
+using SJZY.Track.Domain.Consts;
+
namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
///
@@ -60,6 +62,12 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "LatestPushError")]
public string? LatestPushError { get; set; }
+ ///
+ /// 最新轨迹状态(异步维护)
+ ///
+ [SugarColumn(ColumnName = "LatestTrackStatus")]
+ public string? LatestTrackStatus { get; set; }
+
///
/// 最新轨迹内容(异步维护)
///
@@ -186,6 +194,12 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "TemplateCodes")]
public string? TemplateCodes { get; set; }
+ ///
+ /// 冗余订单第三方订单号(创建订单,更新订单时维护)
+ ///
+ [SugarColumn(ColumnName = "ThirdPartyOrderNumber")]
+ public string? ThirdPartyOrderNumber { get; set; } //
+
[SugarColumn(IsIgnore = true)]
public List OrderFlights { get; set; }
@@ -207,4 +221,27 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
EstimatedDeliveryDate = null;
DestinationTimeZone = null;
}
+
+ // 设置三方单号字段
+ public void SetThirdPartyOrderNumber(List orderPlatformNumberEntities)
+ {
+ if (orderPlatformNumberEntities.Count == 0)
+ {
+ ThirdPartyOrderNumber = GlobalConst.EmptyString;
+ return;
+ }
+
+ const string separator = "、";
+ var thirdPartyOrderNumbers = orderPlatformNumberEntities
+ .Where(x => !string.IsNullOrWhiteSpace(x.OrderNumber))
+ .Select(x => $"{x.OrderNumber}({x.Platform})")
+ .ToList();
+ if (thirdPartyOrderNumbers.Count == 0)
+ {
+ ThirdPartyOrderNumber = GlobalConst.EmptyString;
+ return;
+ }
+
+ ThirdPartyOrderNumber = string.Join(separator, thirdPartyOrderNumbers);
+ }
}
diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
index b57037a0..79241239 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -89,6 +89,11 @@ public class TrackOrderVO
/////
//public string? OrderDetails { get; set; }
+ ///
+ /// 最新轨迹状态
+ ///
+ public string? NewestTrackStatus { get; set; }
+
///
/// 最新轨迹内容
///
@@ -109,6 +114,11 @@ public class TrackOrderVO
///
public DateTime? NewestTrackTime { get; set; }
+ ///
+ /// 最新轨迹时区
+ ///
+ public float? NewestTrackTimeZone { get; set; }
+
///
/// 是否完结
///
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index 946ebde2..9ee2a1cb 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -14,52 +14,14 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
//tips:后期提供缓存清理接口
//MemoryCache本身线程安全简单使用,短暂数据不一致可以容忍,每过固定时间强制清除缓存
private static readonly MemoryCache _memoryCache = new(new MemoryCacheOptions());
- private static readonly Dictionary _empty = new();
- private static readonly Dictionary> _empty2 = new();
- private static readonly TimeSpan _thirdPartyOrderNumberCacheTimeSpan = TimeSpan.FromMinutes(3);
+ private static readonly Dictionary> _empty = new();
private static readonly TimeSpan _mainDataEnumCacheTimeSpan = TimeSpan.FromMinutes(5);
private static readonly TimeSpan _orderTypeCacheTimeSpan = TimeSpan.FromMinutes(1);
- private async Task> GetThirdPartyOrderNumberForCacheAsync(int[] orderIds)
- {
- const string key = "ThirdPartyOrderNumber";
- if (orderIds.Length == 0) return _empty;
-
- var dict = _memoryCache.Get>(key);
-
- orderIds = orderIds.Distinct().ToArray();
- if (dict != null && dict.Count != 0 && !orderIds.Except(dict.Keys).Any()) return dict;
-
- var orders = await Context.Queryable()
- .Includes(a => a.OrderPlatformNumbers)
- .LeftJoin((a, b) => a.Id == b.OrderId && b.IsDeleted == false)
- .Where((a, b) => orderIds.Contains(a.Id))
- .Select(a => new OrderEntity()
- {
- Id = a.Id,
- OrderPlatformNumbers = a.OrderPlatformNumbers
- })
- .ToListAsync();
-
- if (orders.Count == 0)
- return _empty;
-
- orders = orders.DistinctBy(x => x.Id).ToList();
-
- dict = orders.ToDictionary(x => x.Id, x => BuildThirdPartyOrderNumber(x.OrderPlatformNumbers));
-
- _memoryCache.Set(key, dict, new MemoryCacheEntryOptions
- {
- AbsoluteExpirationRelativeToNow = _thirdPartyOrderNumberCacheTimeSpan,
- Size = dict.Count
- });
- return dict;
- }
-
private async Task>> GetMainDataEnumForCacheAsync(List orderTypes, List questTypes)
{
const string key = "EnumForMainData";
- if (orderTypes.Count == 0 && questTypes.Count == 0) return _empty2;
+ if (orderTypes.Count == 0 && questTypes.Count == 0) return _empty;
var dict = _memoryCache.Get>>(key);
if (dict != null && dict.Count != 0
@@ -90,7 +52,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
);
if (dict.Count == 0)
- return _empty2;
+ return _empty;
_memoryCache.Set(key, dict, new MemoryCacheEntryOptions
{
@@ -153,16 +115,19 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
CustomerId = a.CustomId,
+ NewestTrackStatus = a.LatestTrackStatus,
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace,
NewestTrackTime = a.LatestTrackTime,
+ NewestTrackTimeZone = a.LatestTrackTimeZone,
IsFinish = a.IsCompleted,
CreateTime = a.CreateTime,
SubSystem = c.CnName,
SubSystemId = c.Id,
DestinationTimeZone = a.DestinationTimeZone,
- EstimatedDeliveryDate = a.EstimatedDeliveryDate
+ EstimatedDeliveryDate = a.EstimatedDeliveryDate,
+ ThirdPartyOrderNumber = a.ThirdPartyOrderNumber
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
}
@@ -227,26 +192,23 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
CustomerId = a.CustomId,
+ NewestTrackStatus = a.LatestTrackStatus,
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace,
NewestTrackTime = a.LatestTrackTime,
+ NewestTrackTimeZone = a.LatestTrackTimeZone,
IsFinish = a.IsCompleted,
CreateTime = a.CreateTime,
SubSystem = c.CnName,
SubSystemId = c.Id,
DestinationTimeZone = a.DestinationTimeZone,
EstimatedDeliveryDate = a.EstimatedDeliveryDate,
+ ThirdPartyOrderNumber = a.ThirdPartyOrderNumber
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
}
-
- //补三方单号,从缓存中加速查
- var orderIdArr = pageList.List.Select(x => x.Id).ToArray();
- var thirdPartyOrderNumbers = await GetThirdPartyOrderNumberForCacheAsync(orderIdArr);
- pageList.List.ForEach(x => x.ThirdPartyOrderNumber = thirdPartyOrderNumbers[x.Id]);
-
//查询订单类型描述,从缓存中加速查
var orderTypes = pageList.List.Select(x => x.OrderType).Distinct().ToList();
var questTypes = pageList.List.Select(x => x.QuestionType).Distinct().ToList();