| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- namespace Admin.NET.Plugin.AiDOP.SmartOps;
- /// <summary>
- /// 指标 → 依赖语义。内容即任务书附录 F。「无」表示不依赖字段类或对象类语义。
- /// </summary>
- public static class KpiSemanticDependency
- {
- public const string None = "无";
- private static readonly Dictionary<string, string[]> Map = Build();
- public static IReadOnlyList<string> For(string metricCode) =>
- Map.TryGetValue(metricCode, out var deps) ? deps : [None];
- public static bool Contains(string metricCode) => Map.ContainsKey(metricCode);
- public static IEnumerable<string> Codes => Map.Keys;
- public static IReadOnlyList<string> DistinctSemantics() =>
- Map.Values.SelectMany(v => v).Where(v => v != None).Distinct(StringComparer.Ordinal).OrderBy(v => v, StringComparer.Ordinal).ToArray();
- private static Dictionary<string, string[]> Build()
- {
- var map = new Dictionary<string, string[]>(StringComparer.Ordinal);
- void Set(string code, params string[] deps) => map[code] = deps;
- void NoneOf(params string[] codes)
- {
- foreach (var code in codes)
- map[code] = [None];
- }
- NoneOf("S5_L1_001", "S5_L1_003");
- Set("S5_L1_002", "S6_REPORT");
- Set("S5_L1_004", "INV_BAL_AMOUNT");
- NoneOf("S5_L2_001", "S5_L2_002", "S5_L2_003", "S5_L2_004");
- Set("S5_L2_005", "INV_LOCATION", "INV_LOT");
- Set("S5_L2_006", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S5_L2_007", "INV_LOCATION", "INV_END_BALANCE");
- Set("S5_L2_008", "INV_LOCATION", "INV_LOT");
- Set("S5_L2_009", "INV_LOCATION");
- Set("S5_L2_010", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S5_L2_011", "INV_LOCATION", "INV_END_BALANCE");
- Set("S5_L2_012", "INV_LOCATION", "INV_LOT");
- Set("S5_L2_013", "INV_LOCATION");
- Set("S5_L2_014", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S5_L2_015", "INV_LOCATION", "INV_END_BALANCE");
- // INV_LOCATION*:库位缺失时仍可由源事务码得到部分数据,不作为不支持判定。
- Set("S5_L3_001", "INV_LOT", "INV_CREATE_USER");
- Set("S5_L3_002", "INV_END_BALANCE");
- Set("S5_L3_003", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S5_L3_004", "INV_LOCATION", "INV_END_BALANCE");
- Set("S5_L3_005", "INV_LOCATION");
- NoneOf("S6_L1_001", "S6_L1_002", "S6_L1_003", "S6_L2_001", "S6_L2_002", "S6_L2_004");
- Set("S6_L2_003", "DOC_QTY_CLOSE");
- NoneOf("S6_L3_001", "S6_L3_002", "S6_L3_003", "S6_L3_004", "S6_L3_005", "S6_L3_006", "S6_L3_007", "S6_L3_008");
- Set("S7_L1_001", "FQC");
- NoneOf("S7_L1_002", "S7_L1_003", "S7_L2_001", "S7_L2_002", "S7_L2_003");
- Set("S7_L2_004", "INV_LOCATION", "INV_END_BALANCE");
- Set("S7_L2_005", "INV_LOCATION", "INV_LOT");
- Set("S7_L2_006", "INV_LOCATION");
- Set("S7_L2_007", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S7_L2_008", "INV_LOCATION", "INV_END_BALANCE");
- Set("S7_L2_009", "INV_LOCATION", "INV_LOT");
- Set("S7_L2_010", "INV_LOCATION");
- Set("S7_L2_011", "INV_LOCATION", "INV_LOT", "INV_CREATE_USER");
- Set("S7_L2_012", "INV_LOCATION", "INV_END_BALANCE");
- Set("S7_L2_013", "FG_RECEIPT_TIME", "INV_LOT");
- NoneOf("S7_L2_014");
- Set("S7_L2_015", "INV_LOT", "INV_CREATE_USER");
- Set("S7_L2_016", "FG_RECEIPT_TIME", "INV_END_BALANCE");
- NoneOf("S9_L1_001", "S9_L1_003", "S9_L1_004", "S9_L1_005");
- Set("S9_L1_002", "FQC");
- return map;
- }
- }
|