From 250a9a98476a7f04b89f9f379f2651844a21e246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Sat, 27 Nov 2021 17:32:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CodeGenTemplate/ControllersTemplate.txt | 22 ++- .../wwwroot/CodeGenTemplate/ModelTemplate.txt | 3 +- .../CodeGenTemplate/ServiceTemplate.txt | 4 +- .../wwwroot/CodeGenTemplate/SqlTemplate.txt | 2 +- .../wwwroot/CodeGenTemplate/VueJsTemplate.txt | 38 ++-- ZR.CodeGenerator/CodeGenerateTemplate.cs | 185 ++++++++++++------ ZR.CodeGenerator/CodeGeneratorTool.cs | 16 +- ZR.CodeGenerator/GenConstants.cs | 2 +- ZR.Vue/src/views/tool/gen/editTable.vue | 16 +- 9 files changed, 196 insertions(+), 92 deletions(-) diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ControllersTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ControllersTemplate.txt index fb63b23..e4639a5 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ControllersTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ControllersTemplate.txt @@ -15,6 +15,7 @@ using {ApiControllerNamespace}.Extensions; using {ApiControllerNamespace}.Filters; using ZR.Common; using Infrastructure.Extensions; +using System.Linq; namespace {ApiControllerNamespace}.Controllers { @@ -51,7 +52,7 @@ namespace {ApiControllerNamespace}.Controllers //TODO 自己实现搜索条件查询语法参考Sqlsugar,默认查询所有 //predicate = predicate.And(m => m.Name.Contains(parm.Name)); - +{QueryCondition} var response = _{ModelName}Service.GetPages(predicate.ToExpression(), parm); return SUCCESS(response); @@ -66,8 +67,8 @@ namespace {ApiControllerNamespace}.Controllers [ActionPermissionFilter(Permission = "{Permission}:query")] public IActionResult Get{ModelName}({PKCsharpType} {PrimaryKey}) { - var response = _{ModelName}Service.GetId({PrimaryKey}); - + var response = _{ModelName}Service.GetFirst(x => x.{PrimaryKey} == {PrimaryKey}); + return SUCCESS(response); } @@ -134,5 +135,20 @@ namespace {ApiControllerNamespace}.Controllers return SUCCESS(response); } + + /// + /// {FunctionName}导出 + /// + /// + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "{FunctionName}")] + [HttpGet("export")] + [ActionPermissionFilter(Permission = "{Permission}:export")] + public IActionResult Export() + { + var list = _{ModelName}Service.GetAll(); + + string sFileName = ExportExcel(list, "{ModelName}", "{FunctionName}"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ModelTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ModelTemplate.txt index 66bbcce..61111a4 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ModelTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ModelTemplate.txt @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using SqlSugar; namespace {ModelsNamespace}.Models { @@ -9,7 +10,7 @@ namespace {ModelsNamespace}.Models /// @author {Author} /// @date {DateTime} /// - [SqlSugar.SugarTable("{TableName}")] + [SugarTable("{TableName}")] public class {ModelTypeName} { {PropertyName} diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ServiceTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ServiceTemplate.txt index fe7121a..e23b5f4 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ServiceTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/ServiceTemplate.txt @@ -12,10 +12,10 @@ namespace {ServicesNamespace}.Business /// @date {DateTime} /// [AppService(ServiceType = typeof(I{ModelTypeName}Service), ServiceLifetime = LifeTime.Transient)] - public class {ModelTypeName}Service: BaseService<{ModelTypeName}>, I{ModelTypeName}Service + public class {ModelTypeName}Service : BaseService<{ModelTypeName}>, I{ModelTypeName}Service { private readonly {ModelTypeName}Repository _{ModelTypeName}repository; - public {ModelTypeName}Service({ModelTypeName}Repository repository) + public {ModelTypeName}Service({ModelTypeName}Repository repository) : base(repository) { _{ModelTypeName}repository = repository; } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt index 6e3d679..0aeb6b7 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt @@ -18,5 +18,5 @@ VALUES ('{FunctionName}删除', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '{Pe INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by,create_time, update_by, update_time, remark) VALUES ('{FunctionName}修改', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:update', '', '', GETDATE(), '', NULL, NULL); -SELECT * FROM sys_menu WHERE parentId = {ParentId}; +SELECT * FROM sys_menu WHERE parentId = @menuId; SELECT * FROM sys_menu WHERE menuId = @menuId; \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueJsTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueJsTemplate.txt index 29b3edd..2da4f05 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueJsTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueJsTemplate.txt @@ -1,9 +1,9 @@ import request from '@/utils/request' /** - * {FunctionName}分页查询 - * @param {查询条件} data - */ +* {FunctionName}分页查询 +* @param {查询条件} data +*/ export function list{ModelTypeName}(query) { return request({ url: '{ModuleName}/{ModelTypeName}/list', @@ -13,9 +13,9 @@ export function list{ModelTypeName}(query) { } /** - * 新增{FunctionName} - * @param data - */ +* 新增{FunctionName} +* @param data +*/ export function add{ModelTypeName}(data) { return request({ url: '{ModuleName}/{ModelTypeName}', @@ -25,9 +25,9 @@ export function add{ModelTypeName}(data) { } /** - * 修改{FunctionName} - * @param data - */ +* 修改{FunctionName} +* @param data +*/ export function update{ModelTypeName}(data) { return request({ url: '{ModuleName}/{ModelTypeName}', @@ -37,9 +37,9 @@ export function update{ModelTypeName}(data) { } /** - * 获取{FunctionName}详情 - * @param {Id} {FunctionName}Id - */ +* 获取{FunctionName}详情 +* @param {Id} {FunctionName}Id +*/ export function get{ModelTypeName}(id) { return request({ url: '{ModuleName}/{ModelTypeName}/' + id, @@ -48,12 +48,20 @@ export function get{ModelTypeName}(id) { } /** - * 删除 - * @param {主键} pid - */ +* 删除 +* @param {主键} pid +*/ export function del{ModelTypeName}(pid) { return request({ url: '{ModuleName}/{ModelTypeName}/' + pid, method: 'delete' }) } +// 导出 +export function export{ModelTypeName}(query) { + return request({ + url: '{ModuleName}/{ModelTypeName}/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ZR.CodeGenerator/CodeGenerateTemplate.cs b/ZR.CodeGenerator/CodeGenerateTemplate.cs index e409527..895b6d7 100644 --- a/ZR.CodeGenerator/CodeGenerateTemplate.cs +++ b/ZR.CodeGenerator/CodeGenerateTemplate.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Text; +using ZR.CodeGenerator.Model; using ZR.Model.System.Generate; namespace ZR.CodeGenerator @@ -10,6 +11,78 @@ namespace ZR.CodeGenerator /// public class CodeGenerateTemplate { + /// + /// 表Model属性 + /// + /// + /// + public static string GetModelTemplate(GenTableColumn tbColumn) + { + StringBuilder sbModel = new StringBuilder(); + sbModel.AppendLine(" /// "); + sbModel.AppendLine($" /// 描述 :{tbColumn.ColumnComment}"); + sbModel.AppendLine($" /// 空值 :{!tbColumn.IsRequired}"); + sbModel.AppendLine(" /// "); + 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(); + } + /// + /// 增改Dto + /// + /// + /// + 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; + } + /// + /// 查询Dto属性 + /// + /// + /// 替换字符对象 + /// + public static void GetQueryDtoProperty(GenTableColumn tbColumn, ReplaceDto replaceDto) + { + string QueryDtoContent = ""; + if (tbColumn.IsQuery) + { + QueryDtoContent += $" public {tbColumn.CsharpType} {tbColumn.CsharpField} {{ get; set; }}\r\n"; + //字符串类型表达式 + if (tbColumn.CsharpType == GenConstants.TYPE_STRING) + { + replaceDto.QueryCondition += $" predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.{tbColumn.CsharpField}), {QueryExp(tbColumn.CsharpField, tbColumn.QueryType)};\n"; + } + //int类型表达式 + if (CodeGeneratorTool.IsNumber(tbColumn.CsharpType)) + { + replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.{tbColumn.CsharpField} > 0, {QueryExp(tbColumn.CsharpField, tbColumn.QueryType)};\n"; + } + //时间类型 + if (tbColumn.CsharpType == GenConstants.TYPE_DATE) + { + replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.BeginTime != null, it => it.{tbColumn.CsharpField} >= parm.BeginTime);\n"; + replaceDto.QueryCondition += $" predicate = predicate.AndIF(parm.EndTime != null, it => it.{tbColumn.CsharpField} <= parm.EndTime);\n"; + } + } + replaceDto.QueryProperty += QueryDtoContent; + } + + #region vue 模板 + /// /// 生成vuejs模板,目前只有上传文件方法 /// @@ -39,7 +112,11 @@ namespace ZR.CodeGenerator return sb.ToString(); } - //rules + /// + /// Vue rules + /// + /// + /// public static string GetFormRules(GenTableColumn dbFieldInfo) { StringBuilder sbRule = new StringBuilder(); @@ -55,67 +132,11 @@ namespace ZR.CodeGenerator return sbRule.ToString(); } - //model 属性 - public static string GetModelTemplate(GenTableColumn dbFieldInfo) - { - StringBuilder sbModel = new StringBuilder(); - sbModel.AppendLine(" /// "); - sbModel.AppendLine($" /// 描述 :{dbFieldInfo.ColumnComment}"); - sbModel.AppendLine($" /// 空值 :{!dbFieldInfo.IsRequired}"); - sbModel.AppendLine(" /// "); - if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) - { - sbModel.AppendLine($" [SqlSugar.SugarColumn(IsPrimaryKey = {dbFieldInfo.IsPk.ToString().ToLower()}, IsIdentity = {dbFieldInfo.IsIncrement.ToString().ToLower()})]"); - } - sbModel.AppendLine($" public {dbFieldInfo.CsharpType}{(GetModelRequired(dbFieldInfo))} {dbFieldInfo.CsharpField} {{ get; set; }}"); - return sbModel.ToString(); - } - public static string GetModelRequired(GenTableColumn dbFieldInfo) - { - string str = ""; - if (!dbFieldInfo.IsRequired && (CodeGeneratorTool.IsNumber(dbFieldInfo.ColumnType) || dbFieldInfo.CsharpType == "DateTime")) - { - str = "?"; - } - - return str; - } - //DTO model - public static string GetDtoProperty(GenTableColumn dbFieldInfo) - { - string InputDtoContent = ""; - if (GenConstants.inputDtoNoField.Any(f => f.Replace("_", "").ToLower().Contains(dbFieldInfo.CsharpField.ToLower().Replace("_", "")))) - { - return InputDtoContent; - } - //else if (dbFieldInfo.HtmlType == GenConstants.HTML_DATETIME) - //{ - // return InputDtoContent; - //} - else if (dbFieldInfo.IsInsert || dbFieldInfo.IsEdit || dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) - { - InputDtoContent += $" public {dbFieldInfo.CsharpType}{GetModelRequired(dbFieldInfo)} {dbFieldInfo.CsharpField} {{ get; set; }}\r\n"; - } - - return InputDtoContent; - } /// - /// 查询Dto属性 + /// Vue 添加修改表单 /// /// /// - public static string GetQueryDtoProperty(GenTableColumn dbFieldInfo) - { - string QueryDtoContent = ""; - if (dbFieldInfo.IsQuery && !GenConstants.inputDtoNoField.Any(f => f.ToLower().Contains(dbFieldInfo.CsharpField.ToLower()))) - { - QueryDtoContent += $" public {dbFieldInfo.CsharpType} {dbFieldInfo.CsharpField} {{ get; set; }}\r\n"; - } - - return QueryDtoContent; - } - - //form-item public static string GetVueViewFormContent(GenTableColumn dbFieldInfo) { string columnName = dbFieldInfo.ColumnName; @@ -131,6 +152,8 @@ namespace ZR.CodeGenerator { return sb.ToString(); } + sb.AppendLine(""); + sb.AppendLine(""); if (dbFieldInfo.HtmlType == GenConstants.HTML_INPUT_NUMBER) { sb.AppendLine($" "); @@ -200,12 +223,13 @@ namespace ZR.CodeGenerator sb.AppendLine($" "); sb.AppendLine(" "); } - + sb.AppendLine(""); + sb.AppendLine(""); return sb.ToString(); } /// - /// 查询表单 + /// Vue 查询表单 /// /// /// @@ -231,7 +255,11 @@ namespace ZR.CodeGenerator return sb.ToString(); } - //table-column + /// + /// Vue 查询列表 + /// + /// + /// public static string GetTableColumn(GenTableColumn dbFieldInfo) { string columnName = dbFieldInfo.ColumnName; @@ -262,5 +290,40 @@ namespace ZR.CodeGenerator } return sb.ToString(); } + + #endregion + + public static string QueryExp(string propertyName, string queryType) + { + if (queryType.Equals("EQ")) + { + return $"m => m.{ propertyName} == parm.{propertyName})"; + } + if (queryType.Equals("GTE")) + { + return $"m => m.{ propertyName} >= parm.{propertyName})"; + } + if (queryType.Equals("GT")) + { + return $"m => m.{ propertyName} > parm.{propertyName})"; + } + if (queryType.Equals("LT")) + { + return $"m => m.{ propertyName} < parm.{propertyName})"; + } + if (queryType.Equals("LTE")) + { + return $"m => m.{ propertyName} <= parm.{propertyName})"; + } + if (queryType.Equals("NE")) + { + return $"m => m.{ propertyName} != parm.{propertyName})"; + } + if (queryType.Equals("LIKE")) + { + return $"m => m.{ propertyName}.Contains(parm.{propertyName}))"; + } + return ""; + } } } diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index df7d5d0..40f1a30 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -107,7 +107,7 @@ namespace ZR.CodeGenerator replaceDto.VueComponentImport += "import Editor from '@/components/Editor';\n"; } - replaceDto.QueryProperty += CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo); + CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo, replaceDto); replaceDto.ModelProperty += CodeGenerateTemplate.GetModelTemplate(dbFieldInfo); replaceDto.VueViewFormHtml += CodeGenerateTemplate.GetVueViewFormContent(dbFieldInfo); replaceDto.VueJsMethod += CodeGenerateTemplate.GetVueJsMethod(dbFieldInfo); @@ -329,6 +329,10 @@ namespace ZR.CodeGenerator { content = content.Replace("{InsertColumn}", replaceDto.InsertColumn.TrimEnd('\n')); } + if (replaceDto.QueryCondition != null) + { + content = content.Replace("{QueryCondition}", replaceDto.QueryCondition); + } generateDto.GenCodes.Add(new GenCode(5, "控制器", fullPath, content)); } #endregion @@ -464,6 +468,16 @@ namespace ZR.CodeGenerator { return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription; } + /// + /// 判断是否给属性添加? + /// + /// + /// + public static string GetModelRequired(GenTableColumn dbFieldInfo) + { + return (!dbFieldInfo.IsRequired && (IsNumber(dbFieldInfo.ColumnType) || dbFieldInfo.CsharpType == "DateTime")) ? "?" : ""; + } + #endregion /// diff --git a/ZR.CodeGenerator/GenConstants.cs b/ZR.CodeGenerator/GenConstants.cs index 65d2e9f..9e192f2 100644 --- a/ZR.CodeGenerator/GenConstants.cs +++ b/ZR.CodeGenerator/GenConstants.cs @@ -127,7 +127,7 @@ namespace ZR.CodeGenerator public static string TYPE_DOUBLE = "Double"; /** 时间类型 */ - public static string TYPE_DATE = "Date"; + public static string TYPE_DATE = "DateTime"; /** 模糊查询 */ public static string QUERY_LIKE = "LIKE"; diff --git a/ZR.Vue/src/views/tool/gen/editTable.vue b/ZR.Vue/src/views/tool/gen/editTable.vue index 3ab32fb..f6ce1a2 100644 --- a/ZR.Vue/src/views/tool/gen/editTable.vue +++ b/ZR.Vue/src/views/tool/gen/editTable.vue @@ -51,14 +51,16 @@ - - + +