change 轨迹删除逻辑
This commit is contained in:
parent
8922d98ba4
commit
769fb8b66a
@ -21,4 +21,9 @@ public class TrackDeleteEvent
|
||||
/// 上游子系统id
|
||||
/// </summary>
|
||||
public int UpSubSystemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已经处理过的订单
|
||||
/// </summary>
|
||||
public List<int> Visited { get; set; } = new();
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -76,8 +76,8 @@ public class TrackDetailsIndex : IdBaseIndex
|
||||
/// </summary>
|
||||
public float TrackTimeZone { get; set; }
|
||||
|
||||
/// <summary>删除标记 0正常 1 已删除</summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
/// <summary>是否可删</summary>
|
||||
public bool IsCanDelete { get; set; }
|
||||
|
||||
/// <summary>创建人</summary>
|
||||
public string? CreateUser { get; set; }
|
||||
|
||||
@ -21,4 +21,9 @@ public class MatchTrackContentDto
|
||||
/// 是否意味着完成
|
||||
/// </summary>
|
||||
public bool IsCompleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否可删
|
||||
/// </summary>
|
||||
public bool IsCanDelete { get; set; }
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -20,7 +20,6 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
|
||||
.Query(q =>
|
||||
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<TrackDetail
|
||||
.Field(f => 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<TrackDetail
|
||||
|
||||
public async Task<List<TrackDetailsIndex>?> GetListAsync(int orderId)
|
||||
{
|
||||
var data = await Context.SearchAsync<TrackDetailsIndex>(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<TrackDetailsIndex>(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<TrackDetail
|
||||
{
|
||||
var data = await Context.SearchAsync<TrackDetailsIndex>(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<TrackDetail
|
||||
|
||||
public async Task DeleteTrackAsync(int orderId, List<string> trackCodes)
|
||||
{
|
||||
var r = await Context.UpdateByQueryAsync<TrackDetailsIndex>(x => x
|
||||
var r = await Context.DeleteByQueryAsync<TrackDetailsIndex>(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<TrackDetail
|
||||
q.Terms(t => 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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user