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