Merge branch 'S07' into test
This commit is contained in:
commit
57c697596b
@ -3,147 +3,147 @@ namespace SJZY.Track.Application.Contract.Dtos.Warning.Transport;
|
||||
/// <summary>
|
||||
/// 运输时效预警明细
|
||||
/// </summary>
|
||||
public sealed class TransportWarningDetailsDto // todo:需要根据状态排序
|
||||
public sealed class TransportWarningDetailsDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 预警明细唯一id
|
||||
/// </summary>
|
||||
public string EsId { get; set; }
|
||||
/// <summary>
|
||||
/// 预警明细唯一id
|
||||
/// </summary>
|
||||
public string EsId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 子系统id
|
||||
/// </summary>
|
||||
public int SubSystemId { get; set; }
|
||||
/// <summary>
|
||||
/// 子系统id
|
||||
/// </summary>
|
||||
public int SubSystemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 子系统名称
|
||||
/// </summary>
|
||||
public string SubSystemName { get; set; } // todo:id换名称
|
||||
/// <summary>
|
||||
/// 子系统名称
|
||||
/// </summary>
|
||||
public string SubSystemName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 客户id
|
||||
/// </summary>
|
||||
public int CustomId { get; set; }
|
||||
/// <summary>
|
||||
/// 客户id
|
||||
/// </summary>
|
||||
public int CustomId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 客户简称
|
||||
/// </summary>
|
||||
public string CustomName { get; set; } // todo:id换名称
|
||||
/// <summary>
|
||||
/// 客户简称
|
||||
/// </summary>
|
||||
public string CustomName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单id
|
||||
/// </summary>
|
||||
public int OrderId { get; set; }
|
||||
/// <summary>
|
||||
/// 订单id
|
||||
/// </summary>
|
||||
public int OrderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单号
|
||||
/// </summary>
|
||||
public string OrderNo { get; set; }
|
||||
/// <summary>
|
||||
/// 订单号
|
||||
/// </summary>
|
||||
public string OrderNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单类型
|
||||
/// </summary>
|
||||
public int OrderType { get; set; }
|
||||
/// <summary>
|
||||
/// 订单类型
|
||||
/// </summary>
|
||||
public int OrderType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单类型名称
|
||||
/// </summary>
|
||||
public string OrderTypeName { get; set; } // todo:type换名称
|
||||
/// <summary>
|
||||
/// 订单类型名称
|
||||
/// </summary>
|
||||
public string OrderTypeName { get; set; }
|
||||
|
||||
|
||||
// 实时属性 todo:从es查询
|
||||
// 实时属性 tips:从es查询
|
||||
|
||||
/// <summary>
|
||||
/// 最新轨迹内容
|
||||
/// </summary>
|
||||
public string? LatestTrackContent { get; set; }
|
||||
/// <summary>
|
||||
/// 最新轨迹内容
|
||||
/// </summary>
|
||||
public string? LatestTrackContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最新轨迹时间
|
||||
/// </summary>
|
||||
public DateTime? LatestTrackTime { get; set; }
|
||||
/// <summary>
|
||||
/// 最新轨迹时间
|
||||
/// </summary>
|
||||
public DateTime? LatestTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最新轨迹发生时区
|
||||
/// </summary>
|
||||
public float? LatestTrackTimeZone { get; set; }
|
||||
/// <summary>
|
||||
/// 最新轨迹发生时区
|
||||
/// </summary>
|
||||
public string LatestTrackTimeZone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最新轨迹发生地
|
||||
/// </summary>
|
||||
public string? LatestTrackPlace { get; set; }
|
||||
/// <summary>
|
||||
/// 最新轨迹发生地
|
||||
/// </summary>
|
||||
public string? LatestTrackPlace { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 通知对象
|
||||
/// </summary>
|
||||
public string NotifyUserNames { get; set; }
|
||||
/// <summary>
|
||||
/// 通知对象
|
||||
/// </summary>
|
||||
public string NotifyUserNames { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起始轨迹状态
|
||||
/// </summary>
|
||||
public string StartTrackStatus { get; set; }
|
||||
/// <summary>
|
||||
/// 起始轨迹状态
|
||||
/// </summary>
|
||||
public string StartTrackStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起始轨迹内容
|
||||
/// </summary>
|
||||
public string StartTrackContent { get; set; }
|
||||
/// <summary>
|
||||
/// 起始轨迹内容
|
||||
/// </summary>
|
||||
public string StartTrackContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起始轨迹发生时间
|
||||
/// </summary>
|
||||
public DateTime StartTrackTime { get; set; }
|
||||
/// <summary>
|
||||
/// 起始轨迹发生时间
|
||||
/// </summary>
|
||||
public DateTime StartTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 起始轨迹时区
|
||||
/// </summary>
|
||||
public float StartTrackTimeZone { get; set; }
|
||||
/// <summary>
|
||||
/// 起始轨迹时区 e.g GMT +8:00 / --
|
||||
/// </summary>
|
||||
public string StartTrackTimeZone { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 截止轨迹状态
|
||||
/// </summary>
|
||||
public string EndTrackStatus { get; set; }
|
||||
/// <summary>
|
||||
/// 截止轨迹状态
|
||||
/// </summary>
|
||||
public string EndTrackStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止轨迹内容
|
||||
/// </summary>
|
||||
public string? EndTrackContent { get; set; }
|
||||
/// <summary>
|
||||
/// 截止轨迹内容
|
||||
/// </summary>
|
||||
public string? EndTrackContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止轨迹发生时间
|
||||
/// </summary>
|
||||
public DateTime? EndTrackTime { get; set; }
|
||||
/// <summary>
|
||||
/// 截止轨迹发生时间
|
||||
/// </summary>
|
||||
public DateTime? EndTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止轨迹时区
|
||||
/// </summary>
|
||||
public float? EndTrackTimeZone { get; set; }
|
||||
/// <summary>
|
||||
/// 截止轨迹时区 e.g GMT +8:00 / --
|
||||
/// </summary>
|
||||
public string EndTrackTimeZone { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 预警名称 (预警主体名称 如字节全程时效)
|
||||
/// </summary>
|
||||
public string WarningName { get; set; }
|
||||
/// <summary>
|
||||
/// 预警名称 (预警主体名称 如字节全程时效)
|
||||
/// </summary>
|
||||
public string WarningName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 预警规则描述(用于tooltip展示)
|
||||
/// </summary>
|
||||
public string WarningRuleDescription { get; set; }
|
||||
/// <summary>
|
||||
/// 预警规则描述(用于tooltip展示)
|
||||
/// </summary>
|
||||
public string WarningRuleDescription { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 累计运输时间
|
||||
/// </summary>
|
||||
public string CumulativeTimeSpan { get; set; } // todo:需要转换为某个格式
|
||||
/// <summary>
|
||||
/// 累计运输时间
|
||||
/// </summary>
|
||||
public string CumulativeTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 预警状态 (根据key展示对应名称,即将超时需要标红)
|
||||
/// 1:即将超时 2:已超时 3:已完成 4:超时完成 5:已关闭,初始为【即将超时】
|
||||
/// </summary>
|
||||
public int Status { get; set; }
|
||||
/// <summary>
|
||||
/// 预警状态 (根据key展示对应名称,即将超时需要标红)
|
||||
/// 1:即将超时 2:已超时 3:已完成 4:超时完成 5:已关闭,初始为【即将超时】
|
||||
/// </summary>
|
||||
public int Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 预警创建时间
|
||||
/// </summary>
|
||||
public DateTime CreateTime { get; set; }
|
||||
/// <summary>
|
||||
/// 预警创建时间
|
||||
/// </summary>
|
||||
public DateTime CreateTime { get; set; }
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -1235,8 +1241,6 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
|
||||
CreateTime = DateTime.Now,
|
||||
};
|
||||
|
||||
// 一开始创建预警就可能为已超时的状态
|
||||
detail.Status = detail.CalcStatus();
|
||||
return detail;
|
||||
}
|
||||
|
||||
|
||||
@ -171,6 +171,9 @@ public class TransportWarningService : ApplicationService
|
||||
public async Task<UnifyPageResultDto<TransportWarningDetailsDto>> GetPageTransportWarningDetails(GetPageTransportWarningDetailsInput input)
|
||||
{
|
||||
var vo = ObjectMapper.Map<GetPageTransportWarningDetailsInput, GetPageTransportWarningDetailsInputVO>(input);
|
||||
// 存储只存即将超时,对于已超时的则是查出计算后过滤
|
||||
if (input.Status == (int) TransportWarningStatus.已超时)
|
||||
vo.Status = (int) TransportWarningStatus.即将超时;
|
||||
var result = await _warningDetailsEsRepository.GetPageTransportWarningDetailsAsync(vo);
|
||||
if (result.List.Count == 0)
|
||||
{
|
||||
@ -220,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,
|
||||
@ -247,19 +250,26 @@ public class TransportWarningService : ApplicationService
|
||||
};
|
||||
});
|
||||
|
||||
var sorted = map.OrderBy(x =>
|
||||
{
|
||||
// 即将超时,已超时置顶
|
||||
if (x.Status is 1 or 2) return x.Status;
|
||||
// 其他按创建时间从早到晚
|
||||
return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime);
|
||||
});
|
||||
// 计算后的状态过滤
|
||||
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);
|
||||
})
|
||||
.ThenByDescending(x => x.CreateTime) //同状态(即将超时/已超时)按创建时间从晚到早
|
||||
.ToList();
|
||||
|
||||
return new UnifyPageResultDto<TransportWarningDetailsDto>(
|
||||
sorted.ToList(),
|
||||
sorted,
|
||||
result.Pagination.PageIndex,
|
||||
result.Pagination.PageSize,
|
||||
result.Pagination.Total);
|
||||
sorted.Count);
|
||||
|
||||
// 通知用户提取用户名称
|
||||
string ToUserNames(string notifyUsers)
|
||||
@ -279,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