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