优化代码生成

This commit is contained in:
izory 2021-09-19 20:50:49 +08:00
parent 08c989d73d
commit 06ec7b0ddc
7 changed files with 67 additions and 66 deletions

View File

@ -9,9 +9,6 @@ namespace Infrastructure
public static string ConnAdmin = "conn_zrAdmin"; public static string ConnAdmin = "conn_zrAdmin";
public static string DbType = "conn_admin_Type"; public static string DbType = "conn_admin_Type";
public static string DbKey = "DbKey"; public static string DbKey = "DbKey";
public static string Gen_conn = "gen:conn";
public static string Gen_conn_dbType = "gen:dbType";
public static string Gen_author = "gen:author";
public string Conn_Admin { get; set; } public string Conn_Admin { get; set; }
public string AppName { get; set; } public string AppName { get; set; }

View File

@ -36,7 +36,7 @@ Vue版前端技术栈 基于vue、vuex、vue-router 、vue-cli 、axios 和 e
## 🍄快速启动 ## 🍄快速启动
需要安装VS2019最新版、npm或yarn最新版 需要安装VS2019最新版、npm或yarn最新版
准备工作将document文件夹下面的admin.sql脚本导入到数据库中修改ZRAdmin项目里面的Conn_Admin数据库连接字符串以及DbType选择对应的数据库类型目前仅MySQL验证了 准备工作将document文件夹下面的admin.sql脚本导入到数据库中修改ZR.Admin.WebApi项目里面配置文件中的conn_zrAdmin数据库连接字符串以及DbType选择对应的数据库类型目前仅支持MySQL、SQL server
启动后台打开项目根目录的startup.bat即可启动数据库默认MySQL 启动后台打开项目根目录的startup.bat即可启动数据库默认MySQL
启动前端打开ZR.Vue文件夹运行npm install命令再运行npm run serve启动 启动前端打开ZR.Vue文件夹运行npm install命令再运行npm run serve启动
浏览器访问http://localhost:8887 默认前端端口为8887后台端口为8888 浏览器访问http://localhost:8887 默认前端端口为8887后台端口为8888
@ -92,6 +92,10 @@ Vue版前端技术栈 基于vue、vuex、vue-router 、vue-cli 、axios 和 e
<td><img src="https://www.izhaorui.cn/images/zradmin/13.png"/></td> <td><img src="https://www.izhaorui.cn/images/zradmin/13.png"/></td>
<td><img src="https://www.izhaorui.cn/images/zradmin/14.png"/></td> <td><img src="https://www.izhaorui.cn/images/zradmin/14.png"/></td>
</tr> </tr>
<tr>
<td><img src="https://www.izhaorui.cn/images/zradmin/15.png"/></td>
<td><img src="https://www.izhaorui.cn/images/zradmin/16.png"/></td>
</tr>
</table> </table>
## 🎉优势 ## 🎉优势

View File

@ -183,7 +183,7 @@ namespace ZR.Admin.WebApi.Controllers
ModuleName = "bus", ModuleName = "bus",
ClassName = CodeGeneratorTool.GetClassName(tableName), ClassName = CodeGeneratorTool.GetClassName(tableName),
BusinessName = CodeGeneratorTool.GetClassName(tableName), BusinessName = CodeGeneratorTool.GetClassName(tableName),
FunctionAuthor = ConfigUtils.Instance.GetConfig(OptionsSetting.Gen_author), FunctionAuthor = ConfigUtils.Instance.GetConfig(GenConstants.Gen_author),
FunctionName = tabInfo.Description, FunctionName = tabInfo.Description,
TableName = tableName, TableName = tableName,
TableComment = tabInfo.Description, TableComment = tabInfo.Description,
@ -211,8 +211,8 @@ namespace ZR.Admin.WebApi.Controllers
IsIncrement = column.IsIdentity, IsIncrement = column.IsIdentity,
Create_by = userName, Create_by = userName,
Create_time = DateTime.Now, Create_time = DateTime.Now,
IsInsert = true, IsInsert = !column.IsIdentity && !column.IsPrimarykey,
IsEdit = true, IsEdit = !column.IsIdentity && !column.IsPrimarykey,
IsList = true, IsList = true,
IsQuery = false, IsQuery = false,
HtmlType = GenConstants.HTML_INPUT HtmlType = GenConstants.HTML_INPUT

View File

@ -1,11 +1,9 @@
using Infrastructure; using Infrastructure;
using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ZR.CodeGenerator.Model; using ZR.CodeGenerator.Model;
using ZR.CodeGenerator.Service;
using ZR.Model.System.Generate; using ZR.Model.System.Generate;
namespace ZR.CodeGenerator namespace ZR.CodeGenerator
@ -64,9 +62,9 @@ namespace ZR.CodeGenerator
public static void GenerateSingle(List<GenTableColumn> listField, GenTable tableInfo, GenerateDto dto) public static void GenerateSingle(List<GenTableColumn> listField, GenTable tableInfo, GenerateDto dto)
{ {
var modelTypeName = tableInfo.ClassName;//表名对应C# 实体类名 var modelTypeName = tableInfo.ClassName;//表名对应C# 实体类名
var primaryKey = "id";//主键
string keyTypeName = "int";//主键数据类型 string PKName = "id";
string PKType = "int";
string modelContent = "";//数据库模型字段 string modelContent = "";//数据库模型字段
string InputDtoContent = "";//输入模型 string InputDtoContent = "";//输入模型
//string outputDtoContent = "";//输出模型 //string outputDtoContent = "";//输出模型
@ -74,32 +72,25 @@ namespace ZR.CodeGenerator
string vueViewListContent = string.Empty;//Vue列表输出内容 string vueViewListContent = string.Empty;//Vue列表输出内容
string vueViewFormContent = string.Empty;//Vue表单输出内容 string vueViewFormContent = string.Empty;//Vue表单输出内容
string vueViewEditFromContent = string.Empty;//Vue变量输出内容 string vueViewEditFromContent = string.Empty;//Vue变量输出内容
string vueViewEditFromBindContent = string.Empty;//Vue显示初始化输出内容
string vueViewSaveBindContent = string.Empty;//Vue保存时输出内容
string vueViewEditFromRuleContent = string.Empty;//Vue数据校验 string vueViewEditFromRuleContent = string.Empty;//Vue数据校验
string vueJsMethod = string.Empty;//Vue js自定义方法 string vueJsMethod = string.Empty;//Vue js自定义方法
//循环表字段信息
foreach (GenTableColumn dbFieldInfo in listField) foreach (GenTableColumn dbFieldInfo in listField)
{ {
string columnName = dbFieldInfo.ColumnName; string columnName = dbFieldInfo.ColumnName;
if (dbFieldInfo.ColumnType == "bool" || dbFieldInfo.ColumnType == "tinyint") if (dbFieldInfo.IsInsert || dbFieldInfo.IsEdit)
{
vueViewEditFromContent += $" {columnName}: 'true',\n";
}
else
{ {
vueViewEditFromContent += $" {columnName}: undefined,\n"; vueViewEditFromContent += $" {columnName}: undefined,\n";
} }
//主键
if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
{ {
primaryKey = columnName.Substring(0, 1).ToUpper() + columnName[1..]; PKName = dbFieldInfo.CsharpField;
keyTypeName = dbFieldInfo.CsharpType; PKType = dbFieldInfo.CsharpType;
} }
//编辑字段 //编辑字段
if (dbFieldInfo.IsEdit && (!dbFieldInfo.IsPk || !dbFieldInfo.IsIncrement)) if (dbFieldInfo.IsEdit)
{ {
updateColumn += $" {dbFieldInfo.CsharpField} = parm.{dbFieldInfo.CsharpField},\n"; updateColumn += $" {dbFieldInfo.CsharpField} = parm.{dbFieldInfo.CsharpField},\n";
} }
@ -112,8 +103,8 @@ namespace ZR.CodeGenerator
InputDtoContent += CodeGenerateTemplate.GetDtoContent(dbFieldInfo); InputDtoContent += CodeGenerateTemplate.GetDtoContent(dbFieldInfo);
} }
ReplaceDto replaceDto = new(); ReplaceDto replaceDto = new();
replaceDto.KeyTypeName = keyTypeName; replaceDto.PKName = PKName;
replaceDto.PrimaryKey = primaryKey; replaceDto.PKType = PKType;
replaceDto.ModelTypeName = modelTypeName; replaceDto.ModelTypeName = modelTypeName;
replaceDto.ModelProperty = modelContent; replaceDto.ModelProperty = modelContent;
replaceDto.TableName = tableInfo.TableName; replaceDto.TableName = tableInfo.TableName;
@ -121,10 +112,10 @@ namespace ZR.CodeGenerator
replaceDto.InputDtoProperty = InputDtoContent; replaceDto.InputDtoProperty = InputDtoContent;
replaceDto.updateColumn = updateColumn; replaceDto.updateColumn = updateColumn;
replaceDto.VueJsMethod = vueJsMethod; replaceDto.VueJsMethod = vueJsMethod;
replaceDto.VueViewEditFormContent = vueViewEditFromContent; replaceDto.VueViewEditFormHtml = vueViewEditFromContent;
replaceDto.VueViewFormContent = vueViewFormContent; replaceDto.VueViewFormHtml = vueViewFormContent;
replaceDto.VueViewEditFormRuleContent = vueViewEditFromRuleContent; replaceDto.VueViewEditFormRuleContent = vueViewEditFromRuleContent;
replaceDto.VueViewListContent = vueViewListContent; replaceDto.VueViewListHtml = vueViewListContent;
if (dto.genFiles.Contains(1)) if (dto.genFiles.Contains(1))
{ {
@ -161,13 +152,8 @@ namespace ZR.CodeGenerator
/// <summary> /// <summary>
/// 生成Models文件 /// 生成Models文件
/// </summary> /// </summary>
/// <param name="modelsNamespace">命名空间</param> /// <param name="generateDto"></param>
/// <param name="modelTypeName">类名</param> /// <param name="replaceDto">替换实体</param>
/// <param name="tableName">表名称</param>
/// <param name="modelTypeDesc">表描述</param>
/// <param name="modelContent">数据库表实体内容</param>
/// <param name="keyTypeName">主键数据类型</param>
/// <param name="ifExsitedCovered">如果目标文件存在是否覆盖。默认为false</param>
private static Tuple<string, string> GenerateModels(ReplaceDto replaceDto, GenerateDto generateDto) private static Tuple<string, string> GenerateModels(ReplaceDto replaceDto, GenerateDto generateDto)
{ {
var parentPath = ".."; var parentPath = "..";
@ -187,7 +173,7 @@ namespace ZR.CodeGenerator
.Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{TableNameDesc}", replaceDto.TableDesc) .Replace("{TableNameDesc}", replaceDto.TableDesc)
.Replace("{KeyTypeName}", replaceDto.KeyTypeName) .Replace("{KeyTypeName}", replaceDto.PKName)
.Replace("{PropertyName}", replaceDto.ModelProperty) .Replace("{PropertyName}", replaceDto.ModelProperty)
.Replace("{TableName}", replaceDto.TableName); .Replace("{TableName}", replaceDto.TableName);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
@ -199,7 +185,7 @@ namespace ZR.CodeGenerator
/// 生成InputDto文件 /// 生成InputDto文件
/// </summary> /// </summary>
/// <param name="generateDto"></param> /// <param name="generateDto"></param>
/// <param name="replaceDto"></param> /// <param name="replaceDto">替换实体</param>
private static Tuple<string, string> GenerateInputDto(ReplaceDto replaceDto, GenerateDto generateDto) private static Tuple<string, string> GenerateInputDto(ReplaceDto replaceDto, GenerateDto generateDto)
{ {
var parentPath = ".."; var parentPath = "..";
@ -218,7 +204,6 @@ namespace ZR.CodeGenerator
.Replace("{DtosNamespace}", _option.DtosNamespace) .Replace("{DtosNamespace}", _option.DtosNamespace)
.Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{TableNameDesc}", replaceDto.TableDesc) .Replace("{TableNameDesc}", replaceDto.TableDesc)
.Replace("{KeyTypeName}", replaceDto.KeyTypeName)
.Replace("{PropertyName}", replaceDto.InputDtoProperty) .Replace("{PropertyName}", replaceDto.InputDtoProperty)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName); .Replace("{ModelTypeName}", replaceDto.ModelTypeName);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
@ -231,11 +216,8 @@ namespace ZR.CodeGenerator
/// <summary> /// <summary>
/// 生成Repository层代码文件 /// 生成Repository层代码文件
/// </summary> /// </summary>
/// <param name="modelTypeName"></param> /// <param name="generateDto"></param>
/// <param name="modelTypeDesc"></param> /// <param name="replaceDto">替换实体</param>
/// <param name="tableName">表名</param>
/// <param name="keyTypeName"></param>
/// <param name="ifExsitedCovered">如果目标文件存在是否覆盖。默认为false</param>
private static Tuple<string, string> GenerateRepository(ReplaceDto replaceDto, GenerateDto generateDto) private static Tuple<string, string> GenerateRepository(ReplaceDto replaceDto, GenerateDto generateDto)
{ {
var parentPath = ".."; var parentPath = "..";
@ -254,8 +236,8 @@ namespace ZR.CodeGenerator
.Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace) .Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{TableNameDesc}", replaceDto.TableDesc) .Replace("{TableNameDesc}", replaceDto.TableDesc)
.Replace("{TableName}", replaceDto.TableName) .Replace("{TableName}", replaceDto.TableName);
.Replace("{KeyTypeName}", replaceDto.KeyTypeName);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
return Tuple.Create(fullPath, content); return Tuple.Create(fullPath, content);
} }
@ -266,6 +248,8 @@ namespace ZR.CodeGenerator
/// <summary> /// <summary>
/// 生成IService文件 /// 生成IService文件
/// </summary> /// </summary>
/// <param name="generateDto"></param>
/// <param name="replaceDto">替换实体</param>
private static Tuple<string, string> GenerateIService(ReplaceDto replaceDto, GenerateDto generateDto) private static Tuple<string, string> GenerateIService(ReplaceDto replaceDto, GenerateDto generateDto)
{ {
var parentPath = ".."; var parentPath = "..";
@ -284,8 +268,8 @@ namespace ZR.CodeGenerator
.Replace("{DtosNamespace}", _option.DtosNamespace) .Replace("{DtosNamespace}", _option.DtosNamespace)
.Replace("{IServicsNamespace}", _option.IServicsNamespace) .Replace("{IServicsNamespace}", _option.IServicsNamespace)
.Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace) .Replace("{RepositoriesNamespace}", _option.RepositoriesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeName}", replaceDto.ModelTypeName);
.Replace("{KeyTypeName}", replaceDto.KeyTypeName);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
return Tuple.Create(fullPath, content); return Tuple.Create(fullPath, content);
} }
@ -313,8 +297,8 @@ namespace ZR.CodeGenerator
.Replace("{TableNameDesc}", replaceDto.TableDesc) .Replace("{TableNameDesc}", replaceDto.TableDesc)
.Replace("{ModelsNamespace}", _option.ModelsNamespace) .Replace("{ModelsNamespace}", _option.ModelsNamespace)
.Replace("{ServicesNamespace}", _option.ServicesNamespace) .Replace("{ServicesNamespace}", _option.ServicesNamespace)
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeName}", replaceDto.ModelTypeName);
.Replace("{KeyTypeName}", replaceDto.KeyTypeName);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
return Tuple.Create(fullPath, content); return Tuple.Create(fullPath, content);
} }
@ -345,9 +329,9 @@ namespace ZR.CodeGenerator
.Replace("{TableDesc}", replaceDto.TableDesc) .Replace("{TableDesc}", replaceDto.TableDesc)
.Replace("{ModelName}", replaceDto.ModelTypeName) .Replace("{ModelName}", replaceDto.ModelTypeName)
.Replace("{Permission}", replaceDto.ModelTypeName.ToLower()) .Replace("{Permission}", replaceDto.ModelTypeName.ToLower())
.Replace("{PrimaryKey}", replaceDto.PrimaryKey) .Replace("{PrimaryKey}", replaceDto.PKName)
.Replace("{UpdateColumn}", replaceDto.updateColumn) .Replace("{UpdateColumn}", replaceDto.updateColumn)
.Replace("{KeyTypeName}", replaceDto.KeyTypeName); .Replace("{KeyTypeName}", replaceDto.PKType);
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
return Tuple.Create(fullPath, content); return Tuple.Create(fullPath, content);
} }
@ -372,15 +356,15 @@ namespace ZR.CodeGenerator
var content = ReadTemplate("VueTemplate.txt"); var content = ReadTemplate("VueTemplate.txt");
content = content content = content
.Replace("{fileClassName}", FirstLowerCase(replaceDto.ModelTypeName)) .Replace("{fileClassName}", FirstLowerCase(replaceDto.ModelTypeName))
.Replace("{VueViewListContent}", replaceDto.VueViewListContent)//查询 table列 .Replace("{VueViewListContent}", replaceDto.VueViewListHtml)//查询 table列
.Replace("{VueViewFormContent}", replaceDto.VueViewFormContent)//添加、修改表单 .Replace("{VueViewFormContent}", replaceDto.VueViewFormHtml)//添加、修改表单
.Replace("{ModelTypeName}", replaceDto.ModelTypeName) .Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{Permission}", replaceDto.ModelTypeName.ToLower()) .Replace("{Permission}", replaceDto.ModelTypeName.ToLower())
.Replace("{VueViewEditFormContent}", replaceDto.VueViewEditFormContent) .Replace("{VueViewEditFormContent}", replaceDto.VueViewEditFormHtml)
.Replace("{vueJsMethod}", replaceDto.VueJsMethod) .Replace("{vueJsMethod}", replaceDto.VueJsMethod)
//.Replace("{VueViewEditFromBindContent}", vueViewEditFromBindContent) //.Replace("{VueViewEditFromBindContent}", vueViewEditFromBindContent)
//.Replace("{VueViewSaveBindContent}", vueViewSaveBindContent) //.Replace("{VueViewSaveBindContent}", vueViewSaveBindContent)
.Replace("{primaryKey}", FirstLowerCase(replaceDto.PrimaryKey)) .Replace("{primaryKey}", FirstLowerCase(replaceDto.PKName))
.Replace("{VueViewEditFormRuleContent}", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则 .Replace("{VueViewEditFormRuleContent}", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
WriteAndSave(fullPath, content); WriteAndSave(fullPath, content);
@ -412,8 +396,8 @@ namespace ZR.CodeGenerator
/// <returns></returns> /// <returns></returns>
public static string GetClassName(string tableName) public static string GetClassName(string tableName)
{ {
bool autoRemovePre = ConfigUtils.Instance.GetAppConfig("gen:autoPre", false); bool autoRemovePre = ConfigUtils.Instance.GetAppConfig(GenConstants.Gen_autoPre, false);
string tablePrefix = ConfigUtils.Instance.GetAppConfig<string>("gen:tablePrefix"); string tablePrefix = ConfigUtils.Instance.GetAppConfig<string>(GenConstants.Gen_tablePrefix);
if (!string.IsNullOrEmpty(tablePrefix) && autoRemovePre) if (!string.IsNullOrEmpty(tablePrefix) && autoRemovePre)
{ {
@ -422,7 +406,7 @@ namespace ZR.CodeGenerator
{ {
if (!string.IsNullOrEmpty(searcList[i].ToString())) if (!string.IsNullOrEmpty(searcList[i].ToString()))
{ {
tableName = tableName.Replace(searcList[i].ToString(), ""); tableName = tableName.Replace(searcList[i], "");
} }
} }
} }

View File

@ -22,8 +22,8 @@ namespace ZR.CodeGenerator
/// <returns></returns> /// <returns></returns>
public SqlSugarScope GetSugarDbContext(string dbName = "") public SqlSugarScope GetSugarDbContext(string dbName = "")
{ {
string connStr = ConfigUtils.Instance.GetConfig(OptionsSetting.Gen_conn); string connStr = ConfigUtils.Instance.GetConfig(GenConstants.Gen_conn);
int dbType = ConfigUtils.Instance.GetAppConfig(OptionsSetting.Gen_conn_dbType, 0); int dbType = ConfigUtils.Instance.GetAppConfig(GenConstants.Gen_conn_dbType, 0);
connStr = connStr.Replace("{database}", dbName); connStr = connStr.Replace("{database}", dbName);
if (string.IsNullOrEmpty(dbName)) if (string.IsNullOrEmpty(dbName))
{ {

View File

@ -11,6 +11,12 @@ namespace ZR.CodeGenerator
/// </summary> /// </summary>
public class GenConstants public class GenConstants
{ {
public static string Gen_conn = "gen:conn";
public static string Gen_conn_dbType = "gen:dbType";
public static string Gen_author = "gen:author";
public static string Gen_autoPre = "gen:autoPre";
public static string Gen_tablePrefix = "gen:tablePrefix";
/** 单表(增删改查) */ /** 单表(增删改查) */
public static string TPL_CRUD = "crud"; public static string TPL_CRUD = "crud";

View File

@ -18,11 +18,11 @@ namespace ZR.CodeGenerator.Model
/// <summary> /// <summary>
/// 主键字段 /// 主键字段
/// </summary> /// </summary>
public string PrimaryKey { get; set; } public string PKName { get; set; }
/// <summary> /// <summary>
/// 主键类型 /// 主键类型
/// </summary> /// </summary>
public string KeyTypeName { get; set; } public string PKType { get; set; }
/// <summary> /// <summary>
/// 控制器权限 /// 控制器权限
/// </summary> /// </summary>
@ -52,9 +52,19 @@ namespace ZR.CodeGenerator.Model
public string InputDtoProperty { get; set; } public string InputDtoProperty { get; set; }
//vue、api //vue、api
public string VueViewEditFormContent { get; set; } public string VueViewEditFormHtml { get; set; }
public string VueViewListContent { get; set; } /// <summary>
public string VueViewFormContent { get; set; } /// 前端列表查询html
/// </summary>
public string VueViewListHtml { get; set; }
/// <summary>
/// 前端添加、编辑表格html
/// </summary>
public string VueViewFormHtml { get; set; }
/// <summary>
/// 前端搜索表单html
/// </summary>
public string VueQueryFormHtml { get; set; }
public string VueJsMethod { get; set; } public string VueJsMethod { get; set; }
public string VueViewEditFormRuleContent { get; set; } public string VueViewEditFormRuleContent { get; set; }
} }