From b17f01b157b242e406677f5bb2f8c277b3cca43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 14:35:34 +0800 Subject: [PATCH 01/32] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=AF=BC=E8=87=B4=E8=AE=A2=E5=8D=95=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...cs => TrackChangeAfterUpdateOrderEvent.cs} | 14 +++--- ...rackChangeAfterUpdateOrderEventHandler.cs} | 47 +++++++++++-------- .../EventHandlers/TrackDeleteEventHandler.cs | 29 ++++-------- .../EventHandlers/TrackUpsertEventHandler.cs | 4 +- .../TrackDetailsIndex.cs | 2 +- .../Consts/GlobalConst.MQ.cs | 2 +- .../Repositories/TrackDetailsRepository.cs | 12 ++--- 7 files changed, 52 insertions(+), 58 deletions(-) rename src/SJZY.Track.Application.Contract/Events/{TrackUpsertAfterUpdateOrderEvent.cs => TrackChangeAfterUpdateOrderEvent.cs} (91%) rename src/SJZY.Track.Application/EventHandlers/{TrackUpsertAfterUpdateOrderEventHandler.cs => TrackChangeAfterUpdateOrderEventHandler.cs} (50%) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs similarity index 91% rename from src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs rename to src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs index bf3907b4..448b5bf2 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs @@ -1,6 +1,6 @@ namespace SJZY.Track.Application.Contract.Events; -public class TrackUpsertAfterUpdateOrderEvent +public class TrackChangeAfterUpdateOrderEvent { /// /// 订单Id @@ -13,10 +13,15 @@ public class TrackUpsertAfterUpdateOrderEvent public bool IsDelete { get; set; } /// - /// 此次发生的轨迹是否意味完成 + /// 这条轨迹是否意味着完成 /// public bool IsCompleted { get; set; } + /// + /// 轨迹代码 + /// + public string TrackCode { get; set; } = null!; + /// /// 轨迹内容 /// @@ -41,9 +46,4 @@ public class TrackUpsertAfterUpdateOrderEvent /// 轨迹时区 /// public float TrackTimeZone { get; set; } - - /// - /// 轨迹代码 - /// - public string TrackCode { get; set; } = null!; } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs similarity index 50% rename from src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs rename to src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs index 1ce9ae93..82dae4c9 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs @@ -1,33 +1,39 @@ using DotNetCore.CAP; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.EventHandlers; -public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe +public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe { private readonly IOrderRepository _orderRepository; + private readonly ITrackDetailsRepository _trackDetailsRepository; - public TrackUpsertAfterUpdateOrderEventHandler(IOrderRepository orderRepository) + public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository, + ITrackDetailsRepository trackDetailsRepository) { _orderRepository = orderRepository; + _trackDetailsRepository = trackDetailsRepository; } - [CapSubscribe(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe)] - public async Task ConsumerAsync(TrackUpsertAfterUpdateOrderEvent @event) + [CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)] + public async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event) { var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId); if (order == default) return; if (@event.IsDelete) { - if (@event.TrackTime == default) + var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); + + // 删除全部轨迹导致的重置行为 + if (track == default) { if (order.LatestTrackTime == null) return; - // 删除全部轨迹导致的重置行为 // tips:订单是支持从已完成态到未完成态的 order.ResetTrackInfo(); @@ -37,14 +43,14 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa } // 删除引发的回退更新 - if (order.LatestTrackTime != null && - @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) == - order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0))) - { - return; - } + order.IsCompleted = track.IsCompleted; + order.LatestTrackContent = track.TrackContent; + order.LatestTrackEnContent = track.TrackEnContent; + order.LatestTrackPlace = track.TrackPlace; + order.LatestTrackTime = track.TrackTime; + order.LatestTrackTimeZone = track.TrackTimeZone; } - else // upsert引发的更新 + else { if (order.LatestTrackTime != null && @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) < @@ -52,14 +58,15 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa { return; } - } - order.IsCompleted = @event.IsCompleted; - order.LatestTrackContent = @event.TrackContent; - order.LatestTrackEnContent = @event.TrackEnContent; - order.LatestTrackPlace = @event.TrackPlace; - order.LatestTrackTime = @event.TrackTime; - order.LatestTrackTimeZone = @event.TrackTimeZone; + // upsert引发的更新 + order.IsCompleted = @event.IsCompleted; + order.LatestTrackContent = @event.TrackContent; + order.LatestTrackEnContent = @event.TrackEnContent; + order.LatestTrackPlace = @event.TrackPlace; + order.LatestTrackTime = @event.TrackTime; + order.LatestTrackTimeZone = @event.TrackTimeZone; + } await _orderRepository.UpdateColumnAsync(order, x => new { diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 1a1f0df0..f17fbb86 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -13,16 +13,16 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe { private readonly IOrderRepository _orderRepository; private readonly IProvideQueries _provideQueries; - private readonly ITrackDetailsRepository _trackDetailsRepository; private readonly ICapPublisher _capPublisher; + private readonly ITrackDetailsRepository _trackDetailsRepository; - public TrackDeleteEventHandler(IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, - IOrderRepository orderRepository, ICapPublisher capPublisher) + public TrackDeleteEventHandler(IProvideQueries provideQueries, + IOrderRepository orderRepository, ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository) { _provideQueries = provideQueries; - _trackDetailsRepository = trackDetailsRepository; _orderRepository = orderRepository; _capPublisher = capPublisher; + _trackDetailsRepository = trackDetailsRepository; } [CapSubscribe(GlobalConst.TrackDeleteSubscribe)] @@ -59,28 +59,15 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe // 删除轨迹 var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); - // 触发订单主表更新事件 if (isOk) { - var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); - var updateOrderEvent = track == default - ? new TrackUpsertAfterUpdateOrderEvent + // 触发订单主表更新事件 + await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe, + new TrackChangeAfterUpdateOrderEvent { OrderId = @event.OrderId, IsDelete = true - } - : new TrackUpsertAfterUpdateOrderEvent - { - OrderId = @event.OrderId, - IsCompleted = track.IsCompleted, - TrackContent = track.TrackContent, - TrackEnContent = track.TrackEnContent, - TrackPlace = track.TrackPlace, - TrackTime = track.TrackTime, - TrackTimeZone = track.TrackTimeZone, - IsDelete = true - }; - await _capPublisher.PublishAsync(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe, updateOrderEvent); + }); } // 根据订单关联关系异步向下刷 diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 9d375716..e1bccee4 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -70,8 +70,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe await HandleTrackPushAsync(@event, track); // step3、触发订单主表更新事件(异步) - await _capPublisher.PublishAsync(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe, - new TrackUpsertAfterUpdateOrderEvent + await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe, + new TrackChangeAfterUpdateOrderEvent { OrderId = track.OrderId, IsCompleted = track.IsCompleted, diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 43721588..5581c19d 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -48,7 +48,7 @@ public class TrackDetailsIndex : IdBaseIndex public int TrackContentId { get; set; } /// - /// 这条轨迹是否意味着完成(删除回退需要用到) + /// 这条轨迹是否意味着完成 /// public bool IsCompleted { get; set; } diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs index d9dfd74b..2685b8b0 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs @@ -25,7 +25,7 @@ public partial class GlobalConst /// /// 轨迹新增/更新后触发更新订单主表 /// - public const string TrackUpsertAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; + public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; /// /// 轨迹推送后触发更新订单主表 diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index f50d7ebb..06288928 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -160,12 +160,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract DeleteTrackAsync(int orderId, List trackCodes) { var r = await Context.DeleteByQueryAsync(x => x - .Query( - q => - q.Term(t => t.OrderId, orderId) - && q.Term(t => t.IsCanDelete, true) - && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) - .Refresh() // 可选:立即刷新索引使更改立即可见 + .Query( + q => + q.Term(t => t.OrderId, orderId) + && q.Term(t => t.IsCanDelete, true) + && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) + .WaitForCompletion() ); if (!r.IsValid) From 9cca8dedc40596940c235d1323c875b057d43bff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 14:39:09 +0800 Subject: [PATCH 02/32] =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackDeleteEventHandler.cs | 2 +- .../EventHandlers/TrackPushEventHandler.cs | 2 +- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index f17fbb86..36bada1d 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe _trackDetailsRepository = trackDetailsRepository; } - [CapSubscribe(GlobalConst.TrackDeleteSubscribe)] + [CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)] public async Task ConsumerAsync(TrackDeleteEvent @event) { if (@event.Visited.Contains(@event.OrderId)) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs index c1ca1b19..a4336631 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs @@ -22,7 +22,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe _capPublisher = capPublisher; } - [CapSubscribe(GlobalConst.TrackPushSubscribe)] + [CapSubscribe(GlobalConst.TrackPushSubscribe, Group = GlobalConst.TrackPushSubscribe)] public async Task ConsumerAsync(TrackPushEvent @event) { InterfaceRelayUnifyResultDto res = null!; diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index e1bccee4..6de64141 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -33,7 +33,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe _trackPushCacheService = trackPushCacheService; } - [CapSubscribe(GlobalConst.TrackUpsertSubscribe)] + [CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)] public async Task ConsumerAsync(TrackUpsertEvent @event) { if (@event.Visited.Contains(@event.OrderId)) From 55d7115b384334fe0d0f8992bbd6738d3b386e10 Mon Sep 17 00:00:00 2001 From: moyongzhen <2534173414@qq.com> Date: Tue, 19 Mar 2024 14:52:09 +0800 Subject: [PATCH 03/32] =?UTF-8?q?=E5=8F=AF=E8=83=BD=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrackContents/TrackContentService.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs index f4946435..90795551 100644 --- a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs +++ b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs @@ -64,7 +64,7 @@ namespace SJZY.Track.Application.Services.TrackContents var detailInfo = await _trackContentRepository.GetDetailAsync(id); if (detailInfo == null) { - return new UnifyResultDto(false, null, "未查询到轨迹状态"); + return new UnifyResultDto(false, null!, "未查询到轨迹状态"); } var dto = ObjectMapper.Map(detailInfo); @@ -101,18 +101,18 @@ namespace SJZY.Track.Application.Services.TrackContents if (trackContentEntitys.Any()) { //throw new BusinessException(message: _stringLocalizer["TrackContentExist"]); - var codes = trackContentEntitys.FirstOrDefault(a => a.Code==input.Code); - if (codes!=null) + var codes = trackContentEntitys.FirstOrDefault(a => a.Code == input.Code); + if (codes != null) { throw new BusinessException(message: "该子系统下轨迹代码已存在"); } - var contents = trackContentEntitys.FirstOrDefault(a => a.Content==input.Content); - if (contents!=null) + var contents = trackContentEntitys.FirstOrDefault(a => a.Content == input.Content); + if (contents != null) { throw new BusinessException(message: "该子系统下轨迹内容已存在"); } - var contentEns = trackContentEntitys.FirstOrDefault(a => a.EnContent==input.EnContent); - if (contentEns!=null) + var contentEns = trackContentEntitys.FirstOrDefault(a => a.EnContent == input.EnContent); + if (contentEns != null) { throw new BusinessException(message: "该子系统下轨迹内容英文已存在"); } @@ -138,18 +138,18 @@ namespace SJZY.Track.Application.Services.TrackContents { //throw new BusinessException(message: _stringLocalizer["TrackContentExist"]); //throw new BusinessException(message: "当前子系统下,轨迹代码或轨迹内容或轨迹内容英文存在"); - var codes = trackContentEntitys.FirstOrDefault(a => a.Code==input.Code); - if (codes!=null) + var codes = trackContentEntitys.FirstOrDefault(a => a.Code == input.Code); + if (codes != null) { throw new BusinessException(message: "该子系统下轨迹代码已存在"); } - var contents = trackContentEntitys.FirstOrDefault(a => a.Content==input.Content); - if (contents!=null) + var contents = trackContentEntitys.FirstOrDefault(a => a.Content == input.Content); + if (contents != null) { throw new BusinessException(message: "该子系统下轨迹内容已存在"); } - var contentEns = trackContentEntitys.FirstOrDefault(a => a.EnContent==input.EnContent); - if (contentEns!=null) + var contentEns = trackContentEntitys.FirstOrDefault(a => a.EnContent == input.EnContent); + if (contentEns != null) { throw new BusinessException(message: "该子系统下轨迹内容英文已存在"); } From 8f1da65c5a684591c92357713f273a02af0f4d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 14:58:53 +0800 Subject: [PATCH 04/32] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs | 4 ++-- .../Repositories/TrackDetailsRepository.cs | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs index 2685b8b0..b6d27ceb 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs @@ -23,9 +23,9 @@ public partial class GlobalConst public const string TrackPushSubscribe = "SJZY.Track.TrackPush"; /// - /// 轨迹新增/更新后触发更新订单主表 + /// 轨迹新增/更新/删除后触发更新订单主表 /// - public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; + public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackChangeAfterUpdateOrder"; /// /// 轨迹推送后触发更新订单主表 diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 06288928..b3a0b2c6 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -160,12 +160,13 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract DeleteTrackAsync(int orderId, List trackCodes) { var r = await Context.DeleteByQueryAsync(x => x - .Query( - q => - q.Term(t => t.OrderId, orderId) - && q.Term(t => t.IsCanDelete, true) - && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) - .WaitForCompletion() + .Query( + q => + q.Term(t => t.OrderId, orderId) + && q.Term(t => t.IsCanDelete, true) + && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) + .WaitForActiveShards("all") + //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 ); if (!r.IsValid) From a13ee83d00df5ae13f70f0b0250ca2f630f7ce5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 15:26:51 +0800 Subject: [PATCH 05/32] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=BC=95=E5=8F=91?= =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=96=B0delay3s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackDeleteEventHandler.cs | 3 ++- .../Repositories/TrackDetailsRepository.cs | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 36bada1d..4f402731 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -62,7 +62,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe if (isOk) { // 触发订单主表更新事件 - await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe, + await _capPublisher.PublishDelayAsync(TimeSpan.FromSeconds(3), + GlobalConst.TrackChangeAfterUpdateOrderSubscribe, new TrackChangeAfterUpdateOrderEvent { OrderId = @event.OrderId, diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index b3a0b2c6..fa370591 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -165,7 +165,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract t.OrderId, orderId) && q.Term(t => t.IsCanDelete, true) && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) - .WaitForActiveShards("all") //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 ); From c4917d66cca351828b3fc52668920532a8d8df11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 15:51:15 +0800 Subject: [PATCH 06/32] =?UTF-8?q?fix=20=E5=BE=AA=E7=8E=AF=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=BC=82=E5=B8=B8case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackDeleteEventHandler.cs | 15 ++++++--------- .../EventHandlers/TrackUpsertEventHandler.cs | 3 +-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 4f402731..28b38520 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; @@ -34,8 +35,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe return; } - @event.Visited.Add(@event.OrderId); - // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -75,13 +74,11 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId); foreach (var linkedOrder in linkedOrders) { - var nextEvent = new TrackDeleteEvent - { - OrderId = linkedOrder.OrderId, - TrackCodes = @event.TrackCodes, - SubSystemId = linkedOrder.SubSystemId, - UpSubSystemId = @event.SubSystemId - }; + var nextEvent = @event.DeepCopy(); + nextEvent.Visited.Add(@event.OrderId); + nextEvent.TrackCodes = @event.TrackCodes; + nextEvent.SubSystemId = linkedOrder.SubSystemId; + nextEvent.UpSubSystemId = @event.SubSystemId; await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent); } diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 6de64141..208b3a85 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -42,8 +42,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return; } - @event.Visited.Add(@event.OrderId); - // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -88,6 +86,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe foreach (var linkedOrder in linkedOrders) { var nextEvent = @event.DeepCopy(); + nextEvent.Visited.Add(@event.OrderId); nextEvent.OrderId = linkedOrder.OrderId; nextEvent.OrderType = linkedOrder.OrderType; nextEvent.OrderNo = linkedOrder.OrderNo; From 038c495dfaa547e839f5d41a10584efec405c547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 20 Mar 2024 17:23:08 +0800 Subject: [PATCH 07/32] =?UTF-8?q?fix=20=E6=8E=A8=E9=80=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8F=AF=E8=83=BD=E6=98=AF=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ITrackPushCacheService.cs | 2 +- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index a4a57bc0..ab34ac01 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -19,7 +19,7 @@ public interface ITrackPushCacheService /// 服务商id /// /// - Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); + Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); /// /// 根据轨迹代码推断下一个(升序)要推送的内容,如果找不到或者已经是最后一个了,返回null diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 208b3a85..7410c881 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -162,7 +162,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { config = await _trackPushCacheService.GetPushContentConfigAsync( @event.SubSystemId, @event.CustomId, track.TrackContentId); - if (!config.IsCanUpdate) return; + if (config == null || !config.IsCanUpdate) return; } else { From 07572a58380c44d684436599fbe5ff6df76acd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E6=96=87=E7=BF=94?= <878130837@qq.com> Date: Wed, 20 Mar 2024 17:26:59 +0800 Subject: [PATCH 08/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ITrackPushCacheService.cs | 2 +- .../Services/TrackPush/TrackPushCacheService.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index a4a57bc0..ab34ac01 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -19,7 +19,7 @@ public interface ITrackPushCacheService /// 服务商id /// /// - Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); + Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); /// /// 根据轨迹代码推断下一个(升序)要推送的内容,如果找不到或者已经是最后一个了,返回null diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index 46155e2e..5dc319f8 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -28,12 +28,12 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService } [NonAction] - public async Task GetPushContentConfigAsync(int subSystemId, int customId, + public async Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId) { var data = await GetPushContentConfigsAsync(subSystemId, customId); - return data.Single(x => x.TrackContentId == trackContentId); + return data?.FirstOrDefault(x => x.TrackContentId == trackContentId); } [NonAction] From 0cb30b3d4b10ba67c2e90516bdb0424075c1a949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 20 Mar 2024 18:36:12 +0800 Subject: [PATCH 09/32] fix upsert --- .../EventHandlers/TrackUpsertEventHandler.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 7410c881..48d1d3f9 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -61,7 +61,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); // step1、upsert es轨迹 - await UpsertTrackAsync(track, @event); + track = await UpsertTrackAsync(track, @event); Debug.Assert(track != null, nameof(track) + " != null"); // step2、触发轨迹推送事件(异步) @@ -103,7 +103,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// /// /// - private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) + private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { if (track == default) { @@ -113,7 +113,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (trackContent == default) { // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹 - return; + return null; } track = new TrackDetailsIndex @@ -146,6 +146,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } await _trackDetailsRepository.UpsertAsync(track); + + return track; } /// From 367211f755fe07ad9b894ae1e1845610c9390e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 09:25:11 +0800 Subject: [PATCH 10/32] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=9F=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackUpsertEvent.cs | 10 ++++++++++ .../EventHandlers/TrackRefreshEventHandler.cs | 2 ++ .../EventHandlers/TrackUpsertEventHandler.cs | 2 ++ .../TrackDetailsAggregate/TrackDetailsIndex.cs | 5 ----- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index eb836245..d6fcb03a 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -38,4 +38,14 @@ public class TrackUpsertEvent : UpsertTrackInput /// 已经处理过的订单 /// public List Visited { get; set; } = new(); + + /// + /// 原轨迹内容 + /// + public string? OriginTrackContent { get; set; } + + /// + /// 原轨迹报文 + /// + public string? OriginTrackData { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs index 9d0e410d..be24fbf0 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs @@ -95,6 +95,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe TrackUpsertEvent @event) { var trackUpsertEvent = @event.DeepCopy(); + trackUpsertEvent.OriginTrackData = JsonConvert.SerializeObject(trackToken); var paramConfig = paramWithContentConfig.ParamConfig; var contentConfigs = paramWithContentConfig.ContentConfigs; TrackPullContentConfigDto? matchedContentConfig = null; @@ -123,6 +124,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var trackContent = trackToken[paramConfig.TrackContentName]?.Value(); if (!trackContent.IsNullOrWhiteSpace()) { + trackUpsertEvent.OriginTrackContent = trackContent; Debug.Assert(trackContent != null, nameof(trackContent) + " != null"); matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentValue == trackContent); diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 48d1d3f9..0e5da045 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -132,6 +132,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackTime = @event.TrackTime!.Value, TrackTimeZone = @event.TrackTimeZone!.Value, IsCanDelete = trackContent.IsCanDelete, + OriginTrackContent = @event.OriginTrackContent, + OriginTrackData = @event.OriginTrackData, CreateUser = CurrentUserRequest.CurrentUser.Name, CreateTime = DateTime.Now }; diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 5581c19d..b596c85a 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -52,11 +52,6 @@ public class TrackDetailsIndex : IdBaseIndex /// public bool IsCompleted { get; set; } - /// - /// 原轨迹状态 - /// - public string? OriginTrackStatus { get; set; } - /// /// 原轨迹内容 /// From 8dcc0596806ff0babd228e2db22d36ccb2d1a9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:00:56 +0800 Subject: [PATCH 11/32] =?UTF-8?q?cap=E6=B6=88=E8=B4=B9=E5=B9=82=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/CAPFilter.cs | 109 ++++++++++++++++++ .../SjzyTrackApplicationModule.cs | 9 +- 2 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 src/SJZY.Track.Application/EventHandlers/CAPFilter.cs diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs new file mode 100644 index 00000000..fbee07b0 --- /dev/null +++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs @@ -0,0 +1,109 @@ +using System.Globalization; +using DotNetCore.CAP.Filter; +using SJZY.Expand.ABP.Core; +using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ABP.Core.PublicMethords; + +namespace SJZY.Track.Application.EventHandlers; + +public class CAPFilter : SubscribeFilter +{ + const string _ERROR_CODE = "Error599"; + + /// + /// 执行前 + /// + /// + /// + public override Task OnSubscribeExecutingAsync(ExecutingContext context) + { + var argumentJsonStr = context.Arguments.ToJson(); + + context.DeliverMessage.Headers["sjzy-receive-time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"); + context.DeliverMessage.Headers["sjzy-arguments"] = argumentJsonStr; + + if (!string.IsNullOrEmpty(argumentJsonStr)) + { + var hash = argumentJsonStr.GetHash(); + using (RedisHelper.Client.Lock("Filter:" + hash, 10)) + { + var isSkip = !string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExcuteFilter:{hash}")); + if (isSkip) + throw new BusinessException(_ERROR_CODE, $"检测到重复消费,消费参数:{argumentJsonStr}"); + + RedisHelper.Client.Set($"CapExcuteFilter:{hash}", 60 * 10, + TimeSpan.FromDays(1).Seconds); // 1天内不允许一模一样的参数重复消费 + } + } + + return Task.CompletedTask; + } + + /// + /// 执行后 + /// + /// + /// + public override Task OnSubscribeExecutedAsync(ExecutedContext context) + { + context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); + context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); + context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); + context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); + + BuildLog(receiveTime, receiveName, arguments, false, messageId); + + return Task.CompletedTask; + } + + + /// + /// 消费异常事件 + /// + /// + /// + public override Task OnSubscribeExceptionAsync(ExceptionContext context) + { + context.ExceptionHandled = true; + + if (context.Exception is BusinessException ex && ex.Code == _ERROR_CODE) + LogHelper.Warn(ex.ToString()); + else + LogHelper.Error(context.Exception.ToString()); + + + context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); + context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); + context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); + context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); + + BuildLog(receiveTime, receiveName, arguments, true, messageId); + + return Task.CompletedTask; + } + + + private void BuildLog(string receiveTime, string receiveName, string arguments, bool isFromExecptionFliter, + string messageId) + { + var parsedDate = DateTime.ParseExact(receiveTime, "yyyy-MM-dd HH:mm:ss fff", CultureInfo.InvariantCulture); + var useTime = DateTime.Now - parsedDate; + + var log = $@" +|-消息编号:{messageId} +|-消费者名:{receiveName} +|-跳过执行:{(isFromExecptionFliter ? "是" : "否")} +|-执行时间:{receiveTime} +|-消费耗时:{useTime.Milliseconds}毫秒 +|-请求参数:{arguments}"; + + if (useTime.Minutes > 20) + { + LogHelper.Error(log); + } + else + { + //LogHelper.Info(log); + } + } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs index b2b2cd06..88062bb8 100644 --- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs +++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs @@ -6,6 +6,7 @@ using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract; +using SJZY.Track.Application.EventHandlers; using SJZY.Track.Application.Localization; using SJZY.UserCenter.Contracts; using SJZY.UserCenter.SharedModel; @@ -90,7 +91,7 @@ namespace SJZY.Track.Application { dashboardOptions.PathBase = System.Diagnostics.Debugger.IsAttached ? "" - : configuration["Swagger:JsonUrlPrefix"]; + : configuration["Swagger:JsonUrlPrefix"]!; }); options.FailedThresholdCallback = faileCalback => { @@ -99,15 +100,15 @@ namespace SJZY.Track.Application LogHelper.Error($@" |-CAP失败回调事件: |-处理类型:{(faileCalback.MessageType == DotNetCore.CAP.Messages.MessageType.Subscribe ? "消费消息达到最大重试次数,需要开发人员介入" : "生产消息推送失败")} - |-头部信息:{faileCalback?.Message?.Headers?.ToJson()} - |-消息内容:{((JsonElement)faileCalback?.Message?.Value).GetRawText()}"); + |-头部信息:{faileCalback.Message.Headers.ToJson()} + |-消息内容:{((JsonElement?)faileCalback.Message.Value)?.GetRawText()}"); } catch (Exception ex) { LogHelper.Error("【严重】CAP失败回调事件发生未处理异常" + ex); } }; - }); + }).AddSubscribeFilter(); } public override void PreConfigureServices(ServiceConfigurationContext context) From 0a9bf47df3c0ab89b3f0b0960b1b73c62a892167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:32:00 +0800 Subject: [PATCH 12/32] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=A4=9A=E5=AD=98=E4=B8=80=E4=B8=AAzero=20track=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 2 ++ .../Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 0e5da045..f5d542ef 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -137,6 +137,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe CreateUser = CurrentUserRequest.CurrentUser.Name, CreateTime = DateTime.Now }; + + track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } else { diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index b596c85a..b3319d35 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -82,6 +82,11 @@ public class TrackDetailsIndex : IdBaseIndex /// public float TrackTimeZone { get; set; } + /// + /// 转化后的轨迹发生时间 + /// + public DateTime ZeroTrackTime { get; set; } + /// 是否可删 public bool IsCanDelete { get; set; } From 4166a36bf0995d7f9a8ddba5643b147a7692c970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:52:53 +0800 Subject: [PATCH 13/32] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=20=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E6=96=B0=E5=A2=9E/=E5=AD=98=E5=9C=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20=E5=88=86=E7=B1=BB=E8=AE=A8=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ProvideServices/UpsertTrackInput.cs | 5 +++++ .../EventHandlers/TrackUpsertEventHandler.cs | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs index 8248c8e0..ce97f715 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -4,6 +4,11 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; public class UpsertTrackInput : OrderNoInfo { + /// + /// true新增,false更新 + /// + public bool IsAdd { get; set; } + /// /// 轨迹内容代码 /// diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index f5d542ef..6c8fd767 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -105,7 +105,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { - if (track == default) + if (track == default && @event.IsAdd) { //todo:可以优化 // 根据轨迹code在订单模板内容中寻找匹配的 @@ -140,7 +140,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } - else + + if (track != default && !@event.IsAdd) { track.TrackPlace = @event.TrackPlace; track.TrackTime = @event.TrackTime!.Value; From 4b189b378d142a028badf416078b18c722e043d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 11:34:06 +0800 Subject: [PATCH 14/32] =?UTF-8?q?=E6=89=B9=E9=87=8Fupsert=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E4=B9=9F=E5=8C=BA=E5=88=86isAdd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ProvideServices/BatchUpsertTrackInput.cs | 5 +++++ .../Services/ProvideServices/TrackService.cs | 1 + 2 files changed, 6 insertions(+) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index fa5d3880..1c90e3a9 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -4,6 +4,11 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; public class BatchUpsertTrackInput : OrderNosInfo { + /// + /// true新增,false更新 + /// + public bool IsAdd { get; set; } + /// /// 轨迹内容代码 /// diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index b45d9313..3e03dc21 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -86,6 +86,7 @@ public partial class TrackService : ApplicationService, ITrackService // 新增/更新轨迹 var @event = new TrackUpsertEvent { + IsAdd = input.IsAdd, TrackCode = input.TrackCode, TrackPlace = input.TrackPlace, TrackTime = input.TrackTime, From 7f0f11d0a3f2d78d98a2247e713db742fb1490a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 14:50:04 +0800 Subject: [PATCH 15/32] =?UTF-8?q?=E6=8E=A8=E6=8B=89=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPullService.cs | 2 +- .../Services/ProvideServices/TrackPushService.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index de894ef4..9fd4cd56 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -102,7 +102,7 @@ public class TrackPullService : ApplicationService GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); } - await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, 1); + await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count); } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 2fee5408..810aff3b 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using Microsoft.AspNetCore.Authorization; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; @@ -107,6 +108,7 @@ public class TrackPushService : ApplicationService /// 定时任务推送预警(》12小时没有推送的) /// /// + [AllowAnonymous] [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { From c76f8a99088a68c032785e968e4ac84fcb3bfb45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Fri, 22 Mar 2024 09:27:42 +0800 Subject: [PATCH 16/32] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BD=A8=E8=BF=B9upser?= =?UTF-8?q?t=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 6c8fd767..2da1fd9b 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -1,5 +1,4 @@ -using System.Diagnostics; -using DotNetCore.CAP; +using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Dtos.ProvideServices; @@ -59,10 +58,12 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); + if (track == null && !@event.IsAdd) return; + if (track != null && @event.IsAdd) return; // step1、upsert es轨迹 track = await UpsertTrackAsync(track, @event); - Debug.Assert(track != null, nameof(track) + " != null"); + if (track == null) return; // 模板没配该轨迹代码,无法入库 // step2、触发轨迹推送事件(异步) await HandleTrackPushAsync(@event, track); @@ -105,7 +106,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { - if (track == default && @event.IsAdd) + if (track == default) { //todo:可以优化 // 根据轨迹code在订单模板内容中寻找匹配的 @@ -140,8 +141,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } - - if (track != default && !@event.IsAdd) + else { track.TrackPlace = @event.TrackPlace; track.TrackTime = @event.TrackTime!.Value; From 3bc9b233d5e847220d18696bd87adac6e3cf1d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 14:12:02 +0800 Subject: [PATCH 17/32] 1 --- .../TrackPushConfigDto.cs} | 2 +- .../Services/ITrackPushCacheService.cs | 2 +- .../AutoMapper/TrackPushAutoMapperProfile.cs | 5 +- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- .../TrackPush/TrackPushCacheService.cs | 12 ++-- .../ITrackPushConfigRepository.cs | 11 +++- .../TrackPush/TrackPushContentConfigVO.cs | 59 +++++++++++++++++ .../Repositories/TrackPushConfigRepository.cs | 64 +++++++++++++++---- 8 files changed, 127 insertions(+), 30 deletions(-) rename src/SJZY.Track.Application.Contract/Dtos/{ProvideServices/TrackPushContentConfigDto.cs => TrackPush/TrackPushConfigDto.cs} (96%) create mode 100644 src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs similarity index 96% rename from src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs rename to src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs index a019087f..1f129458 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs @@ -1,4 +1,4 @@ -namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; +namespace SJZY.Track.Application.Contract.Dtos.TrackPush; public class TrackPushConfigDto { diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index ab34ac01..91b80c3e 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -1,4 +1,4 @@ -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; namespace SJZY.Track.Application.Contract.Services; diff --git a/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs index 6be69d46..213d7872 100644 --- a/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs +++ b/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs @@ -1,8 +1,8 @@ using AutoMapper; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; +using SJZY.Track.Domain.Dtos.TrackPush; using Volo.Abp.AutoMapper; namespace SJZY.Track.Application.AutoMapper; @@ -15,7 +15,6 @@ public class TrackPushAutoMapperProfile : Profile CreateMap(MemberList.None).Ignore(dest => dest.Id) .ForMember(dest => dest.IsPush, opt => opt.MapFrom(source => true)); CreateMap(MemberList.None); - CreateMap(MemberList.None) - .ForMember(dest => dest.OrderType, opt => opt.MapFrom(source => source.OrderNoType)); + CreateMap(MemberList.None); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 2da1fd9b..97a07e17 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -1,7 +1,7 @@ using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.OrderAggregate; diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index 5dc319f8..fe72985a 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -1,9 +1,10 @@ using System.Linq.Expressions; using SJZY.Expand.ABP.Core; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; +using SJZY.Track.Domain.Dtos.TrackPush; namespace SJZY.Track.Application.Services.TrackPush; @@ -74,16 +75,13 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService var trackPushConfigEntity = await _trackPushConfigRepository.GetFirstAsync(exp); if (trackPushConfigEntity == null) return data; - var trackPushContentList = - await _trackPushConfigRepository.GetContentListAsync(x => x.TrackPushConfigId == trackPushConfigEntity.Id); + var trackPushContentList = await _trackPushConfigRepository.GetContentListAsync(trackPushConfigEntity.Id); if (trackPushContentList.Count == 0) return data; - trackPushContentList = trackPushContentList.OrderBy(x => x.Sort).ToList(); - data.IsAutoPush = trackPushConfigEntity.IsAutoPush; data.ContentConfigs = - ObjectMapper.Map, List>(trackPushContentList); - + ObjectMapper.Map, List>(trackPushContentList); + ; await RedisHelper.Client.SetAsync( TrackPushContentKey(trackPushConfigEntity.SubSystemId, trackPushConfigEntity.CustomId), data); diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs index 80013967..641fb386 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs @@ -23,11 +23,16 @@ public interface ITrackPushConfigRepository : IBasicRepository UpdateContentAsync(TrackPushContentConfigEntity updateObj); - Task> GetContentListAsync(Expression> whereExpression); + Task> GetContentListAsync( + Expression> whereExpression); + + Task> GetContentListAsync(int configId); Task UpdateContentRangeAsync(List updateObjs); - Task ContentMaxAsync(Expression> columns, Expression> whereExpression); + Task ContentMaxAsync(Expression> columns, + Expression> whereExpression); - Task UpdateContentAsync(Expression> columns, Expression> whereExpression); + Task UpdateContentAsync(Expression> columns, + Expression> whereExpression); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs new file mode 100644 index 00000000..1f67fb8d --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs @@ -0,0 +1,59 @@ +namespace SJZY.Track.Domain.Dtos.TrackPush; + +public class TrackPushContentConfigVO +{ + /// + /// 是否自动推送 + /// + public bool IsAutoPush { get; set; } + + /// + /// 是否支持更新 + /// + public bool IsCanUpdate { get; set; } + + /// + /// 服务商code + /// + public string ServiceProviderCode { get; set; } = null!; + + /// + /// 扩展字段参数值 + /// + public string? ExpandFieldsValue { get; set; } + + /// + /// 推送单号类型(主数据枚举TrackOrderType) + /// + public int OrderType { get; set; } + + /// + /// 轨迹代码参数值 + /// + public string? TrackContentCodeValue { get; set; } + + /// + /// 轨迹内容id + /// + public int TrackContentId { get; set; } + + /// + /// 轨迹内容参数值 + /// + public string? TrackContentValue { get; set; } + + /// + /// 轨迹内容英文参数值 + /// + public string? TrackEnContentValue { get; set; } + + /// + /// 轨迹状态参数值 + /// + public string? TrackStatusValue { get; set; } + + /// + /// 轨迹时区GMT + /// + public double? TrackTimeZone { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs index e58b1020..74bfc0d3 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs @@ -1,14 +1,13 @@ -using SJZY.Expand.ABP.Core.PublicMethords; +using System.Linq.Expressions; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; -using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.TrackPush; using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; -using System.Linq.Expressions; namespace SJZY.Track.Repository.Repositories; @@ -19,11 +18,14 @@ public class TrackPushConfigRepository : BasicRepository, { return await AsQueryable() .LeftJoin((trackPush, system) => trackPush.SubSystemId == system.Id && !system.IsDeleted) - .LeftJoin((trackPush, system, externalSubject) => trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) + .LeftJoin((trackPush, system, externalSubject) => + trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) .Filter(null, true) .Where(trackPush => !trackPush.IsDeleted) .WhereIF(input.SubSystemId.HasValue, trackPush => trackPush.SubSystemId == input.SubSystemId) - .WhereIF(!input.Keywords.IsNullOrWhiteSpace(), (trackPush, system, externalSubject) => externalSubject.Abbreviation.Contains(input.Keywords!) || externalSubject.Name.Contains(input.Keywords!)) + .WhereIF(!input.Keywords.IsNullOrWhiteSpace(), + (trackPush, system, externalSubject) => externalSubject.Abbreviation.Contains(input.Keywords!) || + externalSubject.Name.Contains(input.Keywords!)) .OrderByDescending(trackPush => trackPush.CreateTime) .Select((trackPush, system, externalSubject) => new GetTrackPushConfigPageOutputVO { @@ -36,11 +38,14 @@ public class TrackPushConfigRepository : BasicRepository, .ToPagedListAsync(input.PageIndex, input.PageSize); } - public async Task> GetContentPageAsync(GetTrackPushContentPageInputVO input) + public async Task> GetContentPageAsync( + GetTrackPushContentPageInputVO input) { return await Context.Queryable() .InnerJoin((pushContent, trackContent) => pushContent.TrackContentId == trackContent.Id) - .LeftJoin((pushContent, trackContent, enumValue) => enumValue.Property == EnumPropertyEnums.单号类型.GetDescription() && pushContent.OrderNoType == enumValue.Enumkey && !enumValue.IsDeleted) + .LeftJoin((pushContent, trackContent, enumValue) => + enumValue.Property == EnumPropertyEnums.单号类型.GetDescription() && + pushContent.OrderNoType == enumValue.Enumkey && !enumValue.IsDeleted) .Where(pushContent => pushContent.TrackPushConfigId == input.TrackPushConfigId) .OrderBy(pushContent => pushContent.Sort) .Select((pushContent, trackContent, enumValue) => new GetTrackPushContentPageOutputVO @@ -56,9 +61,12 @@ public class TrackPushConfigRepository : BasicRepository, { return await AsQueryable() .LeftJoin((trackPush, system) => trackPush.SubSystemId == system.Id && !system.IsDeleted) - .LeftJoin((trackPush, system, externalSubject) => trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) - .LeftJoin((trackPush, system, externalSubject, service) => trackPush.ServiceProviderId == service.Id && !service.IsDeleted) - .InnerJoin((trackPush, system, externalSubject, service, paramsConfig) => trackPush.Id == paramsConfig.PullOrPushConfigId && paramsConfig.IsPush && !paramsConfig.IsDeleted) + .LeftJoin((trackPush, system, externalSubject) => + trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) + .LeftJoin((trackPush, system, externalSubject, service) => + trackPush.ServiceProviderId == service.Id && !service.IsDeleted) + .InnerJoin((trackPush, system, externalSubject, service, paramsConfig) => + trackPush.Id == paramsConfig.PullOrPushConfigId && paramsConfig.IsPush && !paramsConfig.IsDeleted) .Filter(null, true) .Where(trackPush => trackPush.Id == id && !trackPush.IsDeleted) .Select((trackPush, system, externalSubject, service, paramsConfig) => new GetTrackPushConfigDetailOutputVO @@ -112,7 +120,32 @@ public class TrackPushConfigRepository : BasicRepository, return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync(); } - public async Task> GetContentListAsync(Expression> whereExpression) + public async Task> GetContentListAsync(int configId) + { + return await Context.Queryable() + .LeftJoin((a, b) => a.Id == b.TrackPushConfigId) + .LeftJoin((a, b, c) => a.ServiceProviderId == c.Id) + .Where(a => a.Id == configId) + .OrderBy((a, b) => b.Sort) + .Select((a, b, c) => new TrackPushContentConfigVO + { + IsAutoPush = a.IsAutoPush, + IsCanUpdate = a.IsCanUpdate, + ServiceProviderCode = c.Code, + ExpandFieldsValue = b.ExpandFieldsValue, + OrderType = b.OrderNoType, + TrackContentCodeValue = b.TrackContentCodeValue, + TrackContentId = b.TrackContentId, + TrackContentValue = b.TrackContentValue, + TrackEnContentValue = b.TrackEnContentValue, + TrackStatusValue = b.TrackStatusValue, + TrackTimeZone = b.TrackTimeZone + }) + .ToListAsync(); + } + + public async Task> GetContentListAsync( + Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).ToListAsync(); } @@ -122,13 +155,16 @@ public class TrackPushConfigRepository : BasicRepository, return await Context.Updateable(updateObjs).ExecuteCommandHasChangeAsync(); } - public async Task ContentMaxAsync(Expression> columns, Expression> whereExpression) + public async Task ContentMaxAsync(Expression> columns, + Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).MaxAsync(columns); } - public async Task UpdateContentAsync(Expression> columns, Expression> whereExpression) + public async Task UpdateContentAsync(Expression> columns, + Expression> whereExpression) { - return await Context.Updateable().SetColumns(columns).Where(whereExpression).ExecuteCommandHasChangeAsync(); + return await Context.Updateable().SetColumns(columns).Where(whereExpression) + .ExecuteCommandHasChangeAsync(); } } \ No newline at end of file From 33f26e19f139dd8368c8a465b680947d1e193eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:07:49 +0800 Subject: [PATCH 18/32] =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=97=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=AE=A2=E5=8D=95id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 1 + .../Services/ProvideServices/TrackPushService.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 97a07e17..e51481e5 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -192,6 +192,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe OptionType = optionType, ServiceProviderCode = config.ServiceProviderCode, OrderNo = track.OrderNo, + OrderId = track.OrderId, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, TrackCode = track.TrackCode, diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 810aff3b..b0972b56 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -79,6 +79,7 @@ public class TrackPushService : ApplicationService { ServiceProviderCode = config.ServiceProviderCode, OrderNo = order.OrderNo, + OrderId = order.Id, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, TrackCode = track.TrackCode, From 89bd93ad9ed094e15c407f22dfc849f0e34e68d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:14:34 +0800 Subject: [PATCH 19/32] attach --- .../EventHandlers/TrackPushEventHandler.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs index a4336631..58ddb13a 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs @@ -51,6 +51,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe RequestId = res.RequestId, Message = res.Msg, OptionType = @event.OptionType.ToString(), + OrderId = @event.OrderId, TrackStatus = @event.TrackStatus, TrackCode = @event.TrackCode, TrackContent = @event.TrackContent, From 9ab866df9e8927025cd56e77a1a3f85ce31c5d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:27:09 +0800 Subject: [PATCH 20/32] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8Dnest=20=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=8E=A8=E9=80=81=E7=B4=A2=E5=BC=95=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/TrackPushRecordsRepository.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs index c1bb968f..b537adb1 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs @@ -3,6 +3,7 @@ using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; +using SJZY.Track.Domain.Consts; namespace SJZY.Track.Repository.Repositories; @@ -30,6 +31,7 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract> GetTrackPushRecordsAsync(int orderId) { var data = await Context.SearchAsync(x => x + .Index(GlobalConst.TrackPushRecordsIndex) .Query(q => q.Term(t => t.OrderId, orderId) ) From c053a83a27470b30ef1d4bb73712c29d31c0c3bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Mon, 25 Mar 2024 17:39:23 +0800 Subject: [PATCH 21/32] =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=8F=AA=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=AA=E5=AE=8C=E6=88=90=E7=9A=84=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/TrackPushService.cs | 17 ++++++++++++----- .../OrderAggregate/IOrderRepository.cs | 5 +++++ .../Queries/TrackOrderQueries.cs | 2 ++ .../Repositories/OrderRepository.cs | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index b0972b56..85e48c02 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -75,6 +75,8 @@ public class TrackPushService : ApplicationService await _pushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId, track.TrackContentId); + if (config == null) continue; + var trackPushEvent = new TrackPushEvent { ServiceProviderCode = config.ServiceProviderCode, @@ -113,14 +115,19 @@ public class TrackPushService : ApplicationService [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { - var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); - var orders = await _orderRepository.GetListAsync(x => - !x.IsCompleted && x.QuestionType == 0 && x.LatestPushTime < time); + var orders = await _orderRepository.GetPushWarnOrdersAsync(); - orders.ForEach(x => { x.QuestionType = (int)TrackProblemType.Warn; }); + var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); + + orders.ForEach(x => + { + x.QuestionType = x.LatestPushTime == null || x.LatestPushTime < time + ? (int)TrackProblemType.Warn + : (int)TrackProblemType.None; + }); await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType }); - return $"成功将{orders.Select(x => x.OrderNo).JoinAsString(",")}置为预警单"; + return $"成功将:{orders.Count(x => x.QuestionType == (int)TrackProblemType.Warn)}个订单置为预警"; } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index acc0d4de..10832b40 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -25,6 +25,11 @@ public interface IOrderRepository : IBasicRepository /// Task DeleteOrderAsync(int orderId); + /// + /// 获取推送预警单 + /// + /// + Task> GetPushWarnOrdersAsync(); #region 订单关联 diff --git a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs index 8d9d2504..841a3555 100644 --- a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs +++ b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs @@ -1,6 +1,7 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Order; +using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.Queries; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; @@ -38,6 +39,7 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, .WhereIF(input.CustomerId > 0, (a, b, c) => a.CustomId == input.CustomerId) .WhereIF(input.TrackOrderType > 0, (a, b, c) => a.OrderType == input.TrackOrderType) .WhereIF(input.TabType > 0, (a, b, c) => a.QuestionType == input.TabType) + .WhereIF(input.TabType == (int)TrackProblemType.Warn, (a, b, c) => !a.IsCompleted) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO { diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 26a8ed2b..3d18de17 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,6 +1,8 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; +using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories; @@ -53,6 +55,22 @@ public class OrderRepository : BasicRepository, IOrderRepository, I tran.Complete(); } + public async Task> GetPushWarnOrdersAsync() + { + var errorType = (int)TrackProblemType.Error; + + return await Context.Queryable() + .LeftJoin((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) + .Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) + .Select((a, b) => new OrderEntity + { + Id = b.Id, + QuestionType = b.QuestionType, + LatestPushTime = b.LatestPushTime + }) + .ToListAsync(); + } + #region 订单关联 public async Task> GetLinkedOrdersAsync(int orderId) From e5e3b2eccebfc4bd4b95eb4eb7ecdbe4e49c18ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 09:37:19 +0800 Subject: [PATCH 22/32] =?UTF-8?q?fix=20=E8=BD=A8=E8=BF=B9=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPullService.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index 9fd4cd56..f404b238 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -86,10 +86,10 @@ public class TrackPullService : ApplicationService } var orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId); + var serviceProviderCode = orders.FirstOrDefault()?.ServiceProviderCode; foreach (var group in orders.GroupBy(x => - new TrackRefreshAttach(x.ServiceProviderId, x.ServiceProviderCode, x.SubSystemId, - x.OrderType))) + new { x.SubSystemId, x.OrderType })) { var data = group.Select(x => new { @@ -98,8 +98,10 @@ public class TrackPullService : ApplicationService // 批量获取轨迹 await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( - InterfaceRelayConst.GetTrackInterfaceCode, group.Key.ServiceProviderCode, data, - GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); + InterfaceRelayConst.GetTrackInterfaceCode, serviceProviderCode, data, + GlobalConst.TrackRefreshSubscribe, + JsonConvert.SerializeObject(new TrackRefreshAttach(config.ServiceProviderId, serviceProviderCode!, + group.Key.SubSystemId, group.Key.OrderType))); } await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count); From 2fd73776af87de22efada6f566ca2310e3700808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 09:42:13 +0800 Subject: [PATCH 23/32] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=BD=A8=E8=BF=B9=E8=AE=A2=E5=8D=95=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E3=80=91=E5=88=9B=E5=BB=BA=E4=BA=BA=E5=BC=82=E5=B8=B8=E4=B8=BA?= =?UTF-8?q?system=E3=80=91https://www.tapd.cn/60863849/bugtrace/bugs/view?= =?UTF-8?q?=3Fbug=5Fid=3D1160863849001031387?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackUpsertEvent.cs | 5 +++++ .../EventHandlers/TrackUpsertEventHandler.cs | 5 ++--- .../Services/ProvideServices/TrackService.cs | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index d6fcb03a..c2c2072d 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -48,4 +48,9 @@ public class TrackUpsertEvent : UpsertTrackInput /// 原轨迹报文 /// public string? OriginTrackData { get; set; } + + /// + /// 操作人 + /// + public string? OperationMan { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index e51481e5..ed4b838c 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -8,7 +8,6 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Queries; -using SJZY.UserCenter.HttpApi.Services; using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.EventHandlers; @@ -135,7 +134,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe IsCanDelete = trackContent.IsCanDelete, OriginTrackContent = @event.OriginTrackContent, OriginTrackData = @event.OriginTrackData, - CreateUser = CurrentUserRequest.CurrentUser.Name, + CreateUser = @event.OperationMan, CreateTime = DateTime.Now }; @@ -146,7 +145,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.TrackPlace = @event.TrackPlace; track.TrackTime = @event.TrackTime!.Value; track.TrackTimeZone = @event.TrackTimeZone!.Value; - track.UpdateUser = CurrentUserRequest.CurrentUser.Name; + track.UpdateUser = @event.OperationMan ?? "系统"; track.UpdateTime = DateTime.Now; } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 3e03dc21..c21e2a34 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -6,6 +6,7 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Queries; +using SJZY.UserCenter.HttpApi.Services; namespace SJZY.Track.Application.Services.ProvideServices; @@ -56,6 +57,7 @@ public partial class TrackService : ApplicationService, ITrackService @event.LatestPushTrackContentId = order.LatestPushTrackContentId; @event.CustomId = order.CustomId; @event.IsCompleted = order.IsCompleted; + @event.OperationMan = CurrentUserRequest.CurrentUser.Name; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); return true; } From 2520955613f8512d9e2793230ac7981ba3e50c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 10:44:05 +0800 Subject: [PATCH 24/32] =?UTF-8?q?opt=EF=BC=9A=E9=A2=84=E8=AD=A6=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=8E=89=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E4=B8=8D?= =?UTF-8?q?=E8=B6=B312=E5=B0=8F=E6=97=B6=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SJZY.Track.Repository/Repositories/OrderRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 3d18de17..bbbdca05 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -62,6 +62,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I return await Context.Queryable() .LeftJoin((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) .Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) + .Where("a.CreateTime < DATE_SUB(now(),INTERVAL 12 hour)") // 过滤掉创建时间不足12小时的 .Select((a, b) => new OrderEntity { Id = b.Id, From 4d9fb2bbfb7df49d7d4cebf64645e48ada509b93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 11:06:11 +0800 Subject: [PATCH 25/32] =?UTF-8?q?opt=EF=BC=9A=E5=88=B7=E6=96=B0=E6=9C=80?= =?UTF-8?q?=E5=B0=8FCD=E8=AE=BE=E4=B8=BA60min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPullService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index f404b238..f5856f91 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -104,6 +104,7 @@ public class TrackPullService : ApplicationService group.Key.SubSystemId, group.Key.OrderType))); } + if (config.PullInterval < 60) config.PullInterval = 60; await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count); } From 9d6937c059ec605f087379ed8af8f3f14adf516e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 11:06:52 +0800 Subject: [PATCH 26/32] =?UTF-8?q?opt:=20cap=E9=87=8D=E5=A4=8D=E6=B6=88?= =?UTF-8?q?=E8=B4=B9CD=E8=AE=BE=E4=B8=BA1h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SJZY.Track.Application/EventHandlers/CAPFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs index fbee07b0..8bea9494 100644 --- a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs +++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs @@ -32,7 +32,7 @@ public class CAPFilter : SubscribeFilter throw new BusinessException(_ERROR_CODE, $"检测到重复消费,消费参数:{argumentJsonStr}"); RedisHelper.Client.Set($"CapExcuteFilter:{hash}", 60 * 10, - TimeSpan.FromDays(1).Seconds); // 1天内不允许一模一样的参数重复消费 + TimeSpan.FromHours(1).Seconds); // 1h内不允许一模一样的参数重复消费 } } From 1334637bf253f0240bbb652f3a6a15ec4c19ba91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 14:52:18 +0800 Subject: [PATCH 27/32] =?UTF-8?q?fix=20=E6=89=8B=E5=8A=A8=E6=8E=A8?= =?UTF-8?q?=E9=80=81bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/TrackDetailsRepository.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index fa370591..598ab7ba 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -93,10 +93,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(x => x .Source(s => s.Includes(fd => fd + .Field(f => f.OrderId) .Field(f => f.OrderNo) .Field(f => f.TrackStatus) .Field(f => f.TrackCode) .Field(f => f.TrackContent) + .Field(f => f.TrackContentId) .Field(f => f.TrackPlace) .Field(f => f.TrackTime) .Field(f => f.TrackTimeZone) From 0f495477768b21106708b4fb4f8232055ca905b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 15:19:13 +0800 Subject: [PATCH 28/32] =?UTF-8?q?opt:=20=E6=8E=A8=E9=80=81=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=86=97=E4=BD=99orderNo=EF=BC=8CorderType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackPushEvent.cs | 5 +++++ .../EventHandlers/TrackPushEventHandler.cs | 4 +++- .../EventHandlers/TrackUpsertEventHandler.cs | 1 + .../ProvideServices/TrackPushService.cs | 20 +++++++++++++++++-- .../ITrackPushRecordsRepository.cs | 2 ++ .../TrackPushRecordIndex.cs | 10 ++++++++++ .../TrackPushRecordsRepository.cs | 14 +++++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index 8434072e..92ce75e1 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -22,6 +22,11 @@ public class TrackPushEvent /// public string OrderNo { get; set; } = null!; + /// + /// 订单类型 + /// + public int OrderType { get; set; } + /// /// 轨迹内容id /// diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs index 58ddb13a..a1f9aba4 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs @@ -44,7 +44,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var isSuccess = res.Code == InterfaceRelayConst.SuccessCode; - // 写推送日志 + // 往es 写推送日志 await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex { IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}", @@ -52,6 +52,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe Message = res.Msg, OptionType = @event.OptionType.ToString(), OrderId = @event.OrderId, + OrderType = @event.OrderType, + OrderNo = @event.OrderNo, TrackStatus = @event.TrackStatus, TrackCode = @event.TrackCode, TrackContent = @event.TrackContent, diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index ed4b838c..e3276d02 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -191,6 +191,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe OptionType = optionType, ServiceProviderCode = config.ServiceProviderCode, OrderNo = track.OrderNo, + OrderType = track.OrderType, OrderId = track.OrderId, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 85e48c02..272f4c40 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -5,6 +5,7 @@ using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Enums; using SJZY.UserCenter.HttpApi.Services; @@ -22,16 +23,19 @@ public class TrackPushService : ApplicationService private readonly IOrderRepository _orderRepository; private readonly ITrackPushCacheService _pushCacheService; private readonly ICapPublisher _capPublisher; + private readonly ITrackPushRecordsRepository _trackPushRecordsRepository; public TrackPushService(ITrackPushCacheService pushCacheService, ITrackDetailsRepository trackDetailsRepository , IOrderRepository orderRepository - , ICapPublisher capPublisher) + , ICapPublisher capPublisher + , ITrackPushRecordsRepository trackPushRecordsRepository) { _pushCacheService = pushCacheService; _trackDetailsRepository = trackDetailsRepository; _orderRepository = orderRepository; _capPublisher = capPublisher; + _trackPushRecordsRepository = trackPushRecordsRepository; } /// @@ -47,7 +51,7 @@ public class TrackPushService : ApplicationService var orders = await _orderRepository.GetListAsync(x => x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new { - x.Id, x.OrderNo, x.SubSystemId, x.CustomId + x.Id, x.OrderNo, x.OrderType, x.SubSystemId, x.CustomId }); if (orders.Count == 0) @@ -81,6 +85,7 @@ public class TrackPushService : ApplicationService { ServiceProviderCode = config.ServiceProviderCode, OrderNo = order.OrderNo, + OrderType = order.OrderType, OrderId = order.Id, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, @@ -130,4 +135,15 @@ public class TrackPushService : ApplicationService return $"成功将:{orders.Count(x => x.QuestionType == (int)TrackProblemType.Warn)}个订单置为预警"; } + + /// + /// 获取轨迹推送记录 + /// + /// + /// + [HttpGet("GetTrackPushRecords")] + public async Task> GetTrackPushRecordsAsync(OrderNoInfo input) + { + return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(input.OrderNo, input.OrderType); + } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs index e8115b13..e776b1f4 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs @@ -15,4 +15,6 @@ public interface ITrackPushRecordsRepository /// /// Task> GetTrackPushRecordsAsync(int orderId); + + Task> GetTrackPushRecordsAsync(string inputOrderNo, int inputOrderType); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs index 0d178b45..6efa70b5 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs @@ -17,6 +17,16 @@ public class TrackPushRecordIndex : IdBaseIndex /// public int OrderId { get; set; } + /// + /// 订单号 + /// + public string OrderNo { get; set; } = null!; + + /// + /// 订单类型(主数据枚举TrackOrderType) + /// + public int OrderType { get; set; } + /// /// 接口通请求Id /// diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs index b537adb1..3847d786 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs @@ -40,4 +40,18 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract> GetTrackPushRecordsAsync(string orderNo, int orderType) + { + var data = await Context.SearchAsync(x => x + .Index(GlobalConst.TrackPushRecordsIndex) + .Query(q => + q.Term(t => t.OrderNo.Suffix("keyword"), orderNo) + && q.Term(f => f.OrderType, orderType) + ) + .Size(1000) + .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending))); + + return data.Documents.ToList(); + } } \ No newline at end of file From f85bc95e190bf7d01cb763dd6c858246d2a99281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 15:20:00 +0800 Subject: [PATCH 29/32] =?UTF-8?q?add=EF=BC=9A=E3=80=90=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=98=8E=E7=BB=86=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3-=E5=AF=B9=E5=A4=96=E3=80=91https://www.tapd.cn/608638?= =?UTF-8?q?49/prong/tasks/view/1160863849001017119?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPushService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 272f4c40..78611294 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -141,7 +141,7 @@ public class TrackPushService : ApplicationService /// /// /// - [HttpGet("GetTrackPushRecords")] + [HttpGet("Track/GetTrackPushRecords")] public async Task> GetTrackPushRecordsAsync(OrderNoInfo input) { return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(input.OrderNo, input.OrderType); From b232d96634d65b060dc98b55e9b96086d5466cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 17:31:50 +0800 Subject: [PATCH 30/32] =?UTF-8?q?opt=EF=BC=9A=E4=BC=98=E5=8C=96=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9upsert=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackUpsertEvent.cs | 51 +++++++++--- .../SJZY.Track.Application.Contract.csproj | 2 +- .../EventHandlers/CAPFilter.cs | 11 ++- .../EventHandlers/TrackRefreshEventHandler.cs | 10 +-- .../EventHandlers/TrackUpsertEventHandler.cs | 78 +++++++++++++------ .../Services/ProvideServices/TrackService.cs | 4 +- .../ITrackDetailsRepository.cs | 2 + src/SJZY.Track.Domain/Consts/GlobalConst.cs | 6 ++ .../Repositories/TrackDetailsRepository.cs | 19 +++++ 9 files changed, 136 insertions(+), 47 deletions(-) create mode 100644 src/SJZY.Track.Domain/Consts/GlobalConst.cs diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index c2c2072d..1215e1e8 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -1,14 +1,22 @@ -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +namespace SJZY.Track.Application.Contract.Events; -namespace SJZY.Track.Application.Contract.Events; - -public class TrackUpsertEvent : UpsertTrackInput +public class TrackUpsertEvent { /// /// 订单id /// public int OrderId { get; set; } + /// + /// 订单类型 + /// + public int OrderType { get; set; } + + /// + /// 订单号 + /// + public string OrderNo { get; set; } = null!; + /// /// 订单是否完成 /// @@ -34,11 +42,6 @@ public class TrackUpsertEvent : UpsertTrackInput /// public int UpSubSystemId { get; set; } - /// - /// 已经处理过的订单 - /// - public List Visited { get; set; } = new(); - /// /// 原轨迹内容 /// @@ -53,4 +56,34 @@ public class TrackUpsertEvent : UpsertTrackInput /// 操作人 /// public string? OperationMan { get; set; } + + /// + /// true新增,false更新,null表示刷新引发的新增/更新 + /// + public bool? IsAdd { get; set; } + + /// + /// 轨迹内容代码 + /// + public string TrackCode { get; set; } = null!; + + /// + /// 轨迹发生地 + /// + public string TrackPlace { get; set; } = null!; + + /// + /// 轨迹发生时间 + /// + public DateTime TrackTime { get; set; } + + /// + /// 轨迹发生时区 + /// + public float TrackTimeZone { get; set; } + + /// + /// 已经处理过的订单 + /// + public List Visited { get; set; } = new(); } \ No newline at end of file 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 f13ee0b2..13bcd7dd 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 - 1.0.0 + 1.0.1 True diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs index 8bea9494..feaf198f 100644 --- a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs +++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs @@ -65,15 +65,15 @@ public class CAPFilter : SubscribeFilter public override Task OnSubscribeExceptionAsync(ExceptionContext context) { context.ExceptionHandled = true; + context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); if (context.Exception is BusinessException ex && ex.Code == _ERROR_CODE) LogHelper.Warn(ex.ToString()); else - LogHelper.Error(context.Exception.ToString()); + LogHelper.Error($"cap-msg-id:{messageId}\n{context.Exception}"); context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); - context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); @@ -89,16 +89,15 @@ public class CAPFilter : SubscribeFilter var parsedDate = DateTime.ParseExact(receiveTime, "yyyy-MM-dd HH:mm:ss fff", CultureInfo.InvariantCulture); var useTime = DateTime.Now - parsedDate; - var log = $@" + if (useTime.Minutes > 20) + { + var log = $@" |-消息编号:{messageId} |-消费者名:{receiveName} |-跳过执行:{(isFromExecptionFliter ? "是" : "否")} |-执行时间:{receiveTime} |-消费耗时:{useTime.Milliseconds}毫秒 |-请求参数:{arguments}"; - - if (useTime.Minutes > 20) - { LogHelper.Error(log); } else diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs index be24fbf0..153786a9 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs @@ -158,7 +158,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe } } - if (matchedContentConfig is null) return; + // if (matchedContentConfig is null) return; // 轨迹发生地 var trackPlace = paramConfig.TrackPlaceName == null @@ -167,7 +167,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe if (trackPlace.IsNullOrWhiteSpace()) { Expression> resultExpression = - (TrackLocationValue?)matchedContentConfig.TrackPlaceValue switch + (TrackLocationValue?)matchedContentConfig?.TrackPlaceValue switch { TrackLocationValue.ArrivalPort => x => x.ArrivalPort, TrackLocationValue.ArriveCity => x => x.ArrivalCity, @@ -191,10 +191,10 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe : trackToken[paramConfig.TrackTimeZoneName]?.Value(); // 新增/更新轨迹 - trackUpsertEvent.TrackCode = matchedContentConfig.TrackContentCode; - trackUpsertEvent.TrackPlace = trackPlace ?? "CN"; + trackUpsertEvent.TrackCode = matchedContentConfig?.TrackContentCode ?? GlobalConst.EmptyString; + trackUpsertEvent.TrackPlace = trackPlace ?? GlobalConst.EmptyString; trackUpsertEvent.TrackTime = trackTime ?? DateTime.Now; - trackUpsertEvent.TrackTimeZone = trackTimeZone ?? matchedContentConfig.TrackTimeZoneValue ?? 8; + trackUpsertEvent.TrackTimeZone = trackTimeZone ?? matchedContentConfig?.TrackTimeZoneValue ?? 8; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index e3276d02..eab6361e 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -40,6 +40,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return; } + var isUnProcessed = false; // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -56,13 +57,22 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe @event.TrackCode = mapCode; } - var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); - if (track == null && !@event.IsAdd) return; - if (track != null && @event.IsAdd) return; + var track = @event.TrackCode == GlobalConst.EmptyString + ? await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackTime) + : await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); + + if (@event.TrackCode == GlobalConst.EmptyString && track != null) return; // 无法映射的轨迹只做新增 + + if (@event.IsAdd != null) // 手动操作需要做区分 + { + if (track == null && !@event.IsAdd!.Value) return; // 不存在不让改 + if (track != null && @event.IsAdd!.Value) return; // 存在不让创建 + } // step1、upsert es轨迹 track = await UpsertTrackAsync(track, @event); - if (track == null) return; // 模板没配该轨迹代码,无法入库 + + if (track == null || @event.TrackCode == GlobalConst.EmptyString) return; // 模板没配该轨迹代码,不再继续 // step2、触发轨迹推送事件(异步) await HandleTrackPushAsync(@event, track); @@ -107,44 +117,64 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { if (track == default) { - //todo:可以优化 - // 根据轨迹code在订单模板内容中寻找匹配的 - var trackContent = await _provideQueries.MatchTrackContentAsync(@event.OrderId, @event.TrackCode); - if (trackContent == default) - { - // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹 - return null; - } - track = new TrackDetailsIndex { IndexName = $"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}", OrderId = @event.OrderId, OrderNo = @event.OrderNo, OrderType = @event.OrderType, - TrackStatus = trackContent.Status, TrackCode = @event.TrackCode, - TrackContent = trackContent.Content, - TrackContentId = trackContent.Id, - IsCompleted = trackContent.IsCompleted, - TrackEnContent = trackContent.EnContent, TrackPlace = @event.TrackPlace, - TrackTime = @event.TrackTime!.Value, - TrackTimeZone = @event.TrackTimeZone!.Value, - IsCanDelete = trackContent.IsCanDelete, + TrackTime = @event.TrackTime, + TrackTimeZone = @event.TrackTimeZone, + IsCanDelete = false, OriginTrackContent = @event.OriginTrackContent, OriginTrackData = @event.OriginTrackData, CreateUser = @event.OperationMan, CreateTime = DateTime.Now }; - track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); + // tips:刷新到无法匹配内容的轨迹引起的插入 + if (@event.TrackCode == GlobalConst.EmptyString) + { + track.TrackStatus = GlobalConst.EmptyString; + track.TrackContent = GlobalConst.EmptyString; + track.TrackContentId = 0; + track.IsCompleted = false; + track.TrackEnContent = GlobalConst.EmptyString; + } + else + { + //todo:可以优化 + // 根据轨迹code在订单模板内容中寻找匹配的 + var trackContent = await _provideQueries.MatchTrackContentAsync(@event.OrderId, @event.TrackCode); + if (trackContent == default) + { + // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹 + return null; + } + + track = new TrackDetailsIndex + { + TrackStatus = trackContent.Status, + TrackContent = trackContent.Content, + TrackContentId = trackContent.Id, + IsCompleted = trackContent.IsCompleted, + TrackEnContent = trackContent.EnContent, + IsCanDelete = trackContent.IsCanDelete + }; + + track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); + } } else { + // tips:刷新到无法匹配内容的轨迹 相同的发生时间不做更新处理 + if (@event.TrackCode == GlobalConst.EmptyString) return track; + track.TrackPlace = @event.TrackPlace; - track.TrackTime = @event.TrackTime!.Value; - track.TrackTimeZone = @event.TrackTimeZone!.Value; + track.TrackTime = @event.TrackTime; + track.TrackTimeZone = @event.TrackTimeZone; track.UpdateUser = @event.OperationMan ?? "系统"; track.UpdateTime = DateTime.Now; } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index c21e2a34..77199263 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -91,8 +91,8 @@ public partial class TrackService : ApplicationService, ITrackService IsAdd = input.IsAdd, TrackCode = input.TrackCode, TrackPlace = input.TrackPlace, - TrackTime = input.TrackTime, - TrackTimeZone = input.TrackTimeZone, + TrackTime = input.TrackTime!.Value, + TrackTimeZone = input.TrackTimeZone!.Value, OrderType = input.OrderType, OrderNo = order.OrderNo, OrderId = order.Id, diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs index acd0ed4e..c78d9b2f 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs @@ -6,6 +6,8 @@ public interface ITrackDetailsRepository { Task GetFirstOrDefaultAsync(int orderId, string trackCode); + Task GetFirstOrDefaultAsync(int orderId, DateTime trackTime); + Task UpsertAsync(TrackDetailsIndex index); Task> GetListAsync(int orderType, List orderNos); diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.cs new file mode 100644 index 00000000..a7167357 --- /dev/null +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.cs @@ -0,0 +1,6 @@ +namespace SJZY.Track.Domain.Consts; + +public partial class GlobalConst +{ + public const string EmptyString = "--"; +} \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 598ab7ba..b39652de 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -32,6 +32,25 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract GetFirstOrDefaultAsync(int orderId, DateTime trackTime) + { + var r = await Context.SearchAsync(s => s + .Source() + .Query(q => + q.Term(f => f.OrderId, orderId) + && q.Term(f => f.TrackTime, trackTime) + ) + ); + + var res = r.Documents.FirstOrDefault(); + if (res != default && r.Hits.FirstOrDefault() != default) + { + res.Id = r.Hits.FirstOrDefault()!.Id; + } + + return res; + } + public async Task UpsertAsync(TrackDetailsIndex index) { if (index.Id.IsNullOrWhiteSpace()) From 7b20e7a9394bd226b08a9f17e6da4ccb9879fc55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 26 Mar 2024 17:49:41 +0800 Subject: [PATCH 31/32] =?UTF-8?q?=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackRefreshEventHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs index 153786a9..75a991a2 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs @@ -158,7 +158,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe } } - // if (matchedContentConfig is null) return; + if (matchedContentConfig is null) return; // 轨迹发生地 var trackPlace = paramConfig.TrackPlaceName == null From a663894bcc532f7a305dd7d4af8d7a6bbb4a123b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 27 Mar 2024 09:19:45 +0800 Subject: [PATCH 32/32] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E8=AE=A2=E5=8D=95=E3=80=91=E6=89=B9=E9=87=8F=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=BD=A8=E8=BF=B9=E6=98=8E=E7=BB=86=EF=BC=8C=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BA=BA=E5=BC=82=E5=B8=B8=E4=B8=BA=E7=A9=BA=E3=80=91?= =?UTF-8?q?https://www.tapd.cn/60863849/bugtrace/bugs/view=3Fbug=5Fid=3D11?= =?UTF-8?q?60863849001031517?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackDeleteEvent.cs | 5 +++++ .../Services/ProvideServices/TrackService.cs | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs index eccbe955..d5286726 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs @@ -22,6 +22,11 @@ public class TrackDeleteEvent /// public int UpSubSystemId { get; set; } + /// + /// 操作人 + /// + public string? OperationMan { get; set; } + /// /// 已经处理过的订单 /// diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 77199263..72fe2f20 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -80,7 +80,7 @@ public partial class TrackService : ApplicationService, ITrackService var orders = await _orderRepository.GetListAsync(x => x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new { - x.Id, x.OrderNo, x.SubSystemId, x.LatestPushTrackContentId, x.CustomId + x.Id, x.OrderNo, x.SubSystemId, x.LatestPushTrackContentId, x.CustomId, x.IsCompleted }); foreach (var order in orders) @@ -98,7 +98,9 @@ public partial class TrackService : ApplicationService, ITrackService OrderId = order.Id, SubSystemId = order.SubSystemId, LatestPushTrackContentId = order.LatestPushTrackContentId, - CustomId = order.CustomId + CustomId = order.CustomId, + IsCompleted = order.IsCompleted, + OperationMan = CurrentUserRequest.CurrentUser.Name }; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); } @@ -138,6 +140,7 @@ public partial class TrackService : ApplicationService, ITrackService OrderId = order.Id, TrackCodes = codes.Select(x => x.TrackCode).ToList(), SubSystemId = order.SubSystemId, + OperationMan = CurrentUserRequest.CurrentUser.Name }; await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event); @@ -177,6 +180,7 @@ public partial class TrackService : ApplicationService, ITrackService OrderId = group.Key, TrackCodes = codes.Select(x => x.TrackCode).ToList(), SubSystemId = orders.First(x => x.Id == group.Key).SubSystemId, + OperationMan = CurrentUserRequest.CurrentUser.Name }; await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event); }