Merge branch 'S07' into test

This commit is contained in:
hardstylewyl 2025-04-01 10:42:20 +08:00
commit 848ad3c1c6
2 changed files with 6 additions and 49 deletions

View File

@ -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);

View File

@ -72,10 +72,6 @@ public sealed class TransportWarningDetailsIndex : IdBaseIndex
//审计属性
public DateTime CreateTime { get; set; } //预警创建时间
private static readonly ImmutableHashSet<int> 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); //小时
//预警时效(预警发出的时间对比于最早轨迹状态时间的跨度)