From 313751fcb8b9945c147cac585799b18b19628866 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Thu, 9 Jan 2025 11:36:23 +0800 Subject: [PATCH 01/12] =?UTF-8?q?S06=EF=BC=9Afeat=E3=80=906.=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=8E=A8=E9=80=81=E6=98=A0=E5=B0=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E3=80=90=E5=8F=AA=E6=8E=A8=E9=80=81=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=B0=E5=BD=95=E3=80=91=E3=80=91=20https:?= =?UTF-8?q?//www.tapd.cn/60863849/prong/stories/view/1160863849001041817?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/TrackPush/EditTrackPushConfigInput.cs | 5 +++++ .../TrackPush/TrackPushContentConfigDto.cs | 5 +++++ .../CAP/EventHandlers/TrackPushEventHandler.cs | 18 ++++++++++++------ .../TrackPush/TrackPushCacheService.cs | 3 +++ .../TrackPushConfigEntity.cs | 6 ++++++ .../GetTrackPushConfigDetailOutputVO.cs | 5 +++++ 6 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs index 745cdf56..e0331cb9 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs @@ -44,6 +44,11 @@ public class EditTrackPushConfigInput /// public bool? IsAllPush { get; set; } + /// + /// 是否全量推送 + /// + public bool? IsAllPushWithLatest { get; set; } + /// /// 时间格式枚举 /// diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs index 345bec99..7c1c1568 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs @@ -17,6 +17,11 @@ public class TrackPushContentConfigDto /// public bool IsAllPush { get; set; } + /// + /// 是否全量推送(最新轨迹) + /// + public bool IsAllPushWithLatest { get; set; } + /// /// 是否支持删除 /// diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 14d063bc..59a4a215 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -23,7 +23,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private readonly IHttpClientProxy _httpClientProxy; private readonly IOptionsMonitor _options; private readonly IOrderRepository _orderRepository; - private readonly ITrackDetailsEsRepository _trackDetailsEsRepository; private readonly ITrackPushCacheService _trackPushCacheService; private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository; private List _orders = null!; @@ -31,13 +30,12 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe public TrackPushEventHandler(IHttpClientProxy httpClientProxy, IOrderRepository orderRepository, ITrackPushCacheService trackPushCacheService, - ITrackDetailsEsRepository trackDetailsEsRepository, ITrackPushRecordEsRepository trackPushRecordEsRepository, + ITrackPushRecordEsRepository trackPushRecordEsRepository, IOptionsMonitor options) { _httpClientProxy = httpClientProxy; _orderRepository = orderRepository; _trackPushCacheService = trackPushCacheService; - _trackDetailsEsRepository = trackDetailsEsRepository; _trackPushRecordEsRepository = trackPushRecordEsRepository; _options = options; } @@ -285,7 +283,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { OrderNo = log.OrderNo, }; - var dict = new Dictionary() + var cur = new Dictionary() { // 推真实的发生地和发生时间(时间是计算后的) { "location", log.TrackPlace }, @@ -297,7 +295,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { "status", config.TrackStatusValue }, { "extra", DeserializeForTextJson(extraJson) } }; - body.Data.Add(dict); + body.Data.Add(cur); if (config.IsAllPush) { @@ -305,7 +303,15 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (history != default) { body = DeserializeForTextJson(history.PushContent); - body!.Data.Add(dict); + if (config.IsAllPushWithLatest) + { + var last = body!.Data.Last(); + if (cur["code"] == last["code"]) + { + body.Data.Remove(last); + } + } + body!.Data.Add(cur); } } diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index eb4c6388..5b64b496 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -51,6 +51,7 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc x.Id, x.IsAutoPush, x.IsAllPush, + x.IsAllPushWithLatest, x.IsCanDelete, x.IsCanUpdate, x.SubSystemId, @@ -76,6 +77,7 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc IsAutoPush = trackPushConfig.IsAutoPush, IsCanUpdate = trackPushConfig.IsCanUpdate, IsAllPush = trackPushConfig.IsAllPush, + IsAllPushWithLatest = trackPushConfig.IsAllPushWithLatest, IsCanDelete = trackPushConfig.IsCanDelete, DateTimeFormatType = (int) trackPushConfig.DateTimeFormatType, DateTimeFormat = trackPushConfig.DateTimeFormat, @@ -89,6 +91,7 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc TrackContentValue = item.TrackContentValue, TrackEnContentValue = item.TrackEnContentValue, TrackTimeZone = item.TrackTimeZone, + // todo:废弃字段如果没有外部子系统依赖,可以逐步删除 ExpandFieldsValue = item.ExpandFieldsValue, }).ToList(); diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushConfigEntity.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushConfigEntity.cs index e029921e..8dc04097 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushConfigEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushConfigEntity.cs @@ -56,6 +56,12 @@ public class TrackPushConfigEntity : IFullAuditedBasicEntitys, IAggregateRoot [SugarColumn(ColumnName = "IsAllPush")] public bool IsAllPush { get; set; } + /// + /// 是否全量推送(最新轨迹) + /// + [SugarColumn(ColumnName = "IsAllPushWithLatest")] + public bool IsAllPushWithLatest { get; set; } + /// /// 日期时间格式类型 /// diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs index 42de155e..f8cff929 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs @@ -51,6 +51,11 @@ public class GetTrackPushConfigDetailOutputVO /// public bool IsAllPush { get; set; } + /// + /// 是否全量推送(最新轨迹) + /// + public bool IsAllPushWithLatest { get; set; } + /// /// 时间格式枚举 /// From 503e333c4f238fd1ade0cf38f18533fa460098a3 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Thu, 9 Jan 2025 16:20:45 +0800 Subject: [PATCH 02/12] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E9=85=8D=E7=BD=AE=E6=97=B6=E9=97=B4=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=9E=9A=E4=B8=BE=E4=B8=BA=E5=8F=AF=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/TrackPush/EditTrackPushConfigInput.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs index e0331cb9..9d7c58d9 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs @@ -52,7 +52,7 @@ public class EditTrackPushConfigInput /// /// 时间格式枚举 /// - public int DateTimeFormatType { get; set; } + public int? DateTimeFormatType { get; set; } = 0; /// /// 日期时间格式模板 From 76aec6c78f96a0d50fe9774f51ffdf62360ae013 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Thu, 9 Jan 2025 16:42:25 +0800 Subject: [PATCH 03/12] =?UTF-8?q?important=EF=BC=9A=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchUpsertTrackInput.cs | 2 +- .../Dtos/ProvideServices/GetTrackOutput.cs | 2 +- .../Dtos/ProvideServices/UpsertTrackInput.cs | 2 +- .../Dtos/TrackPush/TrackPushInput.cs | 12 - .../Dtos/TrackPush/TrackPushRecordDto.cs | 2 +- .../Events/TrackChangeEto.cs | 2 +- .../Events/TrackPushCompletedEvent.cs | 2 +- .../Events/TrackPushEvent.cs | 7 +- .../Events/TrackUpsertEvent.cs | 7 +- .../Services/IBroadcastingService.cs | 2 +- .../EventHandlers/TrackDeleteEventHandler.cs | 1 + .../EventHandlers/TrackPushEventHandler.cs | 34 +- .../EventHandlers/TrackUpsertEventHandler.cs | 322 +++++++++--------- .../Rabbit/TrackPushCompletedEventHandler.cs | 3 +- .../Broadcasting/BroadcastingService.cs | 2 +- .../ProvideServices/TrackPushService.cs | 1 + .../Services/ProvideServices/TrackService.cs | 6 + .../TrackDetailsIndex.cs | 2 +- .../TrackPushRecordIndex.cs | 2 +- 19 files changed, 222 insertions(+), 191 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index 90e159cc..c1e5bcfc 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -123,7 +123,7 @@ public class BatchUpsertTrackInput : OrderNosInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index f5313b3b..28d0a76d 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -105,5 +105,5 @@ public class TrackDetail /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { 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 2b15e904..0fa3b448 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -132,7 +132,7 @@ public class UpsertTrackInput : OrderNoInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs index 1111637f..eae08b81 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs @@ -19,15 +19,3 @@ public class TrackUpdateInput public string Log { get; set; } } - -public class TrackItem -{ - public string Location { get; set; } = null!; - public string Date { get; set; } - public double TimeZone { get; set; } - public string? Description { get; set; } - public string? DescriptionCn { get; set; } - public string? Code { get; set; } - public string? Status { get; set; } - public string? Extra { get; set; } -} diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs index 7bb84c1c..9ce8fe2e 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs @@ -85,5 +85,5 @@ public class TrackPushRecordDto /// /// 轨迹的额外新 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs index 6319446e..5f49e9ff 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs @@ -132,5 +132,5 @@ public class TrackChangeEto /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs index 6e3d3987..1befad13 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs @@ -83,5 +83,5 @@ public class TrackPushCompletedEvent /// /// 轨迹的额外新 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index ab033510..760ba4b6 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -80,8 +80,13 @@ public struct SystemPushStruct /// public float TrackTimeZone { get; set; } + /// + /// 重复的情况下,用什么比较 + /// + public string? CompareFields { get; set; } + /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index dbf754d7..1f6a9f1c 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -146,10 +146,15 @@ public class TrackUpsertEvent /// public float? DestinationTimeZone { get; set; } + /// + /// 重复的情况下,用什么比较 + /// + public string? CompareFields { get; set; } + /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs index 0f79f83d..caca1139 100644 --- a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs +++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs @@ -26,5 +26,5 @@ public interface IBroadcastingService : ITransientDependency /// 轨迹推送完成广播(推送完成回调) /// /// - void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log); + void TrackPushCompletedPublicTopic(TrackPushRecordDto log); } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs index 7568071b..7e798eba 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs @@ -158,6 +158,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe } } + // todo:多个相同code的轨迹删除,也需要考虑?? private async Task> DeleteTrackAsync(TrackDeleteEvent @event) { List orderIds; diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 59a4a215..808fd759 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -10,7 +10,6 @@ using SJZY.Track.Application.Helpers; using SJZY.Track.Application.Options; using SJZY.Track.Application.Track2InterfaceRelay; using SJZY.Track.Domain.Aggregates.OrderAggregate; -using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Enums; using Volo.Abp.DependencyInjection; @@ -127,7 +126,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe IsToMq = @event.IsToMq, Extra = @event.SystemPushInfo.Extra }; - var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra); + var item = await BuiltPushItem(config, log, @event.SystemPushInfo.CompareFields); item.Log = JsonConvert.SerializeObject(log); items.Add(item); } @@ -171,7 +170,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe IsToMq = @event.IsToMq, Extra = @event.SystemPushInfo.Extra }; - var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra); + var item = await BuiltPushItem(config, log, @event.SystemPushInfo.CompareFields); item.Log = JsonConvert.SerializeObject(log); items.Add(item); } @@ -223,7 +222,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe IsToMq = @event.IsToMq, Extra = @event.SystemPushInfo.Extra }; - var item = BuiltUpdateItem(config, log, @event.SystemPushInfo.Extra); + var item = BuiltUpdateItem(config, log); item.Log = JsonConvert.SerializeObject(log); items.Add(item); } @@ -247,7 +246,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe } } - private TrackUpdateInput BuiltUpdateItem(TrackPushContentConfigDto config, TrackPushRecordIndex log, string? extraJson) + private TrackUpdateInput BuiltUpdateItem(TrackPushContentConfigDto config, TrackPushRecordIndex log) { var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone); var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config); @@ -266,7 +265,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { "descriptionCn", config.TrackContentValue }, { "code", config.TrackContentCodeValue }, { "status", config.TrackStatusValue }, - { "extra", DeserializeForTextJson(extraJson) } + { "extra", log.Extra } }; body.Data.Add(dict); log.PushContent = body.ToJson(); @@ -274,7 +273,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe return body; } - private async Task BuiltPushItem(TrackPushContentConfigDto config, TrackPushRecordIndex log, string? extraJson) + private async Task BuiltPushItem(TrackPushContentConfigDto config, TrackPushRecordIndex log, + string? compareFields) { var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone); var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config); @@ -283,7 +283,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { OrderNo = log.OrderNo, }; - var cur = new Dictionary() + var cur = new Dictionary { // 推真实的发生地和发生时间(时间是计算后的) { "location", log.TrackPlace }, @@ -293,7 +293,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { "descriptionCn", config.TrackContentValue }, { "code", config.TrackContentCodeValue }, { "status", config.TrackStatusValue }, - { "extra", DeserializeForTextJson(extraJson) } + { "extra", log.Extra } }; body.Data.Add(cur); @@ -305,10 +305,20 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe body = DeserializeForTextJson(history.PushContent); if (config.IsAllPushWithLatest) { - var last = body!.Data.Last(); - if (cur["code"] == last["code"]) + var old = body!.Data + .WhereIf(!compareFields.IsNullOrWhiteSpace(), x => + { + if (x["extra"] is Dictionary extra && extra.TryGetValue(compareFields!, out var value)) + { + return value ==log.Extra![compareFields!]; + } + + return false; + }) + .FirstOrDefault(x => x["code"] == cur["code"]); + if (old != null) { - body.Data.Remove(last); + body.Data.Remove(old); } } body!.Data.Add(cur); diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 8ba97084..b59e3f96 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -216,6 +216,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackPlace = @event.TrackPlace, TrackTime = @event.NewTrackTime ?? @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, + CompareFields = @event.CompareFields, Extra = @event.Extra }, ForcedPush = @event.ForcedPush, @@ -231,6 +232,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); + // todo:条件命名写反了 // important:轨迹code相同,时间、发生地不同的,可能存在多条!! var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, false); @@ -239,27 +241,56 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe foreach (var order in @event.OrderIdentifiers) { - TrackDetailsIndex? track; + // fast path: by update with es id case + if (!@event.IsAdd && !string.IsNullOrWhiteSpace(@event.EsId)) + { + var trackById = tracks.FirstOrDefault(x => x.Id == @event.EsId); + if (trackById != null) + { + updateTracks.Add(BuiltUpdateTrack(@event, trackById, order, trackContent)); + } + continue; + } + + var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToList(); + + if (@event.CompareFields.IsNullOrEmpty()) + { + existTracks = existTracks.Where(x => x.TrackTime == @event.TrackTime).ToList(); + } + else + { + if (@event.Extra == null || + @event.Extra.TryGetValue(@event.CompareFields, out var compareValue) == false) + { + throw new BusinessException(message: "轨迹比较字段不存在,请检查拓展字段"); + } + + existTracks = existTracks.Where(x => + { + // tips:注意兼容性,历史轨迹的字段可能为空 + if (x.Extra == null || !x.Extra.TryGetValue(@event.CompareFields, out var oldValue)) + { + return false; + } + + return oldValue == compareValue; + }).ToList(); + } + + var track = existTracks.FirstOrDefault(); + if (!@event.IsAdd) { - //如果命中了esId - track = string.IsNullOrWhiteSpace(@event.EsId) - ? null - : tracks.FirstOrDefault(x => x.Id == @event.EsId); - if (track != null) goto TipEsIdTrack; - - //同一订单同轨迹code同一轨迹时间如果有多条轨迹明细则不允许修改 - var existTracks = tracks.Where(x => x.OrderId == order.OrderId - && x.TrackTime == @event.TrackTime).ToArray(); - if (existTracks.Length > 1) + if (existTracks.Count > 1) { // 修改轨迹时,订单存在多条轨迹不允许修改 continue; } - track = existTracks.FirstOrDefault(); - if (track == null) continue; // 不存在不让改 + + updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent)); } else { @@ -271,149 +302,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe // 场景D:不允许重复,零条 => 新增 // 场景E:不允许重复,一条 => 跳过 // 场景F:不允许重复,(理想不会出现多条) => 跳过 - var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); - track = existTracks.FirstOrDefault(); - //覆盖场景:B,C - if (trackContent.IsRepeatable && existTracks.Length >= 1) - { - if (existTracks.Any(x => x.TrackTime == @event.TrackTime)) - { - //TrackCode TrackTime联合不能重复 - continue; - } + // 不允许重复轨迹 + if (!trackContent.IsRepeatable && existTracks.Count > 0) continue; - // 设置null后面执行新增逻辑 - track = null; - } - - //不允许重复,并且记录大于等于一条,跳过 - //覆盖场景:E,F - if (!trackContent.IsRepeatable && existTracks.Length >= 1) - { - continue; - } - - //其余情况:A,D都为新增操作,无需检查数量,track为null执行新增操作 - } - - //通过esId命中了轨迹 - TipEsIdTrack: - if (track == default) - { - track = new TrackDetailsIndex - { - SubSystemId = @event.SubSystemId, - OrderId = order.OrderId, - OrderNo = order.OrderNo, - OrderType = order.OrderType, - TrackCode = @event.TrackCode, - TrackPlace = @event.TrackPlace, - TrackTime = @event.NewTrackTime ?? @event.TrackTime, - TrackTimeZone = @event.TrackTimeZone, - ServiceProviderCode = @event.TrackRefreshData.ServiceProviderCode ?? GlobalConst.EmptyString, - OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString, - OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString, - CreateUser = @event.OperationMan ?? GlobalConst.SystemUser, - CreateTime = DateTime.Now, - //来源轨迹内容,第一次新增的时候使用轨迹内容表提供的 - TrackStatusId = trackContent.TrackStatusId, - TrackStatus = trackContent.TrackStatus, - TrackStatusCode = trackContent.TrackStatusCode, - //跨子系统? - TrackContentId = trackContent.TrackContentId, - TrackContent = @event.Content ?? trackContent.TrackContent, - TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent, - //S06新增轨迹明细字段 - IsVisibility = @event.IsVisibility, - Source = @event.Source, - Remarks = @event.Remarks ?? GlobalConst.EmptyString, - Files = @event.Files?.Select(x => new FileItem - { - OssKey = x.OssKey, - FileName = x.FileName - }).ToList(), - TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString, - TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId, - TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString, - TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId, - TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString, - TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId, - TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString, - DestinationTimeZone = @event.DestinationTimeZone, - EstimatedDeliveryDate = @event.EstimatedDeliveryDate, - Extra = @event.Extra - }; - - track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 - ? track.TrackTime - : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); - insertTracks.Add(track); - - // 写入操作日志 - _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex - { - OrderId = order.OrderId, - OrderNo = order.OrderNo, - OptionType = OrderOperationType.创建轨迹.ToString(), - Content = track.ToJson(), - CreateUserId = @event.OperationManId, - CreateUserName = @event.OperationMan ?? "", - CreateTime = DateTime.Now - }); - } - else - { - //外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改 - if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide) - { - track.TrackPlace = @event.TrackPlace; - track.TrackTime = @event.NewTrackTime ?? @event.TrackTime; - track.TrackTimeZone = @event.TrackTimeZone; - } - - track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 - ? track.TrackTime - : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); - track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser; - track.UpdateTime = DateTime.Now; - - //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准 - //跨子系统? - track.TrackContent = @event.Content ?? trackContent.TrackContent; - track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent; - //S06新增 - track.IsVisibility = @event.IsVisibility; - track.Remarks = @event.Remarks ?? GlobalConst.EmptyString; - track.Files = @event.Files?.Select(x => new FileItem - { - OssKey = x.OssKey, - FileName = x.FileName - }).ToList(); - track.TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString; - track.TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId; - track.TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString; - track.TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId; - track.TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString; - track.TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId; - track.TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString; - track.DestinationTimeZone = @event.DestinationTimeZone; - track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate; - track.Extra = @event.Extra; - - updateTracks.Add(track); - - // 写入操作日志 - _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex - { - OrderId = order.OrderId, - OrderNo = order.OrderNo, - OptionType = OrderOperationType.修改轨迹.ToString(), - Content = track.ToJson(), - CreateUserId = @event.OperationManId, - CreateUserName = @event.OperationMan ?? "", - CreateTime = DateTime.Now - }); + insertTracks.Add(BuiltNewTrack(@event, order, trackContent)); } canNextOrderIds.Add(order.OrderId); @@ -427,4 +320,125 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return insertTracks; } + + + private TrackDetailsIndex BuiltUpdateTrack(TrackUpsertEvent @event, TrackDetailsIndex track, OrderIdentifier order, + TrackContentVO trackContent) + { + //外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改 + if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide) + { + track.TrackPlace = @event.TrackPlace; + track.TrackTime = @event.NewTrackTime ?? @event.TrackTime; + track.TrackTimeZone = @event.TrackTimeZone; + } + + track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 + ? track.TrackTime + : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); + track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser; + track.UpdateTime = DateTime.Now; + + //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准 + //跨子系统? + track.TrackContent = @event.Content ?? trackContent.TrackContent; + track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent; + //S06新增 + track.IsVisibility = @event.IsVisibility; + track.Remarks = @event.Remarks ?? GlobalConst.EmptyString; + track.Files = @event.Files?.Select(x => new FileItem + { + OssKey = x.OssKey, + FileName = x.FileName + }).ToList(); + track.TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString; + track.TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId; + track.TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString; + track.TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId; + track.TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString; + track.TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId; + track.TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString; + track.DestinationTimeZone = @event.DestinationTimeZone; + track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate; + track.Extra = @event.Extra; + + // 写入操作日志 + _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex + { + OrderId = order.OrderId, + OrderNo = order.OrderNo, + OptionType = OrderOperationType.修改轨迹.ToString(), + Content = track.ToJson(), + CreateUserId = @event.OperationManId, + CreateUserName = @event.OperationMan ?? "", + CreateTime = DateTime.Now + }); + + return track; + } + + private TrackDetailsIndex BuiltNewTrack(TrackUpsertEvent @event, OrderIdentifier order, TrackContentVO trackContent) + { + var track = new TrackDetailsIndex + { + SubSystemId = @event.SubSystemId, + OrderId = order.OrderId, + OrderNo = order.OrderNo, + OrderType = order.OrderType, + TrackCode = @event.TrackCode, + TrackPlace = @event.TrackPlace, + TrackTime = @event.NewTrackTime ?? @event.TrackTime, + TrackTimeZone = @event.TrackTimeZone, + ServiceProviderCode = @event.TrackRefreshData.ServiceProviderCode ?? GlobalConst.EmptyString, + OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString, + OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString, + CreateUser = @event.OperationMan ?? GlobalConst.SystemUser, + CreateTime = DateTime.Now, + //来源轨迹内容,第一次新增的时候使用轨迹内容表提供的 + TrackStatusId = trackContent.TrackStatusId, + TrackStatus = trackContent.TrackStatus, + TrackStatusCode = trackContent.TrackStatusCode, + //跨子系统? + TrackContentId = trackContent.TrackContentId, + TrackContent = @event.Content ?? trackContent.TrackContent, + TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent, + //S06新增轨迹明细字段 + IsVisibility = @event.IsVisibility, + Source = @event.Source, + Remarks = @event.Remarks ?? GlobalConst.EmptyString, + Files = @event.Files?.Select(x => new FileItem + { + OssKey = x.OssKey, + FileName = x.FileName + }).ToList(), + TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString, + TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId, + TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString, + TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId, + TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString, + TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId, + TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString, + DestinationTimeZone = @event.DestinationTimeZone, + EstimatedDeliveryDate = @event.EstimatedDeliveryDate, + Extra = @event.Extra + }; + + track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 + ? track.TrackTime + : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); + + // 写入操作日志 + _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex + { + OrderId = order.OrderId, + OrderNo = order.OrderNo, + OptionType = OrderOperationType.创建轨迹.ToString(), + Content = track.ToJson(), + CreateUserId = @event.OperationManId, + CreateUserName = @event.OperationMan ?? "", + CreateTime = DateTime.Now + }); + + return track; + } } diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs index 8144eb1c..3895fb7a 100644 --- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs +++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs @@ -4,6 +4,7 @@ using BSI.Stack.Rabbit.Handler; using Newtonsoft.Json; using RabbitMQ.Client.Events; using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Services; @@ -70,7 +71,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl // 推送广播 if (log.IsToMq) - _broadcastingService.TrackPushCompletedPublicTopicAsync(BuildDto(log)); + _broadcastingService.TrackPushCompletedPublicTopic(BuildDto(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 9dfb2eb6..14c6c578 100644 --- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs +++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs @@ -86,7 +86,7 @@ public class BroadcastingService : IBroadcastingService /// /// /// - public void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log) + public void TrackPushCompletedPublicTopic(TrackPushRecordDto log) { var data = new TrackPushCompletedEvent { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index a7efbb5e..95f496ed 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -117,6 +117,7 @@ public class TrackPushService : ApplicationService, ITrackPushService TrackPlace = track.TrackPlace, TrackTime = track.TrackTime, TrackTimeZone = track.TrackTimeZone, + // todo: 这里也要改,重复code问题,到底推哪个 Extra = track.Extra } }; diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 9625a5f9..e13a1a30 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -240,6 +240,8 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除"); } + + // todo:非必须不用goto,除非是在写算法,业务逻辑理论上都能通过if和方法规避 NO_DELETE_TRACK: if (tracks.Count == 0) { @@ -357,6 +359,9 @@ public partial class TrackService : ApplicationService, ITrackService return new UnifyResultDto(true, true); } + + + // todo:代码封装性太差了,拆小一点 /// /// 批量新增、更新轨迹 /// @@ -436,6 +441,7 @@ public partial class TrackService : ApplicationService, ITrackService .Where(x => x.TrackTime == input.TrackTime) .ToList(); + // todo:这块代码抽出去 //当为更新操作时发现更新的数目为0进行重试操作 if (!input.IsAdd && tracks.Count == 0) { diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 02cb6b51..60eed6a3 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -190,5 +190,5 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs index d127b5c4..8b2132bd 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs @@ -96,5 +96,5 @@ public class TrackPushRecordIndex : IdBaseIndex /// /// 轨迹额外信息 /// - public string? Extra { get; set; } + public Dictionary? Extra { get; set; } } From 4fb127ed474b6e831518ea1856ba02a8968590e4 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Thu, 9 Jan 2025 17:41:39 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E8=BD=AC=E9=B9=8F=E5=86=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchUpsertTrackInput.cs | 2 +- .../Dtos/ProvideServices/GetTrackOutput.cs | 2 +- .../Dtos/ProvideServices/UpsertTrackInput.cs | 2 +- .../Dtos/TrackPush/TrackPushRecordDto.cs | 2 +- .../Events/TrackChangeEto.cs | 2 +- .../Events/TrackPushCompletedEvent.cs | 2 +- .../Events/TrackPushEvent.cs | 2 +- .../Events/TrackUpsertEvent.cs | 2 +- .../CAP/EventHandlers/TrackPushEventHandler.cs | 11 +++++++++-- .../EventHandlers/TrackUpsertEventHandler.cs | 17 ++++++++++++++--- .../Rabbit/TrackPushCompletedEventHandler.cs | 1 - .../TrackDetailsAggregate/TrackDetailsIndex.cs | 2 +- .../TrackPushAggregate/TrackPushRecordIndex.cs | 2 +- .../Repositories/TrackDetailsEsRepository.cs | 2 +- 14 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index c1e5bcfc..90e159cc 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -123,7 +123,7 @@ public class BatchUpsertTrackInput : OrderNosInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index 28d0a76d..f5313b3b 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -105,5 +105,5 @@ public class TrackDetail /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { 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 0fa3b448..2b15e904 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -132,7 +132,7 @@ public class UpsertTrackInput : OrderNoInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs index 9ce8fe2e..7bb84c1c 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs @@ -85,5 +85,5 @@ public class TrackPushRecordDto /// /// 轨迹的额外新 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs index 5f49e9ff..6319446e 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs @@ -132,5 +132,5 @@ public class TrackChangeEto /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs index 1befad13..6e3d3987 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs @@ -83,5 +83,5 @@ public class TrackPushCompletedEvent /// /// 轨迹的额外新 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index 760ba4b6..9be77fbc 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -88,5 +88,5 @@ public struct SystemPushStruct /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index 1f6a9f1c..fef7ab3f 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -154,7 +154,7 @@ public class TrackUpsertEvent /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } /// /// 是否强制推送 diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 808fd759..a8ff5339 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -265,7 +265,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { "descriptionCn", config.TrackContentValue }, { "code", config.TrackContentCodeValue }, { "status", config.TrackStatusValue }, - { "extra", log.Extra } + { "extra", DeserializeForTextJson(log.Extra) } }; body.Data.Add(dict); log.PushContent = body.ToJson(); @@ -293,7 +293,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { "descriptionCn", config.TrackContentValue }, { "code", config.TrackContentCodeValue }, { "status", config.TrackStatusValue }, - { "extra", log.Extra } + { "extra", DeserializeForTextJson(log.Extra) } }; body.Data.Add(cur); @@ -380,4 +380,11 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json); } + + private Dictionary? GetExtraDictForTextJson(string? extraStr) + { + return string.IsNullOrWhiteSpace(extraStr) + ? null + : System.Text.Json.JsonSerializer.Deserialize>(extraStr); + } } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index b59e3f96..0f68fcda 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using NetTaste; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Events; @@ -234,7 +235,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe // todo:条件命名写反了 // important:轨迹code相同,时间、发生地不同的,可能存在多条!! - var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, false); + var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true); var insertTracks = new List(); var updateTracks = new List(); @@ -249,6 +250,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { updateTracks.Add(BuiltUpdateTrack(@event, trackById, order, trackContent)); } + continue; } @@ -260,8 +262,10 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } else { + var extraDict = GetExtraDictForTextJson(@event.Extra); if (@event.Extra == null || - @event.Extra.TryGetValue(@event.CompareFields, out var compareValue) == false) + extraDict == null + || extraDict.TryGetValue(@event.CompareFields, out var compareValue) == false) { throw new BusinessException(message: "轨迹比较字段不存在,请检查拓展字段"); } @@ -269,7 +273,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe existTracks = existTracks.Where(x => { // tips:注意兼容性,历史轨迹的字段可能为空 - if (x.Extra == null || !x.Extra.TryGetValue(@event.CompareFields, out var oldValue)) + if (x.Extra == null || !extraDict.TryGetValue(@event.CompareFields, out var oldValue)) { return false; } @@ -441,4 +445,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return track; } + + private Dictionary? GetExtraDictForTextJson(string? extraStr) + { + return string.IsNullOrWhiteSpace(extraStr) + ? null + : System.Text.Json.JsonSerializer.Deserialize>(extraStr); + } } diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs index 3895fb7a..11be63aa 100644 --- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs +++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs @@ -4,7 +4,6 @@ using BSI.Stack.Rabbit.Handler; using Newtonsoft.Json; using RabbitMQ.Client.Events; using SJZY.Expand.ABP.Core.Logger; -using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Services; diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 60eed6a3..02cb6b51 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -190,5 +190,5 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs index 8b2132bd..d127b5c4 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs @@ -96,5 +96,5 @@ public class TrackPushRecordIndex : IdBaseIndex /// /// 轨迹额外信息 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 6d03a1b1..b9bf22af 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -19,7 +19,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract> GetListAsync(int[] orderIds, string trackCode, bool forUpsert = false) { - var r = !forUpsert + var r = forUpsert ? await Context.SearchAsync(s => s .Index(GlobalConst.TrackDetailsIndex) .Source() From f5f9227aeb7fc6cd80247436302f6cd12d3c5af7 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Thu, 9 Jan 2025 18:07:16 +0800 Subject: [PATCH 05/12] try --- .../CAP/EventHandlers/TrackPushEventHandler.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index a8ff5339..d78beaca 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -1,6 +1,7 @@ using DotNetCore.CAP; using Microsoft.Extensions.Options; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract.Dtos.TrackPush; @@ -306,16 +307,19 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (config.IsAllPushWithLatest) { var old = body!.Data + .Where(x => x["code"] == cur["code"]) .WhereIf(!compareFields.IsNullOrWhiteSpace(), x => { - if (x["extra"] is Dictionary extra && extra.TryGetValue(compareFields!, out var value)) + if (x["extra"] == null || log.Extra == null) return false; + var extra = JObject.FromObject(x["extra"]!); + var curExtra = JObject.FromObject(log.Extra!); + if (extra.TryGetValue(compareFields!, out var value) && curExtra.TryGetValue(compareFields!, out var curValue) ) { - return value ==log.Extra![compareFields!]; + return value == curValue; } - return false; }) - .FirstOrDefault(x => x["code"] == cur["code"]); + .FirstOrDefault(); if (old != null) { body.Data.Remove(old); From b2c7a6aef103d991afbfc4d5fb248dacf44ed167 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 09:18:23 +0800 Subject: [PATCH 06/12] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9A=84=E6=AF=94=E8=BE=83=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CAP/EventHandlers/TrackUpsertEventHandler.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 0f68fcda..79ece4b4 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -272,8 +272,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe existTracks = existTracks.Where(x => { + var oldExtraDict = GetExtraDictForTextJson(x.Extra); // tips:注意兼容性,历史轨迹的字段可能为空 - if (x.Extra == null || !extraDict.TryGetValue(@event.CompareFields, out var oldValue)) + if (x.Extra == null + || oldExtraDict == null + || !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue)) { return false; } From cc84be2d84fb62d4ec7ef86fa17153515477d08a Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Fri, 10 Jan 2025 09:33:35 +0800 Subject: [PATCH 07/12] review --- .../EventHandlers/TrackUpsertEventHandler.cs | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 79ece4b4..cfdba588 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -1,5 +1,6 @@ +using System.Diagnostics; using DotNetCore.CAP; -using NetTaste; +using Microsoft.Extensions.Logging; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Events; @@ -21,6 +22,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe private readonly IProvideQueries _provideQueries; private readonly ITrackDetailsEsRepository _trackDetailsEsRepository; private readonly IBroadcastingService _broadcastingService; + private readonly ILogger _logger; private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository; public TrackUpsertEventHandler( @@ -29,7 +31,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe IProvideQueries provideQueries, ITrackDetailsEsRepository trackDetailsEsRepository, IOrderOperationRecordEsRepository orderOperationRecordEsRepository, - IBroadcastingService broadcastingService) + IBroadcastingService broadcastingService, + ILogger logger) { _orderRepository = orderRepository; _capPublisher = capPublisher; @@ -37,6 +40,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe _trackDetailsEsRepository = trackDetailsEsRepository; _orderOperationRecordEsRepository = orderOperationRecordEsRepository; _broadcastingService = broadcastingService; + _logger = logger; } [CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)] @@ -262,21 +266,18 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } else { + Debug.Assert(@event.CompareFields != null, "@event.CompareFields != null"); var extraDict = GetExtraDictForTextJson(@event.Extra); - if (@event.Extra == null || - extraDict == null - || extraDict.TryGetValue(@event.CompareFields, out var compareValue) == false) + if (extraDict == null || !extraDict.TryGetValue(@event.CompareFields, out var compareValue)) { - throw new BusinessException(message: "轨迹比较字段不存在,请检查拓展字段"); + throw new BusinessException(message: $"请检查拓展字段,为什么找不到比较字段:{@event.CompareFields}"); } existTracks = existTracks.Where(x => { var oldExtraDict = GetExtraDictForTextJson(x.Extra); // tips:注意兼容性,历史轨迹的字段可能为空 - if (x.Extra == null - || oldExtraDict == null - || !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue)) + if (oldExtraDict == null|| !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue)) { return false; } @@ -291,26 +292,19 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { if (existTracks.Count > 1) { - // 修改轨迹时,订单存在多条轨迹不允许修改 + // todo: 所有的event handle 多写log,取缔注释,特别是continue,return,这种跳出的地方,方便排查问题 + _logger.LogInformation("订单存在多条轨迹不允许修改:{@event}", @event); continue; } + // todo:例如这里 if (track == null) continue; // 不存在不让改 updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent)); } else { - // 【批量新增】所有可能遇到的场景 - // 标识:允许重复,不允许重复,零条,一条,多条; - // 场景A:允许重复,零条 => 新增 - // 场景B:允许重复,一条 => 新增(约束受限新增,否则跳过新增) - // 场景C:允许重复,多条 => 新增(约束受限新增,否则跳过新增) - // 场景D:不允许重复,零条 => 新增 - // 场景E:不允许重复,一条 => 跳过 - // 场景F:不允许重复,(理想不会出现多条) => 跳过 - - // 不允许重复轨迹 + // 不允许重复轨迹,跳过 if (!trackContent.IsRepeatable && existTracks.Count > 0) continue; insertTracks.Add(BuiltNewTrack(@event, order, trackContent)); @@ -369,6 +363,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate; track.Extra = @event.Extra; + // todo:如果后面写es异常了,这里日志不就不准了,这里应该和写轨迹一样,做成批量的,放到写完轨迹只会写日志 // 写入操作日志 _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex { @@ -434,6 +429,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe ? track.TrackTime : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); + // todo:如果后面写es异常了,这里日志不就不准了,这里应该和写轨迹一样,做成批量的,放到写完轨迹只会写日志 // 写入操作日志 _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex { From 2d6b239b8f4e2d902c5ea45d399cbe1dd4a8ac48 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Fri, 10 Jan 2025 10:15:00 +0800 Subject: [PATCH 08/12] review push event handler --- .../CAP/EventHandlers/TrackPushEventHandler.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index d78beaca..eff95d65 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -91,6 +91,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private async Task DoPushAsync(TrackPushEvent @event) { + // todo: 轨迹中台推送逻辑致使的未推送,也需要广播到mq,告知业务系统缘故 var items = new List(); TrackPushContentConfigDto? config; var isSystemPush = @event.OperationMan == null; @@ -99,12 +100,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe foreach (var order in _orders) { if (order.QuestionType == (int) TrackProblemType.Error) continue; // 系统不推异常单,只能人工操作 - // 强制推送只需直接查出配置 - if (@event.ForcedPush) - config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行,为了约束顺序 - else - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); if (config == null) continue; // 是否自动推送 if (!config.IsAutoPush) continue; @@ -311,6 +308,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe .WhereIf(!compareFields.IsNullOrWhiteSpace(), x => { if (x["extra"] == null || log.Extra == null) return false; + // todo:这里也改成统一使用system txt json,不用newtonsoft了 var extra = JObject.FromObject(x["extra"]!); var curExtra = JObject.FromObject(log.Extra!); if (extra.TryGetValue(compareFields!, out var value) && curExtra.TryGetValue(compareFields!, out var curValue) ) From 5913929dcca5ffa313b532829c1ce4a636cda281 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 11:17:52 +0800 Subject: [PATCH 09/12] =?UTF-8?q?update:=E8=BD=A8=E8=BF=B9=E6=96=B0?= =?UTF-8?q?=E5=A2=9E/=E6=9B=B4=E6=96=B0=E6=94=AF=E6=8C=81=E6=8C=89?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=86=85=E5=AE=B9=E6=9F=90=E4=B8=AA=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=AF=94=E8=BE=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchUpsertTrackInput.cs | 5 ++++ .../Dtos/ProvideServices/UpsertTrackInput.cs | 5 ++++ .../EventHandlers/TrackPushEventHandler.cs | 28 ++++++++++--------- .../EventHandlers/TrackUpsertEventHandler.cs | 18 +++++++++--- .../Services/ProvideServices/TrackService.cs | 1 + 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index 90e159cc..276ad83b 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -120,6 +120,11 @@ public class BatchUpsertTrackInput : OrderNosInfo [Range(-12, 12)] public float? DestinationTimeZone { get; set; } + /// + /// 重复的情况下,用什么比较 + /// + public string? CompareFields { 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 2b15e904..d7679cda 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -129,6 +129,11 @@ public class UpsertTrackInput : OrderNoInfo /// public int OptionUserId { get; set; } + /// + /// 重复的情况下,用什么比较 + /// + public string? CompareFields { get; set; } + /// /// 扩展信息字段,用与轨迹推送的附加字段 /// diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index eff95d65..109f96a5 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -1,7 +1,7 @@ +using System.Text.Json; using DotNetCore.CAP; using Microsoft.Extensions.Options; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract.Dtos.TrackPush; @@ -308,14 +308,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe .WhereIf(!compareFields.IsNullOrWhiteSpace(), x => { if (x["extra"] == null || log.Extra == null) return false; - // todo:这里也改成统一使用system txt json,不用newtonsoft了 - var extra = JObject.FromObject(x["extra"]!); - var curExtra = JObject.FromObject(log.Extra!); - if (extra.TryGetValue(compareFields!, out var value) && curExtra.TryGetValue(compareFields!, out var curValue) ) - { - return value == curValue; - } - return false; + return EqExtraByFieldForTextJson(x["extra"]!, DeserializeForTextJson(log.Extra)!, compareFields!); }) .FirstOrDefault(); if (old != null) @@ -323,6 +316,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe body.Data.Remove(old); } } + body!.Data.Add(cur); } } @@ -383,10 +377,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json); } - private Dictionary? GetExtraDictForTextJson(string? extraStr) + //比较扩展中的某个字段的相等性 + private bool EqExtraByFieldForTextJson(object a, object b, string fieldName) { - return string.IsNullOrWhiteSpace(extraStr) - ? null - : System.Text.Json.JsonSerializer.Deserialize>(extraStr); + if (a is not JsonElement aJsonElement || b is not JsonElement bJsonElement) + return false; + + if (aJsonElement.TryGetProperty(fieldName, out var aValue) + && bJsonElement.TryGetProperty(fieldName, out var bValue)) + { + return aValue.ToString() == bValue.ToString(); + } + + return false; } } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index cfdba588..3bf950a9 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.Text.Json; using DotNetCore.CAP; using Microsoft.Extensions.Logging; using SJZY.Expand.ABP.Core.Logger; @@ -237,7 +238,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); - // todo:条件命名写反了 // important:轨迹code相同,时间、发生地不同的,可能存在多条!! var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true); @@ -282,7 +282,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return false; } - return oldValue == compareValue; + return EqJsonElementObject(oldValue, compareValue); }).ToList(); } @@ -445,10 +445,20 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return track; } - private Dictionary? GetExtraDictForTextJson(string? extraStr) + private Dictionary? GetExtraDictForTextJson(string? extraStr) { return string.IsNullOrWhiteSpace(extraStr) ? null - : System.Text.Json.JsonSerializer.Deserialize>(extraStr); + : System.Text.Json.JsonSerializer.Deserialize>(extraStr); + } + + private bool EqJsonElementObject(object? a, object? b) + { + if (a is JsonElement aJsonElement && b is JsonElement bJsonElement) + { + return aJsonElement.ToString() == bJsonElement.ToString(); + } + + return false; } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index e13a1a30..0af5624e 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -519,6 +519,7 @@ public partial class TrackService : ApplicationService, ITrackService TrackPlacePostcode = input.TrackPlacePostcode, EstimatedDeliveryDate = input.EstimatedDeliveryDate, DestinationTimeZone = input.DestinationTimeZone, + CompareFields = input.CompareFields, Extra = input.Extra, ForcedPush = input.ForcedPush, IsToMq = input.IsToMq, From 94702e4c563b707e3996b4b01c2485d73e2ecf61 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 11:19:18 +0800 Subject: [PATCH 10/12] =?UTF-8?q?update-package:=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=84=E7=BA=A6=E5=8C=85=E8=87=B37.0.13=20-=20=EF=BC=88?= =?UTF-8?q?=E5=8D=95=E4=B8=AA/=E6=89=B9=E9=87=8F=EF=BC=89=E6=96=B0?= =?UTF-8?q?=E5=A2=9E/=E6=9B=B4=E6=96=B0=E8=BD=A8=E8=BF=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=A2=9E=E5=8A=A0=E6=AF=94=E8=BE=83=E5=AD=97=E6=AE=B5?= =?UTF-8?q?CompareFields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SJZY.Track.Application.Contract.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 48722a57..1c988cbc 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.12 + 7.0.13 True From 8287e6a43725a5fe62e7246acd54604169e22b2a Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 15:43:31 +0800 Subject: [PATCH 11/12] =?UTF-8?q?feat:=E8=BD=A8=E8=BF=B9=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=AD=EF=BC=8C=E5=B9=BF=E6=92=AD=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=A4=B1=E8=B4=A5=E5=8E=9F=E5=9B=A0=EF=BC=88=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=AD=98=E5=9C=A8=E4=B8=8E=E5=90=A6/=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E8=87=AA=E5=8A=A8=E6=8E=A8=E9=80=81/=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=B1=BB=E5=9E=8B=E6=98=AF=E5=90=A6=E4=B8=80=E8=87=B4?= =?UTF-8?q?/=E9=A1=BA=E5=BA=8F/=E5=BC=82=E5=B8=B8=E5=8D=95/=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3=E9=80=9A=E5=A4=B1=E8=B4=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/TrackPush/TrackPushRecordDto.cs | 2 +- .../Events/TrackPushCompletedEvent.cs | 3 +- .../Services/IBroadcastingService.cs | 6 + .../EventHandlers/TrackPushEventHandler.cs | 159 +++++++++++++++--- .../Broadcasting/BroadcastingService.cs | 6 + 5 files changed, 153 insertions(+), 23 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs index 7bb84c1c..0e978af4 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs @@ -30,7 +30,7 @@ public class TrackPushRecordDto /// /// 接口通请求Id /// - public Guid RequestId { get; set; } + public Guid? RequestId { get; set; } /// /// 信息 diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs index 6e3d3987..c7f4801d 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs @@ -27,8 +27,9 @@ public class TrackPushCompletedEvent /// /// 接口通请求Id + /// 在请求接口通前被拦截,就不会有请求Id /// - public Guid RequestId { get; set; } + public Guid? RequestId { get; set; } /// /// 信息 diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs index caca1139..4a1cb510 100644 --- a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs +++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs @@ -27,4 +27,10 @@ public interface IBroadcastingService : ITransientDependency /// /// void TrackPushCompletedPublicTopic(TrackPushRecordDto log); + + /// + /// 轨迹推送失败广播(推送前置被拦截,或调用接口通失败) + /// + /// + void TrackPushFailedPubilcTopic(TrackPushRecordDto log); } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 109f96a5..1b5dab76 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -25,19 +25,23 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private readonly IOrderRepository _orderRepository; private readonly ITrackPushCacheService _trackPushCacheService; private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository; + private readonly IBroadcastingService _broadcastingService; private List _orders = null!; private List _pushConfigs = null!; public TrackPushEventHandler(IHttpClientProxy httpClientProxy, - IOrderRepository orderRepository, ITrackPushCacheService trackPushCacheService, + IOrderRepository orderRepository, + ITrackPushCacheService trackPushCacheService, ITrackPushRecordEsRepository trackPushRecordEsRepository, - IOptionsMonitor options) + IOptionsMonitor options, + IBroadcastingService broadcastingService) { _httpClientProxy = httpClientProxy; _orderRepository = orderRepository; _trackPushCacheService = trackPushCacheService; _trackPushRecordEsRepository = trackPushRecordEsRepository; _options = options; + _broadcastingService = broadcastingService; } [CapSubscribe(GlobalConst.TrackPushSubscribe, Group = GlobalConst.TrackPushSubscribe)] @@ -97,16 +101,44 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var isSystemPush = @event.OperationMan == null; if (isSystemPush && !@event.ForcedPush) { + config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); foreach (var order in _orders) { - if (order.QuestionType == (int) TrackProblemType.Error) continue; // 系统不推异常单,只能人工操作 + if (config == null) + { + TrackPushFailedPublicTopic($"没有在推送映射配置中找到关于轨迹代码[{@event.TrackCode}]的配置", @event, order); + return; + } + + // 系统不推异常单,只能人工操作 + if (order.QuestionType == (int) TrackProblemType.Error) + { + TrackPushFailedPublicTopic("系统不推异常单,只能人工操作", @event, order); + continue; + } + // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行,为了约束顺序 - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); - if (config == null) continue; + var (resultConfig, nextCode) = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + if (resultConfig == null) + { + TrackPushFailedPublicTopic($"推送顺序异常,下一个要推送的应为[{nextCode}]", @event, order); + continue; + } + config = resultConfig; + // 是否自动推送 - if (!config.IsAutoPush) continue; + if (!config.IsAutoPush) + { + TrackPushFailedPublicTopic($"没有设置为自动推送,如果要推送请手动推送", @event, order); + continue; + } + // 配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) continue; + if (config.OrderType != order.OrderType) + { + TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, order); + continue; + } var log = new TrackPushRecordIndex { @@ -131,26 +163,42 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe } // 手工或强制推送,不会校验已推和顺序问题,因为可能是更新 else + { config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); - if (config == null) return; - foreach (var order in _orders) { - if (config is { IsAllPush: true }) + if (config == null) { - // 强制推送只需直接查出配置 - if (@event.ForcedPush) - config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); - // 推断 本次推送 是否可行 - else - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + TrackPushFailedPublicTopic($"没有在推送映射配置中找到关于轨迹代码[{@event.TrackCode}]的配置", @event, order); + return; + } + + if (config is { IsAllPush: true }) + { + // 非强制推送需要 推断 本次推送 是否可行 + if (!@event.ForcedPush) + { + var (resultConfig, nextCode) = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode); + if (resultConfig == null) + { + TrackPushFailedPublicTopic($"推送顺序异常,下一个要推送的应为[{nextCode}]", @event, order); + continue; + } + + config = resultConfig; + } + + // tips:强制推送直接使用配置 } - if (config == null) continue; //配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) continue; + if (config.OrderType != order.OrderType) + { + TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, order); + continue; + } var log = new TrackPushRecordIndex { @@ -188,6 +236,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (r.Code != GlobalConst.SuccessCode) { + TrackPushFailedPublicTopic($"轨迹中台调用接口通失败,RequestId: {r.RequestId}; Msg: {r.Msg}", @event, r.RequestId, items.Cast().ToList()); throw new BusinessException(message: $"requestId: {r.RequestId}; serviceProviderCode:{serviceProviderCode} Msg: {r.Msg}"); } } @@ -202,7 +251,11 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe foreach (var order in _orders) { //配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) continue; + if (config.OrderType != order.OrderType) + { + TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, order); + continue; + } var log = new TrackPushRecordIndex { @@ -239,6 +292,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (r.Code != GlobalConst.SuccessCode) { + TrackPushFailedPublicTopic($"轨迹中台调用接口通失败,RequestId: {r.RequestId}; Msg: {r.Msg}", @event, r.RequestId, items.Cast().ToList()); throw new BusinessException(message: $"requestId: {r.RequestId}; serviceProviderCode:{serviceProviderCode} Msg: {r.Msg}"); } } @@ -330,7 +384,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe /// 根据轨迹代码推断下一个(升序)要推送的内容,如果找不到或者已经是最后一个了 /// 则查询有没有可交换的推送,没有就返回null /// - private static TrackPushContentConfigDto? GetValidPushConfigAsync(List cache, + private static (TrackPushContentConfigDto? config, string nextCode) GetValidPushConfigAsync(List cache, string? latestPushTrackCode, string? trackCode) { var idx = cache.FindIndex(x => x.TrackCode == latestPushTrackCode); @@ -344,7 +398,10 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe // find swap cache.FirstOrDefault(x => x.TrackCode == cache[idx + 1].SwapTrackCode); - return matched != null && matched.TrackCode == trackCode ? matched : default; + //没推完,可能不符合推送顺序 + return matched != null && matched.TrackCode == trackCode + ? (matched, matched.TrackCode) + : (default, matched?.TrackCode ?? cache[idx + 1].TrackCode); } /// @@ -391,4 +448,64 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe return false; } + + //轨迹推送失败(被拦截) + private void TrackPushFailedPublicTopic( + string failedMessage, + TrackPushEvent @event, + OrderEntity order) + { + _broadcastingService.TrackPushFailedPubilcTopic(new TrackPushRecordDto + { + //还没请求接口通 + RequestId = null, + IsSuccess = false, + Message = failedMessage, + OperationMan = @event.OperationMan, + PushTime = DateTime.Now, + OptionType = @event.OptionType.ToString(), + IsManualPush = @event.OperationMan != null, + //还没到构建推送内容那一步就被拦截 + PushContent = string.Empty, + OrderNo = order.OrderNo, + TrackStatus = @event.SystemPushInfo.TrackStatus, + TrackContent = @event.SystemPushInfo.TrackStatus, + TrackTimeZone = @event.SystemPushInfo.TrackTimeZone, + TrackTime = @event.SystemPushInfo.TrackTime, + TrackPlace = @event.SystemPushInfo.TrackPlace, + TrackCode = @event.TrackCode, + Extra = @event.SystemPushInfo.Extra, + }); + } + + //轨迹推送失败(请求接口通) + private void TrackPushFailedPublicTopic( + string failedMessage, + TrackPushEvent @event, + Guid requestId, + List pushOrUpdateInputs) + { + foreach (var pushInput in pushOrUpdateInputs) + { + _broadcastingService.TrackPushFailedPubilcTopic(new TrackPushRecordDto + { + RequestId = requestId, + IsSuccess = false, + Message = failedMessage, + OperationMan = @event.OperationMan, + PushTime = DateTime.Now, + OptionType = @event.OptionType.ToString(), + IsManualPush = @event.OperationMan != null, + PushContent = SerializeForTextJson(pushInput), + OrderNo = pushInput.OrderNo, + TrackStatus = @event.SystemPushInfo.TrackStatus, + TrackContent = @event.SystemPushInfo.TrackStatus, + TrackTimeZone = @event.SystemPushInfo.TrackTimeZone, + TrackTime = @event.SystemPushInfo.TrackTime, + TrackPlace = @event.SystemPushInfo.TrackPlace, + TrackCode = @event.TrackCode, + Extra = @event.SystemPushInfo.Extra, + }); + } + } } diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs index 14c6c578..b0415664 100644 --- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs +++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs @@ -111,4 +111,10 @@ public class BroadcastingService : IBroadcastingService _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson())); } + + public void TrackPushFailedPubilcTopic(TrackPushRecordDto log) + { + //暂时使用推送完成模型,后续可能会出现有区分度的模型 + TrackPushCompletedPublicTopic(log); + } } From ccc08166b9aa98e957556ac1e5481c3df09abde8 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 15:54:09 +0800 Subject: [PATCH 12/12] =?UTF-8?q?update-package:=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=84=E7=BA=A6=E5=8C=85=E7=89=88=E6=9C=AC=E4=B8=BA7.0.14=20?= =?UTF-8?q?-=20=E8=AF=B7=E6=B1=82id=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=8F=AF?= =?UTF-8?q?=E7=A9=BA=EF=BC=8C=E8=B0=83=E6=95=B4=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/TrackPush/TrackPushRecordDto.cs | 1 + .../SJZY.Track.Application.Contract.csproj | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs index 0e978af4..a2d88e3b 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs @@ -29,6 +29,7 @@ public class TrackPushRecordDto /// /// 接口通请求Id + /// 在请求接口通前被拦截,就不会有请求Id /// public Guid? RequestId { get; set; } 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 1c988cbc..f0778d54 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.13 + 7.0.14 True