Blame view

service/LqSalaryCalculationService/Program.cs 4.54 KB
3fcf01d8   hexiaodong   hxd202509112049
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  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<ISalaryCalculationService>();

                  var logger = host.Services.GetRequiredService<ILogger<Program>>();

  

                  // 获取计算月份参数

                  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<SqlSugarClient>(provider =>

                      {

                          var configuration = provider.GetRequiredService<IConfiguration>();

                          var connectionString = configuration.GetConnectionString("DefaultConnection");

                          

                          return new SqlSugarClient(new ConnectionConfig()

                          {

                              ConnectionString = connectionString,

                              DbType = DbType.MySql,

                              IsAutoCloseConnection = true,

                              InitKeyType = InitKeyType.Attribute

                          });

                      });

  

                      // 注册服务

                      services.AddScoped<ISalaryCalculationService, SalaryCalculationService>();

                  });

  

          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");

          }

      }

  }