Explorar el Código

fix: 解决不同程序集下存在同名枚举类的问题

喵你个旺呀 hace 1 año
padre
commit
0f03503d68

+ 2 - 2
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -124,10 +124,10 @@ public class EnumToDictJob : IJob
         {
             var dictType = new SysDictType
             {
-                Id = 900000000000 + CommonUtil.GetFixedHashCode(type.TypeName),
+                Id = 900000000000 + CommonUtil.GetFixedHashCode(type.TypeFullName),
                 Code = type.TypeName,
                 Name = type.TypeDescribe,
-                Remark = type.TypeRemark,
+                Remark = type.TypeFullName,
                 TenantId = SqlSugarConst.DefaultTenantId
             };
             dictType.Children = type.EnumEntities.Select(x => new SysDictData

+ 5 - 0
Admin.NET/Admin.NET.Core/Service/Enum/Dto/EnumOutput.cs

@@ -21,6 +21,11 @@ public class EnumTypeOutput
     /// </summary>
     public string TypeName { get; set; }
 
+    /// <summary>
+    /// 枚举类型全名称
+    /// </summary>
+    public string TypeFullName { get; set; }
+
     /// <summary>
     /// 枚举类型备注
     /// </summary>

+ 10 - 2
Admin.NET/Admin.NET.Core/Service/Enum/SysEnumService.cs

@@ -27,12 +27,19 @@ public class SysEnumService : IDynamicApiController, ITransient
     public List<EnumTypeOutput> GetEnumTypeList()
     {
         var enumTypeList = App.EffectiveTypes.Where(t => t.IsEnum)
-            .Where(t => _enumOptions.EntityAssemblyNames.Contains(t.Assembly.GetName().Name) || _enumOptions.EntityAssemblyNames.Any(name => t.Assembly.GetName().Name.Contains(name)))
+            .Where(t => _enumOptions.EntityAssemblyNames.Contains(t.Assembly.GetName().Name) || _enumOptions.EntityAssemblyNames.Any(name => t.Assembly.GetName().Name!.Contains(name)))
             .Where(t => t.GetCustomAttributes(typeof(ErrorCodeTypeAttribute), false).Length == 0) // 排除错误代码类型
             .OrderBy(u => u.Name).ThenBy(u => u.FullName)
             .ToList();
 
-        return enumTypeList.Select(GetEnumDescription).ToList();
+        // 如果存在同名枚举类,则依次增加 "_序号" 后缀
+        var list = enumTypeList.Select(GetEnumDescription).ToList();
+        foreach (var enumType in list.GroupBy(u => u.TypeName).Where(g => g.Count() > 1))
+        {
+            int i = 1;
+            foreach (var item in list.Where(u => u.TypeName == enumType.Key).Skip(1)) item.TypeName = $"{item.TypeName}_{i++}";
+        }
+        return list;
     }
 
     /// <summary>
@@ -55,6 +62,7 @@ public class SysEnumService : IDynamicApiController, ITransient
             TypeDescribe = description,
             TypeName = type.Name,
             TypeRemark = description,
+            TypeFullName = type.FullName,
             EnumEntities = (enumType ?? type).EnumToList()
         };
     }