| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using Microsoft.Extensions.Logging;
- namespace Admin.NET.Plugin.AiDOP.DataPlatform;
- /// <summary>
- /// 中立层写入闸门。来源未登记或与登记不一致时不写中立层,并记 <c>mdp_source_gate_log</c>。
- /// </summary>
- public sealed class MdpNeutralSourceGate : ITransient
- {
- private readonly MdpTenantStdSourceResolver _resolver;
- private readonly ISqlSugarClient _db;
- private readonly ILogger _logger;
- public MdpNeutralSourceGate(MdpTenantStdSourceResolver resolver, ISqlSugarClient db, ILoggerFactory loggerFactory)
- {
- _resolver = resolver;
- _db = db;
- _logger = loggerFactory.CreateLogger(nameof(MdpNeutralSourceGate));
- }
- public async Task<bool> AllowsAsync(
- long tenantId,
- string stdObject,
- string sourceSystem,
- int rowCount = 1,
- string? sampleKeys = null,
- string? syncBatchId = null,
- CancellationToken cancellationToken = default)
- {
- var registered = await _resolver.GetSourceAsync(tenantId, stdObject, cancellationToken);
- if (registered != null
- && string.Equals(registered.SourceSystem, sourceSystem, StringComparison.OrdinalIgnoreCase))
- return true;
- var reason = registered == null ? "SOURCE_NOT_REGISTERED" : "SOURCE_MISMATCH";
- _logger.LogWarning(
- "中立层来源闸门拒绝写入 {Reason} tenant={TenantId} object={StdObject} source={SourceSystem} rows={RowCount}",
- reason, tenantId, stdObject, sourceSystem, rowCount);
- await _db.Ado.ExecuteCommandAsync(
- """
- INSERT INTO mdp_source_gate_log
- (tenant_id, std_object, source_system, gate_reason, row_count, sample_keys, sync_batch_id)
- VALUES (@tenant, @obj, @src, @reason, @rows, @sample, @batch)
- """,
- new
- {
- tenant = tenantId,
- obj = stdObject,
- src = sourceSystem ?? "",
- reason,
- rows = rowCount,
- sample = sampleKeys,
- batch = syncBatchId
- });
- return false;
- }
- }
|