Merge branch 'S02-轨迹中台第二部分' of http://192.168.80.50:3000/Dotnet/SJZY.Track.Api into S02-轨迹中台第二部分

This commit is contained in:
moyongzhen 2024-03-19 14:52:17 +08:00
commit 02aa293e80
8 changed files with 55 additions and 61 deletions

View File

@ -1,6 +1,6 @@
namespace SJZY.Track.Application.Contract.Events; namespace SJZY.Track.Application.Contract.Events;
public class TrackUpsertAfterUpdateOrderEvent public class TrackChangeAfterUpdateOrderEvent
{ {
/// <summary> /// <summary>
/// 订单Id /// 订单Id
@ -13,10 +13,15 @@ public class TrackUpsertAfterUpdateOrderEvent
public bool IsDelete { get; set; } public bool IsDelete { get; set; }
/// <summary> /// <summary>
/// 此次发生的轨迹是否意味完成 /// 这条轨迹是否意味着完成
/// </summary> /// </summary>
public bool IsCompleted { get; set; } public bool IsCompleted { get; set; }
/// <summary>
/// 轨迹代码
/// </summary>
public string TrackCode { get; set; } = null!;
/// <summary> /// <summary>
/// 轨迹内容 /// 轨迹内容
/// </summary> /// </summary>
@ -41,9 +46,4 @@ public class TrackUpsertAfterUpdateOrderEvent
/// 轨迹时区 /// 轨迹时区
/// </summary> /// </summary>
public float TrackTimeZone { get; set; } public float TrackTimeZone { get; set; }
/// <summary>
/// 轨迹代码
/// </summary>
public string TrackCode { get; set; } = null!;
} }

View File

@ -1,33 +1,39 @@
using DotNetCore.CAP; using DotNetCore.CAP;
using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.EventHandlers; namespace SJZY.Track.Application.EventHandlers;
public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
{ {
private readonly IOrderRepository _orderRepository; private readonly IOrderRepository _orderRepository;
private readonly ITrackDetailsRepository _trackDetailsRepository;
public TrackUpsertAfterUpdateOrderEventHandler(IOrderRepository orderRepository) public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository,
ITrackDetailsRepository trackDetailsRepository)
{ {
_orderRepository = orderRepository; _orderRepository = orderRepository;
_trackDetailsRepository = trackDetailsRepository;
} }
[CapSubscribe(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe)] [CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)]
public async Task ConsumerAsync(TrackUpsertAfterUpdateOrderEvent @event) public async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event)
{ {
var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId); var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId);
if (order == default) return; if (order == default) return;
if (@event.IsDelete) if (@event.IsDelete)
{ {
if (@event.TrackTime == default) var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId);
// 删除全部轨迹导致的重置行为
if (track == default)
{ {
if (order.LatestTrackTime == null) return; if (order.LatestTrackTime == null) return;
// 删除全部轨迹导致的重置行为
// tips:订单是支持从已完成态到未完成态的 // tips:订单是支持从已完成态到未完成态的
order.ResetTrackInfo(); order.ResetTrackInfo();
@ -37,14 +43,14 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa
} }
// 删除引发的回退更新 // 删除引发的回退更新
if (order.LatestTrackTime != null && order.IsCompleted = track.IsCompleted;
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) == order.LatestTrackContent = track.TrackContent;
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0))) order.LatestTrackEnContent = track.TrackEnContent;
{ order.LatestTrackPlace = track.TrackPlace;
return; order.LatestTrackTime = track.TrackTime;
order.LatestTrackTimeZone = track.TrackTimeZone;
} }
} else
else // upsert引发的更新
{ {
if (order.LatestTrackTime != null && if (order.LatestTrackTime != null &&
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) < @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) <
@ -52,14 +58,15 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa
{ {
return; return;
} }
}
// upsert引发的更新
order.IsCompleted = @event.IsCompleted; order.IsCompleted = @event.IsCompleted;
order.LatestTrackContent = @event.TrackContent; order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent; order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace; order.LatestTrackPlace = @event.TrackPlace;
order.LatestTrackTime = @event.TrackTime; order.LatestTrackTime = @event.TrackTime;
order.LatestTrackTimeZone = @event.TrackTimeZone; order.LatestTrackTimeZone = @event.TrackTimeZone;
}
await _orderRepository.UpdateColumnAsync(order, x => new await _orderRepository.UpdateColumnAsync(order, x => new
{ {

View File

@ -13,19 +13,19 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
{ {
private readonly IOrderRepository _orderRepository; private readonly IOrderRepository _orderRepository;
private readonly IProvideQueries _provideQueries; private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsRepository _trackDetailsRepository;
private readonly ICapPublisher _capPublisher; private readonly ICapPublisher _capPublisher;
private readonly ITrackDetailsRepository _trackDetailsRepository;
public TrackDeleteEventHandler(IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, public TrackDeleteEventHandler(IProvideQueries provideQueries,
IOrderRepository orderRepository, ICapPublisher capPublisher) IOrderRepository orderRepository, ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository)
{ {
_provideQueries = provideQueries; _provideQueries = provideQueries;
_trackDetailsRepository = trackDetailsRepository;
_orderRepository = orderRepository; _orderRepository = orderRepository;
_capPublisher = capPublisher; _capPublisher = capPublisher;
_trackDetailsRepository = trackDetailsRepository;
} }
[CapSubscribe(GlobalConst.TrackDeleteSubscribe)] [CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
public async Task ConsumerAsync(TrackDeleteEvent @event) public async Task ConsumerAsync(TrackDeleteEvent @event)
{ {
if (@event.Visited.Contains(@event.OrderId)) if (@event.Visited.Contains(@event.OrderId))
@ -59,28 +59,15 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
// 删除轨迹 // 删除轨迹
var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
// 触发订单主表更新事件
if (isOk) if (isOk)
{ {
var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); // 触发订单主表更新事件
var updateOrderEvent = track == default await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
? new TrackUpsertAfterUpdateOrderEvent new TrackChangeAfterUpdateOrderEvent
{ {
OrderId = @event.OrderId, OrderId = @event.OrderId,
IsDelete = true 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);
} }
// 根据订单关联关系异步向下刷 // 根据订单关联关系异步向下刷

View File

@ -22,7 +22,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
_capPublisher = capPublisher; _capPublisher = capPublisher;
} }
[CapSubscribe(GlobalConst.TrackPushSubscribe)] [CapSubscribe(GlobalConst.TrackPushSubscribe, Group = GlobalConst.TrackPushSubscribe)]
public async Task ConsumerAsync(TrackPushEvent @event) public async Task ConsumerAsync(TrackPushEvent @event)
{ {
InterfaceRelayUnifyResultDto res = null!; InterfaceRelayUnifyResultDto res = null!;

View File

@ -33,7 +33,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_trackPushCacheService = trackPushCacheService; _trackPushCacheService = trackPushCacheService;
} }
[CapSubscribe(GlobalConst.TrackUpsertSubscribe)] [CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
public async Task ConsumerAsync(TrackUpsertEvent @event) public async Task ConsumerAsync(TrackUpsertEvent @event)
{ {
if (@event.Visited.Contains(@event.OrderId)) if (@event.Visited.Contains(@event.OrderId))
@ -70,8 +70,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
await HandleTrackPushAsync(@event, track); await HandleTrackPushAsync(@event, track);
// step3、触发订单主表更新事件(异步) // step3、触发订单主表更新事件(异步)
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe, await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
new TrackUpsertAfterUpdateOrderEvent new TrackChangeAfterUpdateOrderEvent
{ {
OrderId = track.OrderId, OrderId = track.OrderId,
IsCompleted = track.IsCompleted, IsCompleted = track.IsCompleted,

View File

@ -48,7 +48,7 @@ public class TrackDetailsIndex : IdBaseIndex
public int TrackContentId { get; set; } public int TrackContentId { get; set; }
/// <summary> /// <summary>
/// 这条轨迹是否意味着完成(删除回退需要用到) /// 这条轨迹是否意味着完成
/// </summary> /// </summary>
public bool IsCompleted { get; set; } public bool IsCompleted { get; set; }

View File

@ -25,7 +25,7 @@ public partial class GlobalConst
/// <summary> /// <summary>
/// 轨迹新增/更新后触发更新订单主表 /// 轨迹新增/更新后触发更新订单主表
/// </summary> /// </summary>
public const string TrackUpsertAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder";
/// <summary> /// <summary>
/// 轨迹推送后触发更新订单主表 /// 轨迹推送后触发更新订单主表

View File

@ -165,7 +165,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
q.Term(t => t.OrderId, orderId) q.Term(t => t.OrderId, orderId)
&& q.Term(t => t.IsCanDelete, true) && q.Term(t => t.IsCanDelete, true)
&& q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)))
.Refresh() // 可选:立即刷新索引使更改立即可见 .WaitForCompletion()
); );
if (!r.IsValid) if (!r.IsValid)