diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index eda7ecbc..dcafe452 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -5,17 +5,18 @@ public class GetTrackOutput /// /// 订单号 /// - public string OrderNo { get; set; } + public string OrderNo { get; set; } = null!; - public List TrackDetails { get; set; } + public List TrackDetails { get; set; } = new(); } public class TrackDetail { - public string Code { get; set; } - public string Status { get; set; } - public string Content { get; set; } - public string Location { get; set; } + public string Code { get; set; } = null!; + public string Status { get; set; } = null!; + public string? Content { get; set; } + public string? OriginContent { get; set; } + public string Location { get; set; } = null!; public DateTime Time { get; set; } public float TimeZone { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index 35237196..3864b604 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -39,6 +39,7 @@ public partial class TrackService Code = x.TrackCode, Status = x.TrackStatus, Content = x.TrackContent, + OriginContent = x.OriginTrackContent, Location = x.TrackPlace, Time = x.TrackTime.AddHours(input.TimeZone ?? 8 - x.TrackTimeZone), TimeZone = input.TimeZone ?? 8 @@ -54,6 +55,29 @@ public partial class TrackService private async Task TrackDetailSort(List 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(); + // 多模板拼接显示 + 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) { case SortMethod.ByTrackTime: @@ -64,30 +88,21 @@ public partial class TrackService list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time))); break; 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(); - // 多模板拼接显示 - 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; default: 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; + } + }); + }); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs b/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs deleted file mode 100644 index f6e29107..00000000 --- a/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace SJZY.Track.Application.Services.TrackTemplates -{ - public interface ITrackTemplateService - { - - } -} diff --git a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs index cb31744d..43805324 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs @@ -16,4 +16,9 @@ public class OrderedTrackCodeDto /// 是否对外 /// public bool IsExternal { get; set; } + + /// + /// 显示原轨迹 + /// + public bool ShowOrigin { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs index cce3c885..7f144688 100644 --- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs +++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs @@ -20,20 +20,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, Context = SqlsugarScopeBasic.GetContextSafely("default"); } - public async Task> GetOrderTemplateLinksAsync(int orderType, - params string[] orderNumbers) - { - return await Context.Queryable() - .LeftJoin((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> GetOrderTemplateLinksAsync(int orderType, List orderNumbers) { return await Context.Queryable() @@ -49,15 +35,17 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, public async Task> GetOrderedTrackCodesAsync(List templateIds) { - return await Context.Queryable() - .LeftJoin((a, b) => a.TrackContentId == b.Id) - .Where(a => templateIds.Contains(a.TrackTemplateId)) - .OrderBy(a => a.Sort) - .Select((a, b) => new OrderedTrackCodeDto + return await Context.Queryable() + .LeftJoin((a, b) => a.Id == b.TrackTemplateId) + .LeftJoin((a, b, c) => b.TrackContentId == c.Id) + .Where(a => templateIds.Contains(a.Id)) + .OrderBy((a, b) => b.Sort) + .Select((a, b, c) => new OrderedTrackCodeDto { - TemplateId = a.TrackTemplateId, - Code = b.Code, - IsExternal = a.IsExternal + TemplateId = a.Id, + ShowOrigin = a.ShowOrigin, + Code = c.Code, + IsExternal = b.IsExternal }) .ToListAsync(); } diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 1229eec7..03b3c7c9 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -85,6 +85,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract f.TrackStatus) .Field(f => f.TrackCode) .Field(f => f.TrackContent) + .Field(f => f.OriginTrackContent) .Field(f => f.TrackPlace) .Field(f => f.TrackTime) .Field(f => f.TrackTimeZone)