From 907f96d8bd1ae4a0990047bd19f2b3ba5256ac3e Mon Sep 17 00:00:00 2001 From: izory <791736813@qq.com> Date: Thu, 23 Sep 2021 20:54:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0SQL=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CodeGeneratorController.cs | 4 +- ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 1 - .../wwwroot/CodeGenTemplate/SqlTemplate.txt | 18 +++ .../wwwroot/CodeGenTemplate/VueTemplate.txt | 2 +- ZR.CodeGenerator/CodeGeneratorTool.cs | 104 +++++++++++------- ZR.CodeGenerator/Model/GenerateDto.cs | 20 +--- ZR.CodeGenerator/Model/ReplaceDto.cs | 6 +- ZR.Vue/src/components/Zr/Git/index.vue | 2 +- ZR.Vue/src/views/tool/gen/index.vue | 11 +- 9 files changed, 96 insertions(+), 72 deletions(-) create mode 100644 ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt diff --git a/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs index 13c027d..a7bfa3c 100644 --- a/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs +++ b/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs @@ -88,9 +88,9 @@ namespace ZR.Admin.WebApi.Controllers dto.GenCodePath = Path.Combine(dto.ZipPath, DateTime.Now.ToString("yyyyMMdd")); var genTableInfo = GenTableService.GetGenTableInfo(dto.TableId); - var getTableColumn = GenTableColumnService.GenTableColumns(dto.TableId); - genTableInfo.Columns = getTableColumn; + genTableInfo.Columns = GenTableColumnService.GenTableColumns(dto.TableId); + dto.GenTable = genTableInfo; //生成代码 CodeGeneratorTool.Generate(genTableInfo, dto); //下载文件 diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index b0b4875..7b52794 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -86,7 +86,6 @@ - diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt new file mode 100644 index 0000000..a82aea1 --- /dev/null +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/SqlTemplate.txt @@ -0,0 +1,18 @@ +-- 菜单 +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}', 0, 1, '{ModelTypeName}', '{ModuleName}/{ViewsFileName}/{ViewsFileName}', 0, 0, 'M', '0', '0', '', '{Permission}', '', GETDATE(), '', NULL, '{ModelTypeDesc}'); + +-- 按钮父菜单id +declare @menuId int = @@identity + +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 ('查询', @menuId, 0, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:list}', '', '', GETDATE(), '', NULL, NULL); + +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 ('新增', @menuId, 1, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:add', '', '', GETDATE(), '', NULL, NULL); + +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 ('删除', @menuId, 2, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:delete', '', '', GETDATE(), '', NULL, NULL); + +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 ('修改', @menuId, 3, '#', NULL, 0, 0, 'F', '0', '0', '{Permission}:update', '', '', GETDATE(), '', NULL, NULL); \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueTemplate.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueTemplate.txt index d98718e..1c79320 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueTemplate.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/VueTemplate.txt @@ -128,7 +128,7 @@ export default { // 重置数据表单 reset() { this.form = { - {VueViewEditFormContent} + {VueViewFormResetHtml} //TODO 根据实际内容调整 }; this.resetForm("form"); diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 04c02d2..e8ef492 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -3,6 +3,7 @@ using SqlSugar; using System; using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Linq; using System.Runtime.InteropServices; using System.Text; @@ -59,9 +60,10 @@ namespace ZR.CodeGenerator List genPathList = new(); ReplaceDto replaceDto = new(); replaceDto.ModelTypeName = tableInfo.ClassName;//表名对应C# 实体类名 - replaceDto.TableName = tableInfo.TableName; - replaceDto.TableDesc = tableInfo.TableComment; - + replaceDto.TableName = tableInfo.TableName;//表名 + replaceDto.TableDesc = tableInfo.TableComment;//表说明描述 + replaceDto.Permission = tableInfo.ClassName.ToLower();//权限 + replaceDto.ViewsFileName = FirstLowerCase(replaceDto.ModelTypeName); //循环表字段信息 foreach (GenTableColumn dbFieldInfo in listField) { @@ -69,7 +71,7 @@ namespace ZR.CodeGenerator if (dbFieldInfo.IsInsert || dbFieldInfo.IsEdit) { - replaceDto.VueViewEditFormHtml += $"{columnName}: undefined,\r\n"; + replaceDto.VueViewFormResetHtml += $" {columnName}: undefined,\r\n"; } if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) { @@ -155,6 +157,11 @@ namespace ZR.CodeGenerator WriteAndSave(tuple.Item1, tuple.Item2); WriteAndSave(tuple_1.Item1, tuple_1.Item2); } + if (dto.genFiles.Contains(7)) + { + Tuple tuple = GenerateSql(replaceDto, dto); + WriteAndSave(tuple.Item1, tuple.Item2); + } return genPathList; //GenerateIRepository(modelTypeName, modelTypeDesc, keyTypeName, ifExsitedCovered); //GenerateOutputDto(modelTypeName, modelTypeDesc, outputDtocontent, ifExsitedCovered); @@ -170,9 +177,8 @@ namespace ZR.CodeGenerator /// 替换实体 private static Tuple GenerateModels(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; //../ZR.Model - var servicesPath = Path.Combine(parentPath, _option.ModelsNamespace, "Models"); + var servicesPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Models"); Console.WriteLine("创建文件夹" + servicesPath); CreateDirectory(servicesPath); // ../ZR.Model/Models/User.cs @@ -180,8 +186,8 @@ namespace ZR.CodeGenerator if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("ModelTemplate.txt"); - content = content + + var content = ReadTemplate("ModelTemplate.txt") .Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{TableNameDesc}", replaceDto.TableDesc) @@ -199,16 +205,15 @@ namespace ZR.CodeGenerator /// 替换实体 private static Tuple GenerateInputDto(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; - var servicesPath = Path.Combine(parentPath, _option.ModelsNamespace, "Dto"); + var servicesPath = Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Dto"); CreateDirectory(servicesPath); // ../ZR.Model/Dto/User.cs var fullPath = Path.Combine(servicesPath, $"{replaceDto.ModelTypeName}Dto.cs"); if (File.Exists(fullPath) && !generateDto.coverd) - return Tuple.Create(fullPath, ""); ; - var content = ReadTemplate("InputDtoTemplate.txt"); - content = content + return Tuple.Create(fullPath, ""); + + var content = ReadTemplate("InputDtoTemplate.txt") .Replace("{DtosNamespace}", _option.DtosNamespace) .Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{TableNameDesc}", replaceDto.TableDesc) @@ -229,16 +234,16 @@ namespace ZR.CodeGenerator /// 替换实体 private static Tuple GenerateRepository(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; - var repositoryPath = Path.Combine(parentPath, _option.RepositoriesNamespace, "Repositories"); + var repositoryPath = Path.Combine(generateDto.GenCodePath, _option.RepositoriesNamespace, "Repositories"); CreateDirectory(repositoryPath); var fullPath = Path.Combine(repositoryPath, $"{replaceDto.ModelTypeName}Repository.cs"); if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("RepositoryTemplate.txt"); - content = content.Replace("{ModelsNamespace}", _option.ModelsNamespace) + + var content = ReadTemplate("RepositoryTemplate.txt") + .Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace) .Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{TableNameDesc}", replaceDto.TableDesc) @@ -257,16 +262,15 @@ namespace ZR.CodeGenerator /// 替换实体 private static Tuple GenerateIService(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; - var iServicesPath = Path.Combine(parentPath, _option.IServicsNamespace, "Business", "IBusService"); + var iServicesPath = Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, "Business", "IBusService"); CreateDirectory(iServicesPath); var fullPath = Path.Combine(iServicesPath, $"I{replaceDto.ModelTypeName}Service.cs"); Console.WriteLine(fullPath); if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("IServiceTemplate.txt"); - content = content.Replace("{ModelsNamespace}", _option.ModelsNamespace) + var content = ReadTemplate("IServiceTemplate.txt") + .Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{TableNameDesc}", replaceDto.TableDesc) .Replace("{DtosNamespace}", _option.DtosNamespace) .Replace("{IServicsNamespace}", _option.IServicsNamespace) @@ -281,15 +285,14 @@ namespace ZR.CodeGenerator /// private static Tuple GenerateService(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; - var servicesPath = Path.Combine(parentPath, _option.ServicesNamespace, "Business"); + var servicesPath = Path.Combine(generateDto.GenCodePath, _option.ServicesNamespace, "Business"); CreateDirectory(servicesPath); var fullPath = Path.Combine(servicesPath, $"{replaceDto.ModelTypeName}Service.cs"); Console.WriteLine(fullPath); if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("ServiceTemplate.txt"); - content = content + + var content = ReadTemplate("ServiceTemplate.txt") .Replace("{IRepositoriesNamespace}", _option.IRepositoriesNamespace) .Replace("{DtosNamespace}", _option.DtosNamespace) .Replace("{IServicsNamespace}", _option.IServicsNamespace) @@ -309,21 +312,20 @@ namespace ZR.CodeGenerator /// private static Tuple GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto) { - var parentPath = generateDto.GenCodePath; - var servicesPath = Path.Combine(parentPath, _option.ApiControllerNamespace, "Controllers", "business"); + var servicesPath = Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", "business"); CreateDirectory(servicesPath); var fullPath = Path.Combine(servicesPath, $"{replaceDto.ModelTypeName}Controller.cs"); if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("ControllersTemplate.txt"); - content = content + + var content = ReadTemplate("ControllersTemplate.txt") .Replace("{ApiControllerNamespace}", _option.ApiControllerNamespace) .Replace("{ServicesNamespace}", _option.ServicesNamespace) .Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{TableDesc}", replaceDto.TableDesc) .Replace("{ModelName}", replaceDto.ModelTypeName) - .Replace("{Permission}", replaceDto.ModelTypeName.ToLower()) + .Replace("{Permission}", replaceDto.Permission) .Replace("{PrimaryKey}", replaceDto.PKName) .Replace("{UpdateColumn}", replaceDto.UpdateColumn) .Replace("{InsertColumn}", replaceDto.InsertColumn) @@ -339,21 +341,21 @@ namespace ZR.CodeGenerator private static Tuple GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto) { var parentPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src"); - var servicesPath = Path.Combine(parentPath, "views", FirstLowerCase(replaceDto.ModelTypeName)); + var servicesPath = Path.Combine(parentPath, "views", replaceDto.ViewsFileName); CreateDirectory(servicesPath); - var fullPath = Path.Combine(servicesPath, "index.vue"); + var fullPath = Path.Combine(servicesPath, $"{replaceDto.ViewsFileName}.vue"); if (File.Exists(fullPath) && !generateDto.coverd) - return Tuple.Create(fullPath, ""); ; - var content = ReadTemplate("VueTemplate.txt"); - content = content - .Replace("{fileClassName}", FirstLowerCase(replaceDto.ModelTypeName)) + return Tuple.Create(fullPath, ""); + + var content = ReadTemplate("VueTemplate.txt") + .Replace("{fileClassName}", replaceDto.ViewsFileName) .Replace("{VueViewListContent}", replaceDto.VueViewListHtml)//查询 table列 .Replace("{VueViewFormContent}", replaceDto.VueViewFormHtml)//添加、修改表单 .Replace("{ModelTypeName}", replaceDto.ModelTypeName) - .Replace("{Permission}", replaceDto.ModelTypeName.ToLower()) - .Replace("{VueViewEditFormContent}", replaceDto.VueViewEditFormHtml) + .Replace("{Permission}", replaceDto.Permission) + .Replace("{VueViewFormResetHtml}", replaceDto.VueViewFormResetHtml) .Replace("{vueJsMethod}", replaceDto.VueJsMethod) .Replace("{vueQueryFormHtml}", replaceDto.VueQueryFormHtml) .Replace("{VueDataContent}", replaceDto.VueDataContent) @@ -370,12 +372,12 @@ namespace ZR.CodeGenerator string servicesPath = Path.Combine(parentPath, "api"); CreateDirectory(servicesPath); - string fullPath = Path.Combine(servicesPath, FirstLowerCase(replaceDto.ModelTypeName) + ".js"); + string fullPath = Path.Combine(servicesPath, replaceDto.ViewsFileName + ".js"); if (File.Exists(fullPath) && !generateDto.coverd) return Tuple.Create(fullPath, ""); - var content = ReadTemplate("VueJsTemplate.txt"); - content = content + + var content = ReadTemplate("VueJsTemplate.txt") .Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeDesc}", replaceDto.TableDesc); @@ -384,6 +386,24 @@ namespace ZR.CodeGenerator #endregion + #region 生成SQL + + public static Tuple GenerateSql(ReplaceDto replaceDto, GenerateDto generateDto) + { + string fullPath = Path.Combine(generateDto.GenCodePath, replaceDto.ViewsFileName + ".sql"); + + if (File.Exists(fullPath) && !generateDto.coverd) + return Tuple.Create(fullPath, ""); + var content = ReadTemplate("SqlTemplate.txt") + .Replace("{ModelTypeName}", replaceDto.ModelTypeName) + .Replace("{Permission}", replaceDto.Permission) + .Replace("{ModelTypeDesc}", replaceDto.TableDesc); + + return Tuple.Create(fullPath, content); + } + + #endregion + #region 帮助方法 /// @@ -607,7 +627,7 @@ namespace ZR.CodeGenerator File.Delete(zipFileName); } - FileHelper.ZipFileDirectory(dto.GenCodePath, zipFileName, 7, "", "", "*.*"); + ZipFile.CreateFromDirectory(dto.GenCodePath, zipFileName); FileHelper.DeleteDirectory(dto.GenCodePath); dto.ZipFileName = zipReturnFileName; return zipReturnFileName; diff --git a/ZR.CodeGenerator/Model/GenerateDto.cs b/ZR.CodeGenerator/Model/GenerateDto.cs index bceb59d..4bfe0b0 100644 --- a/ZR.CodeGenerator/Model/GenerateDto.cs +++ b/ZR.CodeGenerator/Model/GenerateDto.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using ZR.Model.System.Generate; namespace ZR.CodeGenerator.Model { @@ -10,22 +11,7 @@ namespace ZR.CodeGenerator.Model { public long TableId { get; set; } public string[] QueryColumn { get; set; } - /// - /// - /// - public string dbName { get; set; } - /// - /// 项目命名空间 - /// - //public string baseSpace { get; set; } - /// - /// 要生成代码的表 - /// - public string tableName { get; set; } - /// - /// 要删除表名的字符串用 - /// - //public string replaceTableNameStr { get; set; } + /// /// 要生成的文件 /// @@ -34,7 +20,7 @@ namespace ZR.CodeGenerator.Model /// 如果目标文件存在,是否覆盖。默认为false /// public bool coverd { get; set; } = true; - + public GenTable GenTable { get; set; } #region 存储路径 //public string ModelPath { get; set; } //public string ServicePath { get; set; } diff --git a/ZR.CodeGenerator/Model/ReplaceDto.cs b/ZR.CodeGenerator/Model/ReplaceDto.cs index dc76c3d..35effe0 100644 --- a/ZR.CodeGenerator/Model/ReplaceDto.cs +++ b/ZR.CodeGenerator/Model/ReplaceDto.cs @@ -59,7 +59,7 @@ namespace ZR.CodeGenerator.Model public string InputDtoProperty { get; set; } //vue、api - public string VueViewEditFormHtml { get; set; } + public string VueViewFormResetHtml { get; set; } /// /// 前端列表查询html /// @@ -96,5 +96,9 @@ namespace ZR.CodeGenerator.Model /// vue mounted 方法 /// public string MountedMethod { get; set; } + /// + /// views、js文件名 + /// + public string ViewsFileName { get; set; } } } diff --git a/ZR.Vue/src/components/Zr/Git/index.vue b/ZR.Vue/src/components/Zr/Git/index.vue index 88d511f..7369a17 100644 --- a/ZR.Vue/src/components/Zr/Git/index.vue +++ b/ZR.Vue/src/components/Zr/Git/index.vue @@ -9,7 +9,7 @@ export default { name: 'IZoryGit', data() { return { - url: 'https://gitee.com/izhaorui/ZrAdminNetCore' + url: 'https://gitee.com/izory/ZrAdminNetCore' } }, methods: { diff --git a/ZR.Vue/src/views/tool/gen/index.vue b/ZR.Vue/src/views/tool/gen/index.vue index e15b4b6..9731d69 100644 --- a/ZR.Vue/src/views/tool/gen/index.vue +++ b/ZR.Vue/src/views/tool/gen/index.vue @@ -53,7 +53,8 @@ 生成Repository 生成Service 生成Controller - 生成Views和api + 生成Vue和api + 生成Sql文件 @@ -73,7 +74,7 @@