Merge branch 'S02-轨迹中台第二部分' of http://192.168.80.50:3000/Dotnet/SJZY.Track.Api into S02-轨迹中台第二部分
This commit is contained in:
commit
02aa293e80
@ -1,6 +1,6 @@
|
||||
namespace SJZY.Track.Application.Contract.Events;
|
||||
|
||||
public class TrackUpsertAfterUpdateOrderEvent
|
||||
public class TrackChangeAfterUpdateOrderEvent
|
||||
{
|
||||
/// <summary>
|
||||
/// 订单Id
|
||||
@ -13,10 +13,15 @@ public class TrackUpsertAfterUpdateOrderEvent
|
||||
public bool IsDelete { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 此次发生的轨迹是否意味完成
|
||||
/// 这条轨迹是否意味着完成
|
||||
/// </summary>
|
||||
public bool IsCompleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹代码
|
||||
/// </summary>
|
||||
public string TrackCode { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹内容
|
||||
/// </summary>
|
||||
@ -41,9 +46,4 @@ public class TrackUpsertAfterUpdateOrderEvent
|
||||
/// 轨迹时区
|
||||
/// </summary>
|
||||
public float TrackTimeZone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹代码
|
||||
/// </summary>
|
||||
public string TrackCode { get; set; } = null!;
|
||||
}
|
||||
@ -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
|
||||
{
|
||||
@ -13,19 +13,19 @@ 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)]
|
||||
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
|
||||
public async Task ConsumerAsync(TrackDeleteEvent @event)
|
||||
{
|
||||
if (@event.Visited.Contains(@event.OrderId))
|
||||
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
// 根据订单关联关系异步向下刷
|
||||
|
||||
@ -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!;
|
||||
|
||||
@ -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))
|
||||
@ -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,
|
||||
|
||||
@ -48,7 +48,7 @@ public class TrackDetailsIndex : IdBaseIndex
|
||||
public int TrackContentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 这条轨迹是否意味着完成(删除回退需要用到)
|
||||
/// 这条轨迹是否意味着完成
|
||||
/// </summary>
|
||||
public bool IsCompleted { get; set; }
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ public partial class GlobalConst
|
||||
/// <summary>
|
||||
/// 轨迹新增/更新后触发更新订单主表
|
||||
/// </summary>
|
||||
public const string TrackUpsertAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder";
|
||||
public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder";
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹推送后触发更新订单主表
|
||||
|
||||
@ -160,12 +160,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
|
||||
public async Task<bool> DeleteTrackAsync(int orderId, List<string> trackCodes)
|
||||
{
|
||||
var r = await Context.DeleteByQueryAsync<TrackDetailsIndex>(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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user