diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index fb0d998e..c8b35ebc 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -109,6 +109,25 @@ public class TrackOrderService : ApplicationService return new List(); } + /// + /// 根据轨迹id删除单条轨迹 + /// + /// 轨迹id + /// + [HttpPost("GetDetails")] + public async Task DeleteTrackByIdAsync(string trackId) + { + var track = await _trackDetailsRepository.GetByIdAsync(trackId); + + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (track == null) + { + throw new BusinessException(message: "轨迹不存在!"); + } + + await _trackDetailsRepository.DeleteTrackByIdAsync(trackId, track.IndexName); + return true; + } #endregion #region 轨迹订单列表 diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs index cec7351b..6eb24be8 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs @@ -1,29 +1,28 @@ +using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Dtos.TrackDetails; namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; -public interface ITrackDetailsRepository +public interface ITrackDetailsRepository : IElasticsearchClientService { Task> GetListAsync(int[] orderIds, string trackCode, bool forUpsert = false); Task> GetLatestListAsync(int[] eventOrderIds, List trackCodes); - Task<(List results, object[]? nextSearchAfter)> GetListAsync(int orderType, List orderNos, object[]? searchAfter = null, int limit = 1000); - - Task AnyAsync(int orderId, DateTime trackTime); + Task<(List results, object[]? nextSearchAfter)> GetListAsync(int orderType, + List orderNos, object[]? searchAfter = null, int limit = 1000); Task AnyAsync(int orderId, string originTrackDataHash); - Task AnyByCodeAsync(int orderId, string trackCode); - Task UpdateAsync(TrackDetailsIndex index); Task AddManyAsync(List index); Task AddAsync(TrackDetailsIndex track); - Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input); Task> GetListAsync(int orderId); Task DeleteTrackAsync(int[] orderIds, List trackCodes); + + Task DeleteTrackByIdAsync(string id, string indexName); } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index c3f0b0a9..15d98aa9 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -3,7 +3,6 @@ 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.Dtos.TrackDetails; namespace SJZY.Track.Repository.Repositories; @@ -50,7 +49,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract AnyAsync(int orderId, DateTime trackTime) - { - var r = await Context.SearchAsync(x => x - .Source(s => s.Includes(fd => fd.Field(f => f.TrackCode))) - .Query(q => - q.Term(f => f.OrderId, orderId) - && q.Term(f => f.TrackTime, trackTime) - ) - ); - - if (!r.IsValid) - { - throw new Exception($"轨迹查询异常,原因:{r.DebugInformation}。"); - } - - return r.Hits.Count > 0; - } - public async Task AnyAsync(int orderId, string originTrackDataHash) { var r = await Context.SearchAsync(x => x @@ -137,25 +120,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0; - } - - public async Task AnyByCodeAsync(int orderId, string trackCode) - { - var r = await Context.SearchAsync(x => x - .Source(s => s.Includes(fd => fd.Field(f => f.TrackCode))) - .Query(q => - q.Term(f => f.OrderId, orderId) - && q.Term(f => f.TrackCode.Suffix("keyword"), trackCode) - ) - ); - - if (!r.IsValid) - { - throw new Exception($"轨迹查询异常,原因:{r.DebugInformation}。"); + throw new InvalidOperationException( + $"轨迹查询失败,orderId:{orderId},hash:{originTrackDataHash},原因:{r.DebugInformation}。"); } return r.Hits.Count > 0; @@ -178,7 +144,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract results, object[]? nextSearchAfter)> GetListAsync(int orderType, List orderNos, object[]? searchAfter = null, int limit = 1000) + public async Task<(List results, object[]? nextSearchAfter)> GetListAsync(int orderType, + List orderNos, object[]? searchAfter = null, int limit = 1000) { if (orderNos.Count < 1) return (new List(), null); @@ -242,7 +209,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract s .Ascending(f => f.TrackTime) // 需要根据某个字段排序 - .Ascending(f => f.OrderNo) // 可以添加更多排序字段以确保唯一性 + .Ascending(f => f.OrderNo) // 可以添加更多排序字段以确保唯一性 ) .Size(limit) .SearchAfter(searchAfter) @@ -250,7 +217,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract trackCodes) @@ -289,38 +257,27 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(track.Id, u => u - .Index(track.IndexName) - ); + await DeleteTrackByIdAsync(track.Id, track.IndexName); } } - public async Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input) + public async Task DeleteTrackByIdAsync(string id, string indexName) { - if (input.OrderNos.Count < 1) return default; - - var distinctOrderNumbers = input.OrderNos.Distinct(); - var finalSize = input.PageSize > 500 ? 500 : input.PageSize; - - var data = await Context.SearchAsync(x => x - .Query(q => - q.Terms(t => t - .Field(f => f.OrderNo) - .Terms(distinctOrderNumbers)) - ) - .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending)) - .From((input.PageIndex - 1) * input.PageSize) - .Size(finalSize) - .TrackTotalHits() // todo: 聚合获取匹配查询条件的文档总数,而不受"index.max_result_window"的限制 + var r = await Context.DeleteAsync(id, u => u + .Index(indexName) ); - return (data.Documents.ToList(), data.Total); + if (!r.IsValid) + { + throw new InvalidOperationException($"轨迹删除失败,id:{indexName},原因:{r.DebugInformation}。"); + } } } \ No newline at end of file