using Backend.Models; using BackendWorkerService.Quartz; using BackendWorkerService.Quartz.Jobs; using BackendWorkerService.Services.Implement; using BackendWorkerService.Services.Interface; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Quartz; using Quartz.Impl; using Quartz.Spi; using Repository.BackendRepository.Implement; using Repository.BackendRepository.Interface; using Repository.BaseRepository.Implement; using Repository.BaseRepository.Interface; using Repository.FrontendRepository.Implement; using Repository.FrontendRepository.Interface; using Repository.Helper; using Repository.Models; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace BackendWorkerService { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { IConfiguration configuration = hostContext.Configuration; services.AddLogging( builder => { builder.AddFilter("Microsoft", LogLevel.Warning) .AddFilter("System", LogLevel.Warning) .AddFilter("NToastNotify", LogLevel.Warning) .AddConsole(); }); //services.AddHostedService(); #region 訊息通知 #region SMPT配置 services.AddTransient(); services.Configure(configuration.GetSection("SMTPConfig")); #endregion #region SMS配置 services.AddTransient(); services.Configure(configuration.GetSection("SMSConfig")); #endregion #region Line Notify配置 services.AddTransient(); #endregion #endregion 訊息通知 #region DBHelper 注入 services.Configure(configuration.GetSection("DBConfig")); services.AddTransient(); #endregion DBHelper 注入 #region BackEndConfigHelper 注入 services.Configure(configuration.GetSection("BackEndConfig")); services.AddTransient(); #endregion BackEndConfigHelper 注入 #region Repository 注入 services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); #endregion Repository 注入 //添加Quartz服務 services.AddTransient(); services.AddTransient(); services.AddHostedService(); #region 背景執行計畫(設定1min執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(ExecutionBackgroundServicePlanJob), cronExpression: configuration.GetValue("BackgroundServiceCron:ExecutionBackgroundServicePlanJob")) ); #endregion #region 訊息通知(設定每 30min 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(MessageNotificationJob), cronExpression: configuration.GetValue("BackgroundServiceCron:MessageNotificationJob")) ); #endregion #region 定時將特定資料表加入至派送任務(設定每日 2AM 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(RegularUpdateDBTableJob), cronExpression: configuration.GetValue("BackgroundServiceCron:RegularUpdateDBTableJob")) ); #endregion #region 資料派送(設定每 5min 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(DataDeliveryJob), cronExpression: configuration.GetValue("BackgroundServiceCron:DataDeliveryJob")) ); #endregion #region 停車場管理(設定每 5秒 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(ParkingJob), cronExpression: configuration.GetValue("BackgroundServiceCron:ParkingJob")) ); #endregion #region 電錶歸檔(設定每 小時 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(ArchiveElectricMeterHourJob), cronExpression: configuration.GetValue("BackgroundServiceCron:ArchiveElectricMeterHourJob")) ); #endregion #region 電錶歸檔(設定每 天 執行一次) services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(ArchiveElectricMeterDayJob), cronExpression: configuration.GetValue("BackgroundServiceCron:ArchiveElectricMeterDayJob")) ); #endregion #region 定時取得氣象API services.AddSingleton(); services.AddSingleton( new JobSchedule(jobType: typeof(Quartz.Jobs.WeatherAPIJob), cronExpression: configuration.GetValue("BackgroundServiceCron:WeatherAPIJob")) ); #endregion }).ConfigureLogging((hostContext, logFactory) => { IConfiguration configuration = hostContext.Configuration; //logFactory.AddFile("Logs/log-{Date}.txt"); logFactory.AddFile(configuration.GetValue("LoggerPath") + "/log-{Date}.txt"); }); } }