Przeglądaj źródła

fix(s8): index minimal rule schema fields

R1-SCHEMA-MINIMAL-2: add non-unique indexes on R1 columns and
expose them read-only on exception detail DTO.

- AdoS8Exception: 4 non-unique indexes
  idx_s8_exception_dedup_key (tenant, factory, dedup_key)
  idx_s8_exception_source_rule_code (tenant, factory, source_rule_code)
  idx_s8_exception_source_object (tenant, factory, source_object_type, source_object_id)
  idx_s8_exception_last_detected_at (last_detected_at)
- AdoS8WatchRule: 2 non-unique indexes
  idx_s8_watch_rule_type (tenant, factory, rule_type)
  idx_s8_watch_rule_source_object (tenant, factory, source_object_type)
- AdoS8ExceptionDetailDto + S8ExceptionService.GetDetailAsync:
  expose dedup_key / last_detected_at / recovered_at /
  source_rule_code / source_object_type / source_object_id

No unique index added; service write path / scheduler / evaluator
all unchanged. uk_s8_exception_dedup_open deferred.
YY968XX 2 tygodni temu
rodzic
commit
44f552fa65

+ 6 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Dto/S8/AdoS8Dtos.cs

@@ -66,6 +66,12 @@ public class AdoS8ExceptionDetailDto : AdoS8ExceptionListItemDto
     public string? VerificationRemark { get; set; }
     public long? SourceRuleId { get; set; }
     public string? RelatedObjectCode { get; set; }
+    public string? DedupKey { get; set; }
+    public DateTime? LastDetectedAt { get; set; }
+    public DateTime? RecoveredAt { get; set; }
+    public string? SourceRuleCode { get; set; }
+    public string? SourceObjectType { get; set; }
+    public string? SourceObjectId { get; set; }
 }
 
 public class AdoS8ManualReportCreateDto

+ 4 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S8/AdoS8Exception.cs

@@ -6,6 +6,10 @@ namespace Admin.NET.Plugin.AiDOP.Entity.S8;
 [SugarTable("ado_s8_exception", "S8 异常主表")]
 [SugarIndex("uk_ado_s8_exception_tenant_factory_code", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(ExceptionCode), OrderByType.Asc, IsUnique = true)]
 [SugarIndex("idx_ado_s8_exception_type_time", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(ExceptionTypeCode), OrderByType.Asc, nameof(CreatedAt), OrderByType.Desc)]
+[SugarIndex("idx_s8_exception_dedup_key", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(DedupKey), OrderByType.Asc)]
+[SugarIndex("idx_s8_exception_source_rule_code", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(SourceRuleCode), OrderByType.Asc)]
+[SugarIndex("idx_s8_exception_source_object", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(SourceObjectType), OrderByType.Asc, nameof(SourceObjectId), OrderByType.Asc)]
+[SugarIndex("idx_s8_exception_last_detected_at", nameof(LastDetectedAt), OrderByType.Asc)]
 public class AdoS8Exception
 {
     [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]

+ 2 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Entity/S8/AdoS8WatchRule.cs

@@ -1,6 +1,8 @@
 namespace Admin.NET.Plugin.AiDOP.Entity.S8;
 
 [SugarTable("ado_s8_watch_rule", "S8 监视规则")]
+[SugarIndex("idx_s8_watch_rule_type", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(RuleType), OrderByType.Asc)]
+[SugarIndex("idx_s8_watch_rule_source_object", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(SourceObjectType), OrderByType.Asc)]
 public class AdoS8WatchRule
 {
     [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]

+ 6 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Service/S8/S8ExceptionService.cs

@@ -147,6 +147,12 @@ public class S8ExceptionService : ITransient
                 VerificationRemark = e.VerificationRemark,
                 SourceRuleId = e.SourceRuleId,
                 RelatedObjectCode = e.RelatedObjectCode,
+                DedupKey = e.DedupKey,
+                LastDetectedAt = e.LastDetectedAt,
+                RecoveredAt = e.RecoveredAt,
+                SourceRuleCode = e.SourceRuleCode,
+                SourceObjectType = e.SourceObjectType,
+                SourceObjectId = e.SourceObjectId,
             })
             .Take(1)
             .ToListAsync();