diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index 98bab43c..399f9be0 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -124,4 +124,9 @@ public class BatchUpsertTrackInput : OrderNosInfo /// 扩展信息字段,用与轨迹推送的附加字段 /// public string? Extra { get; set; } + + /// + /// 是否强制推送 + /// + public bool ForcedPush { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs index dcda0b0f..b436b9ef 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -128,4 +128,9 @@ public class UpsertTrackInput : OrderNoInfo /// 扩展信息字段,用与轨迹推送的附加字段 /// public string? Extra { get; set; } + + /// + /// 是否强制推送 + /// + public bool ForcedPush { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index 86581528..f51929db 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -41,6 +41,11 @@ public class TrackPushEvent /// 系统推送信息 /// public SystemPushStruct SystemPushInfo { get; set; } + + /// + /// 是否强制推送 + /// + public bool ForcedPush { get; set; } } public struct SystemPushStruct diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index d6e2051b..9b707cdb 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -146,6 +146,12 @@ public class TrackUpsertEvent /// public string? Extra { get; set; } + /// + /// 是否强制推送 + /// + public bool ForcedPush { get; set; } + + public override string ToString() { return diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 7431244e..e407d2ff 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -69,6 +69,12 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (orders.Count == 0) return; _orders = orders; + if (@event.ForcedPush) + { + await DoPushAsync(@event); + return; + } + switch (@event.OptionType) { case OptionType.无: @@ -97,12 +103,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe foreach (var order in _orders) { if (order.QuestionType == (int) TrackProblemType.Error) continue; // 系统不推异常单,只能人工操作 - // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行 - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + // 强制推送只需直接查出配置 + if (@event.ForcedPush) + config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); + // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行,为了约束顺序 + else + config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); if (config == null) continue; // 是否自动推送 if (!config.IsAutoPush) continue; - //配置的类型如何和订单类型不一致则不允许推送 + // 配置的类型如何和订单类型不一致则不允许推送 if (config.OrderType != order.OrderType) continue; var log = new TrackPushRecordIndex @@ -138,8 +148,12 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var order = _orders.First(x => x.Id == track.OrderId); if (config is { IsAllPush: true }) { + // 强制推送只需直接查出配置 + if (@event.ForcedPush) + config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); // 推断 本次推送 是否可行 - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + else + config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); } if (config == null) continue; diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 1d57d01e..a0a07af3 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -264,7 +264,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackTime = @event.NewTrackTime ?? @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, Extra = @event.Extra - } + }, + ForcedPush = @event.ForcedPush }; await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent); diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index a73ffe17..f124ce46 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -473,7 +473,8 @@ public partial class TrackService : ApplicationService, ITrackService TrackPlacePostcode = input.TrackPlacePostcode, EstimatedDeliveryDate = input.EstimatedDeliveryDate, DestinationTimeZone = input.DestinationTimeZone, - Extra = input.Extra + Extra = input.Extra, + ForcedPush = input.ForcedPush }; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); } diff --git a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs index 95fed12e..4113d9ff 100644 --- a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs +++ b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs @@ -5,6 +5,7 @@ using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.AliyunOSS; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackContents; +using SJZY.Track.Application.Contract.Services; using SJZY.Track.Application.Localization; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; @@ -32,6 +33,7 @@ public class TrackContentService : ApplicationService private readonly IBasicQuery _trackStatusBasicQuery; private readonly IOrderRepository _orderRepository; private readonly ITrackDetailsEsRepository _trackDetailsEsRepository; + private readonly ITrackPushCacheService _trackPushCacheService; public TrackContentService( IStringLocalizer stringLocalizer, @@ -40,7 +42,7 @@ public class TrackContentService : ApplicationService IBasicQuery trackFlagBasicQuery, IOrderRepository orderRepository, ITrackDetailsEsRepository trackDetailsEsRepository, - ITrackTemplateRepository trackTemplateRepository) + ITrackTemplateRepository trackTemplateRepository, ITrackPushCacheService trackPushCacheService) { _stringLocalizer = stringLocalizer; _trackContentRepository = trackContentRepository; @@ -49,6 +51,7 @@ public class TrackContentService : ApplicationService _orderRepository = orderRepository; _trackDetailsEsRepository = trackDetailsEsRepository; _trackTemplateRepository = trackTemplateRepository; + _trackPushCacheService = trackPushCacheService; } /// @@ -305,7 +308,16 @@ public class TrackContentService : ApplicationService //进行推送时,匹配订单类型一致的轨迹 if (input.TrackOptionType == TrackOptionType.推送) { - trackDetails = trackDetails.Where(t => t.OrderType == order.OrderType).ToList(); + var pushConfigs = await _trackPushCacheService.GetPushContentConfigsAsync(order.SubSystemId, order.CustomId); + //没有推送配置也不会展示任何下拉 + if (pushConfigs == null || pushConfigs.Count == 0) return res; + //选订单类型和配置订单类型一致的配置的轨迹代码 + var trackCodes = pushConfigs.Where(m => m.OrderType == order.OrderType) + .Select(x=>x.TrackCode) + .Distinct() + .ToHashSet(); + //根据配置过滤轨迹 + trackDetails = trackDetails.Where(m => trackCodes.Contains(m.TrackCode)).ToList(); } //进行删除和推送行为无任何轨迹内容,直接返回为空即可