From 60324b0e2663e1e39a740bb762ed1bb1884ee2ad Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Mon, 13 Jan 2025 16:20:49 +0800 Subject: [PATCH] =?UTF-8?q?update:=E5=8D=95=E4=B8=AA=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8E=BB=E9=99=A4goto=EF=BC=8C=E9=99=84?= =?UTF-8?q?=E5=8A=A0=E6=AF=94=E8=BE=83=E5=AD=97=E6=AE=B5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackService.cs | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index e58d3355..4923b7d2 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -225,12 +225,32 @@ public partial class TrackService : ApplicationService, ITrackService 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; + if (trackIds == null || trackIds.Count == 0) + { + throw new BusinessException(message: "没有任何轨迹要删除,请检查输入参数"); + } + //删除轨迹约束,只要其中有一条来源是外部的就立即返回错误 tracks = await _trackDetailsEsRepository.GetListAsync(new[] { orderId }, trackCodes); //检查删除的轨迹中是否包含外部轨迹 existsExternal = tracks .Where(x => x.Source == (int) TrackSourceEnum.ExternalServiceProvide) + .WhereIf(!input.CompareFields.IsNullOrWhiteSpace(), y => + { + if (string.IsNullOrWhiteSpace(y.Extra)) + { + throw new BusinessException(message: "轨迹extra为空无法使用比较字段比较,请检查轨迹"); + } + + var extraDict = System.Text.Json.JsonSerializer.Deserialize>(y.Extra); + if (extraDict!.TryGetValue(input.CompareFields!, out var compareValue)) + { + //tips:可能会有问题 + return compareValue.Equals(input.CompareValue); + } + + return false; + }) .Select(x => $"{x.TrackCode}{x.TrackTime}") .Any(x => trackIds.Contains(x)); } @@ -240,24 +260,23 @@ public partial class TrackService : ApplicationService, ITrackService throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除"); } - - // todo:非必须不用goto,除非是在写算法,业务逻辑理论上都能通过if和方法规避 - 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, - OperationMan = name - }; - await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event); + await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, + new TrackDeleteEvent + { + EsIds = input.EsIds?.ToArray(), + OrderIds = new[] { orderId }, + CompareFields = input.CompareFields, + CompareValue = input.CompareValue, + TrackIdentifiers = input.TrackIdentifiers, + SubSystemId = input.SubSystemId, + OperationMan = name + }); return new UnifyResultDto(true, true); } @@ -351,6 +370,8 @@ public partial class TrackService : ApplicationService, ITrackService { OrderIds = orderIds.ToArray(), TrackIdentifiers = input.TrackIdentifiers, + CompareFields = input.CompareFields, + CompareValue = input.CompareValue, SubSystemId = input.SubSystemId, OperationMan = userInfo.Data.UserName, }; @@ -360,7 +381,6 @@ public partial class TrackService : ApplicationService, ITrackService } - // todo:代码封装性太差了,拆小一点 /// /// 批量新增、更新轨迹