Merge branch 'S07' into test
This commit is contained in:
commit
848ad3c1c6
@ -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);
|
||||
|
||||
@ -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); //小时
|
||||
//预警时效(预警发出的时间对比于最早轨迹状态时间的跨度)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user