From b5ee6396fd9a416731e7557818216dee90524ad0 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Tue, 1 Apr 2025 10:42:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=BF=90=E8=BE=93?= =?UTF-8?q?=E6=97=B6=E6=95=88=E9=A2=84=E8=AD=A6=E7=8A=B6=E6=80=81=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Handlers/TransportWarningHandler.cs | 25 ++++------------ .../Transport/TransportWarningDetailsIndex.cs | 30 +------------------ 2 files changed, 6 insertions(+), 49 deletions(-) diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs index d7620ffa..fb98e26c 100644 --- a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs +++ b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs @@ -357,8 +357,7 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen { var earliestTrack = trackStatusIdEarliestTrackDict[detail.StartTrackStatusId]; // 当现有轨迹的【轨迹状态最早发生时间】早于预警明细上的,则进行修改 - //todo:需要关注时区 - if (earliestTrack.TrackTime < detail.StartTrackTime) + if (earliestTrack.GetUtc0TrackTime() < detail.GetUtc0StartTrackTime()) { detail.StartTrackTime = earliestTrack.TrackTime; detail.StartTrackTimeZone = earliestTrack.TrackTimeZone; @@ -376,31 +375,17 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen var startTrackStatusEarliestTrack = trackStatusIdEarliestTrackDict[detail.StartTrackStatusId]; var endTrackStatusEarliestTrack = trackStatusIdEarliestTrackDict[detail.EndTrackStatusId]; - // 修改为完成态 - if (detail.CalcStatus() == TransportWarningStatus.已超时.GetHashCode()) - detail.Status = TransportWarningStatus.超时完成.GetHashCode(); - if (detail.Status == TransportWarningStatus.即将超时.GetHashCode()) - detail.Status = TransportWarningStatus.已完成.GetHashCode(); - // 填充终止状态轨迹信息 detail.EndTrackContentId = endTrackStatusEarliestTrack.TrackContentId; detail.EndTrackContent = endTrackStatusEarliestTrack.TrackContent; detail.EndTrackTime = endTrackStatusEarliestTrack.TrackTime; detail.EndTrackTimeZone = endTrackStatusEarliestTrack.TrackTimeZone; - // 维护累计运输时间(由于变更为终止态,此时为最后一次变更) - detail.CumulativeTimeSpan = detail.CalcCumulativeTimeSpan(); + // 维护状态(已完成/超时完成) + detail.Status = detail.CalcStatus(startTrackStatusEarliestTrack, endTrackStatusEarliestTrack); - // 默认判断超时完成是根据当前时间判断的,但可能截止轨迹发生时间在时效要求范围内,故需要二次校验 - if (detail.Status == TransportWarningStatus.超时完成.GetHashCode()) - { - var starTrackTime = startTrackStatusEarliestTrack.GetUtc0TrackTime(); - var endTrackTime = endTrackStatusEarliestTrack.GetUtc0TrackTime(); - // 如果添加的截止轨迹最早轨迹发生时间,小于起始轨迹状态最早轨迹发生时间+时效则认为是正常完成 - // tips: 可能出现的原因,轨迹已经产生但没有及时加到系统中去 - if (endTrackTime < starTrackTime.AddHours(detail.TransportTimeSpan)) - detail.Status = TransportWarningStatus.已完成.GetHashCode(); - } + // 维护累计运输时间 + detail.CumulativeTimeSpan = detail.CalcCumulativeTimeSpan(); updateDetails.Add(detail); closeNotifyDetailIds.Add(detail.Id); diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Transport/TransportWarningDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Transport/TransportWarningDetailsIndex.cs index b40e2c96..bfbd525d 100644 --- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Transport/TransportWarningDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Transport/TransportWarningDetailsIndex.cs @@ -72,10 +72,6 @@ public sealed class TransportWarningDetailsIndex : IdBaseIndex //审计属性 public DateTime CreateTime { get; set; } //预警创建时间 - private static readonly ImmutableHashSet CompletedStatus = ImmutableHashSet.Create(3, 4, 5); - - public bool CanCompleted() => CompletedStatus.Contains(Status); - public long CalcCumulativeTimeSpan() { // 已完成/超时完成,截止轨迹时间 - 起始轨迹时间 @@ -100,34 +96,10 @@ public sealed class TransportWarningDetailsIndex : IdBaseIndex return timeSpan; } - // tips:计算并设置状态,后续维护到vo当中 - public int CalcStatus() - { - // 结束态无需计算,直接返回 - if (CompletedStatus.Contains(Status)) return Status; - - //时效 - var transportTimeSpan = TimeSpan.FromHours(TransportTimeSpan); //小时 - //累计运输时间 - var cumulativeTimeSpan = DateTime.Now.Subtract(StartTrackTime); //毫秒 - //预警时效(预警发出的时间对比于最早轨迹状态时间的跨度) - var startTrackWarningTimeSpan = TimeSpan.FromHours(StartTrackWarningTimeSpan); //小时 - - //时效>累计运输时间>=预警时效 状态调整为【即将超时】 - if (transportTimeSpan > cumulativeTimeSpan && cumulativeTimeSpan >= startTrackWarningTimeSpan) - return Status = (int) TransportWarningStatus.即将超时; - - //时效<累计运输时间 状态调整为【已超时】 - if (transportTimeSpan < cumulativeTimeSpan) - return Status = (int) TransportWarningStatus.已超时; - - return Status; - } - public int CalcStatus(TrackDetailsIndex? startStatusTrack, TrackDetailsIndex? endStatusTrack) { if (Status == (int) TransportWarningStatus.已关闭) return Status; - var isEnd = !string.IsNullOrWhiteSpace(EndTrackContent); + var isEnd = endStatusTrack != null; //时效 var transportTimeSpan = TimeSpan.FromHours(TransportTimeSpan); //小时 //预警时效(预警发出的时间对比于最早轨迹状态时间的跨度)