Merge remote-tracking branch 'origin/S03-轨迹中台优化项' into test

This commit is contained in:
dingenwen 2024-05-09 11:47:51 +08:00
commit 2f18a7519f
6 changed files with 53 additions and 23 deletions

View File

@ -104,7 +104,10 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private async Task HandleTrackAsync(TrackUpsertEvent @event, List<int> canNextOrderIds) private async Task HandleTrackAsync(TrackUpsertEvent @event, List<int> canNextOrderIds)
{ {
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode); var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode, true);
var newOrderIds = orderIds.Except(tracks.Select(x => x.OrderId)).ToArray();
var trackContents = await _provideQueries.MatchTrackContentAsync(newOrderIds, @event.TrackCode);
TrackDetailsIndex? firstTrack = null; TrackDetailsIndex? firstTrack = null;
@ -136,9 +139,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
CreateTime = DateTime.Now CreateTime = DateTime.Now
}; };
//todo:可以优化?
// 根据轨迹code在订单模板内容中寻找匹配的 // 根据轨迹code在订单模板内容中寻找匹配的
var trackContent = await _provideQueries.MatchTrackContentAsync(order.OrderId, @event.TrackCode); var trackContent = trackContents.FirstOrDefault(x => x.OrderId == order.OrderId);
if (trackContent == default) if (trackContent == default)
{ {
// 订单所绑定的模板,没有一条内容可以匹配发生的轨迹 // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹

View File

@ -4,7 +4,7 @@ namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
public interface ITrackDetailsRepository public interface ITrackDetailsRepository
{ {
Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, string trackCode); Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, string trackCode, bool onlyIndexName = false);
Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes); Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes);

View File

@ -3,9 +3,14 @@
public class MatchTrackContentDto public class MatchTrackContentDto
{ {
/// <summary> /// <summary>
/// 轨迹内容id /// 订单Id
/// </summary> /// </summary>
public string TrackCode { get; set; } public int OrderId { get; set; }
/// <summary>
/// 轨迹内容code
/// </summary>
public string TrackCode { get; set; } = null!;
/// <summary> /// <summary>
/// 轨迹内容 /// 轨迹内容

View File

@ -27,10 +27,10 @@ public interface IProvideQueries
/// <summary> /// <summary>
/// 根据订单id找到订单模板,匹配模板命中的轨迹内容 /// 根据订单id找到订单模板,匹配模板命中的轨迹内容
/// </summary> /// </summary>
/// <param name="orderId">订单id</param> /// <param name="orderIds">订单ids</param>
/// <param name="code">轨迹代码</param> /// <param name="code">轨迹代码</param>
/// <returns></returns> /// <returns></returns>
Task<MatchTrackContentDto?> MatchTrackContentAsync(int orderId, string code); Task<List<MatchTrackContentDto>> MatchTrackContentAsync(int[] orderIds, string code);
/// <summary> /// <summary>
/// 获取可删除的订单轨迹代码 /// 获取可删除的订单轨迹代码

View File

@ -50,22 +50,23 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
.ToListAsync(); .ToListAsync();
} }
public async Task<MatchTrackContentDto?> MatchTrackContentAsync(int orderId, string code) public async Task<List<MatchTrackContentDto>> MatchTrackContentAsync(int[] orderIds, string code)
{ {
return await Context.Queryable<OrderTemplateEntity>() return await Context.Queryable<OrderTemplateEntity>()
.LeftJoin<TrackTemplateContentEntity>((x, a) => x.TrackTemplateId == a.TrackTemplateId) .LeftJoin<TrackTemplateContentEntity>((x, a) => x.TrackTemplateId == a.TrackTemplateId)
.LeftJoin<TrackContentEntity>((x, a, b) => a.TrackContentId == b.Id) .LeftJoin<TrackContentEntity>((x, a, b) => a.TrackContentId == b.Id)
.LeftJoin<TrackStatusEntity>((x, a, b, c) => b.TrackStatusId == c.Id) .LeftJoin<TrackStatusEntity>((x, a, b, c) => b.TrackStatusId == c.Id)
.Where((x, a, b) => x.OrderId == orderId && b.Code == code) .Where((x, a, b) => orderIds.Contains(x.OrderId) && b.Code == code)
.Select((x, a, b, c) => new MatchTrackContentDto .Select((x, a, b, c) => new MatchTrackContentDto
{ {
OrderId = x.OrderId,
TrackCode = b.Code, TrackCode = b.Code,
Content = b.Content, Content = b.Content,
EnContent = b.EnContent, EnContent = b.EnContent,
Status = c.Status, Status = c.Status,
IsCanDelete = a.IsCanDelete IsCanDelete = a.IsCanDelete
}) })
.FirstAsync(); .ToListAsync();
} }
public async Task<List<CanDeleteTrackCodeVO>> GetCanDeleteTrackCodesAsync(List<int> orderIds, public async Task<List<CanDeleteTrackCodeVO>> GetCanDeleteTrackCodesAsync(List<int> orderIds,

View File

@ -13,9 +13,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
{ {
} }
public async Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, string trackCode) public async Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, string trackCode,
bool onlyIndexName = false)
{ {
var r = await Context.SearchAsync<TrackDetailsIndex>(s => s var r = !onlyIndexName
? await Context.SearchAsync<TrackDetailsIndex>(s => s
.Source() .Source()
.Size(1000) .Size(1000)
.Query(q => q .Query(q => q
@ -26,6 +28,19 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
) )
) )
) )
)
: await Context.SearchAsync<TrackDetailsIndex>(s => s
.Source(s2 => s2.Includes(fd => fd
.Field(f => f.IndexName)))
.Size(1000)
.Query(q => q
.Bool(b => b
.Must(
mu => mu.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)),
mu => mu.Term(t => t.Field(f => f.TrackCode.Suffix("keyword")).Value(trackCode))
)
)
)
); );
if (!r.IsValid) if (!r.IsValid)
@ -144,9 +159,16 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
public async Task UpdateAsync(TrackDetailsIndex track) public async Task UpdateAsync(TrackDetailsIndex track)
{ {
var r = await Context.UpdateAsync<TrackDetailsIndex>(track.Id, u => u var r = await Context.UpdateAsync<TrackDetailsIndex, object>(track.Id, u => u
.Index(track.IndexName) .Index(track.IndexName)
.Doc(track) .Doc(new
{
track.TrackPlace,
track.TrackTime,
track.TrackTimeZone,
track.UpdateUser,
UpdateTime = DateTime.Now,
})
); );
if (!r.IsValid) if (!r.IsValid)