diff --git a/backend/Magic.Core/Service/DataBase/DataBaseManager.cs b/backend/Magic.Core/Service/DataBase/DataBaseManager.cs
index d4320cdec05b3937af67fb50e26a1ffdbac2de66..3afa0aa9b803e7acd68bf01161646ac2e7fedd23 100644
--- a/backend/Magic.Core/Service/DataBase/DataBaseManager.cs
+++ b/backend/Magic.Core/Service/DataBase/DataBaseManager.cs
@@ -3,6 +3,7 @@ using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Furion.ViewEngine;
+using Magic.Core.Service.DataBase.Extension;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
@@ -13,216 +14,224 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace Magic.Core.Service;
-
-///
-/// 数据库管理
-///
-[ApiDescriptionSettings(Name = "DataBase", Order = 200)]
-public class DataBaseManager : IDataBaseManager, IDynamicApiController, ITransient
+namespace Magic.Core.Service
{
- private readonly ISqlSugarClient _sqlSugarClient;
- private readonly IViewEngine _viewEngine;
- public DataBaseManager(ISqlSugarClient sqlSugarClient, IViewEngine viewEngine)
- {
- _sqlSugarClient = sqlSugarClient;
- _viewEngine = viewEngine;
- }
///
- /// 添加列
+ /// 数据库管理
///
- ///
- [HttpPost("/column/add")]
- public void ColumnAdd(DbColumnInfoInput input)
+ [ApiDescriptionSettings(Name = "DataBase", Order = 200)]
+ public class DataBaseManager : IDataBaseManager, IDynamicApiController, ITransient
{
- DbColumnInfo column = new DbColumnInfo();
- column.ColumnDescription = input.ColumnDescription;
- column.DbColumnName = input.DbColumnName;
- column.IsIdentity = input.IsIdentity == 1;
- column.IsNullable = input.IsNullable == 1;
- column.IsPrimarykey = input.IsPrimarykey == 1;
- column.Length = input.Length;
- column.DecimalDigits = input.DecimalDigits;
- column.DataType = input.DataType;
- _sqlSugarClient.DbMaintenance.AddColumn(input.TableName, column);
- _sqlSugarClient.DbMaintenance.AddColumnRemark(input.DbColumnName, input.TableName, input.ColumnDescription);
- if (column.IsPrimarykey)
+ private readonly ISqlSugarClient _sqlSugarClient;
+ private readonly IViewEngine _viewEngine;
+
+ public DataBaseManager(ISqlSugarClient sqlSugarClient, IViewEngine viewEngine)
{
- _sqlSugarClient.DbMaintenance.AddPrimaryKey(input.TableName, input.DbColumnName);
+ _sqlSugarClient = sqlSugarClient;
+ _viewEngine = viewEngine;
}
- }
-
- ///
- /// 删除列
- ///
- ///
- [HttpPost("/column/delete")]
- public void ColumnDelete(DbColumnInfoOutput input)
- {
- _sqlSugarClient.DbMaintenance.DropColumn(input.TableName, input.DbColumnName);
- }
- ///
- /// 编辑列
- ///
- ///
- [HttpPost("/column/edit")]
- public void ColumnEdit(EditColumnInput input)
- {
- _sqlSugarClient.DbMaintenance.RenameColumn(input.TableName, input.OldName, input.DbColumnName);
- if (_sqlSugarClient.DbMaintenance.IsAnyColumnRemark(input.DbColumnName, input.TableName)) {
- _sqlSugarClient.DbMaintenance.DeleteColumnRemark(input.DbColumnName, input.TableName);
+ ///
+ /// 添加列
+ ///
+ ///
+ [HttpPost("/column/add")]
+ public void ColumnAdd(DbColumnInfoInput input)
+ {
+ DbColumnInfo column = new DbColumnInfo();
+ column.ColumnDescription = input.ColumnDescription;
+ column.DbColumnName = input.DbColumnName;
+ column.IsIdentity = input.IsIdentity == 1;
+ column.IsNullable = input.IsNullable == 1;
+ column.IsPrimarykey = input.IsPrimarykey == 1;
+ column.Length = input.Length;
+ column.DecimalDigits = input.DecimalDigits;
+ column.DataType = input.DataType;
+ _sqlSugarClient.DbMaintenance.AddColumn(input.TableName, column);
+ _sqlSugarClient.DbMaintenance.AddColumnRemarkEx(input.DbColumnName, input.TableName, input.ColumnDescription);
+ if (column.IsPrimarykey)
+ {
+ _sqlSugarClient.DbMaintenance.AddPrimaryKey(input.TableName, input.DbColumnName);
+ }
}
- _sqlSugarClient.DbMaintenance.AddColumnRemark(input.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(input.ColumnDescription) ? input.DbColumnName : input.ColumnDescription);
- }
+ ///
+ /// 删除列
+ ///
+ ///
+ [HttpPost("/column/delete")]
+ public void ColumnDelete(DbColumnInfoOutput input)
+ {
+ _sqlSugarClient.DbMaintenance.DropColumn(input.TableName, input.DbColumnName);
+ }
+ ///
+ /// 编辑列
+ ///
+ ///
+ [HttpPost("/column/edit")]
+ public void ColumnEdit(EditColumnInput input)
+ {
+ _sqlSugarClient.DbMaintenance.RenameColumn(input.TableName, input.OldName, input.DbColumnName);
+ if (_sqlSugarClient.DbMaintenance.IsAnyColumnRemarkEx(input.DbColumnName, input.TableName))
+ {
+ _sqlSugarClient.DbMaintenance.DeleteColumnRemark(input.DbColumnName, input.TableName);
+ }
+ _sqlSugarClient.DbMaintenance.AddColumnRemarkEx(input.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(input.ColumnDescription) ? input.DbColumnName : input.ColumnDescription);
+ }
- ///
- /// 获取表字段
- ///
- ///
- ///
- [HttpGet("/dataBase/columnInfoList")]
- public List GetColumnInfosByTableName(string tableName)
- {
- if (string.IsNullOrWhiteSpace(tableName))
- return new List();
- return _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt>();
- }
+ ///
+ /// 获取表字段
+ ///
+ ///
+ ///
+ [HttpGet("/dataBase/columnInfoList")]
+ public List GetColumnInfosByTableName(string tableName)
+ {
+ if (string.IsNullOrWhiteSpace(tableName))
+ return new List();
+ return _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt>();
+ }
- ///
- /// 获取所有表
- ///
- ///
- [HttpGet("/dataBase/tableInfoList")]
- public List GetTableInfoList()
- {
- return _sqlSugarClient.DbMaintenance.GetTableInfoList(false);
- }
- ///
- /// 新增表
- ///
- ///
- [HttpPost("/table/add")]
- public void TableAdd(DbTableInfoInput input)
- {
- List columns = new List();
- if (input.DbColumnInfoList == null || !input.DbColumnInfoList.Any())
+ ///
+ /// 获取所有表
+ ///
+ ///
+ [HttpGet("/dataBase/tableInfoList")]
+ public List GetTableInfoList()
{
- throw Oops.Oh(ErrorCode.db1000);
+ return _sqlSugarClient.DbMaintenance.GetTableInfoList(false);
}
- input.DbColumnInfoList.ForEach(m =>
+
+ ///
+ /// 新增表
+ ///
+ ///
+ [HttpPost("/table/add")]
+ public void TableAdd(DbTableInfoInput input)
{
- columns.Add(new DbColumnInfo
+ List columns = new List();
+ if (input.DbColumnInfoList == null || !input.DbColumnInfoList.Any())
{
- DbColumnName = m.DbColumnName,
- DataType = m.DataType,
- Length = m.Length,
- ColumnDescription = m.ColumnDescription,
- IsNullable = m.IsNullable == 1,
- IsIdentity = m.IsIdentity == 1,
- IsPrimarykey = m.IsPrimarykey == 1,
- DecimalDigits = m.DecimalDigits
+ throw Oops.Oh(ErrorCode.db1000);
+ }
+ input.DbColumnInfoList.ForEach(m =>
+ {
+ columns.Add(new DbColumnInfo
+ {
+ DbColumnName = m.DbColumnName,
+ DataType = m.DataType,
+ Length = m.Length,
+ ColumnDescription = m.ColumnDescription,
+ IsNullable = m.IsNullable == 1,
+ IsIdentity = m.IsIdentity == 1,
+ IsPrimarykey = m.IsPrimarykey == 1,
+ DecimalDigits = m.DecimalDigits
+ });
+ });
+ _sqlSugarClient.DbMaintenance.CreateTable(input.Name, columns, false);
+ _sqlSugarClient.DbMaintenance.AddTableRemark(input.Name, input.Description);
+ if (columns.Any(m => m.IsPrimarykey))
+ {
+ _sqlSugarClient.DbMaintenance.AddPrimaryKey(input.Name, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
+ }
+ input.DbColumnInfoList.ForEach(m =>
+ {
+ _sqlSugarClient.DbMaintenance.AddColumnRemarkEx(m.DbColumnName, input.Name, m.DbColumnName);
});
- });
- _sqlSugarClient.DbMaintenance.CreateTable(input.Name, columns, false);
- _sqlSugarClient.DbMaintenance.AddTableRemark(input.Name, input.Description);
- if (columns.Any(m => m.IsPrimarykey))
- {
- _sqlSugarClient.DbMaintenance.AddPrimaryKey(input.Name, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
}
- input.DbColumnInfoList.ForEach(m =>
+
+ ///
+ /// 删除表
+ ///
+ ///
+ [HttpPost("/table/delete")]
+ public void TableDelete(DbTableInfo input)
{
- _sqlSugarClient.DbMaintenance.AddColumnRemark(m.DbColumnName, input.Name, string.IsNullOrWhiteSpace(m.ColumnDescription) ? m.DbColumnName : m.ColumnDescription);
- });
- }
- ///
- /// 删除表
- ///
- ///
- [HttpPost("/table/delete")]
- public void TableDelete(DbTableInfo input)
- {
- _sqlSugarClient.DbMaintenance.DropTable(input.Name);
- }
- ///
- /// 编辑表
- ///
- ///
- [HttpPost("/table/edit")]
- public void TableEdit(EditTableInput input)
- {
- _sqlSugarClient.DbMaintenance.RenameTable(input.OldName, input.Name);
- if (_sqlSugarClient.DbMaintenance.IsAnyTableRemark(input.Name)) {
- _sqlSugarClient.DbMaintenance.DeleteTableRemark(input.Name);
+ _sqlSugarClient.DbMaintenance.DropTable(input.Name);
}
- _sqlSugarClient.DbMaintenance.AddTableRemark(input.Name, input.Description);
- }
- [HttpPost("/table/createEntity")]
- public void CreateEntity(CreateEntityInput input)
- {
- Type baseType = Type.GetType($"Magic.Core.Entity.{input.BaseClassName}");
-
- if (baseType.IsNullOrZero())
- throw Oops.Oh("父类不存在");
-
- var baseTypeProperties = baseType.GetProperties().Select(m=>m.Name).ToList();
-
- input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Magic.Application" : input.Position;
- input.BaseClassName = string.IsNullOrWhiteSpace(input.BaseClassName) ? "" : $" : {input.BaseClassName}";
- var templatePath = GetTemplatePath();
- var targetPath = GetTargetPath(input);
- DbTableInfo dbTableInfo = _sqlSugarClient.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
- if (dbTableInfo == null)
- throw Oops.Oh(ErrorCode.db1001);
- List dbColumnInfos = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(input.TableName,false).Where(m=> !baseTypeProperties.Contains(m.DbColumnName)).ToList();
- dbColumnInfos.ForEach(m =>
- {
- m.DataType = CodeGenUtil.ConvertDataType(m.DataType);
- });
- var tContent = File.ReadAllText(templatePath);
- var tResult = _viewEngine.RunCompileFromCached(tContent, new
+ ///
+ /// 编辑表
+ ///
+ ///
+ [HttpPost("/table/edit")]
+ public void TableEdit(EditTableInput input)
{
- input.TableName,
- input.EntityName,
- input.BaseClassName,
- dbTableInfo.Description,
- TableField = dbColumnInfos
- });
-
- #region 检查目录是否存在
- FileInfo fileInfo = new FileInfo(targetPath);
- string entityPath = fileInfo.DirectoryName;
- if (!Directory.Exists(entityPath))
- {
- Directory.CreateDirectory(entityPath);
+ _sqlSugarClient.DbMaintenance.RenameTable(input.OldName, input.Name);
+ if (_sqlSugarClient.DbMaintenance.IsAnyTableRemarkEx(input.Name))
+ {
+ _sqlSugarClient.DbMaintenance.DeleteTableRemark(input.Name);
+ }
+ _sqlSugarClient.DbMaintenance.AddTableRemark(input.Name, input.Description);
}
- #endregion
- File.WriteAllText(targetPath, tResult, Encoding.UTF8);
- }
+ [HttpPost("/table/createEntity")]
+ public void CreateEntity(CreateEntityInput input)
+ {
+ Type baseType = Type.GetType($"Magic.Core.Entity.{input.BaseClassName}");
+
+ if (baseType.IsNullOrZero())
+ throw Oops.Oh("父类不存在");
+
+ var baseTypeProperties = baseType.GetProperties().Select(m => m.Name).ToList();
+
+ input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Magic.Application" : input.Position;
+ input.BaseClassName = string.IsNullOrWhiteSpace(input.BaseClassName) ? "" : $" : {input.BaseClassName}";
+ var templatePath = GetTemplatePath();
+ var targetPath = GetTargetPath(input);
+ DbTableInfo dbTableInfo = _sqlSugarClient.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
+ if (dbTableInfo == null)
+ throw Oops.Oh(ErrorCode.db1001);
+ List dbColumnInfos = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(input.TableName, false).Where(m => !baseTypeProperties.Contains(m.DbColumnName)).ToList();
+ dbColumnInfos.ForEach(m =>
+ {
+ m.DataType = CodeGenUtil.ConvertDataType(m.DataType);
+ });
+ var tContent = File.ReadAllText(templatePath);
+ var tResult = _viewEngine.RunCompileFromCached(tContent, new
+ {
+ input.TableName,
+ input.EntityName,
+ input.BaseClassName,
+ dbTableInfo.Description,
+ TableField = dbColumnInfos
+ });
- ///
- /// 获取模板文件路径集合
- ///
- ///
- private string GetTemplatePath()
- {
- var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "Template");
- return Path.Combine(templatePath, "Entity.cs.vm");
- }
+ #region 检查目录是否存在
- ///
- /// 设置生成文件路径
- ///
- ///
- ///
- private string GetTargetPath(CreateEntityInput input)
- {
- var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.Position, "Entity");
- var entityPath = Path.Combine(backendPath, input.EntityName + ".cs");
- return entityPath;
+ FileInfo fileInfo = new FileInfo(targetPath);
+ string entityPath = fileInfo.DirectoryName;
+ if (!Directory.Exists(entityPath))
+ {
+ Directory.CreateDirectory(entityPath);
+ }
+
+ #endregion 检查目录是否存在
+
+ File.WriteAllText(targetPath, tResult, Encoding.UTF8);
+ }
+
+ ///
+ /// 获取模板文件路径集合
+ ///
+ ///
+ private string GetTemplatePath()
+ {
+ var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "Template");
+ return Path.Combine(templatePath, "Entity.cs.vm");
+ }
+
+ ///
+ /// 设置生成文件路径
+ ///
+ ///
+ ///
+ private string GetTargetPath(CreateEntityInput input)
+ {
+ var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.Position, "Entity");
+ var entityPath = Path.Combine(backendPath, input.EntityName + ".cs");
+ return entityPath;
+ }
}
-}
+}
\ No newline at end of file
diff --git a/backend/Magic.Core/Service/DataBase/Extension/DbMaintenanceExtension.cs b/backend/Magic.Core/Service/DataBase/Extension/DbMaintenanceExtension.cs
new file mode 100644
index 0000000000000000000000000000000000000000..54d9b7a44a815c580c700804d2e788f232ca8a69
--- /dev/null
+++ b/backend/Magic.Core/Service/DataBase/Extension/DbMaintenanceExtension.cs
@@ -0,0 +1,46 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Magic.Core.Service.DataBase.Extension
+{
+ internal static class DbMaintenanceExtension
+ {
+ public static bool IsAnyTableRemarkEx(this IDbMaintenance dbMaintenance, string tableName)
+ {
+ string sql = $"select * from information_schema.`Tables` where table_name='{tableName}'";
+
+ return dbMaintenance.Context.CurrentConnectionConfig.DbType switch
+ {
+ DbType.MySql => dbMaintenance.Context.Ado.GetDataTable(sql).Rows?.Count > 0,
+ _ => dbMaintenance.IsAnyTableRemark(tableName)
+ };
+ }
+
+ public static bool IsAnyColumnRemarkEx(this IDbMaintenance dbMaintenance, string tableName, string columnName)
+ {
+ string sql = $"select * from information_schema.`Columns` where table_name='{tableName}' and column_name='{columnName}'";
+
+ return dbMaintenance.Context.CurrentConnectionConfig.DbType switch
+ {
+ DbType.MySql => dbMaintenance.Context.Ado.GetDataTable(sql).Rows?.Count > 0,
+ _ => dbMaintenance.IsAnyColumnRemark(columnName, tableName)
+ };
+ }
+
+ public static void AddColumnRemarkEx(this IDbMaintenance dbMaintenance, string columnName, string tableName, string columnDescription)
+ {
+ if (dbMaintenance.Context.CurrentConnectionConfig.DbType == DbType.MySql)
+ dbMaintenance.UpdateColumn(tableName, new DbColumnInfo
+ {
+ DataType = $"VARCHAR(255) NOT NULL COMMENT '{(string.IsNullOrWhiteSpace(columnDescription) ? columnName : columnDescription)}'",
+ DbColumnName = columnName
+ });
+ else
+ dbMaintenance.AddColumnRemark(columnName, tableName, string.IsNullOrWhiteSpace(columnDescription) ? columnName : columnDescription);
+ }
+ }
+}
\ No newline at end of file