From a9eaa5e41f4fe84fd10178d61bcc5f9e7a740743 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Fri, 27 Dec 2024 10:36:57 +0800 Subject: [PATCH 1/2] review --- .../Services/Broadcasting/BroadcastingService.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs index ad52c841..de070657 100644 --- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs +++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs @@ -63,7 +63,8 @@ public class BroadcastingService : ITransientDependency else data.Option = 3; - _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson())); + _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}", + Encoding.UTF8.GetBytes(data.ToJson())); return Task.CompletedTask; }); } @@ -75,6 +76,7 @@ public class BroadcastingService : ITransientDependency /// public Task TrackPushCompletedPublicTopicAsync(TrackPushRecordIndex log) { + // todo: 不需要异步 return Task.Run(() => { var data = new TrackPushCompletedEvent @@ -97,7 +99,8 @@ public class BroadcastingService : ITransientDependency Extra = log.Extra }; - _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson())); + _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", + Encoding.UTF8.GetBytes(data.ToJson())); return Task.CompletedTask; }); } From 5edaa2f80cde957095dfaf9cc8ad12c83cc1bc23 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 27 Dec 2024 11:18:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update:=20=E6=96=B0=E5=A2=9E/=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=BD=A8=E8=BF=B9=E5=A2=9E=E5=8A=A0IsToMq=E5=8F=82?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E6=A0=87=E8=AE=B0=E4=B8=BAtrue=E5=88=99?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E6=93=8D=E4=BD=9C=E5=90=8E=E4=B8=80=E5=AE=9A?= =?UTF-8?q?=E4=BC=9A=E6=8E=A8=E9=80=81=20update:=20MQ=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E6=94=B9=E5=90=8C=E6=AD=A5=20update:=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A5=91=E7=BA=A6=E5=8C=85=E7=89=88=E6=9C=AC?= =?UTF-8?q?7.0.10?= 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/TrackUpsertEvent.cs | 4 + .../SJZY.Track.Application.Contract.csproj | 2 +- .../EventHandlers/TrackPushEventHandler.cs | 16 ++- .../EventHandlers/TrackUpsertEventHandler.cs | 8 +- .../Rabbit/TrackPushCompletedEventHandler.cs | 2 +- .../Broadcasting/BroadcastingService.cs | 117 ++++++++---------- .../Services/ProvideServices/TrackService.cs | 4 +- 9 files changed, 88 insertions(+), 75 deletions(-) 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); }