resolve confilct QuotaMonitorService.cs
This commit is contained in:
@@ -4468,7 +4468,7 @@ namespace YLErp.Modules.RiskModule
|
||||
return QuotaCheck(ref res, false);
|
||||
}
|
||||
|
||||
public bool QuotaCheck(ref TradeOpenResult res, bool ignoreRiskWarning)
|
||||
public bool QuotaCheck(ref TradeOpenResult res, bool ignoreRiskWarning, IEnumerable<string> ignoreRiskRuleIds = null)
|
||||
{
|
||||
if (res == null || res.Trade == null)
|
||||
{
|
||||
@@ -4515,14 +4515,27 @@ namespace YLErp.Modules.RiskModule
|
||||
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)
|
||||
var isRiskApprovalWarning = quotaObj.TrialStatus == QuotaTrialStatusEnum.RiskWarning
|
||||
&& !string.IsNullOrWhiteSpace(quotaObj.RiskWarningDetails)
|
||||
&& (quotaObj.ApprovalRuleIds?.Any() ?? false);
|
||||
//当前为老风控特批,不是新风控需审批
|
||||
res.OldRiskNeedSpecialApproval = quotaObj.TrialStatus == QuotaTrialStatusEnum.Warning;
|
||||
if (isRiskApprovalWarning)
|
||||
{
|
||||
res.ErrorMsg = string.Empty;
|
||||
return true;
|
||||
var currentApprovalRuleIds = quotaObj.ApprovalRuleIds ?? new List<string>();
|
||||
res.IgnoredRiskRuleIds = currentApprovalRuleIds;
|
||||
//需清除ErrorMsg,不然外部调用会认为失败
|
||||
//触发需审批,交易特批逻辑
|
||||
if (ignoreRiskWarning)
|
||||
{
|
||||
var ignoredRuleIdSet = new HashSet<string>((ignoreRiskRuleIds ?? Enumerable.Empty<string>()).Where(o => !string.IsNullOrWhiteSpace(o)));
|
||||
var newApprovalRuleIds = currentApprovalRuleIds.Where(o => !ignoredRuleIdSet.Contains(o)).ToList();
|
||||
if (!newApprovalRuleIds.Any())
|
||||
{
|
||||
res.ErrorMsg = string.Empty;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
res.RetCode = isRiskApprovalWarning ? TradeOpenRetCode.RiskWarning : TradeOpenRetCode.QuotaTrialError;
|
||||
return false;
|
||||
@@ -5193,12 +5206,25 @@ namespace YLErp.Modules.RiskModule
|
||||
}
|
||||
if (riskResult.NeedApproval)
|
||||
{
|
||||
if (result.TrialStatus != QuotaTrialStatusEnum.Error)
|
||||
if (result.TrialStatus != QuotaTrialStatusEnum.Error && result.TrialStatus != QuotaTrialStatusEnum.Warning)
|
||||
{
|
||||
result.TrialStatus = QuotaTrialStatusEnum.Warning;
|
||||
result.TrialStatus = QuotaTrialStatusEnum.RiskWarning;
|
||||
}
|
||||
result.RiskWarningDetails += "[风控引擎] 规则触发:需审批\n";
|
||||
foreach (var triggeredRule in riskResult.TriggeredRules.Where(r => r.ControlStrategy == RiskControlStrategy.Approval))
|
||||
var approvalTriggeredRules = riskResult.TriggeredRules.Where(r => r.ControlStrategy == RiskControlStrategy.Approval).ToList();
|
||||
var approvalTriggeredRuleIds = approvalTriggeredRules.Select(r => r.RuleId)
|
||||
.Where(r => !string.IsNullOrWhiteSpace(r))
|
||||
.ToList();
|
||||
var showTipTriggeredRules = riskResult.TriggeredRules.Where(r => r.ControlStrategy == RiskControlStrategy.ShowTip).ToList();
|
||||
var showTipTriggeredRuleIds = showTipTriggeredRules.Select(r => r.RuleId)
|
||||
.Where(r => !string.IsNullOrWhiteSpace(r))
|
||||
.ToList();
|
||||
// 二次确认时,需审批规则允许按首次命中结果忽略;同时已展示过的提示规则也不再重复展示
|
||||
var processedRiskRuleIds = approvalTriggeredRuleIds.Concat(showTipTriggeredRuleIds)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
result.ApprovalRuleIds = processedRiskRuleIds;
|
||||
foreach (var triggeredRule in approvalTriggeredRules)
|
||||
{
|
||||
result.RiskWarningDetails += $"规则ID:{triggeredRule.RuleId};规则名称:{triggeredRule.RuleName};规则说明:{triggeredRule.RuleText}\n";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user