diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
index 399f9be0..90e159cc 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
@@ -129,4 +129,9 @@ public class BatchUpsertTrackInput : OrderNosInfo
/// 是否强制推送
///
public bool ForcedPush { get; set; }
+
+ ///
+ /// 指定是否推送
+ ///
+ public bool IsToMq { 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 b436b9ef..8f743c7f 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
@@ -133,4 +133,9 @@ public class UpsertTrackInput : OrderNoInfo
/// 是否强制推送
///
public bool ForcedPush { get; set; }
+
+ ///
+ /// 指定是否推送
+ ///
+ public bool IsToMq { get; set; }
}
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
index 9b707cdb..877fa365 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
@@ -151,6 +151,10 @@ public class TrackUpsertEvent
///
public bool ForcedPush { get; set; }
+ ///
+ /// 指定是否推送
+ ///
+ public bool IsToMq { get; set; }
public override string ToString()
{
diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
index 1912b1d1..a1a6ebf2 100644
--- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
+++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
@@ -5,7 +5,7 @@
net7.0
True
- 7.0.9
+ 7.0.10
True
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
index e98c7cde..f6a60425 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
@@ -69,6 +69,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
if (@event.ForcedPush)
{
+ //当为强制推送,会走手动推送逻辑
await DoPushAsync(@event);
return;
}
@@ -95,7 +96,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var items = new List();
TrackPushContentConfigDto? config;
var isSystemPush = @event.OperationMan == null;
- if (isSystemPush)
+ if (isSystemPush && !@event.ForcedPush)
{
foreach (var order in _orders)
{
@@ -139,13 +140,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
if (config == null) return;
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
- tracks = tracks.DistinctBy(x => x.OrderId).ToList(); // 防止重复推送
- if (tracks.Count == 0) return; // 一个能推的轨迹都不存在
// tips:人工推送只要能推就推了,不会校验已推和顺序问题,因为可能是更新
- foreach (var track in tracks)
+ foreach (var order in _orders)
{
- var order = _orders.First(x => x.Id == track.OrderId);
+ //取订单的下某个code的最新创建时间的轨迹 防止重复推送
+ var track = tracks
+ .Where(x => x.OrderId == order.Id && x.TrackCode == @event.TrackCode)
+ .OrderByDescending(x => x.CreateTime)
+ .FirstOrDefault();
+
+ if (track == null) return; // 一个能推的轨迹都不存在
+
if (config is { IsAllPush: true })
{
// 强制推送只需直接查出配置
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index a20ec106..f521f11a 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -49,8 +49,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var content = await HandleTrackAsync(@event, canNextOrderIds);
// 处理广播事件
- if (content is { IsToMq: true })
- await _broadcastingService.TrackChangePublicTopicAsync(@event, content);
+ if (content != null && (content.IsToMq || @event.IsToMq))
+ _broadcastingService.TrackChangePublicTopicAsync(@event, content);
if (canNextOrderIds.Count == 0) return;
// 根据订单关联关系异步向下刷(异步)
@@ -199,7 +199,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
DestinationTimeZone = @event.DestinationTimeZone,
EstimatedDeliveryDate = @event.EstimatedDeliveryDate
});
-
+
// 触发轨迹推送事件(异步)
var trackPushEvent = new TrackPushEvent
{
@@ -219,7 +219,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
Extra = @event.Extra
},
ForcedPush = @event.ForcedPush,
- IsToMq = trackContent.IsToMq
+ IsToMq = (trackContent.IsToMq || @event.IsToMq)
};
await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
index 3a5fed9f..471ea081 100644
--- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
+++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
@@ -70,7 +70,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
// 推送广播
if (log.IsToMq)
- await _broadcastingService.TrackPushCompletedPublicTopicAsync(log);
+ _broadcastingService.TrackPushCompletedPublicTopicAsync(log);
// 往es 写推送日志
await _trackPushRecordEsRepository.AddAsync(log);
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
index de070657..7e02475e 100644
--- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -26,47 +26,43 @@ public class BroadcastingService : ITransientDependency
///
///
///
- public Task TrackChangePublicTopicAsync(TrackUpsertEvent eto, TrackContentVO content)
+ public void TrackChangePublicTopicAsync(TrackUpsertEvent eto, TrackContentVO content)
{
- return Task.Run(() =>
+ var data = new TrackChangeEto
{
- var data = new TrackChangeEto
- {
- EstimatedDeliveryDate = eto.EstimatedDeliveryDate,
- TrackPlacePostcode = eto.TrackPlacePostcode,
- TrackPlaceNation = eto.TrackPlaceNation,
- TrackPlaceNationId = eto.TrackPlaceNationId,
- TrackPlaceProvince = eto.TrackPlaceProvince,
- TrackPlaceProvinceId = eto.TrackPlaceProvinceId,
- TrackPlaceCity = eto.TrackPlaceCity,
- TrackPlaceCityId = eto.TrackPlaceCityId,
- Files = eto.Files,
- Remarks = eto.Remarks,
- Source = eto.Source,
- IsVisibility = eto.IsVisibility,
- TrackTimeZone = eto.TrackTimeZone,
- TrackTime = eto.TrackTime,
- TrackPlace = eto.TrackPlace,
- TrackStatusCode = content.TrackStatusCode,
- EnStatus = eto.EnStatus,
- Content = eto.Content,
- TrackCode = eto.TrackCode,
- OperationMan = eto.OperationMan,
- OrderIdentifiers = eto.OrderIdentifiers,
- CustomId = eto.CustomId,
- SubSystemId = eto.SubSystemId,
- Extra = eto.Extra
- };
+ EstimatedDeliveryDate = eto.EstimatedDeliveryDate,
+ TrackPlacePostcode = eto.TrackPlacePostcode,
+ TrackPlaceNation = eto.TrackPlaceNation,
+ TrackPlaceNationId = eto.TrackPlaceNationId,
+ TrackPlaceProvince = eto.TrackPlaceProvince,
+ TrackPlaceProvinceId = eto.TrackPlaceProvinceId,
+ TrackPlaceCity = eto.TrackPlaceCity,
+ TrackPlaceCityId = eto.TrackPlaceCityId,
+ Files = eto.Files,
+ Remarks = eto.Remarks,
+ Source = eto.Source,
+ IsVisibility = eto.IsVisibility,
+ TrackTimeZone = eto.TrackTimeZone,
+ TrackTime = eto.TrackTime,
+ TrackPlace = eto.TrackPlace,
+ TrackStatusCode = content.TrackStatusCode,
+ EnStatus = eto.EnStatus,
+ Content = eto.Content,
+ TrackCode = eto.TrackCode,
+ OperationMan = eto.OperationMan,
+ OrderIdentifiers = eto.OrderIdentifiers,
+ CustomId = eto.CustomId,
+ SubSystemId = eto.SubSystemId,
+ Extra = eto.Extra
+ };
- if (eto.IsAdd)
- data.Option = 1;
- else
- data.Option = 3;
+ if (eto.IsAdd)
+ data.Option = 1;
+ else
+ data.Option = 3;
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}",
- Encoding.UTF8.GetBytes(data.ToJson()));
- return Task.CompletedTask;
- });
+ _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}",
+ Encoding.UTF8.GetBytes(data.ToJson()));
}
///
@@ -74,34 +70,29 @@ public class BroadcastingService : ITransientDependency
///
///
///
- public Task TrackPushCompletedPublicTopicAsync(TrackPushRecordIndex log)
+ public void TrackPushCompletedPublicTopicAsync(TrackPushRecordIndex log)
{
- // todo: 不需要异步
- return Task.Run(() =>
+ var data = new TrackPushCompletedEvent
{
- var data = new TrackPushCompletedEvent
- {
- RequestId = log.RequestId,
- IsSuccess = log.IsSuccess,
- Message = log.Message,
- OperationMan = log.CreateUser,
- PushTime = DateTime.Now,
- OptionType = log.OptionType,
- IsManualPush = !string.Equals(log.CreateUser, GlobalConst.SystemUser), //操作人不为系统用户,则认为是仍推送
- PushContent = log.PushContent,
- OrderNo = log.OrderNo,
- TrackStatus = log.TrackStatus,
- TrackContent = log.TrackContent,
- TrackTimeZone = log.TrackTimeZone,
- TrackTime = log.TrackTime,
- TrackPlace = log.TrackPlace,
- TrackCode = log.TrackCode,
- Extra = log.Extra
- };
+ RequestId = log.RequestId,
+ IsSuccess = log.IsSuccess,
+ Message = log.Message,
+ OperationMan = log.CreateUser,
+ PushTime = DateTime.Now,
+ OptionType = log.OptionType,
+ IsManualPush = !string.Equals(log.CreateUser, GlobalConst.SystemUser), //操作人不为系统用户,则认为是仍推送
+ PushContent = log.PushContent,
+ OrderNo = log.OrderNo,
+ TrackStatus = log.TrackStatus,
+ TrackContent = log.TrackContent,
+ TrackTimeZone = log.TrackTimeZone,
+ TrackTime = log.TrackTime,
+ TrackPlace = log.TrackPlace,
+ TrackCode = log.TrackCode,
+ Extra = log.Extra
+ };
- _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}",
- Encoding.UTF8.GetBytes(data.ToJson()));
- return Task.CompletedTask;
- });
+ _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}",
+ Encoding.UTF8.GetBytes(data.ToJson()));
}
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 5e4b7865..83b36226 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -145,6 +145,7 @@ public partial class TrackService : ApplicationService, ITrackService
{
//todo:保留之前的方式 后续可去除
userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync(input.OptionUserId);
+
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
@@ -477,7 +478,8 @@ public partial class TrackService : ApplicationService, ITrackService
EstimatedDeliveryDate = input.EstimatedDeliveryDate,
DestinationTimeZone = input.DestinationTimeZone,
Extra = input.Extra,
- ForcedPush = input.ForcedPush
+ ForcedPush = input.ForcedPush,
+ IsToMq = input.IsToMq,
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
}