change【更新轨迹需要更新订单的最新轨迹信息】https://www.tapd.cn/60863849/prong/tasks/view/1160863849001016391
This commit is contained in:
parent
767cbcc319
commit
2e86b7f7ba
@ -7,6 +7,11 @@ public class UpdateOrderTrackEvent
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int OrderId { get; set; }
|
public int OrderId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否删除引起的更新
|
||||||
|
/// </summary>
|
||||||
|
public bool IsDelete { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 此次发生的轨迹是否意味完成
|
/// 此次发生的轨迹是否意味完成
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -56,7 +56,30 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
private async Task DeleteTrackAsync(TrackDeleteEvent @event)
|
private async Task DeleteTrackAsync(TrackDeleteEvent @event)
|
||||||
{
|
{
|
||||||
// 删除轨迹
|
// 删除轨迹
|
||||||
await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
|
var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
|
||||||
|
|
||||||
|
// 触发订单主表更新事件
|
||||||
|
if (isOk)
|
||||||
|
{
|
||||||
|
var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId);
|
||||||
|
var updateOrderEvent = track == default
|
||||||
|
? new UpdateOrderTrackEvent
|
||||||
|
{
|
||||||
|
OrderId = @event.OrderId,
|
||||||
|
IsDelete = true
|
||||||
|
}
|
||||||
|
: new UpdateOrderTrackEvent
|
||||||
|
{
|
||||||
|
OrderId = @event.OrderId,
|
||||||
|
IsCompleted = track.IsCompleted,
|
||||||
|
TrackContent = track.TrackContent,
|
||||||
|
TrackEnContent = track.TrackEnContent,
|
||||||
|
TrackPlace = track.TrackPlace,
|
||||||
|
TrackTime = track.TrackTime,
|
||||||
|
TrackTimeZone = track.TrackTimeZone
|
||||||
|
};
|
||||||
|
await _capPublisher.PublishAsync(GlobalConst.UpdateOrderTrackSubscribe, updateOrderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
// 根据订单关联关系异步向下刷
|
// 根据订单关联关系异步向下刷
|
||||||
var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId);
|
var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId);
|
||||||
|
|||||||
@ -88,7 +88,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
TrackStatus = trackContent.Status,
|
TrackStatus = trackContent.Status,
|
||||||
TrackCode = @event.TrackCode,
|
TrackCode = @event.TrackCode,
|
||||||
TrackContent = trackContent.Content,
|
TrackContent = trackContent.Content,
|
||||||
|
IsCompleted = orderIsCompleted,
|
||||||
TrackEnContent = trackContent.EnContent,
|
TrackEnContent = trackContent.EnContent,
|
||||||
TrackPlace = @event.TrackPlace,
|
TrackPlace = @event.TrackPlace,
|
||||||
TrackTime = @event.TrackTime!.Value,
|
TrackTime = @event.TrackTime!.Value,
|
||||||
|
|||||||
@ -20,16 +20,28 @@ public class UpdateOrderTrackEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
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 (order.IsCompleted) return;
|
if (@event.IsDelete)
|
||||||
|
{
|
||||||
|
if (@event.TrackTime == default)
|
||||||
|
{
|
||||||
|
// 删除全部轨迹导致的重置行为
|
||||||
|
order.ResetTrackInfo();
|
||||||
|
}
|
||||||
|
else if (@event.TrackTime == order.LatestTrackTime) return;
|
||||||
|
}
|
||||||
|
else // upsert引发的更新,需要校验发生时间是否大于最新时间
|
||||||
|
{
|
||||||
|
if (order.LatestTrackTime != null &&
|
||||||
|
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) >
|
||||||
|
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
if (@event.IsCompleted) order.IsCompleted = true;
|
|
||||||
else if (order.LatestTrackTime != null &&
|
|
||||||
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) >
|
|
||||||
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return;
|
|
||||||
|
|
||||||
await _orderRepository.UpdateColumnAsync(order, x => new
|
await _orderRepository.UpdateColumnAsync(order, x => new
|
||||||
{
|
{
|
||||||
|
|||||||
@ -114,8 +114,16 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
|
|||||||
[SugarColumn(ColumnName = "LeavePort")]
|
[SugarColumn(ColumnName = "LeavePort")]
|
||||||
public string? LeavePort { get; set; }
|
public string? LeavePort { get; set; }
|
||||||
|
|
||||||
[SugarColumn(IsIgnore = true)]
|
[SugarColumn(IsIgnore = true)] public List<OrderFlightEntity> OrderFlights { get; set; }
|
||||||
public List<OrderFlightEntity> OrderFlights { get; set; }
|
[SugarColumn(IsIgnore = true)] public List<OrderTemplateEntity> OrderTemplates { get; set; }
|
||||||
[SugarColumn(IsIgnore = true)]
|
|
||||||
public List<OrderTemplateEntity> OrderTemplates { get; set; }
|
public void ResetTrackInfo()
|
||||||
|
{
|
||||||
|
IsCompleted = false;
|
||||||
|
LatestTrackContent = null;
|
||||||
|
LatestTrackEnContent = null;
|
||||||
|
LatestTrackTime = null;
|
||||||
|
LatestTrackPlace = null;
|
||||||
|
LatestTrackTimeZone = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -19,7 +19,14 @@ public interface ITrackDetailsRepository
|
|||||||
/// <param name="orderId"></param>
|
/// <param name="orderId"></param>
|
||||||
/// <param name="trackCodes"></param>
|
/// <param name="trackCodes"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task DeleteTrackAsync(int orderId, List<string> trackCodes);
|
Task<bool> DeleteTrackAsync(int orderId, List<string> trackCodes);
|
||||||
|
|
||||||
Task<List<TrackDetailsIndex>?> GetListAsync(List<int> orderIds);
|
Task<List<TrackDetailsIndex>?> GetListAsync(List<int> orderIds);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取最近一条发生的轨迹
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="orderId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<TrackDetailsIndex?> GetLatestAsync(int orderId);
|
||||||
}
|
}
|
||||||
@ -46,6 +46,11 @@ public class TrackDetailsIndex : IdBaseIndex
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string TrackContent { get; set; } = null!;
|
public string TrackContent { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否意味着完成
|
||||||
|
/// </summary>
|
||||||
|
public bool IsCompleted { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 原轨迹内容
|
/// 原轨迹内容
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -27,6 +27,11 @@ public class GlobalConst
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string UpdateOrderTrackSubscribe = "SJZY.Track.UpdateOrderTrack";
|
public const string UpdateOrderTrackSubscribe = "SJZY.Track.UpdateOrderTrack";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹删除后触发更新订单轨迹 mq订阅名称
|
||||||
|
/// </summary>
|
||||||
|
public const string DeleteTrackAfterUpdateOrderSubscribe = "SJZY.Track.DeleteTrackAfterUpdateOrder";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 关联订单后补轨迹 mq订阅名称
|
/// 关联订单后补轨迹 mq订阅名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -110,7 +110,28 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
return data?.Documents?.ToList();
|
return data?.Documents?.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task DeleteTrackAsync(int orderId, List<string> trackCodes)
|
public async Task<TrackDetailsIndex?> GetLatestAsync(int orderId)
|
||||||
|
{
|
||||||
|
var data = await Context.SearchAsync<TrackDetailsIndex>(x => x
|
||||||
|
.Source(s => s.Includes(fd => fd
|
||||||
|
.Field(f => f.IsCompleted)
|
||||||
|
.Field(f => f.TrackEnContent)
|
||||||
|
.Field(f => f.TrackContent)
|
||||||
|
.Field(f => f.TrackPlace)
|
||||||
|
.Field(f => f.TrackTime)
|
||||||
|
.Field(f => f.TrackTimeZone)
|
||||||
|
))
|
||||||
|
.Query(q =>
|
||||||
|
q.Term(f => f.OrderId, orderId)
|
||||||
|
)
|
||||||
|
.Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))
|
||||||
|
.Size(1)
|
||||||
|
);
|
||||||
|
|
||||||
|
return data.Documents.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
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(
|
||||||
@ -122,6 +143,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
|
|
||||||
if (!r.IsValid)
|
if (!r.IsValid)
|
||||||
throw new Exception($"轨迹数据删除失败,原因:{r.DebugInformation}");
|
throw new Exception($"轨迹数据删除失败,原因:{r.DebugInformation}");
|
||||||
|
|
||||||
|
return r.Deleted > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(List<TrackDetailsIndex> list, long total)> GetListAsync(TrackDetailsQueryInput input)
|
public async Task<(List<TrackDetailsIndex> list, long total)> GetListAsync(TrackDetailsQueryInput input)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user