diff --git a/WeiCloud.Fusion/WeiCloud.Core/EnumTools/Enumeration.cs b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/Enumeration.cs new file mode 100644 index 0000000..2b4e7c0 --- /dev/null +++ b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/Enumeration.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace WeiCloud.Core +{ + public class Enumeration : IComparable + { + private readonly int _value; + private readonly string _displayName; + + protected Enumeration() + { + } + + protected Enumeration(int value, string displayName) + { + _value = value; + _displayName = displayName; + } + + public int Value + { + get { return _value; } + } + + public string DisplayName + { + get { return _displayName; } + } + + public override string ToString() + { + return DisplayName; + } + + public static IEnumerable GetAll() where T : Enumeration, new() + { + var type = typeof(T); + var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); + + foreach (var info in fields) + { + var instance = new T(); + var locatedValue = info.GetValue(instance) as T; + + if (locatedValue != null) + { + yield return locatedValue; + } + } + } + + public override bool Equals(object obj) + { + var otherValue = obj as Enumeration; + + if (otherValue == null) + { + return false; + } + + var typeMatches = GetType().Equals(obj.GetType()); + var valueMatches = _value.Equals(otherValue.Value); + + return typeMatches && valueMatches; + } + + public override int GetHashCode() + { + return _value.GetHashCode(); + } + + public static int AbsoluteDifference(Enumeration firstValue, Enumeration secondValue) + { + var absoluteDifference = Math.Abs(firstValue.Value - secondValue.Value); + return absoluteDifference; + } + + public static T FromValue(int value) where T : Enumeration, new() + { + var matchingItem = parse(value, "value", item => item.Value == value); + return matchingItem; + } + + public static T FromDisplayName(string displayName) where T : Enumeration, new() + { + var matchingItem = parse(displayName, "display name", item => item.DisplayName == displayName); + return matchingItem; + } + + private static T parse(K value, string description, Func predicate) where T : Enumeration, new() + { + var matchingItem = GetAll().FirstOrDefault(predicate); + + if (matchingItem == null) + { + var message = string.Format("'{0}' is not a valid {1} in {2}", value, description, typeof(T)); + throw new ApplicationException(message); + } + + return matchingItem; + } + + public int CompareTo(object other) + { + return Value.CompareTo(((Enumeration)other).Value); + } + } +} diff --git a/WeiCloud.Fusion/WeiCloud.Core/EnumTools/RequestBackStatuEnum.cs b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/RequestBackStatuEnum.cs new file mode 100644 index 0000000..3c56130 --- /dev/null +++ b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/RequestBackStatuEnum.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WeiCloud.Core +{ + public class RequestBackStatuEnum:Enumeration + { + private RequestBackStatuEnum(int value, string displayName) : base(value, displayName) { + + } + /// + /// 操作成功 + /// + public static readonly RequestBackStatuEnum success = new RequestBackStatuEnum(200, nameof(success).ToLowerInvariant()); + /// + /// 自定义msg + /// + public static readonly RequestBackStatuEnum diy = new RequestBackStatuEnum(2000, nameof(diy).ToLowerInvariant()); + /// + /// 不存在指定对象 + /// + public static readonly RequestBackStatuEnum notexist = new RequestBackStatuEnum(2001, nameof(notexist).ToLowerInvariant()); + /// + /// 已存在指定对象 + /// + public static readonly RequestBackStatuEnum exist = new RequestBackStatuEnum(2002, nameof(exist).ToLowerInvariant()); + /// + /// 已存在指定条件的数据集 + /// + public static readonly RequestBackStatuEnum hasdata = new RequestBackStatuEnum(2003, nameof(hasdata).ToLowerInvariant()); + /// + /// 不存在指定条件的数据集 + /// + public static readonly RequestBackStatuEnum nodata = new RequestBackStatuEnum(2004, nameof(nodata).ToLowerInvariant()); + /// + /// 服务端处理错误 + /// + public static readonly RequestBackStatuEnum fail = new RequestBackStatuEnum(2005, nameof(fail).ToLowerInvariant()); + /// + /// 请求失败 + /// + public static readonly RequestBackStatuEnum badrequest = new RequestBackStatuEnum(2006, nameof(badrequest).ToLowerInvariant()); + /// + /// 未找到指定接口 + /// + public static readonly RequestBackStatuEnum notfound = new RequestBackStatuEnum(2007, nameof(notfound).ToLowerInvariant()); + /// + /// 网络连接失败 + /// + public static readonly RequestBackStatuEnum loselink = new RequestBackStatuEnum(2008, nameof(loselink).ToLowerInvariant()); + /// + /// 没有权限 + /// + public static readonly RequestBackStatuEnum unauthorized = new RequestBackStatuEnum(401, nameof(unauthorized).ToLowerInvariant()); + /// + /// 失效用户 + /// + public static readonly RequestBackStatuEnum expireUser = new RequestBackStatuEnum(4001, nameof(unauthorized).ToLowerInvariant()); + /// + /// 需要wx同意获取手机号才能登录 + /// + public static readonly RequestBackStatuEnum wx_need_get_phone_by_code = new RequestBackStatuEnum(3001, nameof(wx_need_get_phone_by_code).ToLowerInvariant()); + + public static IEnumerable List() => + new[] { success, badrequest, notfound, loselink }; + + public static RequestBackStatuEnum From(int value) + { + var state = List().SingleOrDefault(s => s.Value == value); + + if (state == null) + { + throw new Exception($"Possible values for Volume: {String.Join(",", List().Select(s => s.Value))}"); + } + + return state; + } + + public static RequestBackStatuEnum FromName(string name) + { + var state = List() + .SingleOrDefault(s => String.Equals(s.DisplayName, name, StringComparison.CurrentCultureIgnoreCase)); + + if (state == null) + { + throw new Exception($"Possible values for Volume: {String.Join(",", List().Select(s => s.DisplayName))}"); + } + + return state; + } + } +} diff --git a/WeiCloud.Fusion/WeiCloud.Core/EnumTools/说明.txt b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/说明.txt new file mode 100644 index 0000000..32fa735 --- /dev/null +++ b/WeiCloud.Fusion/WeiCloud.Core/EnumTools/说明.txt @@ -0,0 +1,26 @@ +------ 枚举类文件说明 ccx 2022-2-17----- + +空气质量类型枚举 ------ AirQuantityEnum +建筑物类型枚举 ------ ConstTypeEnum +能耗分项类型枚举 ------ EnergyItemEnum +能源计费方式枚举 ------ EngeryBillingType +能源类型(水电气)枚举 ------ EngeryTypeEnum +系统类型枚举 ------ EnumSystemModel +设备分组类型枚举 ------ EqGroupTypeEnum +设备运行状态枚举 ------ EquipRuningStatus +设备类型枚举 ------ EquipTypeEnum +国润丰泽角色id枚举 ------ FamilyDecorationEnum +报警类型枚举 ------ FamilyDecorationEnum +报警处理方式类型枚举 ------ FaultHandleEnum +报警状态枚举 ------ FaultStatusEnum +控制面板挡位枚举 ------ GearEnum +人工抄表时间枚举 ------ HandWritetenEnum +知识库的多种枚举 ------ KBEnum +日志类型枚举 ------ NlogTypeNum +后端返回code枚举 ------ RequestBackStatuEnum +能源转标煤换算枚举 ------ StandardCoalEnum +全局参数名称枚举 ------ SyaConfigNameEnum +元数据枚举 ------ SysBaseCodeMeta +文件路径枚举 ------ SysModuleEnum +租户费用支付方式枚举 ------ TenantPayWayEnum +查询数据时间间隔枚举 ------ TimeSpanEnum diff --git a/WeiCloud.Fusion/WeiCloud.Core/WeiCloud.Core.csproj b/WeiCloud.Fusion/WeiCloud.Core/WeiCloud.Core.csproj new file mode 100644 index 0000000..e0a28f1 --- /dev/null +++ b/WeiCloud.Fusion/WeiCloud.Core/WeiCloud.Core.csproj @@ -0,0 +1,68 @@ + + + + netcoreapp3.1;net8.0 + + + + obj\Debug\netstandard2.0\WeiCloud.Core.xml + 1701;1702;1591 + true + + + + obj\Debug\netstandard2.0\WeiCloud.Core.xml + 1701;1702;1591 + true + + + + obj\Release\netstandard2.0\WeiCloud.Core.xml + + + + obj\Release\netstandard2.0\WeiCloud.Core.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +