From be4723569f48b8c097e39cbc96980f957a4dc017 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Wed, 23 Apr 2025 14:44:57 +0800 Subject: [PATCH] =?UTF-8?q?option:=E6=9A=82=E6=97=B6=E5=AE=B9=E5=BF=8DFBA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=B6=E5=8C=BA=E5=8F=AA=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=9D=A5=E5=8C=B9=E9=85=8D=E8=BD=A8=E8=BF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 31 ++++++++++++----- .../Services/ProvideServices/TrackService.cs | 33 +++++++++++++++---- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 65a7fc31..87e48e6f 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -295,14 +295,29 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe // tips:如果没传时区则使用+8兜底进行过滤 var timezone = Math.Abs(@event.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 0.01f ? 8.0f : @event.TrackTimeZone; - // 根据时间过滤 - existTracks = @event.IsAdd - ? existTracks.Where(x => x.GetUtc0TrackTime() == (@event.NewTrackTime ?? @event.TrackTime).Subtract(TimeSpan.FromHours(timezone))).ToList() - : existTracks.Where(x => - x.GetUtc0TrackTime() == @event.TrackTime.Subtract(TimeSpan.FromHours(timezone)) - // 修改了时间,要校验修改后的时间是否存在 - || (@event.NewTrackTime != null && x.GetUtc0TrackTime() == @event.NewTrackTime.Value.Subtract(TimeSpan.FromHours(timezone))) - ).ToList(); + // todo-remove:为了照顾FBA老逻辑,暂时特殊处理一下 + var trackFirst = tracks.First(); + if (trackFirst.SubSystemId == 9517) + { + existTracks = @event.IsAdd + ? tracks.Where(x => x.TrackTime == (@event.NewTrackTime ?? @event.TrackTime)).ToList() + : tracks.Where(x => + x.TrackTime == @event.TrackTime + // 修改了时间,要校验修改后的时间是否存在 + || (@event.NewTrackTime != null && x.TrackTime == @event.NewTrackTime) + ).ToList(); + } + else + { + // 根据时间过滤 + existTracks = @event.IsAdd + ? existTracks.Where(x => x.GetUtc0TrackTime() == (@event.NewTrackTime ?? @event.TrackTime).Subtract(TimeSpan.FromHours(timezone))).ToList() + : existTracks.Where(x => + x.GetUtc0TrackTime() == @event.TrackTime.Subtract(TimeSpan.FromHours(timezone)) + // 修改了时间,要校验修改后的时间是否存在 + || (@event.NewTrackTime != null && x.GetUtc0TrackTime() == @event.NewTrackTime.Value.Subtract(TimeSpan.FromHours(timezone))) + ).ToList(); + } // 根据扩展信息过滤 existTracks = @event.IsAdd diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index aef0f0f0..ec936e98 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -620,13 +620,32 @@ public partial class TrackService : ApplicationService, ITrackService // 如果不允许重复,则直接返回 if (!isRepeatable) return tracks; - tracks = isAdd - ? tracks.Where(x => x.GetUtc0TrackTime() == (newTrackTime ?? trackTime).Subtract(TimeSpan.FromHours(trackTimezone))).ToList() - : tracks.Where(x => - x.GetUtc0TrackTime() == trackTime.Subtract(TimeSpan.FromHours(trackTimezone)) - // 修改了时间,要校验修改后的时间是否存在 - || (newTrackTime != null && x.GetUtc0TrackTime() == newTrackTime.Value.Subtract(TimeSpan.FromHours(trackTimezone))) - ).ToList(); + // 没有任何轨迹,也直接返回 + if (tracks.Count == 0) + return tracks; + + // todo-remove:为了照顾FBA老逻辑,暂时特殊处理一下 + var trackFirst = tracks.First(); + if (trackFirst.SubSystemId == 9517) + { + tracks = isAdd + ? tracks.Where(x => x.TrackTime == (newTrackTime ?? trackTime)).ToList() + : tracks.Where(x => + x.TrackTime == trackTime + // 修改了时间,要校验修改后的时间是否存在 + || (newTrackTime != null && x.TrackTime == newTrackTime) + ).ToList(); + } + else + { + tracks = isAdd + ? tracks.Where(x => x.GetUtc0TrackTime() == (newTrackTime ?? trackTime).Subtract(TimeSpan.FromHours(trackTimezone))).ToList() + : tracks.Where(x => + x.GetUtc0TrackTime() == trackTime.Subtract(TimeSpan.FromHours(trackTimezone)) + // 修改了时间,要校验修改后的时间是否存在 + || (newTrackTime != null && x.GetUtc0TrackTime() == newTrackTime.Value.Subtract(TimeSpan.FromHours(trackTimezone))) + ).ToList(); + } return isAdd ? tracks.Where(x => x.Extra == (newExtra ?? extra)).ToList()