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 { [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 trackStatusIds) { return trackStatusId == StartTrackStatusId //命中起始轨迹状态 && !trackStatusIds.Contains(EndTrackStatusId); //缺失截止轨迹状态 } // 重新命中,用于规则扫描 public bool CanReHit(HashSet trackStatusIds) { return trackStatusIds.Contains(StartTrackStatusId) //存在起始 && !trackStatusIds.Contains(EndTrackStatusId); //不存在截止 } // 判断未命中规则 public bool CanNotHit(HashSet? trackStatusIds) { if (trackStatusIds is null) //轨迹状态为空 return true; if (!trackStatusIds.Contains(StartTrackStatusId)) //不存在起始 return true; return trackStatusIds.Contains(EndTrackStatusId); //存在起始并且存在截止,为完成态,也属于规则未命中 } }