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()