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;