IqcDomainResolver.cs 1.2 KB

123456789101112131415161718192021
  1. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.L1;
  2. /// <summary>
  3. /// IQC 过账 domain 解析(Phase 5B-3 §3.1)。
  4. ///
  5. /// **设计事实**:本系统一个 tenant 下可有多个 domain(按公司/工厂分区),故 domain **不是** tenant 级 1:1 映射,
  6. /// 而是随收货/检验记录来自源数据(IqcInventoryEvent.DomainCode,源自 PurOrdRctDetail/MissedPrint.Domain)。
  7. /// 本解析器职责 = **校验并规范化**该 domain:非空 → 返回 trim 值;空/未知 → 抛错(消费端转 Retryable)。
  8. /// **硬约束**:禁止任何 `8010` 硬编码 fallback;禁止在无法确定 domain 时静默默认。
  9. /// </summary>
  10. public sealed class IqcDomainResolver : ITransient
  11. {
  12. /// <summary>解析 domain:非空返回规范化值;空 → 抛错,由消费端转 Retryable(不 fallback 8010)。</summary>
  13. public string Resolve(long tenantId, string candidateDomain)
  14. {
  15. var d = candidateDomain?.Trim();
  16. if (string.IsNullOrEmpty(d))
  17. throw new InvalidOperationException($"IQC domain 未解析(tenant={tenantId}):事件未携带 domain 且无 tenant→domain 权威映射,拒绝 8010 fallback。");
  18. return d;
  19. }
  20. }