diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs index 9c5956ae..a6a3c4c7 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs @@ -70,7 +70,7 @@ public class TrackOrderDetailDto /// /// 轨迹发生时间 /// - public DateTime? TrackTime { get; set; } + public DateTime TrackTime { get; set; } /// /// 轨迹发生时区 diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs index 44df6107..f14b3885 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs @@ -33,7 +33,7 @@ public class GetTrackInputV2 : OrderNosInfo public enum SortMethod { /// - /// 按轨迹发生时间排序 + /// 按轨迹发生时间升序 /// ByTrackTime = 0, @@ -43,12 +43,22 @@ public enum SortMethod ByTrackTimeDesc = 1, /// - /// 模板排序+轨迹发生时间 + /// 模板排序+轨迹发生时间升序 /// ByTemplateAndTrackTime = 2, /// /// 模板排序+轨迹发生时间 /// - ByTemplateAndTrackTimeDesc = 3 + ByTemplateAndTrackTimeDesc = 3, + + /// + /// 按创建时间升序 + /// + ByCreateTime = 4, + + /// + /// 按创建时间降序 + /// + ByCreateTimeDesc = 5 } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index e03a46f0..820ed535 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -114,4 +114,9 @@ public class TrackDetail /// 扩展信息字段,用与轨迹推送的附加字段 /// public string? Extra { get; set; } + + /// + /// 轨迹创建时间 + /// + public DateTime CreateTime { get; set; } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index caebb3ee..44aee2b1 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -88,7 +88,8 @@ public partial class TrackService TrackPlacePostcode = x.TrackPlacePostcode, DestinationTimeZone = x.DestinationTimeZone, EstimatedDeliveryDate = x.EstimatedDeliveryDate, - Extra = x.Extra + Extra = x.Extra, + CreateTime = x.CreateTime }).ToList(); res.Add(item); @@ -166,7 +167,8 @@ public partial class TrackService TrackPlacePostcode = x.TrackPlacePostcode, DestinationTimeZone = x.DestinationTimeZone, EstimatedDeliveryDate = x.EstimatedDeliveryDate, - Extra = x.Extra + Extra = x.Extra, + CreateTime = x.CreateTime, }).ToList(); res.Add(item); @@ -209,6 +211,12 @@ public partial class TrackService case SortMethod.ByTemplateAndTrackTimeDesc: list.ForEach(item => item.TrackDetails.Sort((a, b) => DateTimeHelper.ConvertUtc0Compare(b.Time, b.TimeZone ?? 8, a.Time, a.TimeZone ?? 8))); break; + case SortMethod.ByCreateTime: + list.ForEach(item => item.TrackDetails.Sort((a, b) => a.CreateTime.CompareTo(b.CreateTime))); + break; + case SortMethod.ByCreateTimeDesc: + list.ForEach(item => item.TrackDetails.Sort((a, b) => b.CreateTime.CompareTo(a.CreateTime))); + break; default: throw new ArgumentOutOfRangeException(nameof(sortMethod), sortMethod, "不支持的排序方式"); } diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 701d72cb..86a44c4b 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -2,6 +2,7 @@ using System.Linq.Expressions; using SJZY.Expand.AliyunOSS; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackOrder; +using SJZY.Track.Application.Helpers; using SJZY.Track.Application.Services.Warning.Handlers; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; @@ -134,9 +135,10 @@ public class TrackOrderService : ApplicationService /// /// /// + /// /// [HttpPost("GetDetails")] - public async Task> GetTracksAsync(int? orderId, string? orderNo, int? systemId) + public async Task> GetTracksAsync(int? orderId, string? orderNo, int? systemId, SortMethod sortMethod = SortMethod.ByCreateTimeDesc) { Expression>? whereExpression = null; //根据订单id查询 @@ -186,6 +188,29 @@ public class TrackOrderService : ApplicationService a.TrackTimeZone = $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}"; } }); + + // 排序 + switch (sortMethod) + { + case SortMethod.ByTrackTime: + list.Sort((a, b) => DateTimeHelper.ConvertUtc0Compare(a.TrackTime, a.TrackTimeZoneValue, b.TrackTime, b.TrackTimeZoneValue)); + break; + case SortMethod.ByTrackTimeDesc: + list.Sort((a, b) => DateTimeHelper.ConvertUtc0Compare(b.TrackTime, b.TrackTimeZoneValue, a.TrackTime, a.TrackTimeZoneValue)); + break; + case SortMethod.ByTemplateAndTrackTime: + case SortMethod.ByTemplateAndTrackTimeDesc: + throw new BusinessException(message: "该接口暂不支持该模板排序方式,如需支持请联系轨迹中台负责人"); + case SortMethod.ByCreateTime: + list.Sort((a, b) => a.CreateTime.CompareTo(b.CreateTime)); + break; + case SortMethod.ByCreateTimeDesc: + list.Sort((a, b) => b.CreateTime.CompareTo(a.CreateTime)); + break; + default: + throw new ArgumentOutOfRangeException(nameof(sortMethod), sortMethod, null); + } + return list; }