升级替换部分代码生成功能模板引擎为Jnt

This commit is contained in:
不做码农 2021-11-30 21:33:34 +08:00
parent 33a12c0c53
commit c9ef3ad85c
20 changed files with 310 additions and 418 deletions

View File

@ -148,11 +148,11 @@ namespace ZR.Admin.WebApi.Controllers
BaseNameSpace = "ZR.",//导入默认命名空间前缀 BaseNameSpace = "ZR.",//导入默认命名空间前缀
ModuleName = "business",//导入默认模块名 ModuleName = "business",//导入默认模块名
ClassName = CodeGeneratorTool.GetClassName(tableName), ClassName = CodeGeneratorTool.GetClassName(tableName),
BusinessName = CodeGeneratorTool.GetClassName(tableName), BusinessName = CodeGeneratorTool.GetBusinessName(tableName),
FunctionAuthor = ConfigUtils.Instance.GetConfig(GenConstants.Gen_author), FunctionAuthor = ConfigUtils.Instance.GetConfig(GenConstants.Gen_author),
FunctionName = string.IsNullOrEmpty(tabInfo.Description) ? tableName : tabInfo.Description,
TableName = tableName, TableName = tableName,
TableComment = string.IsNullOrEmpty(tabInfo.Description) ? tableName : tabInfo.Description, TableComment = string.IsNullOrEmpty(tabInfo.Description) ? tableName : tabInfo.Description,
FunctionName = string.IsNullOrEmpty(tabInfo.Description) ? tableName : tabInfo.Description,
Create_by = userName, Create_by = userName,
}; };
genTable.TableId = GenTableService.ImportGenTable(genTable); genTable.TableId = GenTableService.ImportGenTable(genTable);
@ -223,9 +223,8 @@ namespace ZR.Admin.WebApi.Controllers
dto.ZipPath = Path.Combine(WebHostEnvironment.WebRootPath, "Generatecode"); dto.ZipPath = Path.Combine(WebHostEnvironment.WebRootPath, "Generatecode");
dto.GenCodePath = Path.Combine(dto.ZipPath, DateTime.Now.ToString("yyyyMMdd")); dto.GenCodePath = Path.Combine(dto.ZipPath, DateTime.Now.ToString("yyyyMMdd"));
dto.IsPreview = 1; dto.IsPreview = 1;
dto.GenCodeFiles = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
//生成代码 //生成代码
CodeGeneratorTool.Generate(genTableInfo, dto); CodeGeneratorTool.Generate(dto);
return SUCCESS(dto.GenCodes); return SUCCESS(dto.GenCodes);
} }
@ -252,7 +251,7 @@ namespace ZR.Admin.WebApi.Controllers
dto.GenTable = genTableInfo; dto.GenTable = genTableInfo;
//生成代码 //生成代码
CodeGeneratorTool.Generate(genTableInfo, dto); CodeGeneratorTool.Generate(dto);
//下载文件 //下载文件
FileHelper.ZipGenCode(dto); FileHelper.ZipGenCode(dto);

View File

@ -4,7 +4,7 @@
"commandName": "Project", "commandName": "Project",
"launchBrowser": false, "launchBrowser": false,
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "" "ASPNETCORE_ENVIRONMENT": "Production"
}, },
"applicationUrl": "http://localhost:8888" "applicationUrl": "http://localhost:8888"
} }

View File

@ -86,13 +86,6 @@ namespace ZR.Admin.WebApi
} }
}); });
//jnt模板引擎全局变量
Engine.Configure((options) =>
{
options.Data.Set("author", Configuration["gen:author"]);
options.Data.Set("time", DateTime.Now.ToString("yyyy-MM-dd"));
//...其它数据
});
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

View File

@ -15,11 +15,12 @@
<ItemGroup> <ItemGroup>
<Compile Remove="Filters\GlobalExceptionFilter.cs" /> <Compile Remove="Filters\GlobalExceptionFilter.cs" />
<Compile Remove="Middleware\RequestIPMiddleware.cs" /> <Compile Remove="Middleware\RequestIPMiddleware.cs" />
<Compile Remove="Template\Controller.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Remove="Template\Controller.tt" /> <Content Remove="wwwroot\CodeGenTemplate\InputDtoTemplate.txt" />
<Content Remove="wwwroot\CodeGenTemplate\ModelTemplate.txt" />
<Content Remove="wwwroot\CodeGenTemplate\RepositoryTemplate.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -60,33 +61,6 @@
<None Update="ip2region.db"> <None Update="ip2region.db">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<None Update="Template\ControllersTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\InputDtoTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\IServiceTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\ModelTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\RepositoryTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\ServiceTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\VueJsTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\VueTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ZRAdmin.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -95,16 +69,6 @@
<Folder Include="wwwroot\Generatecode\" /> <Folder Include="wwwroot\Generatecode\" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Resource Include="Template\RepositoryTemplate.txt" />
<Resource Include="Template\ServiceTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
<Resource Include="Template\VueJsTemplate.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
</ItemGroup>
<ItemGroup> <ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" /> <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup> </ItemGroup>

View File

@ -1,15 +1,15 @@
using System; using System;
using {ModelsNamespace}.Models; using ${options.ModelsNamespace}.Models;
namespace {IServicsNamespace}.Business namespace ${options.IServicsNamespace}.Business
{ {
/// <summary> /// <summary>
/// {FunctionName}service接口 /// ${genTable.FunctionName}service接口
/// ///
/// @author {Author} /// @author ${replaceDto.Author}
/// @date {DateTime} /// @date ${replaceDto.AddTime}
/// </summary> /// </summary>
public interface I{ModelTypeName}Service: IBaseService<{ModelTypeName}> public interface I${replaceDto.ModelTypeName}Service: IBaseService<${replaceDto.ModelTypeName}>
{ {
} }
} }

View File

@ -1,25 +1,25 @@
-- 菜单 -- 菜单
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, remark) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, remark)
VALUES ('{FunctionName}', {ParentId}, 1, '{ModuleName}/{ModelTypeName}', '{ModuleName}/{ViewsFileName}/index', 0, 0, 'C', '0', '0', '{Permission}:list', 'icon1', '', sysdate(), '{FunctionName}菜单'); VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${replaceDto.ModelTypeName}', '${genTable.ModuleName}/${replaceDto.ViewsFileName}/index', 0, 0, 'C', '0', '0', '${replaceDto.permission}:list', 'icon1', '', sysdate(), '${genTable.functionName}菜单');
-- 按钮父菜单id -- 按钮父菜单id
SELECT @menuId := LAST_INSERT_ID(); SELECT @menuId := LAST_INSERT_ID();
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time)
VALUES ('{FunctionName}查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:query', '', sysdate()); VALUES ('${genTable.functionName}查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:query', '', sysdate());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time)
VALUES ('{FunctionName}新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:add', '', sysdate()); VALUES ('${genTable.functionName}新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:add', '', sysdate());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time)
VALUES ('{FunctionName}删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:delete', '', sysdate()); VALUES ('${genTable.functionName}删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:delete', '', sysdate());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time)
VALUES ('{FunctionName}修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:update', '', sysdate()); VALUES ('${genTable.functionName}修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:update', '', sysdate());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time)
VALUES ('{FunctionName}导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:export', '', sysdate()); VALUES ('${genTable.functionName}导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:export', '', sysdate());
SELECT * FROM sys_menu WHERE parentId = @menuId; SELECT * FROM sys_menu WHERE parentId = @menuId;
SELECT * FROM sys_menu WHERE menuId = @menuId; SELECT * FROM sys_menu WHERE menuId = @menuId;

View File

@ -1,23 +1,23 @@
using Infrastructure; using Infrastructure;
using Infrastructure.Attribute; using Infrastructure.Attribute;
using {ModelsNamespace}.Models; using ${options.ModelsNamespace}.Models;
using {IRepositoriesNamespace}; using ${options.IRepositoriesNamespace};
namespace {ServicesNamespace}.Business namespace ${options.ServicesNamespace}.Business
{ {
/// <summary> /// <summary>
/// {FunctionName}Service业务层处理 /// ${genTable.FunctionName}Service业务层处理
/// ///
/// @author {Author} /// @author ${replaceDto.Author}
/// @date {DateTime} /// @date ${replaceDto.AddTime}
/// </summary> /// </summary>
[AppService(ServiceType = typeof(I{ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)] [AppService(ServiceType = typeof(I${replaceDto.ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)]
public class {ModelTypeName}Service : BaseService<{ModelTypeName}>, I{ModelTypeName}Service public class ${replaceDto.ModelTypeName}Service : BaseService<${replaceDto.ModelTypeName}>, I${replaceDto.ModelTypeName}Service
{ {
private readonly {ModelTypeName}Repository _{ModelTypeName}repository; private readonly ${replaceDto.ModelTypeName}Repository _${replaceDto.ModelTypeName}repository;
public {ModelTypeName}Service({ModelTypeName}Repository repository) : base(repository) public ${replaceDto.ModelTypeName}Service(${replaceDto.ModelTypeName}Repository repository) : base(repository)
{ {
_{ModelTypeName}repository = repository; _${replaceDto.ModelTypeName}repository = repository;
} }
#region 业务逻辑代码 #region 业务逻辑代码

View File

@ -1,25 +1,25 @@
-- {FunctionName}菜单 -- ${genTable.functionName}菜单
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time, remark) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time, remark)
VALUES ('{FunctionName}', {ParentId}, 1, '{ModuleName}/{ModelTypeName}', '{ModuleName}/{ViewsFileName}/index', 0, 0, 'C', '0', '0', '{Permission}:list', 'icon1', GETDATE(), '{FunctionName}'); VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${replaceDto.ModelTypeName}', '${genTable.ModuleName}/${replaceDto.ViewsFileName}/index', 0, 0, 'C', '0', '0', '${replaceDto.permission}:list', 'icon1', GETDATE(), '${genTable.functionName}');
-- 按钮父菜单id -- 按钮父菜单id
declare @menuId int = @@identity declare @menuId int = @@identity
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('{FunctionName}查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:query', '', '', GETDATE()); VALUES ('${genTable.functionName}查询', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:query', '', '', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('{FunctionName}新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:add', '', '', GETDATE()); VALUES ('${genTable.functionName}新增', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:add', '', '', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('{FunctionName}删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:delete', '', '', GETDATE()); VALUES ('${genTable.functionName}删除', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:delete', '', '', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('{FunctionName}修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:update', '', '', GETDATE()); VALUES ('${genTable.functionName}修改', @menuId, 4, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:update', '', '', GETDATE());
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time) INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time)
VALUES ('{FunctionName}导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:export', '', '', GETDATE()); VALUES ('${genTable.functionName}导出', @menuId, 5, '#', NULL, 0, 0, 'F', '0', '0', '${replaceDto.permission}:export', '', '', GETDATE());
SELECT * FROM sys_menu WHERE parentId = @menuId; SELECT * FROM sys_menu WHERE parentId = @menuId;
SELECT * FROM sys_menu WHERE menuId = @menuId; SELECT * FROM sys_menu WHERE menuId = @menuId;

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using ${options.ModelsNamespace}.Dto;
using ${options.ModelsNamespace}.Models;
namespace ${options.DtosNamespace}.Dto
{
/// <summary>
/// ${genTable.FunctionName}输入对象
/// </summary>
public class ${replaceDto.ModelTypeName}Dto
{
$foreach(item in genTable.Columns)
$if((item.IsInsert || item.IsEdit || item.IsPk || item.IsIncrement))
public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; }
$end
${end}
}
/// <summary>
/// ${genTable.FunctionName}查询对象
/// </summary>
public class ${replaceDto.ModelTypeName}QueryDto : PagerInfo
{
$foreach(item in genTable.Columns)
$if(item.IsQuery)
public $item.CsharpType $item.CsharpField { get; set; }
$end
${end}
public DateTime? BeginTime { get; set; }
public DateTime? EndTime { get; set; }
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using SqlSugar;
namespace ${options.ModelsNamespace}.Models
{
/// <summary>
/// ${genTable.FunctionName},数据实体对象
///
/// @author ${replaceDto.Author}
/// @date ${replaceDto.AddTime}
/// </summary>
[SugarTable("${replaceDto.TableName}")]
public class ${replaceDto.ModelTypeName}
{
$foreach(item in genTable.Columns)
/// <summary>
/// 描述 : ${item.ColumnComment}
/// 空值 :$if(item.IsRequired == "True") false $else true $end
/// </summary>
$if(item.IsPk || item.IsIncrement)
[SqlSugar.SugarColumn(IsPrimaryKey = ${item.IsPk.ToString().ToLower()}, IsIdentity = ${item.IsIncrement.ToString().ToLower()})]
$end
public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; }
${end}
}
}

View File

@ -0,0 +1,20 @@
using System;
using Infrastructure.Attribute;
using ${options.RepositoriesNamespace}.System;
using ${options.ModelsNamespace}.Models;
namespace ${options.RepositoriesNamespace}
{
/// <summary>
/// ${genTable.FunctionName}仓储
///
/// @author ${replaceDto.Author}
/// @date ${replaceDto.AddTime}
/// </summary>
[AppService(ServiceLifetime = LifeTime.Transient)]
public class ${replaceDto.ModelTypeName}Repository : BaseRepository<${replaceDto.ModelTypeName}>
{
#region 业务逻辑代码
#endregion
}
}

View File

@ -1,66 +1,66 @@
import request from '@/utils/request' import request from '@/utils/request'
/** /**
* {FunctionName}分页查询 * ${genTable.functionName}分页查询
* @param {查询条件} data * @param {查询条件} data
*/ */
export function list{ModelTypeName}(query) { export function list${replaceDto.ModelTypeName}(query) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}/list', url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/list',
method: 'get', method: 'get',
params: query, params: query,
}) })
} }
/** /**
* 新增{FunctionName} * 新增${genTable.functionName}
* @param data * @param data
*/ */
export function add{ModelTypeName}(data) { export function add${replaceDto.ModelTypeName}(data) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}', url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}',
method: 'post', method: 'post',
data: data, data: data,
}) })
} }
/** /**
* 修改{FunctionName} * 修改${genTable.functionName}
* @param data * @param data
*/ */
export function update{ModelTypeName}(data) { export function update${replaceDto.ModelTypeName}(data) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}', url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}',
method: 'PUT', method: 'PUT',
data: data, data: data,
}) })
} }
/** /**
* 获取{FunctionName}详情 * 获取${genTable.functionName}详情
* @param {Id} {FunctionName}Id * @param {Id}
*/ */
export function get{ModelTypeName}(id) { export function get${replaceDto.ModelTypeName}(id) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}/' + id, url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/' + id,
method: 'get' method: 'get'
}) })
} }
/** /**
* 删除 * 删除${genTable.functionName}
* @param {主键} pid * @param {主键} pid
*/ */
export function del{ModelTypeName}(pid) { export function del${replaceDto.ModelTypeName}(pid) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}/' + pid, url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/' + pid,
method: 'delete' method: 'delete'
}) })
} }
// 导出 // 导出${genTable.functionName}
export function export{ModelTypeName}(query) { export function export${replaceDto.ModelTypeName}(query) {
return request({ return request({
url: '{ModuleName}/{ModelTypeName}/export', url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/export',
method: 'get', method: 'get',
params: query params: query
}) })

View File

@ -11,44 +11,6 @@ namespace ZR.CodeGenerator
/// </summary> /// </summary>
public class CodeGenerateTemplate public class CodeGenerateTemplate
{ {
/// <summary>
/// 表Model属性
/// </summary>
/// <param name="tbColumn"></param>
/// <returns></returns>
public static string GetModelTemplate(GenTableColumn tbColumn)
{
StringBuilder sbModel = new StringBuilder();
sbModel.AppendLine(" /// <summary>");
sbModel.AppendLine($" /// 描述 :{tbColumn.ColumnComment}");
sbModel.AppendLine($" /// 空值 :{!tbColumn.IsRequired}");
sbModel.AppendLine(" /// </summary>");
if (tbColumn.IsPk || tbColumn.IsIncrement)
{
sbModel.AppendLine($" [SqlSugar.SugarColumn(IsPrimaryKey = {tbColumn.IsPk.ToString().ToLower()}, IsIdentity = {tbColumn.IsIncrement.ToString().ToLower()})]");
}
sbModel.AppendLine($" public {tbColumn.CsharpType}{(CodeGeneratorTool.GetModelRequired(tbColumn))} {tbColumn.CsharpField} {{ get; set; }}");
return sbModel.ToString();
}
/// <summary>
/// 增改Dto
/// </summary>
/// <param name="tbColumn"></param>
/// <returns></returns>
public static string GetDtoProperty(GenTableColumn tbColumn)
{
string InputDtoContent = "";
if (GenConstants.inputDtoNoField.Any(f => f.ToLower().Contains(tbColumn.CsharpField.ToLower())))
{
return InputDtoContent;
}
else if (tbColumn.IsInsert || tbColumn.IsEdit || tbColumn.IsPk || tbColumn.IsIncrement)
{
InputDtoContent += $" public {tbColumn.CsharpType}{CodeGeneratorTool.GetModelRequired(tbColumn)} {tbColumn.CsharpField} {{ get; set; }}\r\n";
}
return InputDtoContent;
}
/// <summary> /// <summary>
/// 查询Dto属性 /// 查询Dto属性
/// </summary> /// </summary>
@ -57,10 +19,8 @@ namespace ZR.CodeGenerator
/// <returns></returns> /// <returns></returns>
public static void GetQueryDtoProperty(GenTableColumn tbColumn, ReplaceDto replaceDto) public static void GetQueryDtoProperty(GenTableColumn tbColumn, ReplaceDto replaceDto)
{ {
string QueryDtoContent = "";
if (tbColumn.IsQuery) if (tbColumn.IsQuery)
{ {
QueryDtoContent += $" public {tbColumn.CsharpType} {tbColumn.CsharpField} {{ get; set; }}\r\n";
//字符串类型表达式 //字符串类型表达式
if (tbColumn.CsharpType == GenConstants.TYPE_STRING) if (tbColumn.CsharpType == GenConstants.TYPE_STRING)
{ {
@ -78,7 +38,6 @@ namespace ZR.CodeGenerator
replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.EndTime != null, it => it.{tbColumn.CsharpField} <= parm.EndTime);\n"; replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.EndTime != null, it => it.{tbColumn.CsharpField} <= parm.EndTime);\n";
} }
} }
replaceDto.QueryProperty += QueryDtoContent;
} }
#region vue #region vue

View File

@ -25,11 +25,10 @@ namespace ZR.CodeGenerator
/// <summary> /// <summary>
/// 代码生成器入口方法 /// 代码生成器入口方法
/// </summary> /// </summary>
/// <param name="dbTableInfo"></param>
/// <param name="dto"></param> /// <param name="dto"></param>
public static void Generate(GenTable dbTableInfo, GenerateDto dto) public static void Generate(GenerateDto dto)
{ {
_option.BaseNamespace = dbTableInfo.BaseNameSpace; _option.BaseNamespace = dto.GenTable.BaseNameSpace;
_option.DtosNamespace = _option.BaseNamespace + "Model"; _option.DtosNamespace = _option.BaseNamespace + "Model";
_option.ModelsNamespace = _option.BaseNamespace + "Model"; _option.ModelsNamespace = _option.BaseNamespace + "Model";
_option.RepositoriesNamespace = _option.BaseNamespace + "Repository"; _option.RepositoriesNamespace = _option.BaseNamespace + "Repository";
@ -38,31 +37,30 @@ namespace ZR.CodeGenerator
_option.ServicesNamespace = _option.BaseNamespace + "Service"; _option.ServicesNamespace = _option.BaseNamespace + "Service";
_option.ApiControllerNamespace = _option.BaseNamespace + "Admin.WebApi"; _option.ApiControllerNamespace = _option.BaseNamespace + "Admin.WebApi";
GenerateSingle(dbTableInfo?.Columns, dbTableInfo, dto); dto.GenOptions = _option;
GenerateSingle(dto);
} }
/// <summary> /// <summary>
/// 单表生成代码 /// 单表生成代码
/// </summary> /// </summary>
/// <param name="listField">表字段集合</param>
/// <param name="tableInfo">表信息</param>
/// <param name="dto"></param> /// <param name="dto"></param>
public static void GenerateSingle(List<GenTableColumn> listField, GenTable tableInfo, GenerateDto dto) public static void GenerateSingle(GenerateDto dto)
{ {
string PKName = "id"; string PKName = "id";
string PKType = "int"; string PKType = "int";
ReplaceDto replaceDto = new(); ReplaceDto replaceDto = new();
replaceDto.ModelTypeName = tableInfo.ClassName;//表名对应C# 实体类名 replaceDto.ModelTypeName = dto.GenTable.ClassName;//表名对应C# 实体类名
replaceDto.TableName = tableInfo.TableName;//表名 replaceDto.TableName = dto.GenTable.TableName;//表名
replaceDto.Permission = $"{tableInfo.ModuleName}:{tableInfo.ClassName.ToLower()}";//权限 replaceDto.Permission = $"{dto.GenTable.ModuleName}:{dto.GenTable.ClassName.ToLower()}";//权限
replaceDto.Author = dto.GenTable.FunctionAuthor;
replaceDto.ViewsFileName = FirstLowerCase(replaceDto.ModelTypeName); replaceDto.ViewsFileName = FirstLowerCase(replaceDto.ModelTypeName);
replaceDto.Author = tableInfo.FunctionAuthor;
StringBuilder sb1 = new StringBuilder(); StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder(); StringBuilder sb2 = new StringBuilder();
//循环表字段信息 //循环表字段信息
foreach (GenTableColumn dbFieldInfo in listField) foreach (GenTableColumn dbFieldInfo in dto.GenTable.Columns)
{ {
string columnName = dbFieldInfo.ColumnName; string columnName = dbFieldInfo.ColumnName;
@ -94,20 +92,14 @@ namespace ZR.CodeGenerator
sb2.AppendLine($" this.{FirstLowerCase(dbFieldInfo.CsharpField)}Options = response.data;"); sb2.AppendLine($" this.{FirstLowerCase(dbFieldInfo.CsharpField)}Options = response.data;");
sb2.AppendLine(" })"); sb2.AppendLine(" })");
} }
//引用组件 已弃用、改用前端全局注册
//if (dbFieldInfo.HtmlType == GenConstants.HTML_EDITOR)
//{
// replaceDto.VueComponent += "Editor,";
// replaceDto.VueComponentImport += "import Editor from '@/components/Editor';\n";
//}
CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo, replaceDto); CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo, replaceDto);
replaceDto.ModelProperty += CodeGenerateTemplate.GetModelTemplate(dbFieldInfo); //replaceDto.ModelProperty += CodeGenerateTemplate.GetModelTemplate(dbFieldInfo);
replaceDto.VueViewFormHtml += CodeGenerateTemplate.TplVueFormContent(dbFieldInfo); replaceDto.VueViewFormHtml += CodeGenerateTemplate.TplVueFormContent(dbFieldInfo);
CodeGenerateTemplate.TplVueJsMethod(dbFieldInfo, replaceDto); CodeGenerateTemplate.TplVueJsMethod(dbFieldInfo, replaceDto);
replaceDto.VueViewListHtml += CodeGenerateTemplate.TplTableColumn(dbFieldInfo); replaceDto.VueViewListHtml += CodeGenerateTemplate.TplTableColumn(dbFieldInfo);
replaceDto.VueViewEditFormRuleContent += CodeGenerateTemplate.TplFormRules(dbFieldInfo); replaceDto.VueViewEditFormRuleContent += CodeGenerateTemplate.TplFormRules(dbFieldInfo);
replaceDto.InputDtoProperty += CodeGenerateTemplate.GetDtoProperty(dbFieldInfo); //replaceDto.InputDtoProperty += CodeGenerateTemplate.GetDtoProperty(dbFieldInfo);
replaceDto.VueQueryFormHtml += CodeGenerateTemplate.TplQueryFormHtml(dbFieldInfo); replaceDto.VueQueryFormHtml += CodeGenerateTemplate.TplQueryFormHtml(dbFieldInfo);
} }
replaceDto.VueDataContent = sb1.ToString(); replaceDto.VueDataContent = sb1.ToString();
@ -117,44 +109,20 @@ namespace ZR.CodeGenerator
replaceDto.PKName = PKName; replaceDto.PKName = PKName;
replaceDto.PKType = PKType; replaceDto.PKType = PKType;
InitJntTemplate(dto, replaceDto);
if (dto.GenCodeFiles.Contains(1))
{
GenerateModels(replaceDto, dto); GenerateModels(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(2))
{
GenerateInputDto(replaceDto, dto); GenerateInputDto(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(3))
{
GenerateRepository(replaceDto, dto); GenerateRepository(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(4))
{
GenerateIService(replaceDto, dto); GenerateIService(replaceDto, dto);
GenerateService(replaceDto, dto); GenerateService(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(5))
{
GenerateControllers(replaceDto, dto); GenerateControllers(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(6))
{
GenerateVueViews(replaceDto, dto); GenerateVueViews(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(7))
{
GenerateVueJs(replaceDto, dto); GenerateVueJs(replaceDto, dto);
}
if (dto.GenCodeFiles.Contains(8))
{
GenerateSql(replaceDto, dto); GenerateSql(replaceDto, dto);
}
if (dto.IsPreview == 1) if (dto.IsPreview == 1) return;
{
return;
}
foreach (var item in dto.GenCodes) foreach (var item in dto.GenCodes)
{ {
FileHelper.WriteAndSave(item.Path, item.Content); FileHelper.WriteAndSave(item.Path, item.Content);
@ -173,20 +141,10 @@ namespace ZR.CodeGenerator
// ../ZR.Model/Models/User.cs // ../ZR.Model/Models/User.cs
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Models", replaceDto.ModelTypeName + ".cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Models", replaceDto.ModelTypeName + ".cs");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("TplModel.txt");
return; var result = tpl.Render();
var content = FileHelper.ReadTemplate("ModelTemplate.txt") generateDto.GenCodes.Add(new GenCode(1, "实体类", fullPath, result));
.Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{FunctionName}", generateDto.GenTable.FunctionName)
.Replace("{KeyTypeName}", replaceDto.PKName)
.Replace("{PropertyName}", replaceDto.ModelProperty)
.Replace("{TableName}", replaceDto.TableName)
.Replace("{Author}", replaceDto.Author)
.Replace("{DateTime}", replaceDto.AddTime);
generateDto.GenCodes.Add(new GenCode(1, "实体类", fullPath, content));
} }
/// <summary> /// <summary>
@ -198,18 +156,7 @@ namespace ZR.CodeGenerator
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Dto", $"{replaceDto.ModelTypeName}Dto.cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Dto", $"{replaceDto.ModelTypeName}Dto.cs");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("TplDto.txt");
return;
var tpl = FileHelper.ReadJtTemplate("InputDtoTemplate.txt");
tpl.Set("DtosNamespace", _option.DtosNamespace);
tpl.Set("ModelsNamespace", _option.ModelsNamespace);
tpl.Set("FunctionName", generateDto.GenTable.FunctionName);
tpl.Set("PropertyName", replaceDto.InputDtoProperty);
tpl.Set("QueryProperty", replaceDto.QueryProperty);
tpl.Set("ModelTypeName", replaceDto.ModelTypeName);
tpl.Set("Author", replaceDto.Author);
tpl.Set("DateTime", replaceDto.AddTime);
var result = tpl.Render(); var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(2, "数据传输实体类", fullPath, result)); generateDto.GenCodes.Add(new GenCode(2, "数据传输实体类", fullPath, result));
@ -227,19 +174,10 @@ namespace ZR.CodeGenerator
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, _option.RepositoriesNamespace, "Repositories", $"{replaceDto.ModelTypeName}Repository.cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.RepositoriesNamespace, "Repositories", $"{replaceDto.ModelTypeName}Repository.cs");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("TplRepository.txt");
return;
var content = FileHelper.ReadTemplate("RepositoryTemplate.txt") var result = tpl.Render();
.Replace("{ModelsNamespace}", _option.ModelsNamespace) generateDto.GenCodes.Add(new GenCode(3, "仓储层", fullPath, result));
.Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{FunctionName}", generateDto.GenTable.FunctionName)
.Replace("{TableName}", replaceDto.TableName)
.Replace("{Author}", replaceDto.Author)
.Replace("{DateTime}", replaceDto.AddTime);
generateDto.GenCodes.Add(new GenCode(3, "仓储层", fullPath, content));
} }
#endregion #endregion
@ -254,19 +192,10 @@ namespace ZR.CodeGenerator
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, "Business", "IBusService", $"I{replaceDto.ModelTypeName}Service.cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, "Business", "IBusService", $"I{replaceDto.ModelTypeName}Service.cs");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("IServiceTemplate.txt");
return;
var content = FileHelper.ReadTemplate("IServiceTemplate.txt")
.Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{FunctionName}", generateDto.GenTable.FunctionName)
.Replace("{DtosNamespace}", _option.DtosNamespace)
.Replace("{IServicsNamespace}", _option.IServicsNamespace)
.Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{Author}", replaceDto.Author)
.Replace("{DateTime}", replaceDto.AddTime);
generateDto.GenCodes.Add(new GenCode(4, "接口层", fullPath, content)); var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(4, "接口层", fullPath, result));
} }
/// <summary> /// <summary>
@ -276,21 +205,10 @@ namespace ZR.CodeGenerator
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ServicesNamespace, "Business", $"{replaceDto.ModelTypeName}Service.cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.ServicesNamespace, "Business", $"{replaceDto.ModelTypeName}Service.cs");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("ServiceTemplate.txt");
return;
var content = FileHelper.ReadTemplate("ServiceTemplate.txt") var result = tpl.Render();
.Replace("{IRepositoriesNamespace}", _option.IRepositoriesNamespace) generateDto.GenCodes.Add(new GenCode(4, "服务层", fullPath, result));
.Replace("{DtosNamespace}", _option.DtosNamespace)
.Replace("{IServicsNamespace}", _option.IServicsNamespace)
.Replace("{FunctionName}", generateDto.GenTable.FunctionName)
.Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{ServicesNamespace}", _option.ServicesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{Author}", replaceDto.Author)
.Replace("{DateTime}", replaceDto.AddTime);
generateDto.GenCodes.Add(new GenCode(4, "服务层", fullPath, content));
} }
#endregion #endregion
@ -302,8 +220,6 @@ namespace ZR.CodeGenerator
private static void GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto) private static void GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto)
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", generateDto.GenTable.ModuleName, $"{replaceDto.ModelTypeName}Controller.cs"); var fullPath = Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", generateDto.GenTable.ModuleName, $"{replaceDto.ModelTypeName}Controller.cs");
if (File.Exists(fullPath) && !generateDto.Coverd)
return;
var content = FileHelper.ReadTemplate("ControllersTemplate.txt") var content = FileHelper.ReadTemplate("ControllersTemplate.txt")
.Replace("{ApiControllerNamespace}", _option.ApiControllerNamespace) .Replace("{ApiControllerNamespace}", _option.ApiControllerNamespace)
@ -341,9 +257,6 @@ namespace ZR.CodeGenerator
{ {
var fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName, replaceDto.ViewsFileName, "index.vue"); var fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName, replaceDto.ViewsFileName, "index.vue");
if (File.Exists(fullPath) && !generateDto.Coverd)
return;
var content = FileHelper.ReadTemplate("VueTemplate.txt") var content = FileHelper.ReadTemplate("VueTemplate.txt")
.Replace("{fileClassName}", replaceDto.ViewsFileName) .Replace("{fileClassName}", replaceDto.ViewsFileName)
.Replace("{VueViewListContent}", replaceDto.VueViewListHtml)//查询 table列 .Replace("{VueViewListContent}", replaceDto.VueViewListHtml)//查询 table列
@ -361,27 +274,6 @@ namespace ZR.CodeGenerator
.Replace("{VueViewEditFormRuleContent}", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则 .Replace("{VueViewEditFormRuleContent}", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, content)); generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, content));
//var tpl = FileHelper.ReadJtTemplate("VueTemplate.txt");
//tpl.Set("fileClassName", replaceDto.ViewsFileName);
//tpl.Set("VueViewListContent", replaceDto.VueViewListHtml);//查询 table列
//tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单
//tpl.Set("ModelTypeName", replaceDto.ModelTypeName);
//tpl.Set("Permission", replaceDto.Permission);
//tpl.Set("VueViewFormResetHtml", replaceDto.VueViewFormResetHtml);
////tpl.Set("vueJsMethod}", replaceDto.VueJsMethod);
////tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml);
////tpl.Set("VueDataContent", replaceDto.VueDataContent);
////tpl.Set("PrimaryKey", FirstLowerCase(replaceDto.PKName));
////tpl.Set("MountedMethod", replaceDto.MountedMethod);
////tpl.Set("VueComponent", replaceDto.VueComponent.TrimEnd(','));
////tpl.Set("VueComponentImport", replaceDto.VueComponentImport);
////tpl.Set("VueViewEditFormRuleContent", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
//tpl.Set("uploadImage", generateDto.GenTable.Columns.Any(x => x.HtmlType == GenConstants.HTML_IMAGE_UPLOAD));
//var result = tpl.Render();
//generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, result));
} }
/// <summary> /// <summary>
/// 7、生成vue页面api /// 7、生成vue页面api
@ -393,15 +285,10 @@ namespace ZR.CodeGenerator
{ {
string fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "api", replaceDto.ViewsFileName + ".js"); string fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "api", replaceDto.ViewsFileName + ".js");
if (File.Exists(fullPath) && !generateDto.Coverd) var tpl = FileHelper.ReadJtTemplate("VueJsTemplate.txt");
return;
var content = FileHelper.ReadTemplate("VueJsTemplate.txt") var result = tpl.Render();
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPath, result));
.Replace("{FunctionName}", generateDto.GenTable.FunctionName)
.Replace("{ModuleName}", generateDto.GenTable.ModuleName);
generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPath, content));
} }
#endregion #endregion
@ -412,8 +299,6 @@ namespace ZR.CodeGenerator
{ {
string fullPath = Path.Combine(generateDto.GenCodePath, replaceDto.ViewsFileName + ".sql"); string fullPath = Path.Combine(generateDto.GenCodePath, replaceDto.ViewsFileName + ".sql");
if (File.Exists(fullPath) && !generateDto.Coverd)
return;
var tempName = ""; var tempName = "";
switch (generateDto.DbType) switch (generateDto.DbType)
{ {
@ -426,15 +311,10 @@ namespace ZR.CodeGenerator
default: default:
break; break;
} }
var content = FileHelper.ReadTemplate($"{tempName}.txt") var tpl = FileHelper.ReadJtTemplate($"{tempName}.txt");
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{Permission}", replaceDto.Permission)
.Replace("{ModuleName}", generateDto.GenTable.ModuleName)
.Replace("{ViewsFileName}", replaceDto.ViewsFileName)
.Replace("{ParentId}", generateDto.GenTable.ParentMenuId ?? "0")
.Replace("{FunctionName}", generateDto.GenTable.FunctionName);
generateDto.GenCodes.Add(new GenCode(8, "sql", fullPath, content)); var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(8, "sql", fullPath, result));
} }
#endregion #endregion
@ -466,6 +346,19 @@ namespace ZR.CodeGenerator
return tableName.Substring(0, 1).ToUpper() + tableName[1..].Replace("_", ""); return tableName.Substring(0, 1).ToUpper() + tableName[1..].Replace("_", "");
} }
/// <summary>
/// 获取业务名
/// </summary>
/// <param name="tableName">tableName 表名</param>
/// <returns>业务名</returns>
public static string GetBusinessName(string tableName)
{
int lastIndex = tableName.LastIndexOf("_");
int nameLength = tableName.Length;
string businessName = tableName.Substring(lastIndex + 1, nameLength);
return businessName;
}
/// <summary> /// <summary>
/// 首字母转小写,输出前端 /// 首字母转小写,输出前端
/// </summary> /// </summary>
@ -486,16 +379,44 @@ namespace ZR.CodeGenerator
{ {
return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription; return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription;
} }
///// <summary>
///// 判断是否给属性添加?
///// </summary>
///// <param name="dbFieldInfo"></param>
///// <returns></returns>
//public static string GetModelRequired(GenTableColumn dbFieldInfo)
//{
// return (!dbFieldInfo.IsRequired && (IsNumber(dbFieldInfo.ColumnType) || dbFieldInfo.CsharpType == "DateTime")) ? "?" : "";
//}
/// <summary> /// <summary>
/// 判断是否给属性添加? /// 获取C# 类型
/// </summary> /// </summary>
/// <param name="dbFieldInfo"></param> /// <param name="sDatatype"></param>
/// <returns></returns> /// <returns></returns>
public static string GetModelRequired(GenTableColumn dbFieldInfo) public static string GetCSharpDatatype(string sDatatype)
{ {
return (!dbFieldInfo.IsRequired && (IsNumber(dbFieldInfo.ColumnType) || dbFieldInfo.CsharpType == "DateTime")) ? "?" : ""; sDatatype = sDatatype.ToLower();
string sTempDatatype = sDatatype switch
{
"int" or "number" or "integer" or "smallint" => "int",
"bigint" => "long",
"tinyint" => "byte",
"numeric" or "real" or "float" => "float",
"decimal" or "numer(8,2)" => "decimal",
"bit" => "bool",
"date" or "datetime" or "datetime2" or "smalldatetime" => "DateTime",
"money" or "smallmoney" => "double",
_ => "string",
};
return sTempDatatype;
} }
public static bool IsNumber(string tableDataType)
{
string[] arr = new string[] { "int", "long" };
return arr.Any(f => f.Contains(GetCSharpDatatype(tableDataType)));
}
#endregion #endregion
/// <summary> /// <summary>
@ -567,32 +488,27 @@ namespace ZR.CodeGenerator
} }
/// <summary> /// <summary>
/// 获取C# 类型 /// 初始化Jnt模板
/// </summary> /// </summary>
/// <param name="sDatatype"></param> /// <param name="dto"></param>
/// <returns></returns> /// <param name="replaceDto"></param>
public static string GetCSharpDatatype(string sDatatype) private static void InitJntTemplate(GenerateDto dto, ReplaceDto replaceDto)
{ {
sDatatype = sDatatype.ToLower(); //Engine.Current.Clean();
string sTempDatatype = sDatatype switch
//jnt模板引擎全局变量
Engine.Configure((options) =>
{ {
"int" or "number" or "integer" or "smallint" => "int", options.TagPrefix = "${";
"bigint" => "long", options.TagSuffix = "}";
"tinyint" => "byte", options.TagFlag = '$';
"numeric" or "real" or "float" => "float", options.OutMode = OutMode.Auto;
"decimal" or "numer(8,2)" => "decimal", options.Data.Set("replaceDto", replaceDto);
"bit" => "bool", options.Data.Set("options", dto.GenOptions);
"date" or "datetime" or "datetime2" or "smalldatetime" => "DateTime", options.Data.Set("genTable", dto.GenTable);
"money" or "smallmoney" => "double", //...其它数据
_ => "string", });
};
return sTempDatatype;
} }
public static bool IsNumber(string tableDataType)
{
string[] arr = new string[] { "int", "long" };
return arr.Any(f => f.Contains(GetCSharpDatatype(tableDataType)));
}
} }
} }

View File

@ -64,10 +64,6 @@ namespace ZR.CodeGenerator
/** 数据库时间类型 */ /** 数据库时间类型 */
public static string[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; public static string[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
/** 数据库数字类型 */
public static string[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal" };
/** 页面不需要编辑字段 */ /** 页面不需要编辑字段 */
public static string[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "delFlag" }; public static string[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "delFlag" };

View File

@ -1,8 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZR.Model.System.Generate; using ZR.Model.System.Generate;
namespace ZR.CodeGenerator.Model namespace ZR.CodeGenerator.Model
@ -10,24 +6,16 @@ namespace ZR.CodeGenerator.Model
public class GenerateDto public class GenerateDto
{ {
public long TableId { get; set; } public long TableId { get; set; }
//public string[] QueryColumn { get; set; }
/// <summary> /// <summary>
/// 是否预览代码 /// 是否预览代码
/// </summary> /// </summary>
public int IsPreview { get; set; } public int IsPreview { get; set; }
/// <summary> /// <summary>
/// 要生成的文件
/// </summary>
public int[] GenCodeFiles { get; set; }
/// <summary>
/// 如果目标文件存在是否覆盖。默认为false
/// </summary>
public bool Coverd { get; set; } = true;
/// <summary>
/// 生成代码的数据库类型 0、mysql 1、sqlserver /// 生成代码的数据库类型 0、mysql 1、sqlserver
/// </summary> /// </summary>
public int DbType { get; set; } public int DbType { get; set; }
public GenTable GenTable { get; set; } public GenTable GenTable { get; set; }
public CodeGenerateOption GenOptions { get; set; }
#region #region
/// <summary> /// <summary>
/// 代码模板预览存储路径存放 /// 代码模板预览存储路径存放

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ZR.Model.System.Generate;
namespace ZR.CodeGenerator.Model namespace ZR.CodeGenerator.Model
{ {
@ -38,14 +39,14 @@ namespace ZR.CodeGenerator.Model
public string InsertColumn { get; set; } public string InsertColumn { get; set; }
/// <summary> ///// <summary>
/// 实体属性模板 ///// 实体属性模板
/// </summary> ///// </summary>
public string ModelProperty { get; set; } //public string ModelProperty { get; set; }
/// <summary> ///// <summary>
/// 输入Dto模板 ///// 输入Dto模板
/// </summary> ///// </summary>
public string InputDtoProperty { get; set; } //public string InputDtoProperty { get; set; }
//vue、api //vue、api
public string VueViewFormResetHtml { get; set; } public string VueViewFormResetHtml { get; set; }
@ -73,10 +74,10 @@ namespace ZR.CodeGenerator.Model
/// 查询条件 /// 查询条件
/// </summary> /// </summary>
public string QueryCondition { get; set; } = ""; public string QueryCondition { get; set; } = "";
/// <summary> ///// <summary>
/// 查询属性 ///// 查询属性
/// </summary> ///// </summary>
public string QueryProperty { get; set; } //public string QueryProperty { get; set; }
/// <summary> /// <summary>
/// vue data内容 /// vue data内容
/// </summary> /// </summary>
@ -105,7 +106,7 @@ namespace ZR.CodeGenerator.Model
/// 上传URL data /// 上传URL data
/// </summary> /// </summary>
public string VueUploadUrl { get; set; } public string VueUploadUrl { get; set; }
public bool UploadImage{ get; set; } //public bool UploadImage{ get; set; }
public string Author { get; set; } public string Author { get; set; }
public string AddTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd"); public string AddTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
} }

View File

@ -14,11 +14,4 @@
<PackageReference Include="JinianNet.JNTemplate" Version="2.2.4" /> <PackageReference Include="JinianNet.JNTemplate" Version="2.2.4" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.4.3" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.4.3" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="Template\ModelTemplate.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -1,41 +1,40 @@
using Newtonsoft.Json; using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Linq;
using System.Text;
namespace ZR.Model.System.Generate namespace ZR.Model.System.Generate
{ {
/// <summary> /// <summary>
/// 代码生成表字段 /// 代码生成表字段
/// </summary> /// </summary>
[SqlSugar.SugarTable("gen_table_column")] [SugarTable("gen_table_column")]
[SqlSugar.Tenant("0")] [Tenant("0")]
public class GenTableColumn : SysBase public class GenTableColumn : SysBase
{ {
[SqlSugar.SugarColumn(IsIdentity = true, IsPrimaryKey = true)] [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
public int ColumnId { get; set; } public int ColumnId { get; set; }
public string ColumnName { get; set; } public string ColumnName { get; set; }
[SqlSugar.SugarColumn(IsOnlyIgnoreUpdate = true)] [SugarColumn(IsOnlyIgnoreUpdate = true)]
public int TableId { get; set; } public int TableId { get; set; }
[SqlSugar.SugarColumn(IsOnlyIgnoreUpdate = true)] [SugarColumn(IsOnlyIgnoreUpdate = true)]
public string TableName { get; set; } public string TableName { get; set; }
public string ColumnComment { get; set; } public string ColumnComment { get; set; }
[SqlSugar.SugarColumn(IsOnlyIgnoreUpdate = true)] [SugarColumn(IsOnlyIgnoreUpdate = true)]
public string ColumnType { get; set; } public string ColumnType { get; set; }
public string CsharpType { get; set; } public string CsharpType { get; set; }
public string CsharpField { get; set; } public string CsharpField { get; set; }
/// <summary> /// <summary>
/// 是否主键1是 /// 是否主键1是
/// </summary> /// </summary>
[SqlSugar.SugarColumn(IsOnlyIgnoreUpdate = true)] [SugarColumn(IsOnlyIgnoreUpdate = true)]
public bool IsPk { get; set; } public bool IsPk { get; set; }
/// <summary> /// <summary>
/// 是否必填1是 /// 是否必填1是
/// </summary> /// </summary>
public bool IsRequired { get; set; } public bool IsRequired { get; set; }
[SqlSugar.SugarColumn(IsOnlyIgnoreUpdate = true)] [SugarColumn(IsOnlyIgnoreUpdate = true)]
public bool IsIncrement { get; set; } public bool IsIncrement { get; set; }
/// <summary> /// <summary>
/// 是否插入 /// 是否插入
@ -63,10 +62,22 @@ namespace ZR.Model.System.Generate
/// 字典类型 /// 字典类型
/// </summary> /// </summary>
public string DictType { get; set; } public string DictType { get; set; }
#region
[SugarColumn(IsIgnore = true)]
public string RequiredStr
{
get
{
string[] arr = new string[] { "int", "long" };
return (!IsRequired &&(arr.Any(f => f.Contains(CsharpType))) || typeof(DateTime).Name == CsharpType) ? "?" : "";
}
}
/// <summary> /// <summary>
/// 字典集合 /// 字典集合
/// </summary> /// </summary>
//[SqlSugar.SugarColumn(IsIgnore = true)] //[SqlSugar.SugarColumn(IsIgnore = true)]
//public List<SysDictData> DictDatas { get; set; } //public List<SysDictData> DictDatas { get; set; }
#endregion
} }
} }

View File

@ -16,10 +16,12 @@
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="openImportTable" v-hasPermi="['tool:gen:import']">导入</el-button> <el-button type="info" plain icon="el-icon-upload" size="mini" @click="openImportTable" v-hasPermi="['tool:gen:import']">导入</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" :disabled="multiple" plain icon="el-icon-delete" @click="handleDelete" size="mini" v-hasPermi="['tool:gen:remove']">删除</el-button> <el-button type="danger" :disabled="multiple" plain icon="el-icon-delete" @click="handleDelete" size="mini" v-hasPermi="['tool:gen:remove']">
删除</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-table ref="gridtable" v-loading="tableloading" :data="tableData" border @selection-change="handleSelectionChange" highlight-current-row height="480px"> <el-table ref="gridtable" v-loading="tableloading" :data="tableData" border @selection-change="handleSelectionChange" highlight-current-row
height="480px">
<el-table-column type="selection" align="center" width="55"></el-table-column> <el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column label="序号" type="index" width="50" align="center"> <el-table-column label="序号" type="index" width="50" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
@ -27,15 +29,16 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="tableName" label="表名" sortable="custom" width="180" /> <el-table-column prop="tableName" label="表名" sortable="custom" width="180" />
<el-table-column prop="tableComment" label="表描述" /> <el-table-column prop="tableComment" label="表描述" :show-overflow-tooltip="true"/>
<el-table-column prop="className" label="实体" /> <el-table-column prop="className" label="实体" />
<el-table-column prop="createTime" label="创建时间" /> <el-table-column prop="createTime" label="创建时间" />
<el-table-column prop="updateTime" label="更新时间" /> <el-table-column prop="updateTime" label="更新时间" />
<el-table-column label="操作" align="center" width="300"> <el-table-column label="操作" align="center" width="350">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" icon="el-icon-view" @click="handlePreview(scope.row)" v-hasPermi="['tool:gen:preview']">预览</el-button> <el-button type="text" icon="el-icon-view" @click="handlePreview(scope.row)" v-hasPermi="['tool:gen:preview']">预览</el-button>
<el-button type="text" icon="el-icon-edit" @click="handleEditTable(scope.row)" v-hasPermi="['tool:gen:edit']">编辑</el-button> <el-button type="text" icon="el-icon-edit" @click="handleEditTable(scope.row)" v-hasPermi="['tool:gen:edit']">编辑</el-button>
<el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['tool:gen:remove']">删除</el-button> <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['tool:gen:remove']">删除</el-button>
<el-button type="text" icon="el-icon-refresh" @click="handleRefresh(scope.row)" v-hasPermi="['tool:gen:refresh']">同步</el-button>
<el-button type="text" icon="el-icon-download" @click="handleShowDialog(scope.row)" v-hasPermi="['tool:gen:code']">生成代码</el-button> <el-button type="text" icon="el-icon-download" @click="handleShowDialog(scope.row)" v-hasPermi="['tool:gen:code']">生成代码</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -55,29 +58,11 @@
<el-dialog :visible.sync="showGenerate" title="代码生成" width="800px"> <el-dialog :visible.sync="showGenerate" title="代码生成" width="800px">
<el-form ref="codeGenerateForm" label-width="140px"> <el-form ref="codeGenerateForm" label-width="140px">
<el-form-item label="要生成的文件">
<el-checkbox-group v-model="checkedCodeGenerateForm">
<el-checkbox :label="1">生成实体类Model</el-checkbox>
<el-checkbox :label="2">生成表单数据传输类Dto</el-checkbox>
<el-checkbox :label="3">生成仓储层Repository</el-checkbox>
<el-checkbox :label="4">生成服务类Service和接口</el-checkbox>
<el-checkbox :label="5">生成控制器Controller</el-checkbox>
<el-checkbox :label="6">生成Vue页面</el-checkbox>
<el-checkbox :label="7">生成Vue页面数据访问api</el-checkbox>
<el-checkbox :label="8">生成Sql文件</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="是否覆盖生成">
<el-radio v-model="coverd" :label="true"></el-radio>
<el-radio v-model="coverd" :label="false"></el-radio>
</el-form-item>
<el-form-item label="数据库类型"> <el-form-item label="数据库类型">
<el-radio v-model="dbType" :label="0">mySql</el-radio> <el-radio v-model="dbType" :label="0">mySql</el-radio>
<el-radio v-model="dbType" :label="1">sqlServer</el-radio> <el-radio v-model="dbType" :label="1">sqlServer</el-radio>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleGenerate"> </el-button> <el-button type="primary" @click="handleGenerate"> </el-button>
@ -199,8 +184,8 @@ export default {
var seachdata = { var seachdata = {
tableId: this.currentSelected.tableId, tableId: this.currentSelected.tableId,
tableName: this.currentSelected.name, tableName: this.currentSelected.name,
genCodeFiles: this.checkedCodeGenerateForm, // genCodeFiles: this.checkedCodeGenerateForm,
coverd: this.coverd, // coverd: this.coverd,
dbType: this.dbType, dbType: this.dbType,
// queryColumn: this.checkedQueryColumn, // queryColumn: this.checkedQueryColumn,
}; };
@ -271,6 +256,12 @@ export default {
const result = hljs.highlightAuto(code || ""); const result = hljs.highlightAuto(code || "");
return result.value || "&nbsp;"; return result.value || "&nbsp;";
}, },
handleRefresh(row) {
this.$message({
type: "info",
message: "敬请期待",
});
},
}, },
}; };
</script> </script>