重新生成实体类

This commit is contained in:
2023-05-18 18:15:38 +08:00
parent 82c94d9707
commit 3033b9c66e
347 changed files with 36999 additions and 54700 deletions

View File

@@ -377,10 +377,6 @@ public class DataBaseService : IDynamicApiController, ITransient
[HttpPost("{linkId}/gen-code")]
public async Task<dynamic> GenerateCode(string linkId, DatabaseTableDataCleanInput input)
{
if (input.TableName == "bas_customer")
{
return await GenerateAllEntity(linkId);
}
if (input.TableName.IsNullOrWhiteSpace())
{
throw new ArgumentNullException(nameof(input.TableName));
@@ -395,51 +391,25 @@ public class DataBaseService : IDynamicApiController, ITransient
var link = await _dbLinkService.GetInfo(linkId);
sugarClient = _dataBaseManager.ChangeDataBase(link);
}
List<DbEntityInfo> entities = new();
Dictionary<string, string> nsMapper = GetNsMapper();
foreach (var tbl in sugarClient.DbMaintenance.GetTableInfoList().Where(t => t.Name == input.TableName))
{
var entityName = string.Join("", tbl.Name.Split('_').Select(a => a.ToPascalCase()));
sugarClient.MappingTables.Add(entityName, tbl.Name);
DbEntityInfo model = new() { tableName = tbl.Name, descrip = tbl.Description, clsName = entityName };
var key = tbl.Name.Split('_')[0] + "_";
if (nsMapper.ContainsKey(key)) model.nsName = nsMapper[key];
foreach (var field in sugarClient.DbMaintenance.GetColumnInfosByTableName(tbl.Name))
{
DbEntityPropInfo col = field.Adapt<DbEntityPropInfo>();
col.csType = sugarClient.Ado.DbBind.GetPropertyTypeName(field.DataType);
col.propName = field.DbColumnName;
model.columns.Add(col);
}
var primaryKey = model.columns.FirstOrDefault(a => a.primaryKey);
if (primaryKey != null)
{
model.pkType = primaryKey.csType;
model.pkName = primaryKey.propName;
}
if (model.pkName == "id") model.ignoreCols.Add(model.pkName);
entities.Add(model);
}
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "Template", "Entity.vue.vm");
string tContent = File.ReadAllText(templatePath);
List<DbEntityInfo> entities = GetDbEntities(sugarClient, input.TableName == "ALL_TABLE" ? null : input.TableName);
var tplContent = File.ReadAllText(Path.Combine(App.WebHostEnvironment.WebRootPath, "Template", "Entity.vue.vm"));
string sResult = string.Empty;
foreach (var item in entities)
{
var tResult = _viewEngine.RunCompileFromCached(tContent, item, builderAction: builder =>
sResult = _viewEngine.RunCompileFromCached(tplContent, item, builderAction: builder =>
{
builder.AddUsing("System.Collections.Generic");
builder.AddAssemblyReferenceByName("System.Collections");
});
var dir = Path.Combine(FileVariable.GenerateCodePath, item.nsName);
Directory.CreateDirectory(dir);
File.WriteAllText(Path.Combine(dir, item.clsName + ".cs"), tResult);
return tResult;
File.WriteAllText(Path.Combine(dir, item.clsName + ".cs"), sResult);
}
var prefix = input.TableName.Split('_')[0];
var nsName = nsMapper.ContainsKey(prefix) ? nsMapper[prefix] : "Tnb.Entities";
var dict = GenerateEntityConfig(sugarClient.DbFirst.Where(input.TableName)).ToClassStringList(nsName);
return dict.Count > 0 ? dict.First().Value.Replace("\r\n", "\n") : string.Empty;
return sResult;
//var prefix = input.TableName.Split('_')[0];
//var nsName = nsMapper.ContainsKey(prefix) ? nsMapper[prefix] : "Tnb.Entities";
//var dict = GenerateEntityConfig(sugarClient.DbFirst.Where(input.TableName)).ToClassStringList(nsName);
//return dict.Count > 0 ? dict.First().Value.Replace("\r\n", "\n") : string.Empty;
}
#endregion
@@ -617,70 +587,6 @@ public class DataBaseService : IDynamicApiController, ITransient
}
}
/// <summary>
/// 生成所有表的实体类文件
/// </summary>
/// <param name="linkId"></param>
/// <returns></returns>
private async Task<dynamic> GenerateAllEntity(string linkId)
{
ISqlSugarClient sugarClient = _repository.AsSugarClient();
if (linkId != "0")
{
var link = await _dbLinkService.GetInfo(linkId);
sugarClient = _dataBaseManager.ChangeDataBase(link);
}
foreach (var item in sugarClient.DbMaintenance.GetTableInfoList())
{
string entityName = string.Join("", item.Name.Split('_').Select(a => a.ToPascalCase()));
sugarClient.MappingTables.Add(entityName, item.Name);
}
Dictionary<string, string> nsMapper = GetNsMapper();
List<string> dirs = new List<string>();
foreach (string key in nsMapper.Keys)
{
if (key != "eqp_") continue;
var nsName = nsMapper[key];
var dir = Path.Combine(FileVariable.GenerateCodePath, nsName);
dirs.Add(dir);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
else
Directory.GetFiles(dir).ToList().ForEach(File.Delete);
GenerateEntityConfig(sugarClient.DbFirst.Where(t => t.StartsWith(key))).CreateClassFile(dir, nsName);
}
string content = string.Empty;
foreach (var dir in dirs)
{
var files = Directory.GetFiles(dir, "*.cs").ToList();
files.ForEach(f => File.WriteAllText(f, File.ReadAllText(f).Replace("\r\n", "\n")));
if (files.Count > 0 && string.IsNullOrEmpty(content))
{
content = File.ReadAllText(files[0]);
}
}
return content;
}
/// <summary>
/// 表前缀与命名空间的映射关系
/// </summary>
/// <returns></returns>
private Dictionary<string, string> GetNsMapper()
{
Dictionary<string, string> nsMapper = new()
{
{"bas_", "Tnb.BasicData.Entities" },
{"prd_", "Tnb.ProductionMgr.Entities" },
{"wms_", "Tnb.WarehouseMgr.Entities" },
{"eqp_", "Tnb.EquipMgr.Entities" },
{"tool_", "Tnb.EquipMgr.Entities" },
{"qc_", "Tnb.QcMgr.Entities" },
};
return nsMapper;
}
/// <summary>
/// 生成实体类配置
/// </summary>
@@ -713,5 +619,45 @@ public class DataBaseService : IDynamicApiController, ITransient
return db;
}
private List<DbEntityInfo> GetDbEntities(ISqlSugarClient sugar, string? tbName = null)
{
List<DbEntityInfo> entities = new();
Dictionary<string, string> nsMapper = new()
{
{"bas_", "Tnb.BasicData.Entities" },
{"prd_", "Tnb.ProductionMgr.Entities" },
{"wms_", "Tnb.WarehouseMgr.Entities" },
{"eqp_", "Tnb.EquipMgr.Entities" },
{"tool_", "Tnb.EquipMgr.Entities" },
{"qc_", "Tnb.QcMgr.Entities" },
};
var allTables = sugar.DbMaintenance.GetTableInfoList().WhereIF(!string.IsNullOrEmpty(tbName), t=>t.Name == tbName);
foreach (var tbl in allTables)
{
var prefix = tbl.Name.Split('_')[0] + "_";
if (!nsMapper.ContainsKey(prefix)) continue;
var entityName = string.Join("", tbl.Name.Split('_').Select(a => a.ToPascalCase()));
//sugar.MappingTables.Add(entityName, tbl.Name);
DbEntityInfo model = new() { tableName = tbl.Name, descrip = tbl.Description, clsName = entityName, nsName = nsMapper[prefix] };
foreach (var field in sugar.DbMaintenance.GetColumnInfosByTableName(tbl.Name))
{
DbEntityPropInfo col = field.Adapt<DbEntityPropInfo>();
col.csType = sugar.Ado.DbBind.GetPropertyTypeName(field.DataType);
col.propName = field.DbColumnName;
model.columns.Add(col);
}
var primaryKey = model.columns.FirstOrDefault(a => a.primaryKey);
if (primaryKey != null)
{
model.pkType = primaryKey.csType;
model.pkName = primaryKey.propName;
}
if (model.pkName == "id") model.ignoreCols.Add(model.pkName);
entities.Add(model);
}
return entities;
}
#endregion
}