change:轨迹查询对外逻辑调整

This commit is contained in:
李鹏军 2024-04-03 17:51:00 +08:00
parent 63e4c8b999
commit 0b8e9da918
6 changed files with 59 additions and 56 deletions

View File

@ -5,17 +5,18 @@ public class GetTrackOutput
/// <summary> /// <summary>
/// 订单号 /// 订单号
/// </summary> /// </summary>
public string OrderNo { get; set; } public string OrderNo { get; set; } = null!;
public List<TrackDetail> TrackDetails { get; set; } public List<TrackDetail> TrackDetails { get; set; } = new();
} }
public class TrackDetail public class TrackDetail
{ {
public string Code { get; set; } public string Code { get; set; } = null!;
public string Status { get; set; } public string Status { get; set; } = null!;
public string Content { get; set; } public string? Content { get; set; }
public string Location { get; set; } public string? OriginContent { get; set; }
public string Location { get; set; } = null!;
public DateTime Time { get; set; } public DateTime Time { get; set; }
public float TimeZone { get; set; } public float TimeZone { get; set; }
} }

View File

@ -39,6 +39,7 @@ public partial class TrackService
Code = x.TrackCode, Code = x.TrackCode,
Status = x.TrackStatus, Status = x.TrackStatus,
Content = x.TrackContent, Content = x.TrackContent,
OriginContent = x.OriginTrackContent,
Location = x.TrackPlace, Location = x.TrackPlace,
Time = x.TrackTime.AddHours(input.TimeZone ?? 8 - x.TrackTimeZone), Time = x.TrackTime.AddHours(input.TimeZone ?? 8 - x.TrackTimeZone),
TimeZone = input.TimeZone ?? 8 TimeZone = input.TimeZone ?? 8
@ -54,6 +55,29 @@ public partial class TrackService
private async Task TrackDetailSort(List<GetTrackOutput> list, GetTrackInput input) private async Task TrackDetailSort(List<GetTrackOutput> list, GetTrackInput input)
{ {
var orderTemplates = await _provideQueries
.GetOrderTemplateLinksAsync(input.OrderType, input.OrderNos);
var distinctTemplateIds = orderTemplates.Select(x => x.TemplateId).Distinct().ToList();
var templateContent = await _provideQueries.GetOrderedTrackCodesAsync(distinctTemplateIds);
list.ForEach(item =>
{
var codes = new List<string>();
// 多模板拼接显示
foreach (var orderTemplate in orderTemplates.Where(x => x.OrderNo == item.OrderNo))
{
codes.AddRange(templateContent
.Where(t => t.TemplateId == orderTemplate.TemplateId) // 按模板
.Where(t => t.IsExternal) // 过滤不对外的
.Select(t => t.Code));
}
item.TrackDetails = item.TrackDetails
.Where(x => codes.Contains(x.Code)) // 剔除不在模板内容中的元素
.OrderBy(x => codes.IndexOf(x.Code)) // 按照在模板内容的位置排序
.ToList();
});
switch (input.SortMethod) switch (input.SortMethod)
{ {
case SortMethod.ByTrackTime: case SortMethod.ByTrackTime:
@ -64,30 +88,21 @@ public partial class TrackService
list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time))); list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time)));
break; break;
case SortMethod.ByTemplate: case SortMethod.ByTemplate:
var orderTemplates = await _provideQueries
.GetOrderTemplateLinksAsync(input.OrderType, input.OrderNos);
var distinctTemplateIds = orderTemplates.Select(x => x.TemplateId).Distinct().ToList();
var templateContent = await _provideQueries.GetOrderedTrackCodesAsync(distinctTemplateIds);
list.ForEach(item =>
{
var codes = new List<string>();
// 多模板拼接显示
foreach (var orderTemplate in orderTemplates.Where(x => x.OrderNo == item.OrderNo))
{
codes.AddRange(templateContent
.Where(t => t.TemplateId == orderTemplate.TemplateId) // 按模板
.Where(t => t.IsExternal) // 过滤不对外的
.Select(t => t.Code));
}
item.TrackDetails = item.TrackDetails
.Where(x => codes.Contains(x.Code)) // 剔除不在模板内容中的元素
.OrderBy(x => codes.IndexOf(x.Code)) // 按照在模板内容的位置排序
.ToList();
});
break; break;
default: default:
throw new ArgumentOutOfRangeException(nameof(input.SortMethod), input.SortMethod, "不支持的排序方式"); throw new ArgumentOutOfRangeException(nameof(input.SortMethod), input.SortMethod, "不支持的排序方式");
} }
// 显示原轨迹
list.ForEach(item =>
{
item.TrackDetails.ForEach(track =>
{
if (templateContent.First(x => x.Code == track.Code).ShowOrigin)
{
track.Content = track.OriginContent;
}
});
});
} }
} }

View File

@ -1,7 +0,0 @@
namespace SJZY.Track.Application.Services.TrackTemplates
{
public interface ITrackTemplateService
{
}
}

View File

@ -16,4 +16,9 @@ public class OrderedTrackCodeDto
/// 是否对外 /// 是否对外
/// </summary> /// </summary>
public bool IsExternal { get; set; } public bool IsExternal { get; set; }
/// <summary>
/// 显示原轨迹
/// </summary>
public bool ShowOrigin { get; set; }
} }

View File

@ -20,20 +20,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
Context = SqlsugarScopeBasic.GetContextSafely("default"); Context = SqlsugarScopeBasic.GetContextSafely("default");
} }
public async Task<List<OrderTemplateLinkDto>> GetOrderTemplateLinksAsync(int orderType,
params string[] orderNumbers)
{
return await Context.Queryable<OrderEntity>()
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.Where(a => a.OrderType == orderType && orderNumbers.Contains(a.OrderNo))
.Select((a, b) => new OrderTemplateLinkDto
{
OrderNo = a.OrderNo,
TemplateId = b.TrackTemplateId
})
.ToListAsync();
}
public async Task<List<OrderTemplateLinkDto>> GetOrderTemplateLinksAsync(int orderType, List<string> orderNumbers) public async Task<List<OrderTemplateLinkDto>> GetOrderTemplateLinksAsync(int orderType, List<string> orderNumbers)
{ {
return await Context.Queryable<OrderEntity>() return await Context.Queryable<OrderEntity>()
@ -49,15 +35,17 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
public async Task<List<OrderedTrackCodeDto>> GetOrderedTrackCodesAsync(List<int> templateIds) public async Task<List<OrderedTrackCodeDto>> GetOrderedTrackCodesAsync(List<int> templateIds)
{ {
return await Context.Queryable<TrackTemplateContentEntity>() return await Context.Queryable<TrackTemplateEntity>()
.LeftJoin<TrackContentEntity>((a, b) => a.TrackContentId == b.Id) .LeftJoin<TrackTemplateContentEntity>((a, b) => a.Id == b.TrackTemplateId)
.Where(a => templateIds.Contains(a.TrackTemplateId)) .LeftJoin<TrackContentEntity>((a, b, c) => b.TrackContentId == c.Id)
.OrderBy(a => a.Sort) .Where(a => templateIds.Contains(a.Id))
.Select((a, b) => new OrderedTrackCodeDto .OrderBy((a, b) => b.Sort)
.Select((a, b, c) => new OrderedTrackCodeDto
{ {
TemplateId = a.TrackTemplateId, TemplateId = a.Id,
Code = b.Code, ShowOrigin = a.ShowOrigin,
IsExternal = a.IsExternal Code = c.Code,
IsExternal = b.IsExternal
}) })
.ToListAsync(); .ToListAsync();
} }

View File

@ -85,6 +85,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
.Field(f => f.TrackStatus) .Field(f => f.TrackStatus)
.Field(f => f.TrackCode) .Field(f => f.TrackCode)
.Field(f => f.TrackContent) .Field(f => f.TrackContent)
.Field(f => f.OriginTrackContent)
.Field(f => f.TrackPlace) .Field(f => f.TrackPlace)
.Field(f => f.TrackTime) .Field(f => f.TrackTime)
.Field(f => f.TrackTimeZone) .Field(f => f.TrackTimeZone)