使用razor模板生成实体文件
This commit is contained in:
@@ -21,6 +21,7 @@ using JNPF.Systems.Entitys.Dto.Database;
|
||||
using JNPF.Systems.Entitys.Model.DataBase;
|
||||
using JNPF.Systems.Entitys.System;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using JNPF.ViewEngine;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
@@ -51,6 +52,12 @@ public class DataBaseService : IDynamicApiController, ITransient
|
||||
/// </summary>
|
||||
private readonly IDbLinkService _dbLinkService;
|
||||
|
||||
/// <summary>
|
||||
/// 视图引擎.
|
||||
/// </summary>
|
||||
private readonly IViewEngine _viewEngine;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 文件服务.
|
||||
/// </summary>
|
||||
@@ -74,13 +81,15 @@ public class DataBaseService : IDynamicApiController, ITransient
|
||||
IDbLinkService dbLinkService,
|
||||
IFileManager fileManager,
|
||||
IDataBaseManager dataBaseManager,
|
||||
IUserManager userManager)
|
||||
IUserManager userManager,
|
||||
IViewEngine viewEngine)
|
||||
{
|
||||
_repository = repository;
|
||||
_dbLinkService = dbLinkService;
|
||||
_fileManager = fileManager;
|
||||
_dataBaseManager = dataBaseManager;
|
||||
_userManager = userManager;
|
||||
_viewEngine = viewEngine;
|
||||
}
|
||||
|
||||
#region GET
|
||||
@@ -386,17 +395,47 @@ public class DataBaseService : IDynamicApiController, ITransient
|
||||
var link = await _dbLinkService.GetInfo(linkId);
|
||||
sugarClient = _dataBaseManager.ChangeDataBase(link);
|
||||
}
|
||||
foreach (var item in sugarClient.DbMaintenance.GetTableInfoList().Where(t => t.Name == input.TableName))
|
||||
{
|
||||
var entityName = string.Join("", input.TableName.Split('_').Select(a => a.ToPascalCase()));
|
||||
sugarClient.MappingTables.Add(entityName, item.Name);
|
||||
//foreach (var col in sugarClient.DbMaintenance.GetColumnInfosByTableName(item.Name))
|
||||
//{
|
||||
// //var colName = CustomFormatName(col.DbColumnName);
|
||||
// sugarClient.MappingColumns.Add(col.DbColumnName /*类的属性首字母大写*/, col.DbColumnName, entityName);
|
||||
//}
|
||||
}
|
||||
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);
|
||||
foreach (var item in entities)
|
||||
{
|
||||
var tResult = _viewEngine.RunCompileFromCached(tContent, 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;
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -664,8 +703,8 @@ public class DataBaseService : IDynamicApiController, ITransient
|
||||
var txt = tpl.Replace("{PropertyType}", type).Replace("{PropertyName}", col.DbColumnName).Replace("{SugarColumn}", sugarColumnStr);
|
||||
if (col.DbColumnName == "id")
|
||||
{
|
||||
if(type == "string") txt = txt.TrimEnd('\n', '\r') + " = SnowflakeIdHelper.NextId();\r\n";
|
||||
else if(type == "long") txt = txt.TrimEnd('\n', '\r') + " = YitIdHelper.NextId();\r\n";
|
||||
if (type == "string") txt = txt.TrimEnd('\n', '\r') + " = SnowflakeIdHelper.NextId();\r\n";
|
||||
else if (type == "long") txt = txt.TrimEnd('\n', '\r') + " = YitIdHelper.NextId();\r\n";
|
||||
}
|
||||
else if (type == "string") txt = txt.TrimEnd('\n', '\r') + " = string.Empty;\r\n";
|
||||
return txt;
|
||||
|
||||
Reference in New Issue
Block a user