From 769fb8b66a6adb265a52afa0cb3f681a67bf8213 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, 6 Mar 2024 15:18:08 +0800 Subject: [PATCH] =?UTF-8?q?change=20=E8=BD=A8=E8=BF=B9=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackDeleteEvent.cs | 7 ++++++- .../EventHandlers/TrackDeleteEventHandler.cs | 21 +++++++++++++------ .../EventHandlers/TrackUpsertEventHandler.cs | 2 ++ .../TrackDetailsIndex.cs | 4 ++-- .../Dtos/TrackDetails/MatchTrackContentDto.cs | 7 ++++++- .../Queries/ProvideQueries.cs | 3 ++- .../Repositories/TrackDetailsRepository.cs | 13 ++++-------- 7 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs index c88d5837..eccbe955 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs @@ -16,9 +16,14 @@ public class TrackDeleteEvent /// 子系统id /// public int SubSystemId { get; set; } - + /// /// 上游子系统id /// public int UpSubSystemId { get; set; } + + /// + /// 已经处理过的订单 + /// + public List Visited { get; set; } = new(); } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index f70492f4..55bb5b1d 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -1,5 +1,5 @@ using DotNetCore.CAP; -using SJZY.Expand.ABP.Core.PublicMethords; +using SJZY.Expand.ABP.Core.Logger; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; @@ -8,14 +8,15 @@ using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.EventHandlers; -public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe +public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe { private readonly IOrderRepository _orderRepository; private readonly IProvideQueries _provideQueries; private readonly ITrackDetailsRepository _trackDetailsRepository; private readonly ICapPublisher _capPublisher; - public TrackDeleteEventHandler(IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, IOrderRepository orderRepository, ICapPublisher capPublisher) + public TrackDeleteEventHandler(IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, + IOrderRepository orderRepository, ICapPublisher capPublisher) { _provideQueries = provideQueries; _trackDetailsRepository = trackDetailsRepository; @@ -26,6 +27,14 @@ public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe [CapSubscribe(GlobalConst.TrackDeleteSubscribe)] public async Task ConsumerAsync(TrackDeleteEvent @event) { + if (@event.Visited.Contains(@event.OrderId)) + { + LogHelper.Error($"轨迹订单循环依赖预警:{@event.Visited.JoinAsString(",")}"); + return; + } + + @event.Visited.Add(@event.OrderId); + // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -40,7 +49,7 @@ public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe @event.TrackCodes = mapCodes; } - + await DeleteTrackAsync(@event); } @@ -48,7 +57,7 @@ public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe { // 删除轨迹 await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); - + // 根据订单关联关系异步向下刷 var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId); foreach (var linkedOrder in linkedOrders) @@ -60,7 +69,7 @@ public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe SubSystemId = linkedOrder.SubSystemId, 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 1c3c8e92..29e14bc2 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -50,6 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (mapCode == default) { + // 跨子系统没做映射的轨迹不处理 return; } @@ -90,6 +91,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime!.Value, TrackTimeZone = @event.TrackTimeZone!.Value, + IsCanDelete = trackContent.IsCanDelete, 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 8974dac3..d4f5c9e1 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -76,8 +76,8 @@ public class TrackDetailsIndex : IdBaseIndex /// public float TrackTimeZone { get; set; } - /// 删除标记 0正常 1 已删除 - public bool IsDeleted { get; set; } + /// 是否可删 + public bool IsCanDelete { get; set; } /// 创建人 public string? CreateUser { get; set; } diff --git a/src/SJZY.Track.Domain/Dtos/TrackDetails/MatchTrackContentDto.cs b/src/SJZY.Track.Domain/Dtos/TrackDetails/MatchTrackContentDto.cs index 2c2a366d..adb51944 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackDetails/MatchTrackContentDto.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackDetails/MatchTrackContentDto.cs @@ -16,9 +16,14 @@ public class MatchTrackContentDto /// 轨迹状态 /// public string Status { get; set; } = null!; - + /// /// 是否意味着完成 /// public bool IsCompleted { get; set; } + + /// + /// 是否可删 + /// + public bool IsCanDelete { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs index e1ff71d4..526d5e3d 100644 --- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs +++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs @@ -74,7 +74,8 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, Content = b.Content, EnContent = b.EnContent, Status = c.Status, - IsCompleted = b.IsCompleted + IsCompleted = b.IsCompleted, + IsCanDelete = a.IsCanDelete }) .FirstAsync(); } diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 25dee126..0b1da83b 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -20,7 +20,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract q.Term(f => f.OrderId, orderId) && q.Term(f => f.TrackCode.Suffix("keyword"), trackCode) - && q.Term(f => f.IsDeleted, false) ) ); @@ -81,7 +80,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract f.OrderNo.Suffix("keyword")) .Terms(orderNos)) && q.Term(f => f.OrderType, orderType) - && q.Term(t => t.Field(f => f.IsDeleted).Value(false)) ) ); @@ -90,8 +88,9 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract?> GetListAsync(int orderId) { - var data = await Context.SearchAsync(x => x.Query(q => q.Term(t => t.OrderId, orderId) - && q.Term(a => a.Field(g => g.IsDeleted).Value(false)) + var data = await Context.SearchAsync(x => x + .Query(q => + q.Term(t => t.OrderId, orderId) ) .Size(1000) .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))); @@ -103,7 +102,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(x => x.Query(q => q.Terms(t => t.Field(g => g.OrderId).Terms(orderIds)) - && q.Term(a => a.Field(d => d.IsDeleted).Value(false)) ) .Size(10000) .Sort(s => s.Field(c => c.TrackTime, SortOrder.Descending)) @@ -113,13 +111,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract trackCodes) { - var r = await Context.UpdateByQueryAsync(x => x + var r = await Context.DeleteByQueryAsync(x => x .Query( q => q.Term(t => t.OrderId, orderId) && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) - .Script(s => s - .Source("ctx._source.isDeleted = true")) ); if (!r.IsValid) @@ -138,7 +134,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract t .Field(f => f.OrderNo) .Terms(distinctOrderNumbers)) - && q.Term(t => t.Field(f => f.IsDeleted).Value(false)) ) .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending)) .From((input.PageIndex - 1) * input.PageSize)