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)