refactor: 😀代码优化

This commit is contained in:
喵你个旺呀 2025-01-17 09:28:55 +08:00
parent 14866bd05c
commit fbfb5281eb
2 changed files with 30 additions and 37 deletions

View File

@ -32,7 +32,7 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
.Select<CodeGenConfig>() .Select<CodeGenConfig>()
.Mapper(u => .Mapper(u =>
{ {
u.NetType = (u.EffectType == "EnumSelector" || u.EffectType == "ConstSelector" ? u.DictTypeCode : u.NetType); u.NetType = (u.EffectType is "EnumSelector" or "ConstSelector" ? u.DictTypeCode : u.NetType);
}) })
.OrderBy(u => new { u.OrderNo, u.Id }) .OrderBy(u => new { u.OrderNo, u.Id })
.ToListAsync(); .ToListAsync();

View File

@ -183,7 +183,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => configId.Equals(u.ConfigId)); var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => configId.Equals(u.ConfigId));
IEnumerable<EntityInfo> entityInfos = await GetEntityInfos(false); // 获取所有实体定义 IEnumerable<EntityInfo> entityInfos = await GetEntityInfos(); // 获取所有实体定义
entityInfos = entityInfos.OrderBy(u => u.EntityName.StartsWith("Sys") ? 1 : 0).ThenBy(u => u.EntityName); entityInfos = entityInfos.OrderBy(u => u.EntityName.StartsWith("Sys") ? 1 : 0).ThenBy(u => u.EntityName);
var tableOutputList = new List<TableOutput>(); var tableOutputList = new List<TableOutput>();
@ -279,14 +279,14 @@ public class SysCodeGenService : IDynamicApiController, ITransient
if (entityType == null) if (entityType == null)
return null; return null;
var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == input.ConfigId); var config = _dbConnectionOptions.ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == input.ConfigId);
var dbTableName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(entityType.DbTableName) : entityType.DbTableName; var dbTableName = config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(entityType.DbTableName) : entityType.DbTableName;
int bracketIndex = dbTableName.IndexOf('{'); int bracketIndex = dbTableName.IndexOf('{');
if (bracketIndex != -1) if (bracketIndex != -1)
{ {
dbTableName = dbTableName.Substring(0, bracketIndex); dbTableName = dbTableName.Substring(0, bracketIndex);
var dbTableInfos = _db.AsTenant().GetConnectionScope(input.ConfigId).DbMaintenance.GetTableInfoList(false); var dbTableInfos = _db.AsTenant().GetConnectionScope(input.ConfigId).DbMaintenance.GetTableInfoList(false);
var table = dbTableInfos.FirstOrDefault(x => x.Name.ToLower().StartsWith(config != null && config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(dbTableName) : dbTableName)); var table = dbTableInfos.FirstOrDefault(x => x.Name.StartsWith(config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(dbTableName) : dbTableName, StringComparison.CurrentCultureIgnoreCase));
if (table != null) if (table != null)
dbTableName = table.Name; dbTableName = table.Name;
} }
@ -366,11 +366,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
} }
return false; return false;
} }
Type[] cosType = types.Where(u => Type[] cosType = types.Where(u => IsMyAttribute(Attribute.GetCustomAttributes(u, false))).ToArray();
{
return IsMyAttribute(Attribute.GetCustomAttributes(u, false));
}
).ToArray();
var entityInfos = new List<EntityInfo>(); var entityInfos = new List<EntityInfo>();
foreach (var ct in cosType) foreach (var ct in cosType)
@ -382,7 +378,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
var des = ct.GetCustomAttributes(typeof(DescriptionAttribute), false); var des = ct.GetCustomAttributes(typeof(DescriptionAttribute), false);
var description = des.Length > 0 ? ((DescriptionAttribute)des[0]).Description : ""; var description = des.Length > 0 ? ((DescriptionAttribute)des[0]).Description : "";
var sugarAttribute = ct.GetCustomAttributes(sugarTableType, true)?.FirstOrDefault(); var sugarAttribute = ct.GetCustomAttributes(sugarTableType, true).FirstOrDefault();
entityInfos.Add(new EntityInfo() entityInfos.Add(new EntityInfo()
{ {
@ -446,8 +442,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
#endregion #endregion
var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合 var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段 var joinTableList = tableFieldList.Where(u => u.EffectType is "Upload" or "ForeignKey" or "ApiTreeSelector").ToList(); // 需要连表查询的字段
(string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名 //(string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名
var data = new CustomViewEngine(_db) var data = new CustomViewEngine(_db)
{ {
@ -461,11 +457,11 @@ public class SysCodeGenService : IDynamicApiController, ITransient
QueryWhetherList = queryWhetherList, // 查询条件 QueryWhetherList = queryWhetherList, // 查询条件
TableField = tableFieldList, // 表字段配置信息 TableField = tableFieldList, // 表字段配置信息
IsJoinTable = joinTableList.Count > 0, // 是否联表 IsJoinTable = joinTableList.Count > 0, // 是否联表
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(), // 是否上传 IsUpload = joinTableList.Any(u => u.EffectType == "Upload"), // 是否上传
PrintType = input.PrintType!, // 支持打印类型 PrintType = input.PrintType!, // 支持打印类型
PrintName = input.PrintName!, // 打印模板名称 PrintName = input.PrintName!, // 打印模板名称
IsApiService = input.IsApiService, IsApiService = input.IsApiService,
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true), // 远程验证 RemoteVerify = tableFieldList.Any(t => t.RemoteVerify), // 远程验证
TreeName = input.TreeName, TreeName = input.TreeName,
LowerTreeName = string.IsNullOrEmpty(input.TreeName) ? "" : input.TreeName[..1].ToLower() + input.TreeName[1..], // 首字母小写 LowerTreeName = string.IsNullOrEmpty(input.TreeName) ? "" : input.TreeName[..1].ToLower() + input.TreeName[1..], // 首字母小写
LeftTab = input.LeftTab, LeftTab = input.LeftTab,
@ -496,7 +492,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template"); var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
for (var i = 0; i < templateList.Count; i++) for (var i = 0; i < templateList.Count; i++)
{ {
string tResult = string.Empty; // 模板生成结果 string tResult; // 模板生成结果
var filename = templateList[i].Name; var filename = templateList[i].Name;
// 更改默认首页模板 // 更改默认首页模板
@ -507,7 +503,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
} }
var templateFilePath = Path.Combine(templatePath, filename); var templateFilePath = Path.Combine(templatePath, filename);
if (!File.Exists(templateFilePath)) continue; if (!File.Exists(templateFilePath)) continue;
var tContent = File.ReadAllText(templateFilePath); var tContent = await File.ReadAllTextAsync(templateFilePath);
if (templateList[i].Type == CodeGenTypeEnum.SeedData) if (templateList[i].Type == CodeGenTypeEnum.SeedData)
{ {
@ -567,7 +563,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
var dirPath = new DirectoryInfo(targetFile).Parent!.FullName; var dirPath = new DirectoryInfo(targetFile).Parent!.FullName;
if (!Directory.Exists(dirPath)) if (!Directory.Exists(dirPath))
Directory.CreateDirectory(dirPath); Directory.CreateDirectory(dirPath);
File.WriteAllText(targetFile, tResult, Encoding.UTF8); await File.WriteAllTextAsync(targetFile, tResult, Encoding.UTF8);
} }
// 非ZIP压缩返回空 // 非ZIP压缩返回空
@ -595,13 +591,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient
foreach (var item in tableFieldList) foreach (var item in tableFieldList)
{ {
List<VerifyRuleItem> list = new List<VerifyRuleItem>(); List<VerifyRuleItem> list = new();
if (!string.IsNullOrWhiteSpace(item.Rules)) if (!string.IsNullOrWhiteSpace(item.Rules))
{ {
if (item.Rules != "[]") if (item.Rules != "[]") list = JSON.Deserialize<List<VerifyRuleItem>>(item.Rules);
{
list = JSON.Deserialize<List<VerifyRuleItem>>(item.Rules);
}
} }
else else
{ {
@ -616,8 +609,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
#endregion #endregion
var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合 var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段 var joinTableList = tableFieldList.Where(u => u.EffectType is "Upload" or "ForeignKey" or "ApiTreeSelector").ToList(); // 需要连表查询的字段
(string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名 //(string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList); // 获取连表的实体名和别名
var data = new CustomViewEngine(_db) var data = new CustomViewEngine(_db)
{ {
@ -632,11 +625,11 @@ public class SysCodeGenService : IDynamicApiController, ITransient
QueryWhetherList = queryWhetherList, // 查询条件 QueryWhetherList = queryWhetherList, // 查询条件
TableField = tableFieldList, // 表字段配置信息 TableField = tableFieldList, // 表字段配置信息
IsJoinTable = joinTableList.Count > 0,//是否联表 IsJoinTable = joinTableList.Count > 0,//是否联表
IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(), // 是否上传 IsUpload = joinTableList.Any(u => u.EffectType == "Upload"), // 是否上传
PrintType = input.PrintType!, // 支持打印类型 PrintType = input.PrintType!, // 支持打印类型
PrintName = input.PrintName!, // 打印模板名称 PrintName = input.PrintName!, // 打印模板名称
IsApiService = input.IsApiService, IsApiService = input.IsApiService,
RemoteVerify = tableFieldList.Any(t => t.RemoteVerify == true), // 远程验证 RemoteVerify = tableFieldList.Any(t => t.RemoteVerify), // 远程验证
TreeName = input.TreeName, TreeName = input.TreeName,
LowerTreeName = string.IsNullOrEmpty(input.TreeName) ? "" : input.TreeName[..1].ToLower() + input.TreeName[1..], // 首字母小写 LowerTreeName = string.IsNullOrEmpty(input.TreeName) ? "" : input.TreeName[..1].ToLower() + input.TreeName[1..], // 首字母小写
LeftTab = input.LeftTab, LeftTab = input.LeftTab,
@ -662,7 +655,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
var result = new Dictionary<string, string>(); var result = new Dictionary<string, string>();
for (var i = 0; i < templateList.Count; i++) for (var i = 0; i < templateList.Count; i++)
{ {
string tResult = string.Empty; // 模板生成结果 string tResult; // 模板生成结果
var filename = templateList[i].Name; var filename = templateList[i].Name;
// 更改默认首页模板 // 更改默认首页模板
@ -673,7 +666,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
} }
var templateFilePath = Path.Combine(templatePath, filename); var templateFilePath = Path.Combine(templatePath, filename);
if (!File.Exists(templateFilePath)) continue; if (!File.Exists(templateFilePath)) continue;
var tContent = File.ReadAllText(templateFilePath); var tContent = await File.ReadAllTextAsync(templateFilePath);
if (templateList[i].Type == CodeGenTypeEnum.SeedData) if (templateList[i].Type == CodeGenTypeEnum.SeedData)
{ {
@ -748,30 +741,29 @@ public class SysCodeGenService : IDynamicApiController, ITransient
/// <returns></returns> /// <returns></returns>
private async Task AddMenu(List<SysMenu> menus, long pid) private async Task AddMenu(List<SysMenu> menus, long pid)
{ {
var pPath = string.Empty;
// 若 pid=0 为顶级则创建菜单目录 // 若 pid=0 为顶级则创建菜单目录
if (pid == 0) if (pid == 0)
{ {
// 若已存在相同目录则删除本级和下级 // 若已存在相同目录则删除本级和下级
var menuType0 = menus.Where(u => u.Type == MenuTypeEnum.Dir && u.Pid == 0).FirstOrDefault(); var menuType0 = menus.FirstOrDefault(u => u.Type == MenuTypeEnum.Dir && u.Pid == 0);
var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync(); var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync();
if (menuList0.Count > 0) if (menuList0.Count > 0)
{ {
var listIds = menuList0.Select(u => u.Id).ToList(); var listIds = menuList0.Select(u => u.Id).ToList();
var childlistIds = new List<long>(); var childrenIds = new List<long>();
foreach (var item in listIds) foreach (var item in listIds)
{ {
var childlist = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item); var children = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item);
childlistIds.AddRange(childlist.Select(u => u.Id).ToList()); childrenIds.AddRange(children.Select(u => u.Id).ToList());
} }
listIds.AddRange(childlistIds); listIds.AddRange(childrenIds);
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync(); await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync(); await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
} }
} }
// 若已存在相同菜单则删除本级和下级 // 若已存在相同菜单则删除本级和下级
var menuType = menus.Where(u => u.Type == MenuTypeEnum.Menu).FirstOrDefault(); var menuType = menus.FirstOrDefault(u => u.Type == MenuTypeEnum.Menu);
var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync(); var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync();
if (menuListCurrent.Count > 0) if (menuListCurrent.Count > 0)
{ {
@ -805,7 +797,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
/// <returns></returns> /// <returns></returns>
private async Task<List<SysMenu>> GetMenus(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList) private async Task<List<SysMenu>> GetMenus(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
{ {
var pPath = string.Empty; string pPath;
// 若 pid=0 为顶级则创建菜单目录 // 若 pid=0 为顶级则创建菜单目录
SysMenu menuType0 = null; SysMenu menuType0 = null;
long tempPid = pid; long tempPid = pid;
@ -995,7 +987,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
.Where(u => u.Id == SqlFunc.Subqueryable<SysCodeGenTemplateRelation>().Where(s => s.CodeGenId == input.Id).GroupBy(s => s.TemplateId).Select(s => s.TemplateId)) .Where(u => u.Id == SqlFunc.Subqueryable<SysCodeGenTemplateRelation>().Where(s => s.CodeGenId == input.Id).GroupBy(s => s.TemplateId).Select(s => s.TemplateId))
.ToList(); .ToList();
} }
else if (input.GenerateType.Substring(1, 1).Contains('2'))
if (input.GenerateType.Substring(1, 1).Contains('2'))
{ {
return _codeGetTemplateRep.AsQueryable() return _codeGetTemplateRep.AsQueryable()
.Where(u => u.Type == CodeGenTypeEnum.Backend) .Where(u => u.Type == CodeGenTypeEnum.Backend)