From 9fe283034b8862eb035789c856bc76486a2cf19c Mon Sep 17 00:00:00 2001 From: ck_yeun9 Date: Sat, 10 Jan 2026 17:47:56 +0800 Subject: [PATCH 1/2] add package info for all project layer. --- .gitignore | 2 + .../EOM.TSHotelManagement.Common.csproj | 60 ++++++++++++-- .../EOM.TSHotelManagement.Contract.csproj | 82 ++++++++++++++----- .../Dto/Employee/UpdateEmployeeInputDto.cs | 1 + .../EOM.TSHotelManagement.Domain.csproj | 60 ++++++++++++-- ...OM.TSHotelManagement.Infrastructure.csproj | 60 ++++++++++++-- .../EOM.TSHotelManagement.Service.csproj | 62 ++++++++++++-- 7 files changed, 282 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index 0998646..cc917a0 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,8 @@ bld/ [Ll]ogs/ docker-images/ frontend/ +.buildnumber +.version # Visual Studio 2015/2017 cache/options directory .vs/ diff --git a/EOM.TSHotelManagement.Common/EOM.TSHotelManagement.Common.csproj b/EOM.TSHotelManagement.Common/EOM.TSHotelManagement.Common.csproj index 92a1738..326cce3 100644 --- a/EOM.TSHotelManagement.Common/EOM.TSHotelManagement.Common.csproj +++ b/EOM.TSHotelManagement.Common/EOM.TSHotelManagement.Common.csproj @@ -1,12 +1,60 @@  - - net10.0 - x64 - False - + + net10.0 + enable + enable + True + x64 + True + EOM.TSHotelManagement.Common + 易开元(Easy Open Meta) + Service to TS Hotel Management System Project, Development By Easy Open Meta + EOM.TSHOTEL.COMMON - + 1 + 10 + 0 + + $(MSBuildProjectDirectory)\.buildnumber + + $(MajorVersion).$(MinorVersion).$(PatchVersion) + $(Version) + + MIT + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + + + + + + + + + @(BuildNumberLines) + 0 + + $([System.Int32]::Parse($(CurrentBuildNumber))) + $([MSBuild]::Add($(CurrentBuildNumberInt), 1)) + $(NewBuildNumberInt) + + + + + + + + + $(MajorVersion).$(MinorVersion).$(NewBuildNumber) + $(Version) + + + + diff --git a/EOM.TSHotelManagement.Contract/EOM.TSHotelManagement.Contract.csproj b/EOM.TSHotelManagement.Contract/EOM.TSHotelManagement.Contract.csproj index 0ed6104..908b840 100644 --- a/EOM.TSHotelManagement.Contract/EOM.TSHotelManagement.Contract.csproj +++ b/EOM.TSHotelManagement.Contract/EOM.TSHotelManagement.Contract.csproj @@ -1,21 +1,65 @@  - - net10.0 - enable - enable - True - x64 - True - EOM.TSHOTEL.CONTRACT - - - - - - - - - - - + + net10.0 + enable + enable + True + x64 + True + EOM.TSHotelManagement.Contract + 易开元(Easy Open Meta) + Service to TS Hotel Management System Project, Development By Easy Open Meta + EOM.TSHOTEL.CONTRACT + + 1 + 10 + 0 + + $(MSBuildProjectDirectory)\.buildnumber + + $(MajorVersion).$(MinorVersion).$(PatchVersion) + $(Version) + + MIT + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + + + + + + + + + @(BuildNumberLines) + 0 + + $([System.Int32]::Parse($(CurrentBuildNumber))) + $([MSBuild]::Add($(CurrentBuildNumberInt), 1)) + $(NewBuildNumberInt) + + + + + + + + + $(MajorVersion).$(MinorVersion).$(NewBuildNumber) + $(Version) + + + + + + + + + + + + \ No newline at end of file diff --git a/EOM.TSHotelManagement.Contract/Employee/Dto/Employee/UpdateEmployeeInputDto.cs b/EOM.TSHotelManagement.Contract/Employee/Dto/Employee/UpdateEmployeeInputDto.cs index 75799a8..f0364f5 100644 --- a/EOM.TSHotelManagement.Contract/Employee/Dto/Employee/UpdateEmployeeInputDto.cs +++ b/EOM.TSHotelManagement.Contract/Employee/Dto/Employee/UpdateEmployeeInputDto.cs @@ -62,6 +62,7 @@ namespace EOM.TSHotelManagement.Contract public string Password { get; set; } public int IsEnable { get; set; } + public int IsInitialize { get; set; } [Required(ErrorMessage = "邮箱地址为必填字段")] [MaxLength(256, ErrorMessage = "邮箱地址长度不超过256字符")] diff --git a/EOM.TSHotelManagement.Domain/EOM.TSHotelManagement.Domain.csproj b/EOM.TSHotelManagement.Domain/EOM.TSHotelManagement.Domain.csproj index f5204a5..2fd7c6b 100644 --- a/EOM.TSHotelManagement.Domain/EOM.TSHotelManagement.Domain.csproj +++ b/EOM.TSHotelManagement.Domain/EOM.TSHotelManagement.Domain.csproj @@ -1,12 +1,60 @@  - - net10.0 - True - x64 - + + net10.0 + enable + enable + True + x64 + True + EOM.TSHotelManagement.Domain + 易开元(Easy Open Meta) + Service to TS Hotel Management System Project, Development By Easy Open Meta + EOM.TSHOTEL.DOMAIN - + 1 + 10 + 0 + + $(MSBuildProjectDirectory)\.buildnumber + + $(MajorVersion).$(MinorVersion).$(PatchVersion) + $(Version) + + MIT + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + + + + + + + + + @(BuildNumberLines) + 0 + + $([System.Int32]::Parse($(CurrentBuildNumber))) + $([MSBuild]::Add($(CurrentBuildNumberInt), 1)) + $(NewBuildNumberInt) + + + + + + + + + $(MajorVersion).$(MinorVersion).$(NewBuildNumber) + $(Version) + + + + diff --git a/EOM.TSHotelManagement.Infrastructure/EOM.TSHotelManagement.Infrastructure.csproj b/EOM.TSHotelManagement.Infrastructure/EOM.TSHotelManagement.Infrastructure.csproj index 4ff62fc..5aa8ab3 100644 --- a/EOM.TSHotelManagement.Infrastructure/EOM.TSHotelManagement.Infrastructure.csproj +++ b/EOM.TSHotelManagement.Infrastructure/EOM.TSHotelManagement.Infrastructure.csproj @@ -1,12 +1,60 @@  - - net10.0 - enable - enable - + + net10.0 + enable + enable + True + x64 + True + EOM.TSHotelManagement.Infrastructure + 易开元(Easy Open Meta) + Service to TS Hotel Management System Project, Development By Easy Open Meta + EOM.TSHOTEL.INFRASTRUCTURE - + 1 + 10 + 0 + + $(MSBuildProjectDirectory)\.buildnumber + + $(MajorVersion).$(MinorVersion).$(PatchVersion) + $(Version) + + MIT + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + + + + + + + + + @(BuildNumberLines) + 0 + + $([System.Int32]::Parse($(CurrentBuildNumber))) + $([MSBuild]::Add($(CurrentBuildNumberInt), 1)) + $(NewBuildNumberInt) + + + + + + + + + $(MajorVersion).$(MinorVersion).$(NewBuildNumber) + $(Version) + + + + diff --git a/EOM.TSHotelManagement.Service/EOM.TSHotelManagement.Service.csproj b/EOM.TSHotelManagement.Service/EOM.TSHotelManagement.Service.csproj index eda955a..0bb129a 100644 --- a/EOM.TSHotelManagement.Service/EOM.TSHotelManagement.Service.csproj +++ b/EOM.TSHotelManagement.Service/EOM.TSHotelManagement.Service.csproj @@ -1,14 +1,60 @@  - - net10.0 - enable - disable - True - x64 - + + net10.0 + enable + enable + True + x64 + True + EOM.TSHotelManagement.Service + 易开元(Easy Open Meta) + Service to TS Hotel Management System Project, Development By Easy Open Meta + EOM.TSHOTEL.SERVICE + + 1 + 10 + 0 + + $(MSBuildProjectDirectory)\.buildnumber + + $(MajorVersion).$(MinorVersion).$(PatchVersion) + $(Version) + + MIT + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + https://gitee.com/java-and-net/topsky-hotel-management-system-web-api + + + + + + + + + @(BuildNumberLines) + 0 + + $([System.Int32]::Parse($(CurrentBuildNumber))) + $([MSBuild]::Add($(CurrentBuildNumberInt), 1)) + $(NewBuildNumberInt) + + + + + + + + + $(MajorVersion).$(MinorVersion).$(NewBuildNumber) + $(Version) + + - + 1701;1702;8618; -- Gitee From b4e15f7a1ea31280adbf3911f0930a09ee59d966 Mon Sep 17 00:00:00 2001 From: ck_yeun9 Date: Sat, 10 Jan 2026 20:29:31 +0800 Subject: [PATCH 2/2] fix initialize database logic in docker. --- EOM.TSHotelManagement.API/Program.cs | 6 +- .../Constant/SystemConstant.cs | 1 + .../Connector/SqlSugarClientConnector.cs | 101 ++++++++++++++---- .../DatabaseInitializer.cs | 89 ++++++++++++++- version.txt | Bin 16 -> 18 bytes 5 files changed, 168 insertions(+), 29 deletions(-) diff --git a/EOM.TSHotelManagement.API/Program.cs b/EOM.TSHotelManagement.API/Program.cs index 50aaed9..edb1c85 100644 --- a/EOM.TSHotelManagement.API/Program.cs +++ b/EOM.TSHotelManagement.API/Program.cs @@ -36,10 +36,8 @@ namespace EOM.TSHotelManagement.WebApi app.ConfigureEnvironment(); app.ConfigureMiddlewares(); - if (bool.TryParse(app.Configuration.GetSection("InitializeDatabase").Value, out var initializeDatabase) && initializeDatabase) - { - app.InitializeDatabase(); - } + app.InitializeDatabase(); + app.SyncPermissionsFromAttributes(); app.ConfigureEndpoints(); app.ConfigureSwaggerUI(); diff --git a/EOM.TSHotelManagement.Common/Constant/SystemConstant.cs b/EOM.TSHotelManagement.Common/Constant/SystemConstant.cs index 25a093f..e1fcceb 100644 --- a/EOM.TSHotelManagement.Common/Constant/SystemConstant.cs +++ b/EOM.TSHotelManagement.Common/Constant/SystemConstant.cs @@ -11,6 +11,7 @@ namespace EOM.TSHotelManagement.Common public static readonly SystemConstant Oracle = new SystemConstant("Oracle", "Oracle"); public static readonly SystemConstant Sqlite = new SystemConstant("Sqlite", "SQLite"); public static readonly SystemConstant DefaultDatabase = new SystemConstant("DefaultDatabase", "Default Database"); + public static readonly SystemConstant InitializeDatabase = new SystemConstant("InitializeDatabase", "Initialize Database"); public static readonly SystemConstant Env = new SystemConstant("ASPNETCORE_ENVIRONMENT", "Asp.NET Core Environment"); public static readonly SystemConstant Docker = new SystemConstant("docker", "Docker"); diff --git a/EOM.TSHotelManagement.Data/Connector/SqlSugarClientConnector.cs b/EOM.TSHotelManagement.Data/Connector/SqlSugarClientConnector.cs index 5e4a827..6502185 100644 --- a/EOM.TSHotelManagement.Data/Connector/SqlSugarClientConnector.cs +++ b/EOM.TSHotelManagement.Data/Connector/SqlSugarClientConnector.cs @@ -15,29 +15,26 @@ namespace EOM.TSHotelManagement.Data public ISqlSugarClient CreateClient(string dbName = null) { - // 读取默认数据库名称 - dbName ??= _configuration[SystemConstant.DefaultDatabase.Code]; - string connectionString; - if (Environment.GetEnvironmentVariable(SystemConstant.Env.Code) != null && Environment.GetEnvironmentVariable(SystemConstant.Env.Code) == SystemConstant.Docker.Code) - { - var dbCode = Environment.GetEnvironmentVariable(SystemConstant.DefaultDatabase.Code); - connectionString = dbCode switch - { - var code when code == SystemConstant.PgSql.Code => Environment.GetEnvironmentVariable($"{SystemConstant.PgSql}ConnectStr"), //Test passed - var code when code == SystemConstant.MySql.Code => Environment.GetEnvironmentVariable($"{SystemConstant.MySql}ConnectStr"), //Test passed - var code when code == SystemConstant.SqlServer.Code => Environment.GetEnvironmentVariable($"{SystemConstant.SqlServer}ConnectStr"), //Test passed - var code when code == SystemConstant.Oracle.Code => Environment.GetEnvironmentVariable($"{SystemConstant.Oracle}ConnectStr"), //Please manually test - var code when code == SystemConstant.MariaDB.Code => Environment.GetEnvironmentVariable($"{SystemConstant.MariaDB}ConnectStr"), //Test passed - _ => throw new ArgumentException("Unsupported database", nameof(dbName)), - }; - } - else + Console.WriteLine("=== SqlSugarClientConnector.CreateClient 开始 ==="); + + // 1. 获取数据库名称 + dbName = GetDatabaseName(dbName); + Console.WriteLine($"使用的数据库名称: {dbName}"); + + // 2. 获取连接字符串 + string connectionString = GetConnectionString(dbName); + Console.WriteLine($"获取的连接字符串: {connectionString ?? "null"}"); + + if (string.IsNullOrEmpty(connectionString)) { - connectionString = _configuration.GetConnectionString(dbName + "ConnectStr"); + throw new ArgumentException("连接字符串不能为空"); } + // 3. 获取数据库类型 var dbType = GetDbType(dbName); + Console.WriteLine($"数据库类型: {dbType}"); + // 4. 创建配置 ConnectionConfig config = new() { ConnectionString = connectionString, @@ -47,6 +44,72 @@ namespace EOM.TSHotelManagement.Data LanguageType = LanguageType.Chinese }; + // 5. 数据库特定配置 + ConfigureDatabaseSpecificSettings(dbType, config); + + Console.WriteLine("=== SqlSugarClientConnector.CreateClient 完成 ==="); + return new SqlSugarClient(config); + } + + private string GetDatabaseName(string dbName) + { + if (!string.IsNullOrEmpty(dbName)) + { + return dbName; + } + + // 优先从环境变量获取 + var envValue = Environment.GetEnvironmentVariable(SystemConstant.Env.Code); + Console.WriteLine($"ASPNETCORE_ENVIRONMENT: {envValue}"); + + if (!string.IsNullOrEmpty(envValue) && envValue.ToLower() == SystemConstant.Docker.Code) + { + var envDbName = Environment.GetEnvironmentVariable(SystemConstant.DefaultDatabase.Code); + Console.WriteLine($"环境变量 DefaultDatabase: {envDbName}"); + + if (!string.IsNullOrEmpty(envDbName)) + { + return envDbName; + } + } + + // 从配置文件获取 + var configDbName = _configuration[SystemConstant.DefaultDatabase.Code]; + Console.WriteLine($"配置文件 DefaultDatabase: {configDbName}"); + + return configDbName ?? SystemConstant.MariaDB.Code; + } + + private string GetConnectionString(string dbName) + { + var envValue = Environment.GetEnvironmentVariable(SystemConstant.Env.Code); + Console.WriteLine($"连接字符串 - 环境: {envValue}, 数据库: {dbName}"); + + if (!string.IsNullOrEmpty(envValue) && envValue.ToLower() == "docker") + { + Console.WriteLine("从环境变量获取连接字符串"); + + var envVarName = $"{dbName}ConnectStr"; + var envConnectionString = Environment.GetEnvironmentVariable(envVarName); + Console.WriteLine($"环境变量 {envVarName}: {envConnectionString ?? "null"}"); + + if (!string.IsNullOrEmpty(envConnectionString)) + { + return envConnectionString.Trim('"'); + } + + throw new ArgumentException($"Docker环境下未找到环境变量: {envVarName}"); + } + + Console.WriteLine("从配置文件获取连接字符串"); + var configConnectionString = _configuration.GetConnectionString($"{dbName}ConnectStr"); + Console.WriteLine($"配置文件连接字符串: {configConnectionString ?? "null"}"); + + return configConnectionString; + } + + private void ConfigureDatabaseSpecificSettings(DbType dbType, ConnectionConfig config) + { switch (dbType) { case DbType.PostgreSQL: @@ -65,8 +128,6 @@ namespace EOM.TSHotelManagement.Data }; break; } - - return new SqlSugarClient(config); } public static DbType GetDbType(string dbName) diff --git a/EOM.TSHotelManagement.Data/DatabaseInitializer/DatabaseInitializer.cs b/EOM.TSHotelManagement.Data/DatabaseInitializer/DatabaseInitializer.cs index c6533f2..e842efb 100644 --- a/EOM.TSHotelManagement.Data/DatabaseInitializer/DatabaseInitializer.cs +++ b/EOM.TSHotelManagement.Data/DatabaseInitializer/DatabaseInitializer.cs @@ -1,6 +1,7 @@ using EOM.TSHotelManagement.Common; using EOM.TSHotelManagement.Domain; using EOM.TSHotelManagement.Migration; +using jvncorelib.EntityLib; using Microsoft.Extensions.Configuration; using MySqlConnector; using SqlSugar; @@ -27,7 +28,10 @@ namespace EOM.TSHotelManagement.Data try { - var dbName = config[SystemConstant.DefaultDatabase.Code] ?? SystemConstant.MariaDB.Code; + var dbName = GetDatabaseName(config); + + Console.WriteLine($"Database Name: {dbName}"); + var dbSettings = GetDatabaseSettings(config, dbName); using (var masterDb = CreateMasterConnection(config, dbName, dbSettings.DbType)) @@ -114,6 +118,52 @@ namespace EOM.TSHotelManagement.Data throw new NotSupportedException($"Unsupported DbType: {dbType}"); } } + + public string GetDatabaseName(IConfiguration config) + { + Console.WriteLine("=== 开始获取数据库名称 ==="); + + var envCode = Environment.GetEnvironmentVariable(SystemConstant.Env.Code); + Console.WriteLine($"ASPNETCORE_ENVIRONMENT: {envCode ?? "null"}"); + + var isDocker = !string.IsNullOrEmpty(envCode) && envCode.ToLower() == SystemConstant.Docker.Code; + Console.WriteLine($"是否为 Docker 环境: {isDocker}"); + + string dbName; + + if (isDocker) + { + dbName = Environment.GetEnvironmentVariable(SystemConstant.DefaultDatabase.Code); + Console.WriteLine($"环境变量 DefaultDatabase: {dbName ?? "null"}"); + + if (string.IsNullOrEmpty(dbName)) + { + dbName = config[SystemConstant.DefaultDatabase.Code]; + Console.WriteLine($"配置文件 DefaultDatabase: {dbName ?? "null"}"); + + if (string.IsNullOrEmpty(dbName)) + { + dbName = SystemConstant.MariaDB.Code; + Console.WriteLine($"使用默认数据库: {dbName}"); + } + } + } + else + { + dbName = config[SystemConstant.DefaultDatabase.Code] ?? SystemConstant.MariaDB.Code; + Console.WriteLine($"非Docker环境,使用数据库: {dbName}"); + } + + var supportedDbs = new[] { SystemConstant.MariaDB.Code, SystemConstant.MySql.Code, SystemConstant.PgSql.Code, SystemConstant.SqlServer.Code, SystemConstant.Oracle.Code, SystemConstant.Sqlite.Code }; + if (!supportedDbs.Contains(dbName)) + { + Console.WriteLine($"警告:不支持的数据库类型 '{dbName}',默认使用 MariaDB"); + dbName = "MariaDB"; + } + + Console.WriteLine($"最终确定的数据库类型: {dbName}"); + return dbName; + } private SqlSugarClient CreateMasterConnection(IConfiguration config, string dbName, DbType dbType) { @@ -174,12 +224,41 @@ namespace EOM.TSHotelManagement.Data private string GetConnectionString(IConfiguration config, string dbName) { - if (Environment.GetEnvironmentVariable(SystemConstant.Env.Code) != null && Environment.GetEnvironmentVariable(SystemConstant.Env.Code) == SystemConstant.Docker.Code) + Console.WriteLine("=== 开始获取连接字符串 ==="); + Console.WriteLine($"参数 dbName: {dbName}"); + + var env = Environment.GetEnvironmentVariable(SystemConstant.Env.Code); + Console.WriteLine($"ASPNETCORE_ENVIRONMENT: {env}"); + + if (!string.IsNullOrEmpty(env) && env.ToLower() == "docker") { - return Environment.GetEnvironmentVariable($"{dbName}ConnectStr") - ?? throw new ArgumentException($"Environment variable {dbName}ConnectStr not found"); + Console.WriteLine("检测到 Docker 环境,从环境变量获取连接字符串"); + + var envVarName = $"{dbName}ConnectStr"; + var connectionString = Environment.GetEnvironmentVariable(envVarName); + + Console.WriteLine($"环境变量 {envVarName}: {connectionString ?? "null"}"); + + if (!string.IsNullOrEmpty(connectionString)) + { + var cleanString = connectionString.Trim('"'); + Console.WriteLine($"使用环境变量连接字符串: {cleanString}"); + return cleanString; + } + + throw new ArgumentException($"Docker 环境变量 {envVarName} 未找到或为空"); + } + + Console.WriteLine("从配置文件获取连接字符串"); + var configString = config.GetConnectionString($"{dbName}ConnectStr"); + Console.WriteLine($"配置文件连接字符串: {configString ?? "null"}"); + + if (string.IsNullOrEmpty(configString)) + { + throw new ArgumentException($"配置文件中未找到连接字符串:{dbName}ConnectStr"); } - return config.GetConnectionString($"{dbName}ConnectStr"); + + return configString; } private void SeedInitialData(ISqlSugarClient db) diff --git a/version.txt b/version.txt index 157b24da41828e93e9293d42be8d28ca545151a1..e7b2a522c42f4bb70e24cf02502fc0945fc592cd 100644 GIT binary patch literal 18 VcmezW&xk>f0fY^KBrgLO0{}0g12_Nx literal 16 UcmezW&xk>f0ffyMcp11D04TNt3jhEB -- Gitee