| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using Furion;
- using Microsoft.Extensions.Configuration;
- namespace Admin.NET.Plugin.AiDOP.Infrastructure;
- /// <summary>
- /// T8 源账套(ztid)→ AiDOP 目标租户(TenantId)映射解析器。
- ///
- /// 背景:S5/S6/S7 的 KPI 由 T8 源库按账套 <c>ztid</c> 聚合产生,T8 行本身不含 DOP TenantId,
- /// 因此 KPI 落库租户不能像 S1–S4 那样"从源行 tenant_id 推导",只能由"一账套 → 一租户"的显式映射注入。
- /// 本类即该唯一映射来源,替代此前写死的 <c>tenant_id = 1300000000001</c>(禁止再作默认/兜底)。
- ///
- /// 映射值来源【证据,非臆造默认】:T8 当前唯一账套 <c>pbxfxp</c> 对应的公司数据经 S1–S4 贴源落地后,
- /// 全部业务主数据(crm_seorder / PurOrdRctMaster / NbrMaster / WorkOrdMaster …)均在 TenantId=797403760988229
- /// (SysOrg.Name='AIDOP')名下,故 pbxfxp ↔ 797403760988229 与既有管线一致。
- ///
- /// 可覆盖:appsettings 段 <c>AidopMdp:ZtidTenantMap</c>(形如 { "pbxfxp": "797403760988229" })优先于内置映射。
- /// 未映射的 ztid 一律抛错,绝不回退到任何固定租户。
- /// </summary>
- public static class AidopSourceTenantMap
- {
- /// <summary>内置映射(部署可用 appsettings AidopMdp:ZtidTenantMap 覆盖)。</summary>
- private static readonly IReadOnlyDictionary<string, long> BuiltInMap = new Dictionary<string, long>(StringComparer.OrdinalIgnoreCase)
- {
- // pbxfxp = T8 当前唯一账套;对应 DOP 业务数据租户 797403760988229(SysOrg.Name='AIDOP')
- ["pbxfxp"] = 797403760988229L,
- };
- /// <summary>
- /// 解析一次刷新的目标租户。
- /// 优先用显式 <paramref name="explicitTenantId"/>(>0);否则按 <paramref name="sourceZtid"/> 查映射;
- /// 查不到即抛 <see cref="InvalidOperationException"/>,不回退固定租户。
- /// </summary>
- public static long ResolveTenantId(string sourceZtid, long explicitTenantId = 0)
- {
- if (explicitTenantId > 0)
- return explicitTenantId;
- if (string.IsNullOrWhiteSpace(sourceZtid))
- throw new InvalidOperationException("MDP 刷新缺少 SourceZtid,无法确定目标租户;不允许回退固定租户。");
- // appsettings 覆盖优先
- var overridden = App.GetConfig<Dictionary<string, string>>("AidopMdp:ZtidTenantMap", true);
- if (overridden != null)
- {
- foreach (var kv in overridden)
- {
- if (string.Equals(kv.Key, sourceZtid, StringComparison.OrdinalIgnoreCase)
- && long.TryParse(kv.Value, out var cfgTid) && cfgTid > 0)
- return cfgTid;
- }
- }
- if (BuiltInMap.TryGetValue(sourceZtid, out var tid))
- return tid;
- throw new InvalidOperationException(
- $"未找到 T8 账套 ztid='{sourceZtid}' 对应的 AiDOP 租户映射;请在 appsettings 段 AidopMdp:ZtidTenantMap 配置后再刷新(禁止回退固定租户)。");
- }
- }
|