diff --git a/Framework/YLErp.Core/Configuration/Abstract/IErpConfig.cs b/Framework/YLErp.Core/Configuration/Abstract/IErpConfig.cs index 5e597013..6a10b28a 100644 --- a/Framework/YLErp.Core/Configuration/Abstract/IErpConfig.cs +++ b/Framework/YLErp.Core/Configuration/Abstract/IErpConfig.cs @@ -596,6 +596,11 @@ namespace YLErp.Configuration /// int ExternalAPIForCustomCalcTimeOut { get; set; } + /// + /// 收益互换 OA 移动审批状态查询间隔(秒)。 + /// + int TradeApprovalOaSyncIntervalSeconds { get; set; } + bool IsForwardTradeToBuy { get; set; } /// /// 是否需要计算实时预警 diff --git a/Framework/YLErp.Core/Configuration/ProjectSettings.cs b/Framework/YLErp.Core/Configuration/ProjectSettings.cs index 7b4fe8ca..102145fd 100644 --- a/Framework/YLErp.Core/Configuration/ProjectSettings.cs +++ b/Framework/YLErp.Core/Configuration/ProjectSettings.cs @@ -702,6 +702,11 @@ namespace YLErp /// public int ExternalAPIForCustomCalcTimeOut { get; set; } + /// + /// 收益互换 OA 移动审批状态查询间隔(秒)。 + /// + public int TradeApprovalOaSyncIntervalSeconds { get; set; } = 30; + public bool IsForwardTradeToBuy { get; set; } /// /// 是否需要实时预警 diff --git a/YLErpWeb/App/HostedTaskService.cs b/YLErpWeb/App/HostedTaskService.cs index 025420b8..9bbad9d4 100644 --- a/YLErpWeb/App/HostedTaskService.cs +++ b/YLErpWeb/App/HostedTaskService.cs @@ -6,6 +6,7 @@ using YLErp.Modules.EodModule.SettlementModule; using YLErp.Modules.RiskEngine; using YLErp.Modules.RiskModule; using YLErp.Modules.SuperviseReportModule.SAC.Service; +using YLErp.Modules.TradeModule; using YLErp.Modules.TradeRiskCalcModule; namespace YLErp.Web.App @@ -17,6 +18,9 @@ namespace YLErp.Web.App public class HostedTaskService : IHostedService { Timer _timer, _timerMonitor; + private int _tradeApprovalOaSyncRunning; + private DateTime _lastTradeApprovalOaSyncTime = DateTime.MinValue; + private readonly IYcLogger _logger = LogFactory.GetLogger(); private readonly IServer server; private readonly IHostApplicationLifetime hostApplicationLifetime; @@ -44,6 +48,8 @@ namespace YLErp.Web.App }); } + TrySyncTradeApprovalOaStatus(); + if (AppHelper.RunTradeRiskCalcV2) { Task.Run(() => @@ -86,6 +92,45 @@ namespace YLErp.Web.App }); } + private void TrySyncTradeApprovalOaStatus() + { + var intervalSeconds = PS.Config?.ErpElement.TradeApprovalOaSyncIntervalSeconds ?? 30; + if (intervalSeconds <= 0) + { + intervalSeconds = 30; + } + + if (_lastTradeApprovalOaSyncTime != DateTime.MinValue + && DateTime.Now - _lastTradeApprovalOaSyncTime < TimeSpan.FromSeconds(intervalSeconds)) + { + return; + } + + if (Interlocked.CompareExchange(ref _tradeApprovalOaSyncRunning, 1, 0) != 0) + { + return; + } + + Task.Run(() => + { + try + { + var results = new TradeApprovalOAService(new OptUserInfo(0, "系统移动审批同步", OptUserFrom.System)) + .SyncPendingStatuses(); + _logger.Info($"OA 移动审批状态定时同步完成,处理数量:{results.Count}"); + } + catch (Exception ex) + { + _logger.Error("OA 移动审批状态定时同步失败", ex); + } + finally + { + _lastTradeApprovalOaSyncTime = DateTime.Now; + Interlocked.Exchange(ref _tradeApprovalOaSyncRunning, 0); + } + }); + } + public Task StartAsync(CancellationToken cancellationToken) { object _state = System.Diagnostics.Debugger.IsAttached ? null : this;