using JiShe.CollectBus.Common.Consts; using JiShe.CollectBus.Common.Enums; using JiShe.CollectBus.Common.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace JiShe.CollectBus.Common.Extensions { public class ProtocolConstExtensions { /// /// 自动获取 ProtocolConst 类中所有下行 Kafka 主题名称 /// (通过反射筛选 public const string 且字段名以 "EventName" 结尾的常量) /// public static List GetAllTopicNamesByIssued() { List topics = typeof(ProtocolConst) .GetFields(BindingFlags.Public | BindingFlags.Static) .Where(f => f.IsLiteral && !f.IsInitOnly && f.FieldType == typeof(string) && f.Name.EndsWith("IssuedEventName")) // 通过命名规则过滤主题字段 .Select(f => (string)f.GetRawConstantValue()!) .ToList(); return topics; } /// /// 自动获取 ProtocolConst 类中所有下行 Kafka 主题名称 /// (通过反射筛选 public const string 且字段名以 "EventName" 结尾的常量) /// public static List GetAllTopicNamesByReceived() { //固定的上报主题 var topicList = typeof(ProtocolConst) .GetFields(BindingFlags.Public | BindingFlags.Static) .Where(f => f.IsLiteral && !f.IsInitOnly && f.FieldType == typeof(string) && f.Name.EndsWith("ReceivedEventName")) // 通过命名规则过滤主题字段 .Select(f => (string)f.GetRawConstantValue()!) .ToList(); //动态上报主题,需根据协议的AFN功能码动态获取 var afnList = EnumExtensions.ToNameValueDictionary(); //需要排除的AFN功能码 var excludeItems = new List() { 6, 7, 8,15 }; foreach (var item in afnList) { if (excludeItems.Contains(item.Value)) { continue; } topicList.Add(string.Format(ProtocolConst.AFNTopicNameFormat, item.Value.ToString().PadLeft(2, '0'))); } return topicList; } } }