track/src/TrackCenter.Domain/Aggregates/WarningAggregate/Transport/TransportWarningSceneRuleItemEntity.cs
zzh af86a1fdff Remove KPI warning areas and slim transport warning scene schema.
Drop legacy scene match columns from code/SQL and delete unused area tables guidance for pre-prod cleanup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 11:56:15 +08:00

79 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Fake.Domain.Entities.Auditing;
using TrackCenter.Domain.SeedWork;
namespace TrackCenter.Domain.Aggregates.WarningAggregate.Transport;
// 运输时效场景规则项
[SugarTable("t_warning_transport_scene_rule_item", TableDescription = "运输时效场景分段规则项")]
public sealed class TransportWarningSceneRuleItemEntity : FullAuditedEntity<int, int>
{
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[SugarColumn(ColumnName = "WarningId", ColumnDescription = "预警规则主体Id(t_warning.Id)")]
public int WarningId { get; set; }
[SugarColumn(ColumnName = "TransportWarningSceneId", ColumnDescription = "运输时效场景Id(t_warning_transport_scene.Id)")]
public int TransportWarningSceneId { get; set; }
[SugarColumn(ColumnName = "StartTrackStatusId", ColumnDescription = "起始轨迹状态Id")]
public int StartTrackStatusId { get; set; } //起始轨迹状态Id,tips:用于匹配轨迹
[SugarColumn(ColumnName = "EndTrackStatusId", ColumnDescription = "截止轨迹状态Id")]
public int EndTrackStatusId { get; set; } //截止轨迹状态Id, tips:用于验证预警明细是否可以产生,预警通知是否可以进行
[SugarColumn(ColumnName = "TransportTimeSpan", ColumnDescription = "时效 (单位小时)")]
public float TransportTimeSpan { get; set; } //时效 (单位小时)
[SugarColumn(ColumnName = "StartTrackWarningTimeSpan", ColumnDescription = "起始轨迹生成预警时间 (单位小时)")]
public float StartTrackWarningTimeSpan { get; set; } //起始轨迹生成预警时间 (单位小时)
// [SugarColumn(ColumnName = "NotifyModes", ColumnDescription = "通知方式,多个方式(,)分割 eg: 1,2")]
// public string NotifyModes { get; set; } //通知方式,多个方式(,)分割 eg: 1,2
[SugarColumn(ColumnName = "NotifyUsers", ColumnDescription = "通知人Json eg: [{\"UserId\":1,\"UserName\":\"张三\"},{\"UserId\":2,\"UserName\":\"李四\"}]")]
public string NotifyUsers { get; set; } //通知人Json eg: [{"UserId":1,"UserName":"张三"},{"UserId":2,"UserName":"李四"}]
public TransportWarningSceneRuleItemEntity()
{
}
public TransportWarningSceneRuleItemEntity(int id, int warningId, int transportWarningSceneId, int startTrackStatusId, int endTrackStatusId, float transportTimeSpan, float startTrackWarningTimeSpan, string notifyUsers)
{
Id = id;
WarningId = warningId;
TransportWarningSceneId = transportWarningSceneId;
StartTrackStatusId = startTrackStatusId;
EndTrackStatusId = endTrackStatusId;
TransportTimeSpan = transportTimeSpan;
StartTrackWarningTimeSpan = startTrackWarningTimeSpan;
NotifyUsers = notifyUsers;
}
public bool CanHitRule(int trackStatusId, HashSet<int> trackStatusIds)
{
return trackStatusId == StartTrackStatusId //命中起始轨迹状态
&& !trackStatusIds.Contains(EndTrackStatusId); //缺失截止轨迹状态
}
// 重新命中,用于规则扫描
public bool CanReHit(HashSet<int> trackStatusIds)
{
return trackStatusIds.Contains(StartTrackStatusId) //存在起始
&& !trackStatusIds.Contains(EndTrackStatusId); //不存在截止
}
// 判断未命中规则
public bool CanNotHit(HashSet<int>? trackStatusIds)
{
if (trackStatusIds is null) //轨迹状态为空
return true;
if (!trackStatusIds.Contains(StartTrackStatusId)) //不存在起始
return true;
return trackStatusIds.Contains(EndTrackStatusId); //存在起始并且存在截止,为完成态,也属于规则未命中
}
}