diff --git a/src/BuildFlow.Host/Services/BackgroundServices/MonitoringSyncSchedulerService.cs b/src/BuildFlow.Host/Services/BackgroundServices/MonitoringSyncSchedulerService.cs
index 62e1913..9694d83 100644
--- a/src/BuildFlow.Host/Services/BackgroundServices/MonitoringSyncSchedulerService.cs
+++ b/src/BuildFlow.Host/Services/BackgroundServices/MonitoringSyncSchedulerService.cs
@@ -7,7 +7,7 @@ namespace BuildFlow.Host.Services.BackgroundServices;
///
/// 监控同步后台调度器:按 MonitoringOptions.Scheduler.PollIntervalSeconds 轮询,
-/// 找出到期的启用 ExternalSystem(LastSyncedAt + PollInterval <= now),
+/// 找出到期的启用 ExternalSystemEntity(LastSyncedAt + PollInterval <= now),
/// 调用 SyncProcessor 执行同步。
///
/// 设计要点(与 WebhookDispatcherService 一致):
diff --git a/src/modules/monitoring/Application/ExternalSystems/DTOs/ExternalSystemDetailDto.cs b/src/modules/monitoring/Application/ExternalSystems/DTOs/ExternalSystemDetailDto.cs
index 049262b..068552d 100644
--- a/src/modules/monitoring/Application/ExternalSystems/DTOs/ExternalSystemDetailDto.cs
+++ b/src/modules/monitoring/Application/ExternalSystems/DTOs/ExternalSystemDetailDto.cs
@@ -1,4 +1,8 @@
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Application.ExternalSystems.DTOs;
diff --git a/src/modules/monitoring/Application/ExternalSystems/Handlers/CreateExternalSystemCommandHandler.cs b/src/modules/monitoring/Application/ExternalSystems/Handlers/CreateExternalSystemCommandHandler.cs
index 2cfd78a..148d0c7 100644
--- a/src/modules/monitoring/Application/ExternalSystems/Handlers/CreateExternalSystemCommandHandler.cs
+++ b/src/modules/monitoring/Application/ExternalSystems/Handlers/CreateExternalSystemCommandHandler.cs
@@ -3,7 +3,11 @@ using BuildFlow.Shared.Domain.Errors;
using MediatR;
using Monitoring.Application.ExternalSystems.Commands;
using Monitoring.Application.ExternalSystems.DTOs;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Enums;
using Monitoring.Infrastructure.Persistence;
using System.Text.Json;
@@ -16,15 +20,15 @@ public class CreateExternalSystemCommandHandler(MonitoringDbContext db)
{
public async Task Handle(CreateExternalSystemCommand request, CancellationToken ct)
{
- if (!Enum.IsDefined(typeof(ExternalSystemType), request.SystemType))
+ if (!Enum.IsDefined(typeof(ExternalSystemTypeEnum), request.SystemType))
throw new BusinessException(ErrorCode.InvalidParam, $"无效的系统类型: {request.SystemType}");
- var systemType = (ExternalSystemType)request.SystemType;
+ var systemType = (ExternalSystemTypeEnum)request.SystemType;
var parameters = string.IsNullOrEmpty(request.ParametersJson)
? new Dictionary()
: JsonSerializer.Deserialize>(request.ParametersJson) ?? new();
- var system = new ExternalSystem
+ var system = new ExternalSystemEntity
{
Data = new SystemData
{
diff --git a/src/modules/monitoring/Application/ExternalSystems/Handlers/LoginExternalSystemCommandHandler.cs b/src/modules/monitoring/Application/ExternalSystems/Handlers/LoginExternalSystemCommandHandler.cs
index 04b3599..676250c 100644
--- a/src/modules/monitoring/Application/ExternalSystems/Handlers/LoginExternalSystemCommandHandler.cs
+++ b/src/modules/monitoring/Application/ExternalSystems/Handlers/LoginExternalSystemCommandHandler.cs
@@ -26,7 +26,7 @@ public class LoginExternalSystemCommandHandler(
?? throw new NotFoundException(ErrorCode.NotFound, $"外部系统 {request.SystemId} 不存在");
// 目前仅支持 u号租自动登录
- if (system.Data.SystemType != ExternalSystemType.UHaoZu)
+ if (system.Data.SystemType != ExternalSystemTypeEnum.UHaoZu)
{
return new LoginResult(false, $"{system.Data.SystemType} 类型暂不支持自动登录", 0);
}
diff --git a/src/modules/monitoring/Application/ExternalSystems/Handlers/UpdateExternalSystemCommandHandler.cs b/src/modules/monitoring/Application/ExternalSystems/Handlers/UpdateExternalSystemCommandHandler.cs
index af13277..cce2d1e 100644
--- a/src/modules/monitoring/Application/ExternalSystems/Handlers/UpdateExternalSystemCommandHandler.cs
+++ b/src/modules/monitoring/Application/ExternalSystems/Handlers/UpdateExternalSystemCommandHandler.cs
@@ -5,7 +5,11 @@ using MediatR;
using Microsoft.EntityFrameworkCore;
using Monitoring.Application.ExternalSystems.Commands;
using Monitoring.Application.ExternalSystems.DTOs;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Infrastructure.Persistence;
namespace Monitoring.Application.ExternalSystems.Handlers;
diff --git a/src/modules/monitoring/Application/MonitoringOptions.cs b/src/modules/monitoring/Application/MonitoringOptions.cs
index 9927e90..0173493 100644
--- a/src/modules/monitoring/Application/MonitoringOptions.cs
+++ b/src/modules/monitoring/Application/MonitoringOptions.cs
@@ -12,7 +12,7 @@ public class MonitoringOptions
/// 调度器配置节。
public class SchedulerSection
{
- /// 轮询间隔(秒)。调度器按此频率扫描到期的 ExternalSystem。
+ /// 轮询间隔(秒)。调度器按此频率扫描到期的 ExternalSystemEntity。
public int PollIntervalSeconds { get; set; } = 60;
/// 应用启动后延迟多少秒开始首次扫描,避免与启动初始化争抢资源。
diff --git a/src/modules/monitoring/Application/Reports/Handlers/GetSyncSummaryQueryHandler.cs b/src/modules/monitoring/Application/Reports/Handlers/GetSyncSummaryQueryHandler.cs
index e9755ec..951c550 100644
--- a/src/modules/monitoring/Application/Reports/Handlers/GetSyncSummaryQueryHandler.cs
+++ b/src/modules/monitoring/Application/Reports/Handlers/GetSyncSummaryQueryHandler.cs
@@ -23,7 +23,7 @@ public class GetSyncSummaryQueryHandler(MonitoringDbContext db)
// 最近一次成功的汇总指标(json_data 在表达式树里翻译不了,先物化再读 Data)
var latestSuccess = await db.SyncJobs
- .Where(j => j.ExternalSystemId == request.ExternalSystemId && j.Status == SyncJobStatus.Succeeded)
+ .Where(j => j.ExternalSystemId == request.ExternalSystemId && j.Status == SyncJobStatusEnum.Succeeded)
.OrderByDescending(j => j.FinishedAt)
.FirstOrDefaultAsync(ct);
var metrics = latestSuccess?.Data.SummaryMetrics ?? new Dictionary();
diff --git a/src/modules/monitoring/Application/Reports/Queries/GetDailyTrendQuery.cs b/src/modules/monitoring/Application/Reports/Queries/GetDailyTrendQuery.cs
index 39d5f1e..70cd5ba 100644
--- a/src/modules/monitoring/Application/Reports/Queries/GetDailyTrendQuery.cs
+++ b/src/modules/monitoring/Application/Reports/Queries/GetDailyTrendQuery.cs
@@ -3,7 +3,7 @@ using Monitoring.Application.Reports.DTOs;
namespace Monitoring.Application.Reports.Queries;
-/// 查询某外部系统按天的记录数趋势(基于 SyncedRecord.OccurredAt 聚合)。
+/// 查询某外部系统按天的记录数趋势(基于 SyncedRecordEntity.OccurredAt 聚合)。
/// 外部系统 Id。
/// 最近 N 天,默认 14。
public record GetDailyTrendQuery(Guid ExternalSystemId, int Days = 14)
diff --git a/src/modules/monitoring/Application/Sync/Commands/TriggerSyncCommand.cs b/src/modules/monitoring/Application/Sync/Commands/TriggerSyncCommand.cs
index 70ae6fb..e5ab0ae 100644
--- a/src/modules/monitoring/Application/Sync/Commands/TriggerSyncCommand.cs
+++ b/src/modules/monitoring/Application/Sync/Commands/TriggerSyncCommand.cs
@@ -3,6 +3,6 @@ using Monitoring.Application.Sync.DTOs;
namespace Monitoring.Application.Sync.Commands;
-/// 手动触发某外部系统立即同步。返回本次 SyncJob 概览。
+/// 手动触发某外部系统立即同步。返回本次 SyncJobEntity 概览。
/// 目标外部系统 Id。
public record TriggerSyncCommand(Guid ExternalSystemId) : IRequest;
diff --git a/src/modules/monitoring/Application/Sync/SyncProcessor.cs b/src/modules/monitoring/Application/Sync/SyncProcessor.cs
index d4ddd1d..c255780 100644
--- a/src/modules/monitoring/Application/Sync/SyncProcessor.cs
+++ b/src/modules/monitoring/Application/Sync/SyncProcessor.cs
@@ -2,7 +2,11 @@ using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Services;
using Monitoring.Infrastructure.Persistence;
@@ -10,12 +14,12 @@ using Monitoring.Infrastructure.Persistence;
namespace Monitoring.Application.Sync;
///
-/// 同步编排核心。从 ExternalSystem 路由到对应 IExternalConnector,执行拉取→落库→记 SyncJob,
+/// 同步编排核心。从 ExternalSystemEntity 路由到对应 IExternalConnector,执行拉取→落库→记 SyncJobEntity,
/// 并在成功后触发告警评估。纯业务逻辑、无 HostedService 依赖,便于单元测试。
///
/// 设计要点:
/// 1. Connector 路由:从 IServiceProvider 取 IEnumerable<IExternalConnector>,按 SystemType 选实现;
-/// 2. 幂等落库:SyncedRecord 按 (ExternalSystemId, ExternalId, RecordType) UPSERT,重复拉取只保留最新快照;
+/// 2. 幂等落库:SyncedRecordEntity 按 (ExternalSystemId, ExternalId, RecordType) UPSERT,重复拉取只保留最新快照;
/// 3. 失败隔离:异常记录为 Failed 不抛出,单个系统失败不影响调度器后续系统。
/// json_data 模式:所有业务字段经实体 .Data 强类型视图读写,自动序列化进 JsonData 列。
///
@@ -24,8 +28,8 @@ public class SyncProcessor(
IServiceProvider services,
ILogger logger)
{
- /// 对单个外部系统执行一次同步。返回本次 SyncJob 记录(已落库)。
- public async Task ExecuteAsync(ExternalSystem system, string triggerSource, CancellationToken ct)
+ /// 对单个外部系统执行一次同步。返回本次 SyncJobEntity 记录(已落库)。
+ public async Task ExecuteAsync(ExternalSystemEntity system, string triggerSource, CancellationToken ct)
{
var systemType = system.Data.SystemType;
@@ -38,10 +42,10 @@ public class SyncProcessor(
}
// 2. 创建并标记 Running
- var job = new SyncJob
+ var job = new SyncJobEntity
{
ExternalSystemId = system.Id,
- Status = SyncJobStatus.Running,
+ Status = SyncJobStatusEnum.Running,
StartedAt = DateTime.UtcNow,
Data = new JobData { TriggerSource = triggerSource },
};
@@ -53,11 +57,11 @@ public class SyncProcessor(
{
var result = await connector.FetchAsync(system, ct);
- // 4. 幂等落库 SyncedRecord
+ // 4. 幂等落库 SyncedRecordEntity
await PersistRecordsAsync(system.Id, job.Id, result.Records, ct);
- // 5. 更新 SyncJob 为 Succeeded(汇总指标写入 json_data)
- job.Status = SyncJobStatus.Succeeded;
+ // 5. 更新 SyncJobEntity 为 Succeeded(汇总指标写入 json_data)
+ job.Status = SyncJobStatusEnum.Succeeded;
job.FinishedAt = DateTime.UtcNow;
job.DurationMs = (long)(job.FinishedAt.Value - job.StartedAt!.Value).TotalMilliseconds;
job.RecordCount = result.RecordCount;
@@ -69,7 +73,7 @@ public class SyncProcessor(
};
await db.SaveChangesAsync(ct);
- // 6. 更新 ExternalSystem 的最近同步信息(写入 json_data)
+ // 6. 更新 ExternalSystemEntity 的最近同步信息(写入 json_data)
var sysData = system.Data;
sysData.LastSyncedAt = new DateTimeOffset(job.FinishedAt.Value).ToUnixTimeMilliseconds();
sysData.LastSyncJobId = job.Id;
@@ -124,7 +128,7 @@ public class SyncProcessor(
}
else
{
- db.SyncedRecords.Add(new SyncedRecord
+ db.SyncedRecords.Add(new SyncedRecordEntity
{
ExternalSystemId = systemId,
SyncJobId = jobId,
@@ -171,16 +175,16 @@ public class SyncProcessor(
}
/// 记录失败任务(job 已存在则更新,否则新建)。
- private async Task RecordFailureAsync(
- ExternalSystem system, string triggerSource, string error, SyncJob? job, CancellationToken ct)
+ private async Task RecordFailureAsync(
+ ExternalSystemEntity system, string triggerSource, string error, SyncJobEntity? job, CancellationToken ct)
{
var now = DateTime.UtcNow;
if (job is null)
{
- job = new SyncJob
+ job = new SyncJobEntity
{
ExternalSystemId = system.Id,
- Status = SyncJobStatus.Failed,
+ Status = SyncJobStatusEnum.Failed,
StartedAt = now,
Data = new JobData { TriggerSource = triggerSource },
};
@@ -188,7 +192,7 @@ public class SyncProcessor(
}
else
{
- job.Status = SyncJobStatus.Failed;
+ job.Status = SyncJobStatusEnum.Failed;
}
job.FinishedAt = now;
job.DurationMs = job.StartedAt.HasValue ? (long)(now - job.StartedAt.Value).TotalMilliseconds : 0;
diff --git a/src/modules/monitoring/Domain/Enums/AlertSeverity.cs b/src/modules/monitoring/Domain/Enums/AlertSeverityEnum.cs
similarity index 94%
rename from src/modules/monitoring/Domain/Enums/AlertSeverity.cs
rename to src/modules/monitoring/Domain/Enums/AlertSeverityEnum.cs
index 3bba5fe..68e4777 100644
--- a/src/modules/monitoring/Domain/Enums/AlertSeverity.cs
+++ b/src/modules/monitoring/Domain/Enums/AlertSeverityEnum.cs
@@ -3,7 +3,7 @@ namespace Monitoring.Domain.Enums;
///
/// 告警严重级别。影响通知渠道与展示排序(Critical 通常触发即时推送,Info 仅记录)。
///
-public enum AlertSeverity
+public enum AlertSeverityEnum
{
/// 信息级:仅记录,不打扰。
Info = 0,
diff --git a/src/modules/monitoring/Domain/Enums/ExternalSystemType.cs b/src/modules/monitoring/Domain/Enums/ExternalSystemTypeEnum.cs
similarity index 93%
rename from src/modules/monitoring/Domain/Enums/ExternalSystemType.cs
rename to src/modules/monitoring/Domain/Enums/ExternalSystemTypeEnum.cs
index a0f6e8f..be52afd 100644
--- a/src/modules/monitoring/Domain/Enums/ExternalSystemType.cs
+++ b/src/modules/monitoring/Domain/Enums/ExternalSystemTypeEnum.cs
@@ -6,7 +6,7 @@ namespace Monitoring.Domain.Enums;
/// 1) 在此枚举登记;
/// 2) 实现 IExternalConnector 并在 DI 注册。
///
-public enum ExternalSystemType
+public enum ExternalSystemTypeEnum
{
/// u号租商家后台(订单/资金报表拉取)。
UHaoZu = 1,
diff --git a/src/modules/monitoring/Domain/Enums/SyncJobStatus.cs b/src/modules/monitoring/Domain/Enums/SyncJobStatusEnum.cs
similarity index 94%
rename from src/modules/monitoring/Domain/Enums/SyncJobStatus.cs
rename to src/modules/monitoring/Domain/Enums/SyncJobStatusEnum.cs
index 9745241..1fdeaed 100644
--- a/src/modules/monitoring/Domain/Enums/SyncJobStatus.cs
+++ b/src/modules/monitoring/Domain/Enums/SyncJobStatusEnum.cs
@@ -6,7 +6,7 @@ namespace Monitoring.Domain.Enums;
/// ↘ Failed
/// 由 SyncProcessor 在执行前后驱动转换,SyncedRecord/SyncJob 据此统计成功率与历史。
///
-public enum SyncJobStatus
+public enum SyncJobStatusEnum
{
/// 已入队待执行。
Pending = 0,
diff --git a/src/modules/monitoring/Domain/Services/ConnectorContracts.cs b/src/modules/monitoring/Domain/Services/ConnectorContracts.cs
index 41b0f93..8a0c524 100644
--- a/src/modules/monitoring/Domain/Services/ConnectorContracts.cs
+++ b/src/modules/monitoring/Domain/Services/ConnectorContracts.cs
@@ -1,4 +1,8 @@
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Enums;
namespace Monitoring.Domain.Services;
@@ -11,13 +15,13 @@ namespace Monitoring.Domain.Services;
public interface IExternalConnector
{
/// 本连接器处理的系统类型。ConnectorRegistry 据此建立 SystemType → 实现的路由表。
- ExternalSystemType SystemType { get; }
+ ExternalSystemTypeEnum SystemType { get; }
///
/// 执行一次拉取。从 读取 BaseUrl/参数与关联凭证,
/// 调用外部接口,返回汇总指标 + 明细记录。失败应抛异常,由 SyncProcessor 统一记录为 Failed。
///
- Task FetchAsync(ExternalSystem system, CancellationToken ct);
+ Task FetchAsync(ExternalSystemEntity system, CancellationToken ct);
}
///
@@ -25,7 +29,7 @@ public interface IExternalConnector
/// 明细记录放 Records(如各订单的原始 JSON)。
///
/// 本次拉取的明细行数。
-/// 汇总指标键值对(值为数值或字符串,序列化进 SyncJob.SummaryMetricsJson)。
+/// 汇总指标键值对(值为数值或字符串,序列化进 SyncJobEntity.SummaryMetricsJson)。
/// 明细记录列表;若仅拉汇总可为空。
public record FetchResult(
int RecordCount,
@@ -33,7 +37,7 @@ public record FetchResult(
IReadOnlyList Records);
///
-/// 一条明细记录数据(由 Connector 产出,SyncProcessor 据此落库 SyncedRecord)。
+/// 一条明细记录数据(由 Connector 产出,SyncProcessor 据此落库 SyncedRecordEntity)。
///
/// 外部业务 Id(订单号/流水号),幂等去重依据。
/// 记录类型("order" / "finance" 等)。
diff --git a/src/modules/monitoring/Domain/Services/IAlertEvaluator.cs b/src/modules/monitoring/Domain/Services/IAlertEvaluator.cs
index d149233..a328903 100644
--- a/src/modules/monitoring/Domain/Services/IAlertEvaluator.cs
+++ b/src/modules/monitoring/Domain/Services/IAlertEvaluator.cs
@@ -1,4 +1,8 @@
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Domain.Services;
@@ -15,7 +19,7 @@ public interface IAlertEvaluator
/// 最新一次同步的汇总指标。
/// 该系统下启用的告警规则。
/// 命中的规则列表(调用方负责后续通知与 LastTriggeredAt 更新)。
- IReadOnlyList Evaluate(
+ IReadOnlyList Evaluate(
Dictionary summaryMetrics,
- IReadOnlyList rules);
+ IReadOnlyList rules);
}
diff --git a/src/modules/monitoring/Domain/Values/CredentialEntry.cs b/src/modules/monitoring/Domain/Values/CredentialEntry.cs
index 99b834f..b405e8f 100644
--- a/src/modules/monitoring/Domain/Values/CredentialEntry.cs
+++ b/src/modules/monitoring/Domain/Values/CredentialEntry.cs
@@ -1,4 +1,4 @@
-namespace Monitoring.Domain.Entities;
+namespace Monitoring.Domain.Values;
/// 凭证条目(内聚于 SystemData,无独立表)。
public class CredentialEntry
diff --git a/src/modules/monitoring/Domain/Values/JobData.cs b/src/modules/monitoring/Domain/Values/JobData.cs
index f905670..423511c 100644
--- a/src/modules/monitoring/Domain/Values/JobData.cs
+++ b/src/modules/monitoring/Domain/Values/JobData.cs
@@ -1,4 +1,4 @@
-namespace Monitoring.Domain.Entities;
+namespace Monitoring.Domain.Values;
/// 同步任务 json_data 投影。
public class JobData
diff --git a/src/modules/monitoring/Domain/Values/RecordData.cs b/src/modules/monitoring/Domain/Values/RecordData.cs
index 4d4012a..7f72845 100644
--- a/src/modules/monitoring/Domain/Values/RecordData.cs
+++ b/src/modules/monitoring/Domain/Values/RecordData.cs
@@ -1,4 +1,4 @@
-namespace Monitoring.Domain.Entities;
+namespace Monitoring.Domain.Values;
/// 同步记录 json_data 投影:拉取到的外部原始数据。
public class RecordData
diff --git a/src/modules/monitoring/Domain/Values/RuleData.cs b/src/modules/monitoring/Domain/Values/RuleData.cs
index c324731..adaf3f5 100644
--- a/src/modules/monitoring/Domain/Values/RuleData.cs
+++ b/src/modules/monitoring/Domain/Values/RuleData.cs
@@ -1,6 +1,6 @@
using Monitoring.Domain.Enums;
-namespace Monitoring.Domain.Entities;
+namespace Monitoring.Domain.Values;
/// 告警规则 json_data 投影。
public class RuleData
@@ -18,7 +18,7 @@ public class RuleData
public string Threshold { get; set; } = default!;
/// 严重级别。
- public AlertSeverity Severity { get; set; } = AlertSeverity.Warning;
+ public AlertSeverityEnum Severity { get; set; } = AlertSeverityEnum.Warning;
/// 是否启用。
public bool IsEnabled { get; set; } = true;
diff --git a/src/modules/monitoring/Infrastructure/Alerting/DefaultAlertEvaluator.cs b/src/modules/monitoring/Infrastructure/Alerting/DefaultAlertEvaluator.cs
index a85fecb..cc4b7f9 100644
--- a/src/modules/monitoring/Infrastructure/Alerting/DefaultAlertEvaluator.cs
+++ b/src/modules/monitoring/Infrastructure/Alerting/DefaultAlertEvaluator.cs
@@ -1,5 +1,9 @@
using System.Globalization;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Services;
namespace Monitoring.Infrastructure.Alerting;
@@ -7,17 +11,17 @@ namespace Monitoring.Infrastructure.Alerting;
///
/// 默认告警评估器:对每条规则,从汇总指标取出 MetricName 的值,
/// 按 Operator 与 Threshold 比较;命中且度过冷却期则纳入返回列表。
-/// 字段读取自 AlertRule.Data(json_data 强类型视图)。
+/// 字段读取自 AlertRuleEntity.Data(json_data 强类型视图)。
/// 比较失败(指标缺失/非数值)的规则静默跳过,不视为命中也不抛异常。
///
public class DefaultAlertEvaluator : IAlertEvaluator
{
- public IReadOnlyList Evaluate(
+ public IReadOnlyList Evaluate(
Dictionary summaryMetrics,
- IReadOnlyList rules)
+ IReadOnlyList rules)
{
var nowMs = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
- var hit = new List();
+ var hit = new List();
foreach (var rule in rules)
{
diff --git a/src/modules/monitoring/Infrastructure/Connectors/ConnectorCredentialResolver.cs b/src/modules/monitoring/Infrastructure/Connectors/ConnectorCredentialResolver.cs
index 4eb2721..47a3662 100644
--- a/src/modules/monitoring/Infrastructure/Connectors/ConnectorCredentialResolver.cs
+++ b/src/modules/monitoring/Infrastructure/Connectors/ConnectorCredentialResolver.cs
@@ -1,13 +1,17 @@
using System.Text.Json;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Connectors;
///
-/// Connector 公共辅助:从 ExternalSystem.JsonData 解析凭证与参数,构造带凭证的 HttpClient。
+/// Connector 公共辅助:从 ExternalSystemEntity.JsonData 解析凭证与参数,构造带凭证的 HttpClient。
///
/// 设计取向:把 PG 当 Mongo 用——业务字段全在 jsonb,本类只做 JSON 反序列化 + HttpClient 拼装,
-/// 不再访问 DbContext(凭证内聚于 ExternalSystem,无独立表)。
+/// 不再访问 DbContext(凭证内聚于 ExternalSystemEntity,无独立表)。
///
/// HttpClient 命名约定:"Monitoring." + SystemType 名(已在 MonitoringInfrastructureModule 注册工厂)。
///
@@ -16,7 +20,7 @@ public class ConnectorCredentialResolver(IHttpClientFactory httpClientFactory)
private static readonly JsonSerializerOptions JsonOptions = new() { PropertyNameCaseInsensitive = true };
/// 创建挂好 BaseUrl + 凭证的 HttpClient。
- public HttpClient CreateClient(ExternalSystem system)
+ public HttpClient CreateClient(ExternalSystemEntity system)
{
var clientName = $"Monitoring.{system.Data.SystemType}";
var client = httpClientFactory.CreateClient(clientName);
diff --git a/src/modules/monitoring/Infrastructure/Connectors/GenericHttpConnector.cs b/src/modules/monitoring/Infrastructure/Connectors/GenericHttpConnector.cs
index b99a2cd..33f9f0a 100644
--- a/src/modules/monitoring/Infrastructure/Connectors/GenericHttpConnector.cs
+++ b/src/modules/monitoring/Infrastructure/Connectors/GenericHttpConnector.cs
@@ -1,6 +1,10 @@
using System.Net.Http.Json;
using System.Text.Json;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Services;
@@ -8,7 +12,7 @@ namespace Monitoring.Infrastructure.Connectors;
///
/// 通用 HTTP Connector:POST JSON + 配置化解析。
-/// 通过 ExternalSystem.Data.Parameters 配置 path/body/响应字段路径,覆盖未定制对接的简单接口。
+/// 通过 ExternalSystemEntity.Data.Parameters 配置 path/body/响应字段路径,覆盖未定制对接的简单接口。
///
/// 配置示例(Parameters):
/// {
@@ -19,9 +23,9 @@ namespace Monitoring.Infrastructure.Connectors;
///
public class GenericHttpConnector(ConnectorCredentialResolver resolver) : IExternalConnector
{
- public ExternalSystemType SystemType => ExternalSystemType.GenericHttp;
+ public ExternalSystemTypeEnum SystemType => ExternalSystemTypeEnum.GenericHttp;
- public async Task FetchAsync(ExternalSystem system, CancellationToken ct)
+ public async Task FetchAsync(ExternalSystemEntity system, CancellationToken ct)
{
var p = system.Data.Parameters;
var path = p.GetValueOrDefault("path") ?? "/";
diff --git a/src/modules/monitoring/Infrastructure/Connectors/UHaoZuConnector.cs b/src/modules/monitoring/Infrastructure/Connectors/UHaoZuConnector.cs
index 48b9824..1d48753 100644
--- a/src/modules/monitoring/Infrastructure/Connectors/UHaoZuConnector.cs
+++ b/src/modules/monitoring/Infrastructure/Connectors/UHaoZuConnector.cs
@@ -2,7 +2,11 @@ using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Logging;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Services;
@@ -16,8 +20,8 @@ namespace Monitoring.Infrastructure.Connectors;
/// 1) POST {BaseUrl}/merchants/orderReport/ajax/selectOrderReport → 汇总指标
/// 2) POST {BaseUrl}/merchants/orderReport/ajax/orderReportList → 订单明细(分页全量)
///
-/// 凭证:Cookie(JSESSIONID/uid 等)从 ExternalSystem.Data.Credentials 读取(json_data 内聚)。
-/// 参数(ExternalSystem.Data.Parameters):reportPath/lookbackDays/maxPages。
+/// 凭证:Cookie(JSESSIONID/uid 等)从 ExternalSystemEntity.Data.Credentials 读取(json_data 内聚)。
+/// 参数(ExternalSystemEntity.Data.Parameters):reportPath/lookbackDays/maxPages。
/// 金额单位说明:外部接口金额字段单位为"分",本 Connector 统一除以100转"元"后入库。
///
public class UHaoZuConnector(ConnectorCredentialResolver resolver, ILogger logger)
@@ -29,9 +33,9 @@ public class UHaoZuConnector(ConnectorCredentialResolver resolver, ILogger ExternalSystemType.UHaoZu;
+ public ExternalSystemTypeEnum SystemType => ExternalSystemTypeEnum.UHaoZu;
- public async Task FetchAsync(ExternalSystem system, CancellationToken ct)
+ public async Task FetchAsync(ExternalSystemEntity system, CancellationToken ct)
{
var p = system.Data.Parameters;
var reportPath = p.GetValueOrDefault("reportPath") ?? DefaultReportPath;
diff --git a/src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs b/src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs
index 501de40..df9c852 100644
--- a/src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs
+++ b/src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs
@@ -2,7 +2,11 @@ using System.Net;
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Logging;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Connectors;
@@ -30,7 +34,7 @@ public class UHaoZuLoginService(ILogger logger)
/// 执行登录,返回提取到的凭证列表(失败抛异常)。
///
public async Task> LoginAsync(
- ExternalSystem system, string account, string password,
+ ExternalSystemEntity system, string account, string password,
string ticket, string randstr, CancellationToken ct)
{
// 用 HttpClientHandler 捕获 Set-Cookie。
diff --git a/src/modules/monitoring/Infrastructure/Persistence/Configurations/AlertRuleConfiguration.cs b/src/modules/monitoring/Infrastructure/Persistence/Configurations/AlertRuleConfiguration.cs
index 60bfa1b..2789d28 100644
--- a/src/modules/monitoring/Infrastructure/Persistence/Configurations/AlertRuleConfiguration.cs
+++ b/src/modules/monitoring/Infrastructure/Persistence/Configurations/AlertRuleConfiguration.cs
@@ -1,13 +1,17 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Persistence.Configurations;
/// 告警规则表映射(id + 外键索引列 + json_data + 审计)。
-public class AlertRuleConfiguration : IEntityTypeConfiguration
+public class AlertRuleConfiguration : IEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder builder)
+ public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("b_alert_rules");
builder.HasKey(e => e.Id);
diff --git a/src/modules/monitoring/Infrastructure/Persistence/Configurations/ExternalSystemConfiguration.cs b/src/modules/monitoring/Infrastructure/Persistence/Configurations/ExternalSystemConfiguration.cs
index 7f915b0..e80eb97 100644
--- a/src/modules/monitoring/Infrastructure/Persistence/Configurations/ExternalSystemConfiguration.cs
+++ b/src/modules/monitoring/Infrastructure/Persistence/Configurations/ExternalSystemConfiguration.cs
@@ -1,13 +1,17 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Persistence.Configurations;
/// 外部系统配置表映射(极简文档模式:id + json_data + 审计)。
-public class ExternalSystemConfiguration : IEntityTypeConfiguration
+public class ExternalSystemConfiguration : IEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder builder)
+ public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("b_external_systems");
builder.HasKey(e => e.Id);
diff --git a/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncJobConfiguration.cs b/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncJobConfiguration.cs
index 9d27979..54f8f0e 100644
--- a/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncJobConfiguration.cs
+++ b/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncJobConfiguration.cs
@@ -1,13 +1,17 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Persistence.Configurations;
/// 同步任务记录表映射(id + 外键索引列 + json_data + 审计)。
-public class SyncJobConfiguration : IEntityTypeConfiguration
+public class SyncJobConfiguration : IEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder builder)
+ public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("b_sync_jobs");
builder.HasKey(e => e.Id);
diff --git a/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncedRecordConfiguration.cs b/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncedRecordConfiguration.cs
index 9431c47..a2d26d5 100644
--- a/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncedRecordConfiguration.cs
+++ b/src/modules/monitoring/Infrastructure/Persistence/Configurations/SyncedRecordConfiguration.cs
@@ -1,13 +1,17 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Persistence.Configurations;
/// 同步记录表映射(id + 去重/分类/时间索引列 + json_data + 审计)。
-public class SyncedRecordConfiguration : IEntityTypeConfiguration
+public class SyncedRecordConfiguration : IEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder builder)
+ public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("b_synced_records");
builder.HasKey(e => e.Id);
diff --git a/src/modules/monitoring/Infrastructure/Persistence/MonitoringDbContext.cs b/src/modules/monitoring/Infrastructure/Persistence/MonitoringDbContext.cs
index 5545d28..1cd04d4 100644
--- a/src/modules/monitoring/Infrastructure/Persistence/MonitoringDbContext.cs
+++ b/src/modules/monitoring/Infrastructure/Persistence/MonitoringDbContext.cs
@@ -1,6 +1,10 @@
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
-using Monitoring.Domain.Entities;
+using Monitoring.Domain.Entities.AlertRule;
+using Monitoring.Domain.Entities.ExternalSystem;
+using Monitoring.Domain.Entities.SyncJob;
+using Monitoring.Domain.Entities.SyncedRecord;
+using Monitoring.Domain.Values;
namespace Monitoring.Infrastructure.Persistence;
@@ -13,10 +17,10 @@ public class MonitoringDbContext : DbContext
{
public MonitoringDbContext(DbContextOptions options) : base(options) { }
- public DbSet ExternalSystems => Set();
- public DbSet SyncJobs => Set();
- public DbSet SyncedRecords => Set();
- public DbSet AlertRules => Set();
+ public DbSet ExternalSystems => Set();
+ public DbSet SyncJobs => Set();
+ public DbSet SyncedRecords => Set();
+ public DbSet AlertRules => Set();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
diff --git a/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeConverter.cs b/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeConverter.cs
index 8dcb49c..0614a3e 100644
--- a/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeConverter.cs
+++ b/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeConverter.cs
@@ -11,18 +11,14 @@ public sealed class TimestampDateTimeConverter : JsonConverter
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
- // 兼容数字(毫秒时间戳)与字符串(ISO 8601,向后兼容旧客户端)
- if (reader.TokenType == JsonTokenType.Number)
+ return reader.TokenType switch
{
- return DateTimeOffset.FromUnixTimeMilliseconds(reader.GetInt64()).UtcDateTime;
- }
-
- if (reader.TokenType == JsonTokenType.String)
- {
- return DateTime.Parse(reader.GetString()!, null, System.Globalization.DateTimeStyles.RoundtripKind);
- }
-
- throw new JsonException("Expected a number (ms timestamp) or string (ISO date) for DateTime field.");
+ // 兼容数字(毫秒时间戳)与字符串(ISO 8601,向后兼容旧客户端)
+ JsonTokenType.Number => DateTimeOffset.FromUnixTimeMilliseconds(reader.GetInt64()).UtcDateTime,
+ JsonTokenType.String => DateTime.Parse(reader.GetString()!, null,
+ System.Globalization.DateTimeStyles.RoundtripKind),
+ _ => throw new JsonException("Expected a number (ms timestamp) or string (ISO date) for DateTime field.")
+ };
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
diff --git a/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeOffsetConverter.cs b/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeOffsetConverter.cs
index dc8e238..765a716 100644
--- a/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeOffsetConverter.cs
+++ b/src/shared/BuildFlow.Shared/Infrastructure/Serialization/TimestampDateTimeOffsetConverter.cs
@@ -11,17 +11,13 @@ public sealed class TimestampDateTimeOffsetConverter : JsonConverter DateTimeOffset.FromUnixTimeMilliseconds(reader.GetInt64()),
+ JsonTokenType.String => DateTimeOffset.Parse(reader.GetString()!),
+ _ => throw new JsonException(
+ "Expected a number (ms timestamp) or string (ISO date) for DateTimeOffset field.")
+ };
}
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)