Merge branch 'S02-轨迹中台第二部分' into test

This commit is contained in:
李鹏军 2024-03-19 14:40:11 +08:00
commit 915eb88f03
9 changed files with 57 additions and 63 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 // upsert引发的更新 else
{ {
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;
} }
}
order.IsCompleted = @event.IsCompleted; // upsert引发的更新
order.LatestTrackContent = @event.TrackContent; order.IsCompleted = @event.IsCompleted;
order.LatestTrackEnContent = @event.TrackEnContent; order.LatestTrackContent = @event.TrackContent;
order.LatestTrackPlace = @event.TrackPlace; order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackTime = @event.TrackTime; order.LatestTrackPlace = @event.TrackPlace;
order.LatestTrackTimeZone = @event.TrackTimeZone; order.LatestTrackTime = @event.TrackTime;
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

@ -128,7 +128,7 @@ public class TrackOrderService : ApplicationService
/// 获取轨迹计数器 /// 获取轨迹计数器
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet("GetTrackCounter")]
public async Task<GetTrackCounterOutput> GetTrackCounterAsync() public async Task<GetTrackCounterOutput> GetTrackCounterAsync()
{ {
var counts = await _trackOrderQueries.GetTrackProblemCountsAsync(); var counts = await _trackOrderQueries.GetTrackProblemCountsAsync();
@ -146,7 +146,7 @@ public class TrackOrderService : ApplicationService
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
/// <param name="orderId">订单id</param> /// <param name="orderId">订单id</param>
[HttpGet] [HttpGet("GetTrackPushRecords")]
public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(int orderId) public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(int orderId)
{ {
return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId); return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId);

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

@ -160,12 +160,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
public async Task<bool> DeleteTrackAsync(int orderId, List<string> trackCodes) public async Task<bool> DeleteTrackAsync(int orderId, List<string> trackCodes)
{ {
var r = await Context.DeleteByQueryAsync<TrackDetailsIndex>(x => x var r = await Context.DeleteByQueryAsync<TrackDetailsIndex>(x => x
.Query( .Query(
q => q =>
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)