change-params:回传预警明细增加是否超时状态

add-validation: 约束回传预警中起始轨迹时间不能大于等于时效
change-validation:同步文档中预警时效范围配置
This commit is contained in:
hardstylewyl 2025-03-26 09:51:29 +08:00
parent cfccd59ce1
commit c395261d2f
6 changed files with 65 additions and 45 deletions

View File

@ -39,7 +39,7 @@ public class EditReturnWarningRuleItemDto
/// <summary>
/// 时效(单位h)
/// </summary>
[Range(0.1, 99, ErrorMessage = "回传时效范围0.1-99")]
[Range(0.1f, 99.9f, ErrorMessage = "回传时效范围0.1-99.9")]
public float ReturnTimeSpan { get; set; }
/// <summary>

View File

@ -133,6 +133,12 @@ public sealed class ReturnWarningDetailsDto
/// </summary>
public string TrackCreateTimeSpan { get; set; }
/// <summary>
/// 是否超时,只有命中了kpi考核的才有可能超时
/// 如果为超时则标红【实际回传】字段
/// </summary>
public bool IsTimeout { get; set; }
/// <summary>
/// 是否有KPI考核
/// </summary>

View File

@ -5,22 +5,22 @@ namespace SJZY.Track.Application.Contract.Dtos.Warning.Transport;
public class EditTransportWarningSceneRuleItemInput
{
/// <summary>
/// 预警规主体id
/// </summary>
[IdRequired]
public int WarningId { get; set; }
/// <summary>
/// 预警规主体id
/// </summary>
[IdRequired]
public int WarningId { get; set; }
/// <summary>
/// 运输预警场景id
/// </summary>
[IdRequired]
public int SceneId { get; set; }
/// <summary>
/// 运输预警场景id
/// </summary>
[IdRequired]
public int SceneId { get; set; }
/// <summary>
/// 预警规则配置项目(列表内容传递)
/// </summary>
public List<EditTransportWarningSceneRuleItemDto> Items { get; set; } = new();
/// <summary>
/// 预警规则配置项目(列表内容传递)
/// </summary>
public List<EditTransportWarningSceneRuleItemDto> Items { get; set; } = new();
}
/// <summary>
@ -28,38 +28,39 @@ public class EditTransportWarningSceneRuleItemInput
/// </summary>
public class EditTransportWarningSceneRuleItemDto
{
/// <summary>
/// 规则项目id(传0视为新增)
/// </summary>
public int Id { get; set; }
/// <summary>
/// 规则项目id(传0视为新增)
/// </summary>
public int Id { get; set; }
/// <summary>
/// 起始轨迹状态Id
/// </summary>
[IdRequired]
public int StartTrackStatusId { get; set; }
/// <summary>
/// 起始轨迹状态Id
/// </summary>
[IdRequired]
public int StartTrackStatusId { get; set; }
/// <summary>
/// 截止轨迹状态Id
/// </summary>
[IdRequired]
public int EndTrackStatusId { get; set; }
/// <summary>
/// 截止轨迹状态Id
/// </summary>
[IdRequired]
public int EndTrackStatusId { get; set; }
/// <summary>
/// 时效 (单位h)
/// </summary>
[Range(0.1, float.MaxValue, ErrorMessage = "时效必须大于0.1")]
public float TransportTimeSpan { get; set; }
/// <summary>
/// 时效 (单位h)
/// 注意:需要大于起始轨迹生成预警时间
/// </summary>
[Range(0.1f, 9999.9f, ErrorMessage = "时效必须范围0.1-9999.9")]
public float TransportTimeSpan { get; set; }
/// <summary>
/// 起始轨迹生成预警时间 (单位h)
/// </summary>
[Range(0.1, float.MaxValue, ErrorMessage = "起始轨迹生成预警时间必须大于0.1")]
public float StartTrackWarningTimeSpan { get; set; }
/// <summary>
/// 起始轨迹生成预警时间 (单位h)
/// </summary>
[Range(0.1f, 9999.9f, ErrorMessage = "起始轨迹生成预警时间范围0.1-9999.9")]
public float StartTrackWarningTimeSpan { get; set; }
/// <summary>
/// 通知对象用户集合
/// </summary>
[MinLength(1, ErrorMessage = "通知对象用户集合不能为空")]
public List<NotifyUserDto> NotifyUsers { get; set; } = new();
/// <summary>
/// 通知对象用户集合
/// </summary>
[MinLength(1, ErrorMessage = "通知对象用户集合不能为空")]
public List<NotifyUserDto> NotifyUsers { get; set; } = new();
}

View File

@ -156,6 +156,7 @@ public class ReturnWarningService : ApplicationService
ActualReturnTimeSpan = FormatTimeSpan(x.ActualReturnTimeSpan),
SystemReturnTimeSpan = FormatTimeSpan(x.SystemReturnTimeSpan),
TrackCreateTimeSpan = FormatTimeSpan(x.TrackCreateTimeSpan),
IsTimeout = x.HasTimeout(),
// 具体描述
TrackReturnTime = x.TrackReturnTime,

View File

@ -378,6 +378,12 @@ public class TransportWarningService : ApplicationService
[HttpPost("EditTransportWarningSceneRuleItem")]
public async Task<UnifyResultDto> EditTransportWarningSceneRuleItem(EditTransportWarningSceneRuleItemInput input)
{
// 起始轨迹生成预警时间不能大于时效
if (input.Items.Count > 0 && input.Items.Any(x => x.StartTrackWarningTimeSpan >= x.TransportTimeSpan))
{
throw new BusinessException(message: "起始轨迹生成预警时间不能大于等于时效,请检查");
}
var rule = await _warningRuleRepository.GetWarningRuleByIdAsync(input.WarningId, WarningRuleType.运输时效预警);
if (rule == null)
{

View File

@ -62,7 +62,6 @@ public class ReturnWarningDetailsIndex : IdBaseIndex
//计算属性
public long? ActualReturnTimeSpan { get; set; } //实际回传用时(单位毫秒)
public long? SystemReturnTimeSpan { get; set; } //系统回传用时 (单位毫秒)
public long TrackCreateTimeSpan { get; set; } //轨迹创建用时(单位毫秒)
@ -81,6 +80,13 @@ public class ReturnWarningDetailsIndex : IdBaseIndex
SystemReturnTimeSpan = (long?) (TrackReturnTime.Value - TrackCreateTime).TotalMilliseconds;
}
public bool HasTimeout()
{
if (ActualReturnTimeSpan.HasValue && ReturnTimeSpan.HasValue)
return TimeSpan.FromMilliseconds(ActualReturnTimeSpan.Value) > TimeSpan.FromHours(ReturnTimeSpan.Value);
return false;
}
// 匹配硅胶字段
public bool MatchExtra(string? compareFields, string? extra)
{