Merge remote-tracking branch 'origin/S03-轨迹中台优化项' into test
This commit is contained in:
commit
2f18a7519f
@ -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)
|
||||||
{
|
{
|
||||||
// 订单所绑定的模板,没有一条内容可以匹配发生的轨迹
|
// 订单所绑定的模板,没有一条内容可以匹配发生的轨迹
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
/// 轨迹内容
|
/// 轨迹内容
|
||||||
|
|||||||
@ -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>
|
||||||
/// 获取可删除的订单轨迹代码
|
/// 获取可删除的订单轨迹代码
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user