Merge branch 'S02-轨迹中台第二部分' into test
This commit is contained in:
commit
915eb88f03
@ -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!;
|
|
||||||
}
|
}
|
||||||
@ -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
|
||||||
{
|
{
|
||||||
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据订单关联关系异步向下刷
|
// 根据订单关联关系异步向下刷
|
||||||
|
|||||||
@ -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!;
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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; }
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
/// 轨迹推送后触发更新订单主表
|
/// 轨迹推送后触发更新订单主表
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user