From 97bee1e3d976f8a3a759b912bfd651432b761786 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Fri, 20 Dec 2024 17:05:57 +0800
Subject: [PATCH] =?UTF-8?q?update:=20=E6=8E=A8=E9=80=81=E8=A1=8C=E4=B8=BA?=
=?UTF-8?q?=E4=B8=8B=E6=8B=89=E5=88=97=E8=A1=A8=E5=8F=AA=E6=98=BE=E7=A4=BA?=
=?UTF-8?q?=E6=8E=A8=E9=80=81=E6=98=A0=E5=B0=84=E9=85=8D=E7=BD=AE=E4=B8=AD?=
=?UTF-8?q?=E7=9A=84=E8=BD=A8=E8=BF=B9=20update:=20=E6=96=B0=E5=A2=9E/?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BD=A8=E8=BF=B9=EF=BC=8C=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E5=BC=BA=E5=88=B6=E6=8E=A8=E9=80=81=E6=A0=87=E8=AF=86=EF=BC=8C?=
=?UTF-8?q?=E6=AD=A4=E6=A0=87=E8=AF=86=E4=BC=9A=E5=BD=B1=E5=93=8D=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E8=A1=8C=E4=B8=BA=E4=BD=BF=E5=85=B6=E5=8F=98=E4=B8=BA?=
=?UTF-8?q?=EF=BC=8C=201.=E6=98=8E=E7=A1=AE=E8=B0=83=E7=94=A8=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E8=BD=A8=E8=BF=B9=E6=8E=A5=E5=8F=A3=202.=E4=B8=8D?=
=?UTF-8?q?=E5=8F=97=E6=8E=A8=E9=80=81=E6=98=A0=E5=B0=84=E7=9A=84=E9=A1=BA?=
=?UTF-8?q?=E5=BA=8F=E9=99=90=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/BatchUpsertTrackInput.cs | 5 +++++
.../Dtos/ProvideServices/UpsertTrackInput.cs | 5 +++++
.../Events/TrackPushEvent.cs | 5 +++++
.../Events/TrackUpsertEvent.cs | 6 +++++
.../EventHandlers/TrackPushEventHandler.cs | 22 +++++++++++++++----
.../EventHandlers/TrackUpsertEventHandler.cs | 3 ++-
.../Services/ProvideServices/TrackService.cs | 3 ++-
.../TrackContents/TrackContentService.cs | 16 ++++++++++++--
8 files changed, 57 insertions(+), 8 deletions(-)
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();
}
//进行删除和推送行为无任何轨迹内容,直接返回为空即可