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