option:暂时容忍FBA修改时区只通过时间来匹配轨迹

This commit is contained in:
hardstylewyl 2025-04-23 14:44:57 +08:00
parent 1d854ba16d
commit be4723569f
2 changed files with 49 additions and 15 deletions

View File

@ -295,6 +295,20 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// tips:如果没传时区则使用+8兜底进行过滤 // tips:如果没传时区则使用+8兜底进行过滤
var timezone = Math.Abs(@event.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 0.01f ? 8.0f : @event.TrackTimeZone; var timezone = Math.Abs(@event.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 0.01f ? 8.0f : @event.TrackTimeZone;
// 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 = @event.IsAdd
? existTracks.Where(x => x.GetUtc0TrackTime() == (@event.NewTrackTime ?? @event.TrackTime).Subtract(TimeSpan.FromHours(timezone))).ToList() ? existTracks.Where(x => x.GetUtc0TrackTime() == (@event.NewTrackTime ?? @event.TrackTime).Subtract(TimeSpan.FromHours(timezone))).ToList()
@ -303,6 +317,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// 修改了时间,要校验修改后的时间是否存在 // 修改了时间,要校验修改后的时间是否存在
|| (@event.NewTrackTime != null && x.GetUtc0TrackTime() == @event.NewTrackTime.Value.Subtract(TimeSpan.FromHours(timezone))) || (@event.NewTrackTime != null && x.GetUtc0TrackTime() == @event.NewTrackTime.Value.Subtract(TimeSpan.FromHours(timezone)))
).ToList(); ).ToList();
}
// 根据扩展信息过滤 // 根据扩展信息过滤
existTracks = @event.IsAdd existTracks = @event.IsAdd

View File

@ -620,6 +620,24 @@ public partial class TrackService : ApplicationService, ITrackService
// 如果不允许重复,则直接返回 // 如果不允许重复,则直接返回
if (!isRepeatable) return tracks; if (!isRepeatable) return tracks;
// 没有任何轨迹,也直接返回
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 = isAdd
? tracks.Where(x => x.GetUtc0TrackTime() == (newTrackTime ?? trackTime).Subtract(TimeSpan.FromHours(trackTimezone))).ToList() ? tracks.Where(x => x.GetUtc0TrackTime() == (newTrackTime ?? trackTime).Subtract(TimeSpan.FromHours(trackTimezone))).ToList()
: tracks.Where(x => : tracks.Where(x =>
@ -627,6 +645,7 @@ public partial class TrackService : ApplicationService, ITrackService
// 修改了时间,要校验修改后的时间是否存在 // 修改了时间,要校验修改后的时间是否存在
|| (newTrackTime != null && x.GetUtc0TrackTime() == newTrackTime.Value.Subtract(TimeSpan.FromHours(trackTimezone))) || (newTrackTime != null && x.GetUtc0TrackTime() == newTrackTime.Value.Subtract(TimeSpan.FromHours(trackTimezone)))
).ToList(); ).ToList();
}
return isAdd return isAdd
? tracks.Where(x => x.Extra == (newExtra ?? extra)).ToList() ? tracks.Where(x => x.Extra == (newExtra ?? extra)).ToList()