fix: 运输时效预警
- 补充明细截止轨迹内容的更新 - 预警明细格式化时区显示 - 预警明细排序修复 - 明细始终存储起始轨迹状态的最早轨迹 - 场景规则变更同步更新预警明细
This commit is contained in:
parent
a56319d8b6
commit
b93386d19c
@ -66,7 +66,7 @@ public sealed class TransportWarningDetailsDto
|
||||
/// <summary>
|
||||
/// 最新轨迹发生时区
|
||||
/// </summary>
|
||||
public float? LatestTrackTimeZone { get; set; }
|
||||
public string LatestTrackTimeZone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最新轨迹发生地
|
||||
@ -94,9 +94,9 @@ public sealed class TransportWarningDetailsDto
|
||||
public DateTime StartTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起始轨迹时区
|
||||
/// 起始轨迹时区 e.g GMT +8:00 / --
|
||||
/// </summary>
|
||||
public float StartTrackTimeZone { get; set; }
|
||||
public string StartTrackTimeZone { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
@ -115,9 +115,9 @@ public sealed class TransportWarningDetailsDto
|
||||
public DateTime? EndTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止轨迹时区
|
||||
/// 截止轨迹时区 e.g GMT +8:00 / --
|
||||
/// </summary>
|
||||
public float? EndTrackTimeZone { get; set; }
|
||||
public string EndTrackTimeZone { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -393,8 +393,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
var handler3 = scope.ServiceProvider.GetRequiredService<IReturnWarningHandler>();
|
||||
|
||||
await Task.Delay(1500); //确保落盘
|
||||
await handler2.TrackDeletedHandleAsync(signals);
|
||||
await handler.TrackDeletedHandleAsync(signals);
|
||||
await handler2.TrackDeletedHandleAsync(signals);
|
||||
await handler3.TrackUpdatedOrDeletedHandleAsync(signals.Cast<IWarningSignal>().ToList());
|
||||
}
|
||||
finally
|
||||
|
||||
@ -183,30 +183,30 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
||||
// 存在起始状态最早轨迹?
|
||||
// 最早轨迹如果早于预警明细中的起始轨迹时间,则修改预警明细
|
||||
// todo:时区信息如果未提供则比较时间无意义!!,出现一个有时区一个无时区(后续可能强约束时区必填)?
|
||||
var updateDetails = details
|
||||
.Where(d => earliestTrack.GetUtc0TrackTime() < d.GetUtc0StartTrackTime())
|
||||
.ToList();
|
||||
foreach (var detail in updateDetails)
|
||||
foreach (var detail in details)
|
||||
{
|
||||
//剩余轨迹中的最早发生时间早于轨迹明细中,修改明细信息
|
||||
//保持预警明细中始终为起始状态的最早轨迹
|
||||
detail.StartTrackContentId = earliestTrack.TrackContentId;
|
||||
detail.StartTrackContent = earliestTrack.TrackContent;
|
||||
detail.StartTrackTime = earliestTrack.TrackTime;
|
||||
detail.StartTrackTimeZone = earliestTrack.TrackTimeZone;
|
||||
}
|
||||
|
||||
needUpdateDetails.AddRange(updateDetails);
|
||||
needUpdateDetails.AddRange(details);
|
||||
}
|
||||
}
|
||||
|
||||
// 批量处理
|
||||
await _warningTaskRepository.BulkUpdateTransportWarningDetailsGenerateTaskAsync(needUpdateGenerateTask);
|
||||
await _warningDetailsEsRepository.BulkUpdateTransportWarningDetailsAsync(needUpdateDetails);
|
||||
await _warningTaskRepository.CloseWarningNotifyTaskAsync(x =>
|
||||
!x.IsClosed
|
||||
&& x.WarningType == WarningRuleType.运输时效预警.GetHashCode()
|
||||
&& needCloseNotifyWarningDetailsIds.Contains(x.WarningDetailsId)
|
||||
);
|
||||
if (needUpdateGenerateTask.Count > 0)
|
||||
await _warningTaskRepository.BulkUpdateTransportWarningDetailsGenerateTaskAsync(needUpdateGenerateTask);
|
||||
if (needUpdateDetails.Count > 0)
|
||||
await _warningDetailsEsRepository.BulkUpdateTransportWarningDetailsAsync(needUpdateDetails);
|
||||
if (needCloseNotifyWarningDetailsIds.Count > 0)
|
||||
await _warningTaskRepository.CloseWarningNotifyTaskAsync(x =>
|
||||
!x.IsClosed
|
||||
&& x.WarningType == WarningRuleType.运输时效预警.GetHashCode()
|
||||
&& needCloseNotifyWarningDetailsIds.Contains(x.WarningDetailsId)
|
||||
);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -579,6 +579,7 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
||||
}
|
||||
|
||||
// 4.仍然命中场景的订单需要修改明细中的内容(预警名称,预警规则描述)
|
||||
var needUpdateDetails = new List<TransportWarningDetailsIndex>();
|
||||
if (reHitSceneOrderIds.Count != 0)
|
||||
{
|
||||
// 明细->规则
|
||||
@ -598,9 +599,14 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
||||
var ruleItem = ruleItemDict[detail.WarningSceneRuleItemId];
|
||||
detail.WarningName = rule.Name;
|
||||
detail.WarningRuleDescription = detail.GetWarningRuleDescription(postScene.ToEntity(), ruleItem, ruleArea);
|
||||
needUpdateDetails.Add(detail);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新预警明细
|
||||
if (needUpdateDetails.Count > 0)
|
||||
await _warningDetailsEsRepository.BulkUpdateTransportWarningDetailsAsync(needUpdateDetails);
|
||||
|
||||
if (noHitSceneOrderIds.Count == 0)
|
||||
return;
|
||||
|
||||
|
||||
@ -223,20 +223,20 @@ public class TransportWarningService : ApplicationService
|
||||
// 最新轨迹 (不冗余)
|
||||
LatestTrackContent = orderIdTrack?.TrackContent,
|
||||
LatestTrackTime = orderIdTrack?.TrackTime,
|
||||
LatestTrackTimeZone = orderIdTrack?.TrackTimeZone,
|
||||
LatestTrackTimeZone = FormatTimeZone(orderIdTrack?.TrackTimeZone),
|
||||
LatestTrackPlace = orderIdTrack?.TrackContent,
|
||||
|
||||
// 起始轨迹
|
||||
StartTrackStatus = x.StartTrackStatus,
|
||||
StartTrackContent = x.StartTrackContent,
|
||||
StartTrackTime = x.StartTrackTime,
|
||||
StartTrackTimeZone = x.StartTrackTimeZone,
|
||||
StartTrackTimeZone = FormatTimeZone(x.StartTrackTimeZone),
|
||||
|
||||
// 截止轨迹
|
||||
EndTrackStatus = x.EndTrackStatus,
|
||||
EndTrackContent = x.EndTrackContent,
|
||||
EndTrackTime = x.EndTrackTime,
|
||||
EndTrackTimeZone = x.EndTrackTimeZone,
|
||||
EndTrackTimeZone = FormatTimeZone(x.EndTrackTimeZone),
|
||||
|
||||
WarningName = x.WarningName,
|
||||
WarningRuleDescription = x.WarningRuleDescription,
|
||||
@ -253,14 +253,17 @@ public class TransportWarningService : ApplicationService
|
||||
// 计算后的状态过滤
|
||||
var filtered = map.WhereIf(input.Status > 0, x => x.Status == input.Status);
|
||||
|
||||
// 按状态排序
|
||||
var sorted = filtered.OrderBy(x =>
|
||||
{
|
||||
// 即将超时,已超时置顶
|
||||
if (x.Status is 1 or 2) return x.Status;
|
||||
// 其他按创建时间从早到晚
|
||||
return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime);
|
||||
}).ToList();
|
||||
// 按状态+时间排序
|
||||
var sorted = filtered
|
||||
.OrderBy(x =>
|
||||
{
|
||||
// 即将超时,已超时置顶
|
||||
if (x.Status is 1 or 2) return x.Status;
|
||||
// 其他按创建时间从早到晚
|
||||
return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime);
|
||||
})
|
||||
.ThenByDescending(x => x.CreateTime) //同状态(即将超时/已超时)按创建时间从晚到早
|
||||
.ToList();
|
||||
|
||||
return new UnifyPageResultDto<TransportWarningDetailsDto>(
|
||||
sorted,
|
||||
@ -286,6 +289,22 @@ public class TransportWarningService : ApplicationService
|
||||
|
||||
return $"{timeSpan.Days:00}天{timeSpan.Hours:00}小时{timeSpan.Minutes:00}分钟";
|
||||
}
|
||||
|
||||
// 格式化时区
|
||||
string FormatTimeZone(float? timezone)
|
||||
{
|
||||
if (timezone == null) return "--";
|
||||
|
||||
if (Math.Abs(timezone.Value - GlobalConst.NoneTrackTimeZone) < 1) return "--";
|
||||
|
||||
// 将小数形式的小时转换为时区偏移量
|
||||
var hours = (int) timezone.Value; // 提取整数部分作为小时
|
||||
var minutes = (int) ((timezone.Value - hours) * 60); // 将小数部分乘以 60 转换为分钟
|
||||
var offset = new TimeSpan(hours, minutes, 0);
|
||||
var timeZoneStr = offset.ToString();
|
||||
var flag = timezone > 0f ? "+" : "";
|
||||
return $"GMT {flag}{timeZoneStr.RemovePostFix(":00")}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -133,7 +133,7 @@ public sealed class TransportWarningDetailsIndex : IdBaseIndex
|
||||
|
||||
// 规则配置信息
|
||||
res.Append($",生成预警时间{ruleItem.StartTrackWarningTimeSpan}小时" +
|
||||
$",提醒时效{ruleItem.TransportTimeSpan}}}");
|
||||
$",时效{ruleItem.TransportTimeSpan}}}小时");
|
||||
|
||||
return res.ToString();
|
||||
}
|
||||
|
||||
@ -144,6 +144,7 @@ public class WarningDetailsEsRepository : IWarningDetailsEsRepository, ITransien
|
||||
detail.StartTrackTimeZone,
|
||||
detail.EndTrackStatusId,
|
||||
detail.EndTrackContentId,
|
||||
detail.EndTrackContent,
|
||||
detail.EndTrackTime,
|
||||
detail.EndTrackTimeZone,
|
||||
// detail.LatestTrackContentId,
|
||||
@ -193,6 +194,7 @@ public class WarningDetailsEsRepository : IWarningDetailsEsRepository, ITransien
|
||||
ctx._source.startTrackTimeZone = params.StartTrackTimeZone;
|
||||
ctx._source.endTrackStatusId = params.EndTrackStatusId;
|
||||
ctx._source.endTrackContentId = params.EndTrackContentId;
|
||||
ctx._source.endTrackContent = params.EndTrackContent;
|
||||
ctx._source.endTrackTime = params.EndTrackTime;
|
||||
ctx._source.endTrackTimeZone = params.EndTrackTimeZone;
|
||||
//ctx._source.latestTrackContentId = params.LatestTrackContentId;
|
||||
@ -225,6 +227,7 @@ public class WarningDetailsEsRepository : IWarningDetailsEsRepository, ITransien
|
||||
.Add("StartTrackTimeZone", detail.StartTrackTimeZone)
|
||||
.Add("EndTrackStatusId", detail.EndTrackStatusId)
|
||||
.Add("EndTrackContentId", detail.EndTrackContentId)
|
||||
.Add("EndTrackContent", detail.EndTrackContent)
|
||||
.Add("EndTrackTime", detail.EndTrackTime)
|
||||
.Add("EndTrackTimeZone", detail.EndTrackTimeZone)
|
||||
// .Add("LatestTrackContentId", detail.LatestTrackContentId)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user