using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Serilog; using SqlSugar; using LqSalaryCalculationService.Services; using LqSalaryCalculationService.Models; namespace LqSalaryCalculationService { class Program { static async Task Main(string[] args) { // 配置Serilog var configuration = GetConfiguration(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); try { Log.Information("绿纤美业ERP工资核算服务启动中..."); var host = CreateHostBuilder(args).Build(); // 获取服务 var salaryService = host.Services.GetRequiredService(); var logger = host.Services.GetRequiredService>(); // 获取计算月份参数 var calculationMonth = GetCalculationMonth(args); if (string.IsNullOrEmpty(calculationMonth)) { logger.LogError("请提供计算月份参数,格式: yyyy-MM"); Console.WriteLine("使用方法: dotnet run -- 2024-09"); return; } logger.LogInformation($"开始执行工资核算,计算月份: {calculationMonth}"); // 获取用户基础信息并插入到工资表 logger.LogInformation("开始获取用户基础信息并插入到工资表..."); var userInfoResult = await salaryService.InitializeUserInfoAsync(calculationMonth); if (userInfoResult.Success) { logger.LogInformation($"✅ 成功初始化 {userInfoResult.UserCount} 名用户信息"); Console.WriteLine($"✅ 用户信息初始化完成!"); Console.WriteLine($"📊 共处理 {userInfoResult.UserCount} 名用户"); Console.WriteLine($"📅 计算月份: {calculationMonth}"); } else { logger.LogError($"初始化用户信息失败: {userInfoResult.Message}"); Console.WriteLine($"❌ 初始化用户信息失败: {userInfoResult.Message}"); } } catch (Exception ex) { Log.Fatal(ex, "服务启动失败"); Console.WriteLine($"❌ 服务启动失败: {ex.Message}"); } finally { Log.CloseAndFlush(); } } static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureServices((context, services) => { // 配置SqlSugar services.AddSingleton(provider => { var configuration = provider.GetRequiredService(); var connectionString = configuration.GetConnectionString("DefaultConnection"); return new SqlSugarClient(new ConnectionConfig() { ConnectionString = connectionString, DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); }); // 注册服务 services.AddScoped(); }); static IConfiguration GetConfiguration() { return new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .Build(); } static string GetCalculationMonth(string[] args) { if (args.Length > 0) { return args[0]; } // 如果没有提供参数,使用当前月份 return DateTime.Now.ToString("yyyy-MM"); } } }