From c1e014a5d05faed37638fe0f6df8a986dfa98547 Mon Sep 17 00:00:00 2001 From: izory <791736813@qq.com> Date: Mon, 6 Sep 2021 18:35:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/BaseController.cs | 10 +- .../Controllers/CodeGeneratorController.cs | 60 ++++ ZR.Admin.WebApi/appsettings.Development.json | 1 + ZR.Admin.WebApi/appsettings.Production.json | 1 + ZR.Model/CodeGenerator/DataBaseInfo.cs | 14 + ZR.Model/CodeGenerator/DbFieldInfo.cs | 78 +++++ ZR.Model/CodeGenerator/DbTableInfo.cs | 75 +++++ .../System/CodeGeneratorRepository.cs | 34 ++ ZR.Service/IService/ICodeGeneratorService.cs | 17 + ZR.Service/System/CodeGeneratorService.cs | 67 ++++ ZR.Vue/src/api/tool/gen.js | 64 ++++ ZR.Vue/src/views/demo.vue | 2 +- ZR.Vue/src/views/tool/index.vue | 300 ++++++++++++++++++ ZRAdmin.xml | 20 ++ 14 files changed, 738 insertions(+), 5 deletions(-) create mode 100644 ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs create mode 100644 ZR.Model/CodeGenerator/DataBaseInfo.cs create mode 100644 ZR.Model/CodeGenerator/DbFieldInfo.cs create mode 100644 ZR.Model/CodeGenerator/DbTableInfo.cs create mode 100644 ZR.Repository/System/CodeGeneratorRepository.cs create mode 100644 ZR.Service/IService/ICodeGeneratorService.cs create mode 100644 ZR.Service/System/CodeGeneratorService.cs create mode 100644 ZR.Vue/src/views/tool/index.vue diff --git a/ZR.Admin.WebApi/Controllers/BaseController.cs b/ZR.Admin.WebApi/Controllers/BaseController.cs index 49413f1..5436fb8 100644 --- a/ZR.Admin.WebApi/Controllers/BaseController.cs +++ b/ZR.Admin.WebApi/Controllers/BaseController.cs @@ -22,6 +22,12 @@ namespace ZR.Admin.WebApi.Controllers return Content(jsonStr, "application/json"); } + protected IActionResult ToRespose(ResultCode resultCode, object data = null) + { + string jsonStr = GetJsonStr(GetApiResult(resultCode, data), ""); + return Content(jsonStr, "application/json"); + } + /// /// json输出带时间格式的 /// @@ -40,10 +46,6 @@ namespace ZR.Admin.WebApi.Controllers return Content(jsonStr, "application/json"); } - protected string SerializeObject(object obj) - { - return JsonConvert.SerializeObject(obj); - } /// /// 响应返回结果 diff --git a/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs new file mode 100644 index 0000000..83c32a1 --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/CodeGeneratorController.cs @@ -0,0 +1,60 @@ +using Infrastructure; +using Infrastructure.Model; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.CodeGenerator; +using ZR.Service.IService; +using ZR.Service.System; + +namespace ZR.Admin.WebApi.Controllers +{ + /// + /// 代码生成 + /// + [Route("codeGenerator")] + public class CodeGeneratorController : BaseController + { + public ICodeGeneratorService CodeGeneratorService; + public CodeGeneratorController(ICodeGeneratorService codeGeneratorService) + { + CodeGeneratorService = codeGeneratorService; + } + + /// + /// 获取所有数据库的信息 + /// + /// + [HttpGet("GetListDataBase")] + //[YuebonAuthorize("GetListDataBase")] + //[NoPermissionRequired] + public IActionResult GetListDataBase() + { + List listTable = CodeGeneratorService.GetAllDataBases("SqlServer"); + + return SUCCESS(listTable); + } + + /// + ///获取所有表根据数据名 + /// + /// 数据库名 + /// 表名 + /// 分页信息 + /// + [HttpGet("FindListTable")] + public IActionResult FindListTable(string enCode, string keywords, PagerInfo pagerInfo) + { + if (string.IsNullOrEmpty(enCode)) + { + return ToRespose(ResultCode.PARAM_ERROR); + } + List listTable = CodeGeneratorService.GetTablesWithPage(keywords, enCode, pagerInfo); + + return SUCCESS(listTable); + } + } +} diff --git a/ZR.Admin.WebApi/appsettings.Development.json b/ZR.Admin.WebApi/appsettings.Development.json index 8d64c6d..7bda31a 100644 --- a/ZR.Admin.WebApi/appsettings.Development.json +++ b/ZR.Admin.WebApi/appsettings.Development.json @@ -18,6 +18,7 @@ "DemoMode": false, //Ƿʾģʽ "DbKey": "", "DbType": 0, //MySql = 0, SqlServer = 1, Sqlite = 2, Oracle = 3, PostgreSQL = 4, + "CodeGenDbType": 0,//ݿ "Upload": { "UploadDirectory": "/", "UploadUrl": "http://localhost:8888" diff --git a/ZR.Admin.WebApi/appsettings.Production.json b/ZR.Admin.WebApi/appsettings.Production.json index 68ffe8e..e709dfb 100644 --- a/ZR.Admin.WebApi/appsettings.Production.json +++ b/ZR.Admin.WebApi/appsettings.Production.json @@ -18,6 +18,7 @@ "DemoMode": false, //Ƿʾģʽ "DbKey": "", "DbType": 0, //MySql = 0, SqlServer = 1, Sqlite = 2, Oracle = 3, PostgreSQL = 4, + "CodeGenDbType": 0, //ݿ "Upload": { "UploadDirectory": "/", "UploadUrl": "http://localhost:8888" diff --git a/ZR.Model/CodeGenerator/DataBaseInfo.cs b/ZR.Model/CodeGenerator/DataBaseInfo.cs new file mode 100644 index 0000000..3d8c16d --- /dev/null +++ b/ZR.Model/CodeGenerator/DataBaseInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ZR.Model.CodeGenerator +{ + public class DataBaseInfo + { + /// + /// 数据库名称 + /// + public string DbName { get; set; } + } +} diff --git a/ZR.Model/CodeGenerator/DbFieldInfo.cs b/ZR.Model/CodeGenerator/DbFieldInfo.cs new file mode 100644 index 0000000..f176895 --- /dev/null +++ b/ZR.Model/CodeGenerator/DbFieldInfo.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; + +namespace ZR.Model +{ + /// + /// 表的字段 + /// + public class DbFieldInfo + { + /// + /// 初始化 + /// + public DbFieldInfo() + { + FieldName = string.Empty; + Description = string.Empty; + } + /// + /// 字段名称 + /// + public string FieldName { get; set; } + /// + /// 描述 + /// + public string Description { get; set; } + /// + /// 系统数据类型,如 int + /// + public string DataType + { + get; + set; + } + + /// + /// 数据库里面存放的类型。 + /// + public string FieldType { get; set; } + + /// + /// 代表小数位精度。 + /// + public long? FieldScale { get; set; } + /// + /// 数据精度,仅数字类型有效,总共多少位数字(10进制)。 + /// 在MySql里面代表了字段长度 + /// + public long? FieldPrecision { get; set; } + + /// + /// + /// + public long? FieldMaxLength { get; set; } + + /// + /// 可空 + /// + public bool IsNullable { get; set; } + /// + /// 是否为主键字段 + /// + public bool IsIdentity { get; set; } + /// + /// 【未用上】该字段是否自增 + /// + public bool Increment { get; set; } + + + /// + /// 默认值 + /// + public string FieldDefaultValue { get; set; } + + } +} diff --git a/ZR.Model/CodeGenerator/DbTableInfo.cs b/ZR.Model/CodeGenerator/DbTableInfo.cs new file mode 100644 index 0000000..0752175 --- /dev/null +++ b/ZR.Model/CodeGenerator/DbTableInfo.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ZR.Model +{ + /// + /// 数据表的信息 + /// + public class DbTableInfo + { + /// + /// 表格ID,表的名称。 + /// + public string TableName { get; set; } + + /// + /// 表的别称,或者描述 + /// + public string Description { get; set; } + /// + /// 字段列表 + /// + public List Fileds { get; set; } + /// + /// 初始化 + /// + public DbTableInfo() + { + Fileds = new List(); + } + + /// + /// 获取主键的名称列表。 + /// + /// + public List GetIdentityList() + { + var list = Fileds.Where(x => x.IsIdentity); + if (list == null) return null; + return list.Select(x => x.FieldName).ToList(); + } + /// + /// 获取主键字段列表 + /// + /// + public List GetIdentityFields() + { + var list = Fileds.Where(x => x.IsIdentity); + if (list == null) return null; + return list.ToList(); + } + /// + /// 获取可空字段。 + /// + /// + public List GetIsNullableFields() + { + var list = Fileds.Where(x => x.IsNullable); + if (list == null) return null; + return list.ToList(); + } + /// + /// 获取不可空字段。 + /// + /// + public List GetNotNullableFields() + { + var list = Fileds.Where(x => !x.IsNullable); + if (list == null) return null; + return list.ToList(); + } + } +} diff --git a/ZR.Repository/System/CodeGeneratorRepository.cs b/ZR.Repository/System/CodeGeneratorRepository.cs new file mode 100644 index 0000000..4e9fedb --- /dev/null +++ b/ZR.Repository/System/CodeGeneratorRepository.cs @@ -0,0 +1,34 @@ +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.CodeGenerator; + +namespace ZR.Repository.System +{ + [AppService(ServiceLifetime = LifeTime.Transient)] + public class CodeGeneratorRepository: BaseRepository + { + /// + /// 获取数据库信息 + /// + /// + public List GetAllDataBaseInfos() + { + return Db.Ado.SqlQuery("select name as DbName from master..sysdatabases "); + } + + /// + /// 获取所有的表 + /// + /// + public List GetAllTables(string dbName) + { + string sql = $"SELECT name as TableName FROM {dbName}..SysObjects Where XType='U' ORDER BY Name"; + return Db.Ado.SqlQuery(sql, new { dbName}); + } + } +} diff --git a/ZR.Service/IService/ICodeGeneratorService.cs b/ZR.Service/IService/ICodeGeneratorService.cs new file mode 100644 index 0000000..db7798e --- /dev/null +++ b/ZR.Service/IService/ICodeGeneratorService.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.CodeGenerator; + +namespace ZR.Service.IService +{ + public interface ICodeGeneratorService + { + List GetAllDataBases(string dbType); + + List GetTablesWithPage(string tablename, string dbName, PagerInfo info); + } +} diff --git a/ZR.Service/System/CodeGeneratorService.cs b/ZR.Service/System/CodeGeneratorService.cs new file mode 100644 index 0000000..2a8b4f7 --- /dev/null +++ b/ZR.Service/System/CodeGeneratorService.cs @@ -0,0 +1,67 @@ +using Infrastructure; +using Infrastructure.Attribute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.CodeGenerator; +using ZR.Repository.System; +using ZR.Service.IService; + +namespace ZR.Service.System +{ + /// + /// + /// + [AppService(ServiceType = typeof(ICodeGeneratorService), ServiceLifetime = LifeTime.Transient)] + public class CodeGeneratorService: ICodeGeneratorService + { + public CodeGeneratorRepository CodeGeneratorRepository; + + public CodeGeneratorService(CodeGeneratorRepository codeGeneratorRepository) + { + CodeGeneratorRepository = codeGeneratorRepository; + } + + /// + /// 获取所有数据库名 + /// + /// + public List GetAllDataBases(string dbType) + { + List list = new List(); + if (dbType.Contains("SqlServer")) + { + list = CodeGeneratorRepository.GetAllDataBaseInfos(); + } + else if (dbType.Contains("MySql")) + { + // list = mssqlExtractor.GetAllDataBases(); + } + return list; + } + + public List GetTablesWithPage(string tablename, string dbName, PagerInfo info) + { + var dbType = ConfigUtils.Instance.GetConfig("CodeGenDbType"); + List list = new List(); + if (dbType == "1") + { + list = CodeGeneratorRepository.GetAllTables(dbName); + } + else if (dbType.Contains("MySql")) + { + //list = mysqlExtractor.GetAllTables(this.dbName, tablename, fieldNameToSort, isDescending, info); + } + if (!string.IsNullOrEmpty(tablename)) + { + list = list.Where(f => f.TableName.Contains(tablename)).ToList(); + } + + return list; + } + + } +} diff --git a/ZR.Vue/src/api/tool/gen.js b/ZR.Vue/src/api/tool/gen.js index 4506927..88e4a3d 100644 --- a/ZR.Vue/src/api/tool/gen.js +++ b/ZR.Vue/src/api/tool/gen.js @@ -74,3 +74,67 @@ export function synchDb(tableName) { method: 'get' }) } + +/**新的代码生成 */ + +/** + * 创建数据库连接 + */ + export function createGetDBConn(data) { + return request({ + url: 'CodeGenerator/CreateDBConn', + method: 'post', + data: data, + }) +} +/** + * 获取数据库 + */ +export function codeGetDBList() { + return request({ + url: 'CodeGenerator/GetListDataBase', + method: 'get', + }) +} +/** + * 获取数据库表 + */ +export function codeGetTableList(data) { + return request({ + url: 'CodeGenerator/FindListTable', + method: 'get', + params: data, + }) +} +/** + * 生成代码 + */ +export async function codeGenerator(data) { + return await request({ + url: 'CodeGenerator/Generate', + method: 'get', + params: data, + timeout: 0, + }) +} +/** + * +* 数据库解密 +*/ +export function dbtoolsConnStrDecrypt(data) { + return request({ + url: 'DbTools/ConnStrDecrypt', + method: 'post', + params: data, + }) +} +/** + * 数据库加密 + */ +export function dbtoolsConnStrEncrypt(data) { + return request({ + url: 'DbTools/ConnStrEncrypt', + method: 'post', + params: data, + }) +} diff --git a/ZR.Vue/src/views/demo.vue b/ZR.Vue/src/views/demo.vue index 51f7a1e..7c0c302 100644 --- a/ZR.Vue/src/views/demo.vue +++ b/ZR.Vue/src/views/demo.vue @@ -158,7 +158,7 @@ export default { name: "你好", userId: 1000001, sortId: 1, - address: "浙江省杭州市西湖区", + address: "", content: "我是一个超长超长的文字啊", addtime: "2021-8-7 23:00:00", }, diff --git a/ZR.Vue/src/views/tool/index.vue b/ZR.Vue/src/views/tool/index.vue new file mode 100644 index 0000000..56a51b4 --- /dev/null +++ b/ZR.Vue/src/views/tool/index.vue @@ -0,0 +1,300 @@ + + + diff --git a/ZRAdmin.xml b/ZRAdmin.xml index de38893..974524e 100644 --- a/ZRAdmin.xml +++ b/ZRAdmin.xml @@ -27,6 +27,26 @@ + + + 代码生成 + + + + + 获取所有数据库的信息 + + + + + + 获取所有表根据数据名 + + 数据库名 + 表名 + 分页信息 + + 心跳