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)