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); //小时 //预警时效(预警发出的时间对比于最早轨迹状态时间的跨度)