From 84792dc50285630f033a49b0b3a897edbfc9f667 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Thu, 9 Jan 2025 10:25:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?perf:=20=E5=88=A0=E9=99=A4=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=8F=90=E4=BE=9B=E6=8E=A5=E5=8F=A3=EF=BC=88=E5=8D=95?= =?UTF-8?q?=E4=B8=AA=E8=AE=A2=E5=8D=95=EF=BC=89=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BD=BF=E7=94=A8EsId=E6=9D=A5=E5=88=A0=E9=99=A4=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=EF=BC=88=E5=BD=93=E5=92=8C=E6=A0=87=E8=AF=86=E7=AC=A6?= =?UTF-8?q?=E9=83=BD=E4=B8=8D=E4=B8=BA=E7=A9=BA=E5=88=99=E4=BC=98=E5=85=88?= =?UTF-8?q?=E4=BB=A5esId=E4=BC=98=E5=85=88=EF=BC=89=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E8=A7=A3=E9=99=A4=E6=A0=87=E8=AF=86=E7=AC=A6=E5=8F=B7=E7=9A=84?= =?UTF-8?q?=E5=BF=85=E5=A1=AB=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit perf: 轨迹查询提供接口,增加es反参 perf: 支持轨迹更新的esId更新(要求确保是单个订单的单个轨迹) --- .../Dtos/ProvideServices/DeleteOrderInput.cs | 10 +++- .../Dtos/ProvideServices/GetTrackOutput.cs | 1 + .../Dtos/ProvideServices/UpsertTrackInput.cs | 5 ++ .../Events/TrackUpsertEvent.cs | 5 ++ .../EventHandlers/TrackUpsertEventHandler.cs | 8 +++ .../ProvideServices/TrackService.Query.cs | 2 + .../Services/ProvideServices/TrackService.cs | 57 ++++++++++++++----- .../Repositories/TrackDetailsEsRepository.cs | 2 +- 8 files changed, 72 insertions(+), 18 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs index de305c57..662e50e5 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs @@ -9,8 +9,12 @@ public class DeleteOrderInput : OrderNoInfo public class DeleteTrackInput : OrderNoInfo { /// - /// 轨迹标识符集合,必填 + /// 轨迹标识符集合,为支持esid删除,所以非必填 /// - [Required] - public List TrackIdentifiers { get; set; } = new(); + public List? TrackIdentifiers { get; set; } = new(); + + /// + /// 轨迹ESId集合,非必填,如果有优先级最高 + /// + public List? EsIds { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index fca510a7..f5313b3b 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -15,6 +15,7 @@ public class GetTrackOutput public class TrackDetail { + public string EsId { get; set; } = null!; public string Code { get; set; } = null!; public string Status { get; set; } = null!; public string? Content { 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 8f743c7f..2b15e904 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -9,6 +9,11 @@ public class UpsertTrackInput : OrderNoInfo /// public bool IsAdd { get; set; } + /// + /// 轨迹唯一标识(可选) + /// + public string? EsId { get; set; } + /// /// 轨迹内容代码 /// diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index 877fa365..dbf754d7 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -19,6 +19,11 @@ public class TrackUpsertEvent /// public OrderIdentifier[] OrderIdentifiers { get; set; } = null!; + /// + /// 轨迹唯一标识(用于单个订单更新单条轨迹,如果有的话优先级最高) + /// + public string? EsId { get; set; } + /// /// 操作人(null则默认系统) /// diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 87dbc962..8ba97084 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -242,6 +242,12 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackDetailsIndex? track; if (!@event.IsAdd) { + //如果命中了esId + track = string.IsNullOrWhiteSpace(@event.EsId) + ? null + : tracks.FirstOrDefault(x => x.Id == @event.EsId); + if (track != null) goto TipEsIdTrack; + //同一订单同轨迹code同一轨迹时间如果有多条轨迹明细则不允许修改 var existTracks = tracks.Where(x => x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime).ToArray(); @@ -291,6 +297,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe //其余情况:A,D都为新增操作,无需检查数量,track为null执行新增操作 } + //通过esId命中了轨迹 + TipEsIdTrack: if (track == default) { track = new TrackDetailsIndex diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index 7e377a94..f6768eee 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -61,6 +61,7 @@ public partial class TrackService item.TrackDetails = trackDetails.Select(x => new TrackDetail { + EsId = x.Id, Code = x.TrackCode, Status = x.TrackStatus, Content = x.TrackContent, @@ -146,6 +147,7 @@ public partial class TrackService item.TrackDetails = trackDetails.Select(x => new TrackDetail { + EsId = x.Id, Code = x.TrackCode, Status = x.TrackStatus, Content = x.TrackContent, diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 45656799..9625a5f9 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -27,12 +27,16 @@ public partial class TrackService : ApplicationService, ITrackService private readonly IHttpClientProxy _requestCurrentUserService; private readonly ITrackContentRepository _trackContentRepository; - public TrackService(IOrderRepository orderRepository, ICapPublisher capPublisher, - ITrackDetailsEsRepository trackDetailsEsRepository, ITrackContentRepository trackContentRepository, - IHttpClientProxy requestCurrentUserService, ITrackTemplateRepository trackTemplateRepository, IHttpContextAccessor contextAccessor, IVSystemQueries vSystemQueries) + public TrackService(IOrderRepository orderRepository, + ICapPublisher capPublisher, + ITrackDetailsEsRepository trackDetailsEsRepository, + ITrackContentRepository trackContentRepository, + IHttpClientProxy requestCurrentUserService, + ITrackTemplateRepository trackTemplateRepository, + IHttpContextAccessor contextAccessor, + IVSystemQueries vSystemQueries) { _orderRepository = orderRepository; - this._orderRepository = orderRepository; _capPublisher = capPublisher; _trackContentRepository = trackContentRepository; _requestCurrentUserService = requestCurrentUserService; @@ -108,7 +112,10 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许手动更新"); } - var tracks = (await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true)) + //如果传递了esId并且是修改操作则使用esid + var tracks = (!string.IsNullOrWhiteSpace(input.EsId) && !input.IsAdd) + ? await _trackDetailsEsRepository.GetDataByIds(new[] { input.EsId }) + : (await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true)) .Where(x => x.TrackTime == input.TrackTime) .ToList(); @@ -204,23 +211,45 @@ public partial class TrackService : ApplicationService, ITrackService var name = userInfo.Data.UserName; - //删除轨迹约束,只要其中有一条来源是外部的就立即返回错误 - var tracks = await _trackDetailsEsRepository - .GetListAsync(new[] { orderId }, - input.TrackIdentifiers.Select(x => x.TrackCode).ToList(), - TrackSourceEnum.ExternalServiceProvide); + var tracks = new List(); + var existsExternal = false; + var esIds = input.EsIds?.Distinct().ToArray(); + //优先使用esId + if (esIds != null && esIds.Length > 0) + { + tracks = await _trackDetailsEsRepository.GetDataByIds(esIds); + existsExternal = tracks.Any(x => x.Source == (int) TrackSourceEnum.ExternalServiceProvide); + } + else + { + var trackCodes = input.TrackIdentifiers?.Select(x => x.TrackCode).ToList(); + var trackIds = input.TrackIdentifiers?.Select(y => $"{y.TrackCode}{y.TrackTime}").ToHashSet(); + //没有任何需要操作的轨迹 + if (trackIds == null || trackIds.Count == 0) goto NO_DELETE_TRACK; + //删除轨迹约束,只要其中有一条来源是外部的就立即返回错误 + tracks = await _trackDetailsEsRepository.GetListAsync(new[] { orderId }, trackCodes); + //检查删除的轨迹中是否包含外部轨迹 + existsExternal = tracks + .Where(x => x.Source == (int) TrackSourceEnum.ExternalServiceProvide) + .Select(x => $"{x.TrackCode}{x.TrackTime}") + .Any(x => trackIds.Contains(x)); + } - //当要删除的轨迹标识出现交叉则不允许删除 - var intersect = tracks.Select(x => $"{x.TrackCode}{x.TrackTime}") - .Intersect(input.TrackIdentifiers.Select(y => $"{y.TrackCode}{y.TrackTime}")).ToList(); - if (intersect.Count > 0) + if (existsExternal) { throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除"); } + NO_DELETE_TRACK: + if (tracks.Count == 0) + { + throw new BusinessException(message: "没有任何轨迹要删除,请检查输入参数"); + } + // 删除轨迹 var @event = new TrackDeleteEvent { + EsIds = input.EsIds?.ToArray(), OrderIds = new[] { orderId }, TrackIdentifiers = input.TrackIdentifiers, SubSystemId = input.SubSystemId, diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index d7e28fbe..6d03a1b1 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -419,7 +419,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract> GetListAsync(int orderId) From 586690ed55b2ecd343b142dadd87feccdea579e1 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Thu, 9 Jan 2025 10:27:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update-package:=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E5=8C=85=E7=89=88=E6=9C=AC=E4=B8=BA7.0.12=20?= =?UTF-8?q?-=20=E6=9F=A5=E8=AF=A2=E8=BD=A8=E8=BF=B9=E5=A2=9E=E5=8A=A0esid?= =?UTF-8?q?=E5=8F=8D=E5=8F=82=20-=20=E5=88=A0=E9=99=A4=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E6=94=AF=E6=8C=81esid=E5=88=A0=E9=99=A4=20-=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8D=95=E4=B8=AA=E8=AE=A2=E5=8D=95=E7=9A=84=E5=8D=95?= =?UTF-8?q?=E4=B8=AA=E8=BD=A8=E8=BF=B9=E6=94=AF=E6=8C=81es=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SJZY.Track.Application.Contract.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj index e9cb325e..48722a57 100644 --- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj +++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj @@ -5,7 +5,7 @@ net7.0 True - 7.0.11 + 7.0.12 True