From 183ea314e33c4519c3314723e307e6c4d79b1159 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Mon, 13 Jan 2025 16:31:44 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E8=A1=A5=E5=85=85=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchDeleteTrackInput.cs | 10 +++++++++ .../Dtos/ProvideServices/DeleteOrderInput.cs | 10 +++++++++ .../Dtos/ProvideServices/PushTrackInput.cs | 10 +++++++++ .../Services/ProvideServices/TrackService.cs | 21 +++++++++++++++++-- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs index 45ccc51c..9d3db0a5 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs @@ -10,4 +10,14 @@ public class BatchDeleteTrackInput : OrderNosInfo [Required] [MaxLength(500)] public List TrackIdentifiers { get; set; } = new(); + + /// + /// 重复的情况下,用什么字段比较 + /// + public string? CompareFields { get; set; } + + /// + /// 重复的情况下,比较值 + /// + public object? CompareValue { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs index 662e50e5..ef4139e4 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/DeleteOrderInput.cs @@ -17,4 +17,14 @@ public class DeleteTrackInput : OrderNoInfo /// 轨迹ESId集合,非必填,如果有优先级最高 /// public List? EsIds { get; set; } + + /// + /// 重复的情况下,用什么字段比较 + /// + public string? CompareFields { get; set; } + + /// + /// 重复的情况下,比较值 + /// + public object? CompareValue { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/PushTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/PushTrackInput.cs index d58bea41..bc5b6cae 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/PushTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/PushTrackInput.cs @@ -9,4 +9,14 @@ public class PushTrackInput : OrderNosInfo /// [Required] public string TrackCode { get; set; } = null!; + + /// + /// 重复的情况下,用什么字段比较 + /// + public string? CompareFields { get; set; } + + /// + /// 重复的情况下,比较值 + /// + public object? CompareValue { get; set; } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 4923b7d2..db991a76 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -245,7 +245,7 @@ public partial class TrackService : ApplicationService, ITrackService var extraDict = System.Text.Json.JsonSerializer.Deserialize>(y.Extra); if (extraDict!.TryGetValue(input.CompareFields!, out var compareValue)) { - //tips:可能会有问题 + //todo:需要修改JsonElement和object的逻辑 return compareValue.Equals(input.CompareValue); } @@ -358,7 +358,24 @@ public partial class TrackService : ApplicationService, ITrackService TrackSourceEnum.ExternalServiceProvide); //当要删除的轨迹标识出现交叉则不允许删除 - var intersect = tracks.Select(x => $"{x.TrackCode}{x.TrackTime}") + var intersect = tracks + .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)) + { + //todo:需要修改JsonElement和object的逻辑 + return compareValue.Equals(input.CompareValue); + } + + return false; + }) + .Select(x => $"{x.TrackCode}{x.TrackTime}") .Intersect(input.TrackIdentifiers.Select(y => $"{y.TrackCode}{y.TrackTime}")).ToList(); if (intersect.Count > 0) {