opt:优化upsert逻辑
This commit is contained in:
parent
eff09f1cb0
commit
56f8d95e48
@ -109,8 +109,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
var newOrderIds = orderIds.Except(tracks.Select(x => x.OrderId)).ToArray();
|
||||
var trackContents = await _provideQueries.MatchTrackContentAsync(newOrderIds, @event.TrackCode);
|
||||
|
||||
TrackDetailsIndex? firstTrack = null;
|
||||
|
||||
var insertTracks = new List<TrackDetailsIndex>();
|
||||
|
||||
foreach (var order in @event.OrderIdentifiers)
|
||||
@ -168,30 +166,32 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
}
|
||||
|
||||
canNextOrderIds.Add(order.OrderId);
|
||||
|
||||
firstTrack ??= track;
|
||||
}
|
||||
|
||||
if (canNextOrderIds.Count == 0) return;
|
||||
|
||||
var content = await _provideQueries.GetTrackContentAsync(@event.SubSystemId, @event.TrackCode);
|
||||
|
||||
// 批量add to es
|
||||
await _trackDetailsRepository.AddManyAsync(insertTracks);
|
||||
|
||||
if (firstTrack == null) return;
|
||||
|
||||
// 触发订单主表更新事件(异步)
|
||||
await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
|
||||
new TrackChangeAfterUpdateOrderEvent
|
||||
{
|
||||
OrderIds = orderIds,
|
||||
OrderIds = canNextOrderIds.ToArray(),
|
||||
IsCompleted = @event.TrackRefreshData.IsCompleted,
|
||||
TrackContent = firstTrack.TrackContent,
|
||||
TrackEnContent = firstTrack.TrackEnContent,
|
||||
TrackContent = content.TrackContent,
|
||||
TrackEnContent = content.TrackEnContent,
|
||||
TrackPlace = @event.TrackPlace,
|
||||
TrackTime = @event.TrackTime,
|
||||
TrackTimeZone = @event.TrackTimeZone
|
||||
});
|
||||
|
||||
// 触发轨迹推送事件(异步)
|
||||
foreach (var group in @event.OrderIdentifiers.GroupBy(x => x.CustomId))
|
||||
foreach (var group in @event.OrderIdentifiers
|
||||
.Where(x => x.OrderId.IsIn(canNextOrderIds))
|
||||
.GroupBy(x => x.CustomId))
|
||||
{
|
||||
var trackPushEvent = new TrackPushEvent
|
||||
{
|
||||
@ -202,8 +202,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
TrackCode = @event.TrackCode,
|
||||
SystemPushInfo = new SystemPushStruct
|
||||
{
|
||||
TrackStatus = firstTrack.TrackStatus,
|
||||
TrackContent = firstTrack.TrackContent,
|
||||
TrackStatus = content.TrackStatus,
|
||||
TrackContent = content.TrackContent,
|
||||
TrackPlace = @event.TrackPlace,
|
||||
TrackTime = @event.TrackTime,
|
||||
TrackTimeZone = @event.TrackTimeZone
|
||||
|
||||
19
src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs
Normal file
19
src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs
Normal file
@ -0,0 +1,19 @@
|
||||
namespace SJZY.Track.Domain.Dtos.TrackContents;
|
||||
|
||||
public class TrackContentVO
|
||||
{
|
||||
/// <summary>
|
||||
/// 轨迹状态
|
||||
/// </summary>
|
||||
public string TrackStatus { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹内容
|
||||
/// </summary>
|
||||
public string TrackContent { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹内容英文
|
||||
/// </summary>
|
||||
public string TrackEnContent { get; set; } = null!;
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using SJZY.Track.Domain.Dtos.Order;
|
||||
using SJZY.Track.Domain.Dtos.TrackContents;
|
||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
||||
using SJZY.Track.Domain.Dtos.TrackTemplate;
|
||||
|
||||
@ -65,4 +66,6 @@ public interface IProvideQueries
|
||||
/// <returns></returns>
|
||||
Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProvider, int pageIndex,
|
||||
int pageSize = 1000);
|
||||
|
||||
Task<TrackContentVO> GetTrackContentAsync(int subSystemId, string trackCode);
|
||||
}
|
||||
@ -3,6 +3,7 @@ using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||||
using SJZY.Track.Domain.Dtos.Order;
|
||||
using SJZY.Track.Domain.Dtos.TrackContents;
|
||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
||||
using SJZY.Track.Domain.Dtos.TrackTemplate;
|
||||
using SJZY.Track.Domain.Queries;
|
||||
@ -135,4 +136,18 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
|
||||
.Take(pageSize)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<TrackContentVO> GetTrackContentAsync(int subSystemId, string trackCode)
|
||||
{
|
||||
return await Context.Queryable<TrackContentEntity>()
|
||||
.LeftJoin<TrackStatusEntity>((x, y) => x.TrackStatusId == y.Id)
|
||||
.Where(x => x.SubSystemId == subSystemId && x.Code == trackCode)
|
||||
.Select((x, y) => new TrackContentVO
|
||||
{
|
||||
TrackStatus = y.Status,
|
||||
TrackContent = x.Content,
|
||||
TrackEnContent = x.EnContent
|
||||
})
|
||||
.FirstAsync();
|
||||
}
|
||||
}
|
||||
@ -32,7 +32,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
|
||||
: await Context.SearchAsync<TrackDetailsIndex>(s => s
|
||||
.Source(s2 => s2.Includes(fd => fd
|
||||
.Field(f => f.IndexName)
|
||||
.Field(f => f.OrderId)))
|
||||
.Field(f => f.OrderId)
|
||||
))
|
||||
.Size(1000)
|
||||
.Query(q => q
|
||||
.Bool(b => b
|
||||
|
||||
Loading…
Reference in New Issue
Block a user