feat:增加内存刷新接口,优化rule日志记录,不再使用EXception。非ACTIVE的rule不再编译。
This commit is contained in:
@@ -4380,9 +4380,11 @@ namespace YLErp.Modules.RiskModule
|
||||
if (!string.IsNullOrWhiteSpace(quotaObj.QuotaWarningDetails))
|
||||
detailParts.Add($"限额预警:{quotaObj.QuotaWarningDetails}");
|
||||
res.ErrorMsg = string.Join("\n", detailParts);
|
||||
//确认本次为需审批后,二次特批。因为只靠点击“交易特批”的ignoreRiskWarning,不能保证本次校验通过。
|
||||
var isRiskApprovalWarning = quotaObj.TrialStatus == QuotaTrialStatusEnum.Warning
|
||||
&& !string.IsNullOrWhiteSpace(quotaObj.RiskWarningDetails);
|
||||
//需清除ErrorMsg,不然外部调用会认为失败
|
||||
//触发需审批,交易特批逻辑
|
||||
if (ignoreRiskWarning && isRiskApprovalWarning)
|
||||
{
|
||||
res.ErrorMsg = string.Empty;
|
||||
@@ -4755,14 +4757,14 @@ namespace YLErp.Modules.RiskModule
|
||||
_logger.Info($"[限额试算] 开始执行 - tradeId: {tradeId}, trialSource: {trialSource}");
|
||||
var result = new QuotaTrial();
|
||||
trade tradeObj = DbContext.trade.AsNoTracking().Where(O => O.id == tradeId).FirstOrDefault();
|
||||
|
||||
|
||||
// 检查交易对象是否存在
|
||||
if (tradeObj == null)
|
||||
{
|
||||
_logger.Info($"[限额试算] 找不到交易记录 - tradeId: {tradeId}");
|
||||
throw new ArgumentNullException(nameof(tradeObj), $"找不到ID为 {tradeId} 的交易记录");
|
||||
}
|
||||
|
||||
|
||||
_logger.Info($"[限额试算] 交易信息 - tradeId: {tradeObj.id}, TradeNumber: {tradeObj.TradeNumber}, TradeType: {tradeObj.TradeType}, ClientId: {tradeObj.ClientId}");
|
||||
|
||||
//// 检查关键字段是否为null
|
||||
@@ -4968,8 +4970,30 @@ namespace YLErp.Modules.RiskModule
|
||||
TradeId = tradeId,
|
||||
TriggerPoint = "BOOK_CONFIRM"
|
||||
};
|
||||
// 构造 DataMap(第一版只塞 trade 对象,后续按需扩展)
|
||||
tradeObj.StockEqvNotional = 10000000000;
|
||||
riskContext.DataMap["trade"] = tradeObj;
|
||||
var sameUnderlyingTotalNotional = DbContext.trade
|
||||
.Where(t => t.ValidState != "InValid"
|
||||
&& t.UnderlyingId == tradeObj.UnderlyingId
|
||||
&& t.ParentTradeId == 0
|
||||
&& (ConsTrade.NeedMarginTradeStatusList.Contains(t.TradeStatus) || t.TradeStatus == "审批中"))
|
||||
.Sum(t => (double?)t.StockEqvNotional) ?? 0d;
|
||||
riskContext.DataMap["same_underlying_total_notional"] = sameUnderlyingTotalNotional;
|
||||
var underlying = DataCacheProvider.GetUnderlyingDataSource().GetData(tradeObj.UnderlyingCode);
|
||||
if (underlying != null)
|
||||
{
|
||||
if (underlying.IsBond() && !string.IsNullOrEmpty(underlying.ExJson))
|
||||
{
|
||||
var bond = JsonHelper.Deserialize<UnderlyingBond>(underlying.ExJson);
|
||||
if (bond != null)
|
||||
{
|
||||
underlying.IssueSize = bond.IssueSize;
|
||||
underlying.UnderlyingFullName = bond.UnderlyingFullName;
|
||||
underlying.UnderlyingIssuer = bond.UnderlyingIssuer;
|
||||
}
|
||||
}
|
||||
riskContext.DataMap["underlying_manager"] = underlying;
|
||||
}
|
||||
var riskResult = riskEngine.EvaluateRisk(riskContext, "BOOK_CONFIRM");
|
||||
|
||||
_logger.Info($"[风控引擎] 簿记交易确认 - TradeId: {tradeId}, Passed: {riskResult.Passed}, Blocked: {riskResult.Blocked}, NeedApproval: {riskResult.NeedApproval}, ShowTip: {riskResult.ShowTip}");
|
||||
@@ -5016,7 +5040,7 @@ namespace YLErp.Modules.RiskModule
|
||||
}
|
||||
// ===== 新风控引擎接入结束 =====
|
||||
|
||||
_logger.Info($"[限额试算] 试算完成 - tradeId: {tradeId}, TrialStatus: {result.TrialStatus}, FundCheck: {fundStatus}, QuotaCheck: {quotaStatus}");
|
||||
//_logger.Info($"[限额试算] 试算完成 - tradeId: {tradeId}, TrialStatus: {result.TrialStatus}, FundCheck: {fundStatus}, QuotaCheck: {quotaStatus}");
|
||||
SaveQuotaTrial(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user