diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index d8cab392..337d02a7 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -35,4 +35,67 @@ public class BatchUpsertTrackInput : OrderNosInfo [Required] [Range(-12, 12)] public float TrackTimeZone { get; set; } + + /// + /// 客户是否可见 + /// + [Required] + public bool IsVisibility { get; set; } + + /// + /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建 + /// + [Required] + public int Source { get; set; } + + /// + /// 轨迹备注 + /// + public string? Remarks { get; set; } + + /// + /// 附件集合 + /// + public List? Files { get; set; } + + /// + /// 轨迹内容,若为空则取轨迹内容表中该轨迹Code对应的轨迹内容 + /// + public string? Content { get; set; } + + /// + /// 轨迹内容英文,若为空则取轨迹内容表中该轨迹Code对应的轨迹英文内容 + /// + public string? EnStatus { get; set; } + + /// + /// 轨迹发生地(城市) + /// + public string? TrackPlaceCity { get; set; } + + /// + /// 轨迹发生地(省/州) + /// + public string? TrackPlaceProvince { get; set; } + + /// + /// 轨迹发生地(国家/地区) + /// + public string? TrackPlaceNation { get; set; } + + /// + /// 轨迹发生地邮编 + /// + public string? TrackPlacePostcode { get; set; } + + /// + /// 预计到达时间 + /// + public DateTime? EstimatedDeliveryDate { get; set; } + + /// + /// 目的地时区 + /// + [Range(-12, 12)] + public float? DestinationTimeZone { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs index 265723e8..23cdaec4 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs @@ -86,4 +86,54 @@ public class TrackOrderDetailDto /// 创建人 /// public string? CreateUser { get; set; } + + /// + /// 客户是否可见 + /// + public bool IsVisibility { get; set; } + + /// + /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建 + /// + public int Source { get; set; } + + /// + /// 备注 + /// + public string? Remarks { get; set; } + + /// + /// 附件集合 + /// + public List? Files { get; set; } + + /// + /// 轨迹发生地(城市) + /// + public string? TrackPlaceCity { get; set; } + + /// + /// 轨迹发生地(省/州) + /// + public string? TrackPlaceProvince { get; set; } + + /// + /// 轨迹发生地(国家/地区) + /// + public string? TrackPlaceNation { get; set; } + + /// + /// 轨迹发生地邮编 + /// + public string? TrackPlacePostcode { get; set; } + + /// + /// 预计到达时间 + /// + public DateTime? EstimatedDeliveryDate { get; set; } + + /// + /// 目的地时区 + /// + public float? DestinationTimeZone { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs index 945a973b..d38a19e4 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -35,4 +35,67 @@ public class UpsertTrackInput : OrderNoInfo [Required] [Range(-12, 12)] public float? TrackTimeZone { get; set; } + + /// + /// 客户是否可见 + /// + [Required] + public bool IsVisibility { get; set; } + + /// + /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建 + /// + [Required] + public int Source { get; set; } + + /// + /// 轨迹备注 + /// + public string? Remarks { get; set; } + + /// + /// 附件集合 + /// + public List? Files { get; set; } + + /// + /// 轨迹内容,若为空则取轨迹内容表中该轨迹Code对应的轨迹内容 + /// + public string? Content { get; set; } + + /// + /// 轨迹内容英文,若为空则取轨迹内容表中该轨迹Code对应的轨迹英文内容 + /// + public string? EnStatus { get; set; } + + /// + /// 轨迹发生地(城市) + /// + public string? TrackPlaceCity { get; set; } + + /// + /// 轨迹发生地(省/州) + /// + public string? TrackPlaceProvince { get; set; } + + /// + /// 轨迹发生地(国家/地区) + /// + public string? TrackPlaceNation { get; set; } + + /// + /// 轨迹发生地邮编 + /// + public string? TrackPlacePostcode { get; set; } + + /// + /// 预计到达时间 + /// + public DateTime? EstimatedDeliveryDate { get; set; } + + /// + /// 目的地时区 + /// + [Range(-12, 12)] + public float? DestinationTimeZone { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs index 037c5a8c..90c807d0 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs @@ -41,4 +41,14 @@ public class TrackChangeAfterUpdateOrderEvent /// 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种 /// public int DeficiencyTagValue { get; set; } + + /// + /// 预计到达时间 + /// + public DateTime? EstimatedDeliveryDate { get; set; } + + /// + /// 签收地时区 + /// + public float? DestinationTimeZone { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index 1bd4b033..07fa4f95 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -1,3 +1,5 @@ +using SJZY.Track.Application.Contract.Dtos.ProvideServices; + namespace SJZY.Track.Application.Contract.Events; public class TrackUpsertEvent @@ -54,6 +56,66 @@ public class TrackUpsertEvent public TrackRefreshStruct TrackRefreshData { get; set; } + /// + /// 客户是否可见 + /// + public bool IsVisibility { get; set; } + + /// + /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建 + /// + public int Source { get; set; } + + /// + /// 轨迹备注 + /// + public string? Remarks { get; set; } + + /// + /// 附件集合 + /// + public List? Files { get; set; } + + /// + /// 轨迹内容,若为空则取轨迹内容表中该轨迹Code对应的轨迹内容 + /// + public string? Content { get; set; } + + /// + /// 轨迹内容英文,若为空则取轨迹内容表中该轨迹Code对应的轨迹英文内容 + /// + public string? EnStatus { get; set; } + + /// + /// 轨迹发生地(城市) + /// + public string? TrackPlaceCity { get; set; } + + /// + /// 轨迹发生地(省/州) + /// + public string? TrackPlaceProvince { get; set; } + + /// + /// 轨迹发生地(国家/地区) + /// + public string? TrackPlaceNation { get; set; } + + /// + /// 轨迹发生地邮编 + /// + public string? TrackPlacePostcode { get; set; } + + /// + /// 预计到达时间 + /// + public DateTime? EstimatedDeliveryDate { get; set; } + + /// + /// 目的地时区 + /// + public float? DestinationTimeZone { get; set; } + public override string ToString() { return diff --git a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs index 8fc8a9d4..f1a32d4d 100644 --- a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs +++ b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs @@ -33,6 +33,7 @@ public class OrderAutoMapperProfile : Profile .ForMember(dest => dest.Content, opt => opt.MapFrom(m => m.TrackContent)) .ForMember(dest => dest.EnContent, opt => opt.MapFrom(m => m.TrackEnContent)) .ForMember(dest => dest.TrackTimeZoneValue, opt => opt.MapFrom(m => m.TrackTimeZone)); + CreateMap(MemberList.None); CreateMap(MemberList.None); } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs index 153e9700..1f32a4e3 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs @@ -26,6 +26,8 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa return; } + //指示是否需要更新【预计签收时间】【签收地时区】 + var isNeedUpdate = false; var updateOrders = new List(); foreach (var order in orders) { @@ -55,20 +57,43 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa order.LatestTrackPlace = @event.TrackPlace; order.LatestTrackTime = @event.TrackTime; order.LatestTrackTimeZone = @event.TrackTimeZone; + //当【预计签收时间】【签收地时区】同时存在时则更新主表 + if (@event.EstimatedDeliveryDate.HasValue && @event.DestinationTimeZone.HasValue) + { + order.EstimatedDeliveryDate = @event.EstimatedDeliveryDate.Value; + order.DestinationTimeZone = @event.DestinationTimeZone.Value; + isNeedUpdate = true; + } + updateOrders.Add(order); } await _orderRepository.UpdateRangeAsync(updateOrders, - x => new - { - x.IsCompleted, - x.LatestTrackContent, - x.LatestTrackEnContent, - x.LatestTrackPlace, - x.LatestTrackTime, - x.LatestTrackTimeZone, - x.DeficiencyTag - }); + isNeedUpdate + ? x => new + { + x.IsCompleted, + x.LatestTrackContent, + x.LatestTrackEnContent, + x.LatestTrackPlace, + x.LatestTrackTime, + x.LatestTrackTimeZone, + x.DeficiencyTag, + //当标识指示需要更新时添加更新列 + x.EstimatedDeliveryDate, + x.DestinationTimeZone + } + : x => new + { + x.IsCompleted, + x.LatestTrackContent, + x.LatestTrackEnContent, + x.LatestTrackPlace, + x.LatestTrackTime, + x.LatestTrackTimeZone, + x.DeficiencyTag, + } + ); } private async Task> GetOrdersAsync(int[] orderIds) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index f30f51fc..ef68e72f 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -5,6 +5,7 @@ using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Dtos.TrackContents; +using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.Queries; using Volo.Abp.DependencyInjection; using OrderIdentifier = SJZY.Track.Application.Contract.Events.OrderIdentifier; @@ -171,6 +172,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, + DestinationTimeZone = @event.DestinationTimeZone, + EstimatedDeliveryDate = @event.EstimatedDeliveryDate }); // 触发轨迹推送事件(异步) @@ -200,16 +203,21 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); // important:轨迹code相同,时间、发生地不同的,可能存在多条!! + //todo:查出多条轨迹,同订单同code也可能出现多条, + //按同code找轨迹如果有多条则不允许修改,如果没有则进行新增 var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true); var insertTracks = new List(); var updateTracks = new List(); + //todo:标识轨迹内容是否是重复的,将来需要替换会从轨迹内容中获取 + var isRepeatable = true; foreach (var order in @event.OrderIdentifiers) { TrackDetailsIndex? track; if (!@event.IsAdd) { + //同一订单同轨迹code如果有多条轨迹明细则不允许修改 var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); if (existTracks.Length > 1) { @@ -220,13 +228,39 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track = existTracks.FirstOrDefault(); if (track == null) continue; // 不存在不让改 + + //来源与外部服务商不允许修改 + if (track.Source == (int) TrackSourceEnum.ExternalServiceProvide) continue; } else { - track = tracks.FirstOrDefault(x => - x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace); + // 【批量新增】所有可能遇到的场景 + // 标识:允许重复,不允许重复,零条,一条,多条; + // 场景A:允许重复,零条 => 新增 + // 场景B:允许重复,一条 => 新增(约束受限新增,否则跳过新增) + // 场景C:允许重复,多条 => 新增(约束受限新增,否则跳过新增) + // 场景D:不允许重复,零条 => 新增 + // 场景E:不允许重复,一条 => 更新 + // 场景F:不允许重复,(理想不会出现多条) => 跳过 + var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); + track = existTracks.FirstOrDefault(); - if (track != null) continue; // 存在不让创建 + if (isRepeatable && existTracks.Length >= 1) + { + if (existTracks.Any(x => x.TrackPlace == @event.TrackPlace && x.TrackTime == @event.TrackTime)) + { + //允许重复,出现【轨迹发生地】,【轨迹发生时间】的都重复,则不允许新增 + continue; + } + + // 设置null后面执行新增逻辑 + track = null; + } + + if (!isRepeatable && existTracks.Length > 1) + { + continue; + } } if (track == default) @@ -246,9 +280,25 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString, CreateUser = @event.OperationMan ?? GlobalConst.SystemUser, CreateTime = DateTime.Now, + //来源轨迹内容,第一次新增的时候使用轨迹内容表提供的 TrackStatus = trackContent.TrackStatus, TrackContent = trackContent.TrackContent, - TrackEnContent = trackContent.TrackEnContent + TrackEnContent = trackContent.TrackEnContent, + //新增轨迹明细字段 + IsVisibility = @event.IsVisibility, + Source = @event.Source, + Remarks = @event.Remarks ?? GlobalConst.EmptyString, + Files = @event.Files?.Select(x => new FileItem + { + OssKey = x.OssKey, + FileName = x.FileName + }).ToList(), + TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString, + TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString, + TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString, + TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString, + DestinationTimeZone = @event.DestinationTimeZone, + EstimatedDeliveryDate = @event.EstimatedDeliveryDate, }; track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 @@ -267,6 +317,27 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser; track.UpdateTime = DateTime.Now; + //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容和英文则进行更改 + track.TrackStatus = trackContent.TrackStatus; //todo?允许修改状么? + track.TrackContent = @event.Content ?? trackContent.TrackContent; + track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent; + + //todo:修改轨迹增加字段(其中某些字段不允许更改) + track.IsVisibility = @event.IsVisibility; + //track.Source = @event.Source; //来源不允许更改 + track.Remarks = @event.Remarks ?? GlobalConst.EmptyString; + track.Files = @event.Files?.Select(x => new FileItem + { + OssKey = x.OssKey, + FileName = x.FileName + }).ToList(); + track.TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString; + track.TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString; + track.TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString; + track.TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString; + track.DestinationTimeZone = @event.DestinationTimeZone; + track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate; + updateTracks.Add(track); } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 63fdd064..1b99555b 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -5,6 +5,7 @@ using SJZY.Track.Application.Contract.Services.ProvideServices; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Enums; using SJZY.UserCenter.HttpApi.Services; using Volo.Abp.Http.Client.DynamicProxying; @@ -59,6 +60,12 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: "轨迹时间不合法"); } + if ((input.EstimatedDeliveryDate.HasValue == false && input.DestinationTimeZone.HasValue) || + (input.EstimatedDeliveryDate.HasValue && input.DestinationTimeZone.HasValue == false)) + { + throw new BusinessException(message: "【目的地时区】和【预计到达时间】必须同时输入"); + } + var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync(); if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null) { @@ -112,6 +119,14 @@ public partial class TrackService : ApplicationService, ITrackService var name = userInfo.Data.UserName; + //删除轨迹约束,只要其中有一条来源是外部的就立即返回错误 + var tracks = await _trackDetailsEsRepository + .GetListAsync(new[] { orderId }, input.TrackCodes, TrackSourceEnum.ExternalServiceProvide); + if (tracks.Count > 0) + { + throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除"); + } + // 删除轨迹 var @event = new TrackDeleteEvent { @@ -153,6 +168,14 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}"); } + //删除轨迹约束,只要其中有一条来源是外部的就立即返回错误 + var tracks = await _trackDetailsEsRepository + .GetListAsync(orderIds.ToArray(), input.TrackCodes, TrackSourceEnum.ExternalServiceProvide); + if (tracks.Count > 0) + { + throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除"); + } + // 删除轨迹 var @event = new TrackDeleteEvent { @@ -191,6 +214,12 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: "订单一个都不存在"); } + if ((input.EstimatedDeliveryDate.HasValue == false && input.DestinationTimeZone.HasValue) || + (input.EstimatedDeliveryDate.HasValue && input.DestinationTimeZone.HasValue == false)) + { + throw new BusinessException(message: "【目的地时区】和【预计到达时间】必须同时输入"); + } + // 获取用户name var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync(); if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null) @@ -216,7 +245,19 @@ public partial class TrackService : ApplicationService, ITrackService TrackPlace = input.TrackPlace, TrackTime = input.TrackTime, TrackTimeZone = input.TrackTimeZone, - OperationMan = userInfo.Data.UserName + OperationMan = userInfo.Data.UserName, + IsVisibility = input.IsVisibility, + Source = input.Source, + Remarks = input.Remarks, + Files = input.Files, + Content = input.Content, + EnStatus = input.EnStatus, + TrackPlaceCity = input.TrackPlaceCity, + TrackPlaceProvince = input.TrackPlaceProvince, + TrackPlaceNation = input.TrackPlaceNation, + TrackPlacePostcode = input.TrackPlacePostcode, + EstimatedDeliveryDate = input.EstimatedDeliveryDate, + DestinationTimeZone = input.DestinationTimeZone }; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); } diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs index b52f5f20..f68269ff 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs @@ -1,4 +1,5 @@ using SJZY.Expand.ElasticSearch.Services; +using SJZY.Track.Domain.Enums; namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; @@ -22,6 +23,8 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService> GetListAsync(int orderId); + Task> GetListAsync(int[] orderIds, List trackCodes, TrackSourceEnum source); + Task> DeleteTrackAsync(int[] orderIds, List trackCodes); Task DeleteTrackByIdAsync(string id, string indexName); diff --git a/src/SJZY.Track.Domain/Enums/TrackSourceEnum.cs b/src/SJZY.Track.Domain/Enums/TrackSourceEnum.cs new file mode 100644 index 00000000..021616af --- /dev/null +++ b/src/SJZY.Track.Domain/Enums/TrackSourceEnum.cs @@ -0,0 +1,24 @@ +using System.ComponentModel; + +namespace SJZY.Track.Domain.Enums; + +/// +/// 轨迹来源 +/// +public enum TrackSourceEnum +{ + /// + /// 外部服务商创建 + /// + [Description("外部服务商创建")] ExternalServiceProvide = 1, + + /// + /// 内部系统创建 + /// + [Description("内部系统创建")] InternalService = 2, + + /// + /// 人工创建 + /// + [Description("人工创建")] Artificial = 3, +} diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 44715ae6..262d9d32 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -3,6 +3,7 @@ using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; +using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories; @@ -174,6 +175,19 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract p .Add("trackPlace", track.TrackPlace) @@ -181,6 +195,19 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract> GetListAsync(int[] orderIds, List trackCodes, TrackSourceEnum source) + { + var r = await Context.SearchAsync(x => x + .Index(GlobalConst.TrackDetailsIndex) + .Query(q => + q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)) + && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)) + && q.Term(t => t.Source, (int) source) + ) + .Size(SafelyLimit) + .Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending))); + + if (!r.IsValid) + { + throw new InvalidOperationException($"轨迹查询失败,orderIds:[{string.Join(',', orderIds)}],原因:{r.DebugInformation}。"); + } + + return r.ToIdList(); + } + public async Task> DeleteTrackAsync(int[] orderIds, List trackCodes) { // var deleteResponse = await Context.DeleteByQueryAsync(d => d @@ -334,6 +381,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract new { doc.OrderId,