You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

582 lines
21 KiB
C#

using SqlSugar;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace EntrustSettle.Common.Seed
{
public class FrameSeed
{
/// <summary>
/// 生成Controller层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <param name="isMuti"></param>
/// <returns></returns>
public static bool CreateControllers(SqlSugarScope sqlSugarClient, string ConnId = null, bool isMuti = false, string[] tableNames = null)
{
Create_Controller_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.Api.Controllers", "EntrustSettle.Api.Controllers", tableNames, "", isMuti);
return true;
}
/// <summary>
/// 生成Model层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <param name="isMuti"></param>
/// <returns></returns>
public static bool CreateModels(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
{
Create_Model_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.Model", "EntrustSettle.Model.Models", tableNames, "", isMuti);
return true;
}
/// <summary>
/// 生成IRepository层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="isMuti"></param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <returns></returns>
public static bool CreateIRepositorys(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
{
Create_IRepository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.IRepository", "EntrustSettle.IRepository", tableNames, "", isMuti);
return true;
}
/// <summary>
/// 生成 IService 层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="isMuti"></param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <returns></returns>
public static bool CreateIServices(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
{
Create_IServices_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.IServices", "EntrustSettle.IServices", tableNames, "", isMuti);
return true;
}
/// <summary>
/// 生成 Repository 层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="isMuti"></param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <returns></returns>
public static bool CreateRepository(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
{
Create_Repository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.Repository", "EntrustSettle.Repository", tableNames, "", isMuti);
return true;
}
/// <summary>
/// 生成 Service 层
/// </summary>
/// <param name="sqlSugarClient">sqlsugar实例</param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="isMuti"></param>
/// <param name="tableNames">数据库表名数组,默认空,生成所有表</param>
/// <returns></returns>
public static bool CreateServices(SqlSugarScope sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null)
{
Create_Services_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\EntrustSettle.Services", "EntrustSettle.Services", tableNames, "", isMuti);
return true;
}
#region 根据数据库表生产Controller层
/// <summary>
/// 功能描述:根据数据库表生产Controller层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
/// <param name="blnSerializable">是否序列化</param>
private static void Create_Controller_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false,
bool blnSerializable = false)
{
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using EntrustSettle.IServices;
using EntrustSettle.Model;
using EntrustSettle.Model.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace " + strNameSpace + @"
{
[Route(""api/[controller]/[action]"")]
[ApiController]
[Authorize(Permissions.Name)]
public class {ClassName}Controller : ControllerBase
{
/// <summary>
/// 服务器接口,因为是模板生成,所以首字母是大写的,自己可以重构下
/// </summary>
private readonly I{ClassName}Services _{ClassName}Services;
public {ClassName}Controller(I{ClassName}Services {ClassName}Services)
{
_{ClassName}Services = {ClassName}Services;
}
[HttpGet]
public async Task<MessageModel<PageModel<{ClassName}>>> Get(int page = 1, string key = """",int intPageSize = 50)
{
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
{
key = """";
}
Expression<Func<{ClassName}, bool>> whereExpression = a => true;
return new MessageModel<PageModel<{ClassName}>>()
{
msg = """",
success = true,
response = await _{ClassName}Services.QueryPage(whereExpression, page, intPageSize)
};
}
[HttpGet(""{id}"")]
public async Task<MessageModel<{ClassName}>> Get(string id)
{
return new MessageModel<{ClassName}>()
{
msg = """",
success = true,
response = await _{ClassName}Services.QueryById(id)
};
}
[HttpPost]
public async Task<MessageModel<string>> Post([FromBody] {ClassName} request)
{
var data = new MessageModel<string>();
var id = await _{ClassName}Services.Add(request);
data.success = id > 0;
if (data.success)
{
data.response = id.ObjToString();
data.msg = """";
}
return data;
}
[HttpPut]
public async Task<MessageModel<string>> Put([FromBody] {ClassName} request)
{
var data = new MessageModel<string>();
data.success = await _{ClassName}Services.Update(request);
if (data.success)
{
data.msg = """";
data.response = request?.id.ObjToString();
}
return data;
}
[HttpDelete]
public async Task<MessageModel<string>> Delete(int id)
{
var data = new MessageModel<string>();
var model = await _{ClassName}Services.QueryById(id);
model.IsDeleted = true;
data.success = await _departmentServices.Update(model);
if (data.success)
{
data.msg = """";
data.response = model?.Id.ObjToString();
}
return data;
}
}
}")
.ToClassStringList(strNameSpace);
Dictionary<string, string> newdic = new Dictionary<string, string>();
//循环处理 首字母小写 并插入新的 Dictionary
foreach (KeyValuePair<string, string> item in ls)
{
string newkey = "_" + item.Key.First().ToString().ToLower() + item.Key.Substring(1);
string newvalue = item.Value.Replace("_" + item.Key, newkey);
newdic.Add(item.Key, newvalue);
}
CreateFilesByClassStringList(newdic, strPath, "{0}Controller");
}
#endregion
#region 根据数据库表生产Model层
/// <summary>
/// 功能描述:根据数据库表生产Model层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
/// <param name="blnSerializable">是否序列化</param>
private static void Create_Model_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false,
bool blnSerializable = false)
{
//多库文件分离
if (isMuti)
{
strPath = strPath + @"\Models\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
}
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"{using}
namespace " + strNameSpace + @"
{
{ClassDescription}
[SugarTable( ""{ClassName}"", """ + ConnId + @""")]" + (blnSerializable ? "\n [Serializable]" : "") + @"
public class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @"
{
public {ClassName}()
{
}
{PropertyName}
}
}")
//.SettingPropertyDescriptionTemplate(p => p = string.Empty)
.SettingPropertyTemplate(p => p =
@"{SugarColumn}
public {PropertyType} {PropertyName} { get; set; }")
//.SettingConstructorTemplate(p => p = " this._{PropertyName} ={DefaultValue};")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}");
}
#endregion
#region 根据数据库表生产IRepository层
/// <summary>
/// 功能描述:根据数据库表生产IRepository层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
private static void Create_IRepository_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false
)
{
//多库文件分离
if (isMuti)
{
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
}
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using EntrustSettle.IRepository.Base;
using EntrustSettle.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
namespace " + strNameSpace + @"
{
/// <summary>
/// I{ClassName}Repository
/// </summary>
public interface I{ClassName}Repository : IBaseRepository<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "I{0}Repository");
}
#endregion
#region 根据数据库表生产IServices层
/// <summary>
/// 功能描述:根据数据库表生产IServices层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
private static void Create_IServices_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false)
{
//多库文件分离
if (isMuti)
{
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
}
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using EntrustSettle.IServices.BASE;
using EntrustSettle.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
namespace " + strNameSpace + @"
{
/// <summary>
/// I{ClassName}Services
/// </summary>
public interface I{ClassName}Services :IBaseServices<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "I{0}Services");
}
#endregion
#region 根据数据库表生产 Repository 层
/// <summary>
/// 功能描述:根据数据库表生产 Repository 层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
private static void Create_Repository_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false)
{
//多库文件分离
if (isMuti)
{
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
}
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using EntrustSettle.IRepository" + (isMuti ? "." + ConnId + "" : "") + @";
using EntrustSettle.IRepository.UnitOfWork;
using EntrustSettle.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
using EntrustSettle.Repository.Base;
namespace " + strNameSpace + @"
{
/// <summary>
/// {ClassName}Repository
/// </summary>
public class {ClassName}Repository : BaseRepository<{ClassName}>, I{ClassName}Repository" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
public {ClassName}Repository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}Repository");
}
#endregion
#region 根据数据库表生产 Services 层
/// <summary>
/// 功能描述:根据数据库表生产 Services 层
/// 作  者:EntrustSettle
/// </summary>
/// <param name="sqlSugarClient"></param>
/// <param name="ConnId">数据库链接ID</param>
/// <param name="strPath">实体类存放路径</param>
/// <param name="strNameSpace">命名空间</param>
/// <param name="lstTableNames">生产指定的表</param>
/// <param name="strInterface">实现接口</param>
/// <param name="isMuti"></param>
private static void Create_Services_ClassFileByDBTalbe(
SqlSugarScope sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool isMuti = false)
{
//多库文件分离
if (isMuti)
{
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
}
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"
using EntrustSettle.IServices" + (isMuti ? "." + ConnId + "" : "") + @";
using EntrustSettle.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @";
using EntrustSettle.Services.BASE;
using EntrustSettle.IRepository.Base;
namespace " + strNameSpace + @"
{
public class {ClassName}Services : BaseServices<{ClassName}>, I{ClassName}Services" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
private readonly IBaseRepository<{ClassName}> _dal;
public {ClassName}Services(IBaseRepository<{ClassName}> dal)
{
this._dal = dal;
base.BaseDal = dal;
}
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}Services");
}
#endregion
#region 根据模板内容批量生成文件
/// <summary>
/// 根据模板内容批量生成文件
/// </summary>
/// <param name="ls">类文件字符串list</param>
/// <param name="strPath">生成路径</param>
/// <param name="fileNameTp">文件名格式模板</param>
private static void CreateFilesByClassStringList(Dictionary<string, string> ls, string strPath, string fileNameTp)
{
foreach (var item in ls)
{
var fileName = $"{string.Format(fileNameTp, item.Key)}.cs";
var fileFullPath = Path.Combine(strPath, fileName);
if (!Directory.Exists(strPath))
{
Directory.CreateDirectory(strPath);
}
File.WriteAllText(fileFullPath, item.Value, Encoding.UTF8);
}
}
#endregion
}
}