diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 4e0322a3..b1afaa30 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -60,7 +60,9 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: "轨迹来源是必须的"); } - if (input.TrackTime < DateTime.Now.AddYears(-100) || input.TrackTime > DateTime.Now.AddYears(100)) + //要求时间在当前时间的前后100年之间内 + bool ValidateTrackTime(DateTime? d) => (d != null && d < DateTime.Now.AddYears(-100) || d > DateTime.Now.AddYears(100)); + if (ValidateTrackTime(input.TrackTime) || ValidateTrackTime(input.NewTrackTime)) { throw new BusinessException(message: "轨迹时间不合法"); } @@ -326,7 +328,9 @@ public partial class TrackService : ApplicationService, ITrackService //【更新】存在指定轨迹的内容(匹配到多条则不处理) var order = orders.First(); - if (input.TrackTime < DateTime.Now.AddYears(-100) || input.TrackTime > DateTime.Now.AddYears(100)) + //要求时间在当前时间的前后100年之间内 + bool ValidateTrackTime(DateTime? d) => (d != null && d < DateTime.Now.AddYears(-100) || d > DateTime.Now.AddYears(100)); + if (ValidateTrackTime(input.TrackTime) || ValidateTrackTime(input.NewTrackTime)) { throw new BusinessException(message: "轨迹时间不合法"); } diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 75806f9e..3f3aa542 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -1,3 +1,4 @@ +using System.Linq.Expressions; using SJZY.Expand.AliyunOSS; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackOrder; @@ -108,17 +109,31 @@ public class TrackOrderService : ApplicationService /// 根据订单id获取轨迹明细列表 /// /// + /// + /// /// [HttpPost("GetDetails")] - public async Task> GetTracksAsync(int orderId) + public async Task> GetTracksAsync(int? orderId, string? orderNo, int? systemId) { - var subSystemId = await _orderRepository.GetFirstAsync(x => x.Id == orderId, x => x.SubSystemId); + Expression>? whereExpression = null; + //根据订单id查询 + if (orderId != null && orderId > 0) + whereExpression = m => m.Id == orderId; + + //根据订单号+系统id查询 + if (!string.IsNullOrEmpty(orderNo) && systemId != null && systemId > 0) + whereExpression = m => m.OrderNo == orderNo && m.SubSystemId == systemId; + + if (whereExpression == default) + throw new BusinessException(message: "请求参数异常"); + + var subSystemId = await _orderRepository.GetFirstAsync(whereExpression, x => x.SubSystemId); if (subSystemId == default) { throw new BusinessException(message: "订单不存在"); } - var trackDetails = await _trackDetailsEsRepository.GetListAsync(orderId); + var trackDetails = await _trackDetailsEsRepository.GetListAsync(orderId ?? 0); if (trackDetails.IsNullOrEmpty()) { return new List(); @@ -241,16 +256,20 @@ public class TrackOrderService : ApplicationService if (!order.IsCompleted) //如果没完结则显示签收节点 { var eddUnixTimestamp = order.EstimatedDeliveryDate.HasValue ? ToUnixTimestamp(DateTime.Parse(order.EstimatedDeliveryDate.ToString()!)) : 0; + var isShowTime = eddUnixTimestamp > 0 && res.Data.All(m => m.TrackTime < eddUnixTimestamp); - var isShowTime = eddUnixTimestamp > 0 && res.Data != null && res.Data.All(m => m.TrackTime < eddUnixTimestamp); - res.Data.Add(new GetDetailTimelineOutput() + //当存在需要显示的轨迹才需要补充签收节点 + if (res.Data.Count != 0) { - Content = "签收", - IsHighlight = false, - TrackTimeZone = isShowTime ? $"GMT{(order.DestinationTimeZone >= 0 ? "+" : "-")}{order.DestinationTimeZone}" : "", - TrackTime = isShowTime ? eddUnixTimestamp : 0, - TrackTimePrefix = isShowTime ? "预计签收时间:" : "", - }); + res.Data.Add(new GetDetailTimelineOutput() + { + Content = "签收", + IsHighlight = false, + TrackTimeZone = isShowTime ? $"GMT{(order.DestinationTimeZone >= 0 ? "+" : "-")}{order.DestinationTimeZone}" : "", + TrackTime = isShowTime ? eddUnixTimestamp : 0, + TrackTimePrefix = isShowTime ? "预计签收时间:" : "", + }); + } } return res;