diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs index 8f843860..ac87654b 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs @@ -58,17 +58,24 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa warningCalcOrders.Add(order); } - order.LatestTrackStatus = @event.TrackStatus; - order.LatestTrackContent = @event.TrackContent; - order.LatestTrackEnContent = @event.TrackEnContent; - order.LatestTrackPlace = @event.TrackPlace; - order.LatestTrackTime = @event.TrackTime; - order.LatestTrackTimeZone = @event.TrackTimeZone; - //当【预计签收时间】【签收地时区】同时存在时则更新主表 - if (@event.EstimatedDeliveryDate.HasValue && @event.DestinationTimeZone.HasValue) + // 当轨迹发生时间大于订单上的最新的轨迹发生时间时,才更新订单冗余的轨迹信息 + if (order.LatestTrackTime == null || + (@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) > + order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0))) + ) { - order.EstimatedDeliveryDate = @event.EstimatedDeliveryDate.Value; - order.DestinationTimeZone = @event.DestinationTimeZone.Value; + order.LatestTrackStatus = @event.TrackStatus; + order.LatestTrackContent = @event.TrackContent; + order.LatestTrackEnContent = @event.TrackEnContent; + order.LatestTrackPlace = @event.TrackPlace; + order.LatestTrackTime = @event.TrackTime; + order.LatestTrackTimeZone = @event.TrackTimeZone; + //当【预计签收时间】【签收地时区】同时存在时则更新主表 + if (@event.EstimatedDeliveryDate.HasValue && @event.DestinationTimeZone.HasValue) + { + order.EstimatedDeliveryDate = @event.EstimatedDeliveryDate.Value; + order.DestinationTimeZone = @event.DestinationTimeZone.Value; + } } updateOrders.Add(order); diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs index d4cabf99..fec0c6f8 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs @@ -49,14 +49,13 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe var trackList = await DeleteTrackAsync(@event); //当轨迹删除,根据轨迹标记/状态上IsToMq选择进行广播 - if (trackList.Count != 0) + if (trackList.Count > 0) { _ = PublicTrackTopicAsync(@event, trackList); //引发预警计算 WarningCalc_DeletedTrack(trackList); } - // 根据订单关联关系异步向下刷(异步) await DownByOrderLink(@event); } @@ -233,7 +232,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe foreach (var order in orders) { //找到最新的轨迹数据 - var track = tracks?.OrderByDescending(x => x.TrackTime) + var track = tracks?.OrderByDescending(x => x.ZeroTrackTime) .FirstOrDefault(x => x.OrderId == order.Id); // 删除全部轨迹导致的重置行为 @@ -314,18 +313,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe var item = dataItem.First(); var content = contentList.First(m => m.TrackContentCode == item.TrackCode); - // _broadcastingService.TrackChangePublicTopic(track, - // dataItem.Select(m => new OrderIdentifier - // { - // OrderId = m.OrderId, - // OrderNo = m.OrderNo, - // OrderType = m.OrderType - // }).ToArray(), - // item.TrackCode, - // item.TrackStatusCode, - // content.SubSystemCode - // ); - //将每个订单的每个轨迹的删除变更发布 foreach (var track in dataItem) { @@ -374,11 +361,10 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe } - public void WarningCalc_DeletedTrack(List delTracks) + private void WarningCalc_DeletedTrack(List delTracks) { var signals = delTracks.Select(x => new TrackDeletedSignal { - //EsId = x.Id, OrderId = x.OrderId, DeletedTrack = x }).ToList(); diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index a59cc7b9..c5465d51 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -236,7 +236,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe SubSystemId = @event.SubSystemId, SubSystemCode = trackContent.SubSystemCode, CustomId = @event.CustomId, - //OrderIds = canNextOrderIds.ToArray(), OrderIdEsIdVersionDict = orderIdEsIdVersionDict, TrackCode = @event.TrackCode, SystemPushInfo = new SystemPushStruct diff --git a/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs b/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs index 352430bf..4864c4ca 100644 --- a/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs +++ b/src/SJZY.Track.Application/Hangfire/WarningNotifyAggregator.cs @@ -263,6 +263,7 @@ public sealed class WarningNotifyAggregator : ITransientDependency private List BuildNotifyConfigs(List needNotifyTasks) { + var systemId = _optionsMonitor.CurrentValue.MiddleSystemId; var result = new List(); if (needNotifyTasks.Count == 0) return result; @@ -302,11 +303,13 @@ public sealed class WarningNotifyAggregator : ITransientDependency //接收完整预警,命中规则1,通知方式(飞书) ,命中规则2,通知方式(飞书,站内信) //此时聚合后,消息为:总共6条预警消息,其中回传xx条,运输xx条,完整xx条 //同时使用飞书和站内信两种方式通知 - result.Add(NotifyConfig.CreateConfig(userId, notifyMessage, new List + var config = NotifyConfig.CreateConfig(userId, notifyMessage, new List { 1, 2 - })); + }); + config.SystemId = systemId; + result.Add(config); } return result; diff --git a/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs b/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs index c75f7c6a..61ccfc0d 100644 --- a/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs +++ b/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs @@ -2,6 +2,11 @@ namespace SJZY.Track.Application.Options; public sealed class TrackWarningTaskOptions { + /// + /// 所属子系统id(业务中台id) + /// + public int MiddleSystemId { get; set; } + /// 通知任务扫描优先级 public int ScanWarningNotifyTaskLevel { get; set; } diff --git a/src/SJZY.Track.Domain/Extensions/Empty.cs b/src/SJZY.Track.Domain/Extensions/Empty.cs index ed24ce1d..cddd8027 100644 --- a/src/SJZY.Track.Domain/Extensions/Empty.cs +++ b/src/SJZY.Track.Domain/Extensions/Empty.cs @@ -5,3 +5,9 @@ public static class Empty public static readonly List List = new(0); public static readonly HashSet Set = new(0); } + +public static class Empty + where TKey : notnull +{ + public static readonly Dictionary Dict = new(0); +} diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 2acf972c..22998be5 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -240,7 +240,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract th .Size(1) .Sort(srt => srt - .Field(f => f.CreateTime, SortOrder.Descending) + .Field(f => f.ZeroTrackTime, SortOrder.Descending) ) .Source() )