fix: 收益互换OA移动审批改为内部定时轮询
- 复用 HostedTaskService 定时器轮询待处理的 OA 移动审批状态 - 增加单实例防重入控制,避免同一进程内重复同步 - 新增 Erp.TradeApprovalOaSyncIntervalSeconds 配置,默认 30 秒 - 支持在 Admin 全局配置页修改查询间隔,保存后立即生效,无需重启 - 补充 AppConfig 初始化 SQL,不再依赖 PowerJob 或 XXL-JOB 外部调度
This commit is contained in:
@@ -596,6 +596,11 @@ namespace YLErp.Configuration
|
||||
/// </summary>
|
||||
int ExternalAPIForCustomCalcTimeOut { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 收益互换 OA 移动审批状态查询间隔(秒)。
|
||||
/// </summary>
|
||||
int TradeApprovalOaSyncIntervalSeconds { get; set; }
|
||||
|
||||
bool IsForwardTradeToBuy { get; set; }
|
||||
/// <summary>
|
||||
/// 是否需要计算实时预警
|
||||
|
||||
@@ -702,6 +702,11 @@ namespace YLErp
|
||||
/// </summary>
|
||||
public int ExternalAPIForCustomCalcTimeOut { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 收益互换 OA 移动审批状态查询间隔(秒)。
|
||||
/// </summary>
|
||||
public int TradeApprovalOaSyncIntervalSeconds { get; set; } = 30;
|
||||
|
||||
public bool IsForwardTradeToBuy { get; set; }
|
||||
/// <summary>
|
||||
/// 是否需要实时预警
|
||||
|
||||
@@ -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<HostedTaskService>();
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user