重新生成实体类
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user