using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using YLErp.DBModels.Consts; using YLErp.Modules.AppModule; using YLErp.Modules.EodModule.SettlementModule; using YLErp.Modules.RiskModule; using YLErp.Modules.SuperviseReportModule.SAC.Service; using YLErp.Modules.TradeRiskCalcModule; namespace YLErp.Web.App { //-------------------------------------- // 后台执行任务 //-------------------------------------- public class HostedTaskService : IHostedService { Timer _timer, _timerMonitor; private readonly IServer server; private readonly IHostApplicationLifetime hostApplicationLifetime; public HostedTaskService(IServer server, IHostApplicationLifetime hostApplicationLifetime) { this.server = server; this.hostApplicationLifetime = hostApplicationLifetime; } private void TimerExecute(object state) { if (state != null) { Task.Run(() => { try { EodTaskRunner.Execute(); } catch (Exception ex) { LogFactory.GetLogger("EodTaskRunner").Error(ex); } }); } if (AppHelper.RunTradeRiskCalcV2) { Task.Run(() => { var index = 0; var voltypes = new string[5]; if (AppHelper.IsSupportVolTypeOnRiskCalc("对冲")) { voltypes[index++] = "对冲"; } if (AppHelper.IsSupportVolTypeOnRiskCalc("持仓")) { voltypes[index++] = "持仓"; } if (AppHelper.IsSupportVolTypeOnRiskCalc("交易曲面")) { voltypes[index++] = "交易曲面"; } if (AppHelper.IsSupportVolTypeOnRiskCalc("场内实时持仓API")) { AppContext.SetSwitch("场内实时持仓API", true); } TradeRiskCalcTaskRunner.Execute(voltypes); }); } Task.Run(() => { try { if (PS.Config.ErpElement.SecuritiesEnvironment) { ReportService.ListensResponse(); } } catch { } }); } public Task StartAsync(CancellationToken cancellationToken) { object _state = System.Diagnostics.Debugger.IsAttached ? null : this; _timer = new Timer(TimerExecute, _state, 1000, 2000); _timerMonitor = new Timer(state => { try { if (PS.Config.ErpElement.IsCalcRealtimeWarning) { WarningService.QuotaMonitorMsgQuery(); } } catch { } }, _state, 100000, 100000); Modules.DataCacheModule.DataCacheManager.StartUpdate(); // 项目启动时初始化项目YLErpWebUrl地址配置 hostApplicationLifetime.ApplicationStarted.Register( () => { var address = server.Features.Get().Addresses?.FirstOrDefault()?.Replace("*", "localhost"); if (string.IsNullOrEmpty(address)) { return; } // 更新YLErpWebUrl配置 var count = new AppConfigService(OptUserInfo.SystemUser).SaveYLWebApiConfig(address); if (count > 0) { PS.SetConfig(ConsAppConfig.YLErpWebUrlConfig, address); } }); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { if (_timer != null) { _timer.Dispose(); _timer = null; } if (_timerMonitor != null) { _timerMonitor.Dispose(); _timerMonitor = null; } return Task.CompletedTask; } } }