diff --git a/EOM.TSHotelManagement.EntityFramework/EOM.TSHotelManagement.EntityFramework.csproj b/EOM.TSHotelManagement.EntityFramework/EOM.TSHotelManagement.EntityFramework.csproj index 500bd546ca082d32bca447e22221830a478e2031..6f5a89c927d7b0cce5c3f20228a8884b20d2ee7f 100644 --- a/EOM.TSHotelManagement.EntityFramework/EOM.TSHotelManagement.EntityFramework.csproj +++ b/EOM.TSHotelManagement.EntityFramework/EOM.TSHotelManagement.EntityFramework.csproj @@ -7,8 +7,11 @@ + + + diff --git a/EOM.TSHotelManagement.Migration/EntityBuilder.cs b/EOM.TSHotelManagement.Migration/EntityBuilder.cs index 2f52f53bfa65d65125bd4c3ba29e8587360e299c..05486594007860c414215d25315481a7a3251741 100644 --- a/EOM.TSHotelManagement.Migration/EntityBuilder.cs +++ b/EOM.TSHotelManagement.Migration/EntityBuilder.cs @@ -72,7 +72,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 1 { Key = "home", Title = "首页", @@ -83,7 +83,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 2 { Key = "basic", Title = "基础信息管理", @@ -94,7 +94,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 3 { Key = "position", Title = "职位管理", @@ -105,7 +105,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 4 { Key = "nation", Title = "民族管理", @@ -116,7 +116,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 5 { Key = "qualification", Title = "学历管理", @@ -127,7 +127,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 6 { Key = "department", Title = "部门管理", @@ -138,7 +138,7 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 7 { Key = "noticetype", Title = "公告类型管理", @@ -149,7 +149,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 8 + { + Key = "passport", + Title = "证件类型管理", + Path = "/passport", + Parent = 2, + Icon = "IdcardOutlined", + IsDelete = 0, + DataInsUsr = "System", + DataInsDate = DateTime.Now, + }, + new Menu // 9 { Key = "finance", Title = "财务信息管理", @@ -160,18 +171,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 10 { Key = "internalfinance", Title = "内部资产管理", Path = "/internalfinance", - Parent = 7, + Parent = 9, Icon = "DollarOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 11 { Key = "hydroelectricity", Title = "水电信息管理", @@ -182,7 +193,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 12 + { + Key = "hydroelectricinformation", + Title = "水电信息管理", + Path = "/hydroelectricinformation", + Parent = 11, + Icon = "FireOutlined", + IsDelete = 0, + DataInsUsr = "System", + DataInsDate = DateTime.Now, + }, + new Menu // 13 { Key = "supervisionmanagement", Title = "监管统计管理", @@ -193,18 +215,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 14 { Key = "supervisioninfo", Title = "监管情况", Path = "/supervisioninfo", - Parent = 10, + Parent = 13, Icon = "AuditOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 15 { Key = "roominformation", Title = "客房信息管理", @@ -215,40 +237,51 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 16 + { + Key = "resermanagement", + Title = "预约管理", + Path = "/resermanagement", + Parent = 15, + Icon = "BellOutlined", + IsDelete = 0, + DataInsUsr = "System", + DataInsDate = DateTime.Now, + }, + new Menu // 17 { Key = "roommap", Title = "房态图一览", Path = "/roommap", - Parent = 12, + Parent = 15, Icon = "TableOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 18 { Key = "roommanagement", Title = "客房管理", Path = "/roommanagement", - Parent = 12, + Parent = 15, Icon = "HomeOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 19 { Key = "roomconfig", Title = "客房配置", Path = "/roomconfig", - Parent = 12, + Parent = 15, Icon = "ToolOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 20 { Key = "customermanagement", Title = "酒店客户管理", @@ -259,40 +292,51 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 21 { Key = "viplevel", Title = "会员等级规则", Path = "/viplevel", - Parent = 16, + Parent = 20, Icon = "CrownOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 22 { Key = "customer", Title = "客户信息管理", Path = "/customer", - Parent = 16, + Parent = 20, Icon = "ContactsOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 23 { Key = "customerspend", Title = "客户消费账单", Path = "/customerspend", - Parent = 16, + Parent = 20, Icon = "PayCircleOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 24 + { + Key = "customertype", + Title = "客户类型管理", + Path = "/customertype", + Parent = 20, + Icon = "TagOutlined", + IsDelete = 0, + DataInsUsr = "System", + DataInsDate = DateTime.Now, + }, + new Menu // 25 { Key = "humanresourcemanagement", Title = "酒店人事管理", @@ -303,18 +347,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 26 { Key = "staffmanagement", Title = "员工管理", Path = "/staffmanagement", - Parent = 20, + Parent = 25, Icon = "TeamOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 27 { Key = "materialmanagement", Title = "酒店物资管理", @@ -325,18 +369,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 28 { Key = "goodsmanagement", Title = "商品管理", Path = "/goodsmanagement", - Parent = 22, + Parent = 27, Icon = "ShopOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 29 { Key = "operationmanagement", Title = "行为操作管理", @@ -347,18 +391,18 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 30 { Key = "operationlog", Title = "操作日志", Path = "/operationlog", - Parent = 24, + Parent = 29, Icon = "SolutionOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 31 { Key = "systemmanagement", Title = "系统管理", @@ -369,105 +413,61 @@ namespace EOM.TSHotelManagement.Migration DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 32 { Key = "administratormanagement", Title = "管理员管理", Path = "/administratormanagement", - Parent = 26, + Parent = 31, Icon = "KeyOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 33 { Key = "systemmodule", Title = "系统模块", Path = "/systemmodule", - Parent = 26, + Parent = 31, Icon = "DatabaseOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu - { - Key = "hydroelectricinformation", - Title = "水电信息管理", - Path = "/hydroelectricinformation", - Parent = 9, - Icon = "FireOutlined", - IsDelete = 0, - DataInsUsr = "System", - DataInsDate = DateTime.Now, - }, - new Menu - { - Key = "customertype", - Title = "客户类型管理", - Path = "/customertype", - Parent = 16, - Icon = "TagOutlined", - IsDelete = 0, - DataInsUsr = "System", - DataInsDate = DateTime.Now, - }, - new Menu - { - Key = "passport", - Title = "证件类型管理", - Path = "/passport", - Parent = 2, - Icon = "IdcardOutlined", - IsDelete = 0, - DataInsUsr = "System", - DataInsDate = DateTime.Now, - }, - new Menu + new Menu // 34 { - Key = "resermanagement", - Title = "预约管理", - Path = "/resermanagement", - Parent = 12, - Icon = "BellOutlined", + Key = "menumanagement", + Title = "菜单管理", + Path = "/menumanagement", + Parent = 31, + Icon = "MenuOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 35 { Key = "rolemanagement", Title = "角色管理", Path = "/rolemanagement", - Parent = 26, + Parent = 31, Icon = "SmileOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu + new Menu // 36 { Key = "admintypemanagement", Title = "管理员类型管理", Path = "/admintypemanagement", - Parent = 26, + Parent = 31, Icon = "TagOutlined", IsDelete = 0, DataInsUsr = "System", DataInsDate = DateTime.Now, }, - new Menu - { - Key = "menumanagement", - Title = "菜单管理", - Path = "/menumanagement", - Parent = 26, - Icon = "MenuOutlined", - IsDelete = 0, - DataInsUsr = "System", - DataInsDate = DateTime.Now, - }, new NavBar { NavigationBarName = "客房管理", diff --git a/EOM.TSHotelManagement.WebApi/Constant/DatabaseConstants.cs b/EOM.TSHotelManagement.WebApi/Constant/DatabaseConstants.cs new file mode 100644 index 0000000000000000000000000000000000000000..7fe085c410e230fb9b43a45da0e8e1034ad8cf82 --- /dev/null +++ b/EOM.TSHotelManagement.WebApi/Constant/DatabaseConstants.cs @@ -0,0 +1,14 @@ +namespace EOM.TSHotelManagement.WebApi.Constant +{ + public class DatabaseConstants + { + public const string MariaDB = "MariaDB"; + public const string PgSql = "PgSql"; + public const string MySql = "MySql"; + public const string SqlServer = "SqlServer"; + public const string Oracle = "Oracle"; + public const string Sqlite = "Sqlite"; + public const string DefaultDatabase = "DefaultDatabase"; + public const string DockerEnv = "DOCKER_ENV"; + } +} diff --git a/EOM.TSHotelManagement.WebApi/EOM.TSHotelManagement.WebApi.csproj b/EOM.TSHotelManagement.WebApi/EOM.TSHotelManagement.WebApi.csproj index cfb7fb3b588f6089029a2f7cf31cdac3edb1bcad..0d9aba30ab30eb0f578fc761eb14f4b7f6bd9ef2 100644 --- a/EOM.TSHotelManagement.WebApi/EOM.TSHotelManagement.WebApi.csproj +++ b/EOM.TSHotelManagement.WebApi/EOM.TSHotelManagement.WebApi.csproj @@ -6,6 +6,7 @@ True Linux ..\.. + false diff --git a/EOM.TSHotelManagement.WebApi/Factory/SqlSugarClientFactory.cs b/EOM.TSHotelManagement.WebApi/Factory/SqlSugarClientFactory.cs index f236486f9e6a522d7862aa7495f3566c4a245089..889c3e60a126e44e54b08cdc4202aa7ea3b80fa0 100644 --- a/EOM.TSHotelManagement.WebApi/Factory/SqlSugarClientFactory.cs +++ b/EOM.TSHotelManagement.WebApi/Factory/SqlSugarClientFactory.cs @@ -1,4 +1,5 @@ using EOM.TSHotelManagement.Shared; +using EOM.TSHotelManagement.WebApi.Constant; using Microsoft.Extensions.Configuration; using SqlSugar; using System; @@ -17,12 +18,19 @@ namespace EOM.TSHotelManagement.WebApi public ISqlSugarClient CreateClient(string dbName = null) { // 读取默认数据库名称 - dbName ??= _configuration["DefaultDatabase"]; - var connectionString = string.Empty; - - if (Environment.GetEnvironmentVariable("DOCKER_ENV") != null) + dbName ??= _configuration[DatabaseConstants.DefaultDatabase]; + string connectionString; + if (Environment.GetEnvironmentVariable(DatabaseConstants.DockerEnv) != null) { - connectionString = Environment.GetEnvironmentVariable("PgSqlConnectStr"); + connectionString = Environment.GetEnvironmentVariable(DatabaseConstants.DefaultDatabase) switch + { + DatabaseConstants.PgSql => Environment.GetEnvironmentVariable($"{DatabaseConstants.PgSql}ConnectStr"), //Test passed + DatabaseConstants.MySql => Environment.GetEnvironmentVariable($"{DatabaseConstants.MySql}ConnectStr"), //Test passed + DatabaseConstants.SqlServer => Environment.GetEnvironmentVariable($"{DatabaseConstants.SqlServer}ConnectStr"), //Test passed + DatabaseConstants.Oracle => Environment.GetEnvironmentVariable($"{DatabaseConstants.Oracle}ConnectStr"), //Please manually test + DatabaseConstants.MariaDB => Environment.GetEnvironmentVariable($"{DatabaseConstants.MariaDB}ConnectStr"), //Test passed + _ => throw new ArgumentException("Unsupported database", nameof(dbName)), + }; } else { @@ -31,7 +39,7 @@ namespace EOM.TSHotelManagement.WebApi var dbType = GetDbType(dbName); - ConnectionConfig config = new ConnectionConfig + ConnectionConfig config = new() { ConnectionString = connectionString, DbType = dbType, @@ -52,6 +60,13 @@ namespace EOM.TSHotelManagement.WebApi DisableMillisecond = true }; break; + case DbType.SqlServer: + config.MoreSettings = new ConnMoreSettings() + { + SqlServerCodeFirstNvarchar = true,//建表字符串默认Nvarchar + IsWithNoLockQuery = true + }; + break; } return new SqlSugarClient(config); @@ -61,12 +76,12 @@ namespace EOM.TSHotelManagement.WebApi { return dbName switch { - "PgSql" => DbType.PostgreSQL, - "MySql" => DbType.MySql, - "Oracle" => DbType.Oracle, - "SqlServer" => DbType.SqlServer, - "Sqlite" => DbType.Sqlite, - "MariaDB" => DbType.MySqlConnector, + DatabaseConstants.PgSql => DbType.PostgreSQL, + DatabaseConstants.MySql => DbType.MySql, + DatabaseConstants.Oracle => DbType.Oracle, + DatabaseConstants.SqlServer => DbType.SqlServer, + DatabaseConstants.Sqlite => DbType.Sqlite, + DatabaseConstants.MariaDB => DbType.MySqlConnector, _ => throw new ArgumentException("Unsupported database", nameof(dbName)) }; } diff --git a/EOM.TSHotelManagement.WebApi/MigrationConfig/InitializeConfig.cs b/EOM.TSHotelManagement.WebApi/MigrationConfig/InitializeConfig.cs index 07d9cd01065f912d3ef8c502d0a21ef3e1efd3b1..a41a46e24ba1a43ab88d1b275cc7798d96247539 100644 --- a/EOM.TSHotelManagement.WebApi/MigrationConfig/InitializeConfig.cs +++ b/EOM.TSHotelManagement.WebApi/MigrationConfig/InitializeConfig.cs @@ -1,12 +1,16 @@ using EOM.TSHotelManagement.Common.Core; using EOM.TSHotelManagement.Migration; using EOM.TSHotelManagement.Shared; +using EOM.TSHotelManagement.WebApi.Constant; using jvncorelib.EncryptorLib; using Microsoft.AspNetCore.Builder; +using Microsoft.Data.SqlClient; +using Microsoft.Data.Sqlite; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using MySqlConnector; +using Oracle.ManagedDataAccess.Client; using SqlSugar; using System; using System.Collections.Generic; @@ -16,6 +20,13 @@ namespace EOM.TSHotelManagement.WebApi { public class InitializeConfig { + private readonly IConfiguration config; + + public InitializeConfig(IConfiguration configuration) + { + config = configuration; + } + #region initlize database public void InitializeDatabase(IApplicationBuilder app) { @@ -26,16 +37,19 @@ namespace EOM.TSHotelManagement.WebApi try { - var dbName = config["DefaultDatabase"] ?? "MariaDB"; + var dbName = config[DatabaseConstants.DefaultDatabase] ?? DatabaseConstants.MariaDB; + var dbSettings = GetDatabaseSettings(config, dbName); - using (var masterDb = CreateMasterConnection(config, dbName)) + if (dbSettings.DbType != DbType.Sqlite) { - var dbSettings = GetDatabaseSettings(config, dbName); - if (!masterDb.DbMaintenance.GetDataBaseList().Contains(dbSettings.Database)) + using (var masterDb = CreateMasterConnection(config, dbName, dbSettings.DbType)) { - Console.WriteLine($"Creating database {dbSettings.Database}..."); - masterDb.DbMaintenance.CreateDatabase(dbSettings.Database); - Console.WriteLine("Database created successfully"); + if (!masterDb.DbMaintenance.GetDataBaseList().Contains(dbSettings.Database)) + { + Console.WriteLine($"Creating database {dbSettings.Database}..."); + masterDb.DbMaintenance.CreateDatabase(dbSettings.Database,null); + Console.WriteLine("Database created successfully"); + } } } @@ -80,31 +94,78 @@ namespace EOM.TSHotelManagement.WebApi { var dbType = SqlSugarClientFactory.GetDbType(dbName); var connectionString = GetConnectionString(config, dbName); - var builder = new MySqlConnectionStringBuilder(connectionString); - return (builder.Database, dbType); + + switch (dbType) + { + case DbType.MySql: + case DbType.MySqlConnector: + var builder = new MySqlConnectionStringBuilder(connectionString); + return (builder.Database, dbType); + case DbType.SqlServer: + var sqlBuilder = new SqlConnectionStringBuilder(connectionString); + return (sqlBuilder.InitialCatalog, dbType); + case DbType.Oracle: + var oracleBuilder = new OracleConnectionStringBuilder(connectionString); + return (oracleBuilder.DataSource, dbType); + case DbType.Sqlite: + var sqliteBuilder = new SqliteConnectionStringBuilder(connectionString); + return (sqliteBuilder.DataSource, dbType); + default: + throw new NotSupportedException($"Unsupported DbType: {dbType}"); + } } - private SqlSugarClient CreateMasterConnection(IConfiguration config, string dbName) + private SqlSugarClient CreateMasterConnection(IConfiguration config, string dbName, DbType dbType) { var connectionString = GetConnectionString(config, dbName); - var builder = new MySqlConnectionStringBuilder(connectionString) - { - Database = null - }; - var dbType = SqlSugarClientFactory.GetDbType(dbName); + dynamic builder = null; + + switch (dbType) + { + case DbType.MySql: + case DbType.MySqlConnector: + builder = new MySqlConnectionStringBuilder(connectionString) + { + Database = null, + }; + break; + case DbType.SqlServer: + builder = new SqlConnectionStringBuilder(connectionString) + { + InitialCatalog = "master", + ConnectTimeout = 30 + }; + break; + case DbType.Oracle: + builder = new OracleConnectionStringBuilder(connectionString) + { + UserID = "sys as sysdba", + }; + break; + case DbType.Sqlite: + break; + } return new SqlSugarClient(new ConnectionConfig { - ConnectionString = builder.ConnectionString, + ConnectionString = builder?.ConnectionString ?? string.Empty, DbType = dbType, - IsAutoCloseConnection = true + IsAutoCloseConnection = true, + ConfigureExternalServices = new ConfigureExternalServices + { + EntityService = (c, p) => + { + if (dbType == DbType.Oracle && p.IsPrimarykey && p.IsIdentity) + p.OracleSequenceName = "SEQ_" + c.Name; + } + } }); } private string GetConnectionString(IConfiguration config, string dbName) { - if (Environment.GetEnvironmentVariable("DOCKER_ENV") != null) + if (Environment.GetEnvironmentVariable(DatabaseConstants.DockerEnv) != null) { return Environment.GetEnvironmentVariable($"{dbName}ConnectStr") ?? throw new ArgumentException($"Environment variable {dbName}ConnectStr not found"); diff --git a/EOM.TSHotelManagement.WebApi/Startup.cs b/EOM.TSHotelManagement.WebApi/Startup.cs index 0f58de68eb55d2c5d7acbeea805eb57316c07808..13700fa1e2ebc5f61387b5a37ad6fcb26ffa285d 100644 --- a/EOM.TSHotelManagement.WebApi/Startup.cs +++ b/EOM.TSHotelManagement.WebApi/Startup.cs @@ -149,7 +149,7 @@ namespace EOM.TSHotelManagement.WebApi // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { - new InitializeConfig().InitializeDatabase(app); + new InitializeConfig(_configuration).InitializeDatabase(app); if (env.IsDevelopment()) {